lix-installer/.github/workflows/ci.yml
Ana Hobden 29a345f99f
Curl on ci (#110)
* Perform sudo in harmonic

* Remove sudo in scripts

* A bit more tweaking...

* Yay unix

* Use curl sh on ci

* Preserve environments we require

* Fix the yamls

* Better explain a run step

* Preserve GITHUB_PATH too

* Correct trace

* Include install-nix.sh in artifacts

* Remove unused vars

* Use /nix/harmonic for uninstall

* Only pass --preserve-env if required

* Wait for python server to start

* Use a sudo uninstall

* Pass verbosity correctly

* Pass no-confirm by env

* Pass no-confirm by env redux

* Hahaha very funny yaml

* handle env in no-confirm

* Preserve env on ci

* Mac stuff
2022-12-12 09:27:43 -08:00

257 lines
9.9 KiB
YAML

name: CI
on:
pull_request:
push:
branches: [main]
env:
NIX_INSTALL_FORCE_ALLOW_HTTP: "1"
NIX_INSTALL_UPDATE_ROOT: "http://0.0.0.0:8000"
RUST_BACKTRACE: "full"
HARMONIC_VERBOSITY: "2"
HARMONIC_NO_CONFIRM: "true"
HARMONIC_LOGGER: "pretty"
jobs:
lints:
name: Lints
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v17
with:
extra_nix_config: |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
- name: Cache lint store (x86_64-linux)
id: lint-store-x86_64-linux
uses: actions/cache@v3
with:
path: ~/.ci-store
key: lint-store-x86_64-linux-${{ hashFiles('**/Cargo.lock', '**/flake.lock') }}-v1
- name: Check rustfmt
run: nix develop --store ~/.ci-store --command check-rustfmt
- name: Check Spelling
run: nix develop --store ~/.ci-store --command check-spelling
- name: Check nixpkgs-fmt formatting
run: nix develop --store ~/.ci-store --command check-nixpkgs-fmt
- name: Check EditorConfig conformance
run: nix develop --store ~/.ci-store --command check-editorconfig
- name: Create artifact for `nix-install.sh`
uses: actions/upload-artifact@v3
with:
name: nix-install
path: |
nix-install.sh
build-x86_64-linux:
name: Build x86_64 Linux
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v17
with:
extra_nix_config: |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
- name: Cache build store (x86_64-linux)
id: build-store-x86_64-linux
uses: actions/cache@v3
with:
path: ~/.ci-store
key: build-store-x86_64-linux-${{ hashFiles('**/Cargo.lock', '**/flake.lock') }}-v1
- name: Build harmonic
run: nix build --store ~/.ci-store --print-build-logs .#packages.x86_64-linux.harmonic
- name: Build harmonicStatic
run: nix build --store ~/.ci-store --print-build-logs .#packages.x86_64-linux.harmonicStatic
- name: Copy artifact
run: |
RESULT=$(nix eval --raw --store ~/.ci-store --print-build-logs .#packages.x86_64-linux.harmonicStatic --apply "x: \"$HOME/.ci-store\${x}\"")
cp $RESULT/bin/harmonic harmonic
- name: Create artifact for x86_64-linux harmonic
uses: actions/upload-artifact@v3
with:
name: harmonic-x86_64-linux
path: |
harmonic
run-x86_64-linux:
name: Run x86_64 Linux
runs-on: ubuntu-22.04
needs: [build-x86_64-linux, lints]
steps:
- run: sudo apt install fish zsh
- uses: actions/download-artifact@v3
with:
name: harmonic-x86_64-linux
- uses: actions/download-artifact@v3
with:
name: nix-install
- name: Move & set executable
run: |
chmod +x ./harmonic
mv harmonic harmonic-x86_64-linux
- name: Initial install
run: |
python -m http.server --bind 0.0.0.0 8000 &
timeout 20 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/localhost/8000; do echo "Waiting for server..."; sleep 1; done'
curl -L http://0.0.0.0:8000/nix-install.sh | sh -s -- install linux-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}"
- name: Initial uninstall (without a `nix run` first)
run: sudo -E /nix/harmonic uninstall
- name: Repeated install
run: |
python -m http.server --bind 0.0.0.0 8000 &
timeout 20 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/localhost/8000; do echo "Waiting for server..."; sleep 1; done'
curl -L http://0.0.0.0:8000/nix-install.sh | sh -s -- install linux-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}"
- name: echo $PATH
run: echo $PATH
- name: Test `nix` with `$GITHUB_PATH`
if: success() || failure()
run: nix run nixpkgs#fortune
- name: Test bash
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: bash --login {0}
- name: Test sh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: sh -l {0}
- name: Test zsh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: zsh --login --interactive {0}
- name: Test fish
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: fish --login {0}
- name: Repeated uninstall
run: sudo -E /nix/harmonic uninstall
run-steam-deck:
name: Run Steam Deck (mock)
runs-on: ubuntu-22.04
needs: [build-x86_64-linux, lints]
steps:
- run: sudo apt install fish zsh
- uses: actions/download-artifact@v3
with:
name: harmonic-x86_64-linux
- uses: actions/download-artifact@v3
with:
name: nix-install
- name: Move & set executable
run: |
chmod +x ./harmonic
mv harmonic harmonic-x86_64-linux
- name: Make the CI look like a steam deck
run: |
mkdir -p ~/bin
echo -e "#! /bin/sh\nexit 0" | sudo tee -a /bin/steamos-readonly
sudo chmod +x /bin/steamos-readonly
sudo useradd -m deck
- name: Initial install
run: |
python -m http.server --bind 0.0.0.0 8000 &
timeout 20 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/localhost/8000; do echo "Waiting for server..."; sleep 1; done'
curl -L http://0.0.0.0:8000/nix-install.sh | sh -s -- install steam-deck --persistence `pwd`/ci-test-nix --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}"
- name: Initial uninstall (without a `nix run` first)
run: sudo -E /nix/harmonic uninstall
- name: Repeated install
run: |
python -m http.server --bind 0.0.0.0 8000 &
timeout 20 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/localhost/8000; do echo "Waiting for server..."; sleep 1; done'
curl -L http://0.0.0.0:8000/nix-install.sh | sh -s -- install steam-deck --persistence `pwd`/ci-test-nix --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}"
- name: echo $PATH
run: echo $PATH
- name: Test `nix` with `$GITHUB_PATH`
if: success() || failure()
run: nix run nixpkgs#fortune
- name: Test bash
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: bash --login {0}
- name: Test sh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: sh -l {0}
- name: Test zsh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: zsh --login --interactive {0}
- name: Test fish
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: fish --login {0}
- name: Repeated uninstall
run: sudo -E /nix/harmonic uninstall
build-x86_64-darwin:
name: Build x86_64 Darwin
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v17
with:
extra_nix_config: |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
# Runs clippy as part of the preBuild.
- name: Build harmonic
run: nix build .#packages.x86_64-darwin.harmonic -L
- name: Create artifact for x86_64-darwin harmonic
uses: actions/upload-artifact@v3
with:
name: harmonic-x86_64-darwin
path: |
result/bin/harmonic
run-x86_64-darwin:
name: Run x86_64 Darwin
runs-on: macos-12
needs: [build-x86_64-darwin, lints]
steps:
- run: brew install fish coreutils
- uses: actions/download-artifact@v3
with:
name: harmonic-x86_64-darwin
- uses: actions/download-artifact@v3
with:
name: nix-install
- name: Move & set executable
run: |
chmod +x ./harmonic
mv harmonic harmonic-x86_64-darwin
- name: Initial install
run: |
python3 -m http.server --bind 0.0.0.0 8000 &
gtimeout 20 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/localhost/8000; do echo "Waiting for server..."; sleep 1; done'
curl -L http://0.0.0.0:8000/nix-install.sh | sh -s -- install darwin-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}"
- name: Initial uninstall (without a `nix run` first)
run: sudo -E /nix/harmonic uninstall
- name: Repeated install
run: |
python -m http.server --bind 0.0.0.0 8000 &
timeout 20 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/localhost/8000; do echo "Waiting for server..."; sleep 1; done'
curl -L http://0.0.0.0:8000/nix-install.sh | sh -s -- install darwin-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}"
- name: echo $PATH
run: echo $PATH
- name: Test `nix` with `$GITHUB_PATH`
if: success() || failure()
run: nix run nixpkgs#fortune
- name: Test bash
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: bash --login {0}
- name: Test sh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: sh -l {0}
- name: Test zsh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: zsh --login --interactive {0}
- name: Test fish
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: fish --login {0}
- name: Repeated uninstall
run: sudo -E /nix/harmonic uninstall