name: CI on: pull_request: push: branches: [main] 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 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 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 # Various feature variations or versions of the build which we expect to always work # Since it uses the `build-store-x86_64-linux-*` cache it should be quite fast build-variants-x86_64-linux: name: Build x86_64 Linux (Variants) runs-on: ubuntu-22.04 needs: build-x86_64-linux # Only run this if the normal checks work, to avoid clogging builders 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: Test `nix develop` build without default features run: nix develop --store ~/.ci-store --print-build-logs .# --command "cargo" build --no-default-features - name: Test `nix develop` build all features run: nix develop --store ~/.ci-store --print-build-logs .# --command "cargo" build --all-features run-x86_64-linux: name: Run x86_64 Linux runs-on: ubuntu-22.04 needs: [build-x86_64-linux, lints] steps: - uses: actions/checkout@v3 - run: sudo apt install fish zsh - uses: actions/download-artifact@v3 with: name: harmonic-x86_64-linux - name: Move & set executable run: | chmod +x ./harmonic mkdir install-root cp nix-install.sh install-root/nix-install.sh mv harmonic install-root/harmonic-x86_64-linux - name: Initial install uses: ./ with: local-root: install-root/ logger: pretty log-directives: harmonic=trace backtrace: full github-token: ${{ secrets.GITHUB_TOKEN }} - name: Initial uninstall (without a `nix run` first) run: sudo -E /nix/harmonic uninstall env: HARMONIC_NO_CONFIRM: true HARMONIC_LOGGER: pretty HARMONIC_LOG_DIRECTIVES: harmonic=trace RUST_BACKTRACE: full - name: Ensure `nix` is removed run: | if systemctl is-active nix-daemon.socket; then echo "nix-daemon.socket was still running" exit 1 fi if systemctl is-active nix-daemon.service; then echo "nix-daemon.service was still running" exit 1 fi if [ -e /nix ]; then echo "/nix exists" exit 1 fi - name: Repeated install uses: ./ with: local-root: install-root/ logger: pretty log-directives: harmonic=trace backtrace: full github-token: ${{ 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 env: HARMONIC_NO_CONFIRM: true HARMONIC_LOGGER: pretty HARMONIC_LOG_DIRECTIVES: harmonic=trace RUST_BACKTRACE: full - name: Ensure `nix` is removed run: | if systemctl is-active nix-daemon.socket; then echo "nix-daemon.socket was still running" exit 1 fi if systemctl is-active nix-daemon.service; then echo "nix-daemon.service was still running" exit 1 fi if [ -e /nix ]; then echo "/nix exists" exit 1 fi run-steam-deck: name: Run Steam Deck (mock) runs-on: ubuntu-22.04 needs: [build-x86_64-linux, lints] steps: - uses: actions/checkout@v3 - run: sudo apt install fish zsh - uses: actions/download-artifact@v3 with: name: harmonic-x86_64-linux - name: Move & set executable run: | chmod +x ./harmonic mkdir install-root cp nix-install.sh install-root/nix-install.sh mv harmonic install-root/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 uses: ./ with: local-root: install-root/ logger: pretty log-directives: harmonic=trace backtrace: full github-token: ${{ secrets.GITHUB_TOKEN }} planner: steam-deck extra-args: --persistence /home/runner/.ci-test-nix-home - name: Initial uninstall (without a `nix run` first) run: sudo -E /nix/harmonic uninstall env: HARMONIC_NO_CONFIRM: true HARMONIC_LOGGER: pretty HARMONIC_LOG_DIRECTIVES: harmonic=trace RUST_BACKTRACE: full - name: Ensure `nix` is removed run: | if systemctl is-active nix-daemon.socket; then echo "nix-daemon.socket was still running" exit 1 fi if systemctl is-active nix-daemon.service; then echo "nix-daemon.service was still running" exit 1 fi if [ -e /nix ]; then echo "/nix exists" exit 1 fi if [ -e /home/runner/.ci-test-nix-home ]; then echo "/home/runner/.ci-test-nix-home exists" exit 1 fi - name: Repeated install uses: ./ with: local-root: install-root/ logger: pretty log-directives: harmonic=trace backtrace: full github-token: ${{ secrets.GITHUB_TOKEN }} planner: steam-deck extra-args: --persistence /home/runner/.ci-test-nix-home - 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 env: HARMONIC_NO_CONFIRM: true HARMONIC_LOGGER: pretty HARMONIC_LOG_DIRECTIVES: harmonic=trace RUST_BACKTRACE: full - name: Ensure `nix` is removed run: | if systemctl is-active nix-daemon.socket; then echo "nix-daemon.socket was still running" exit 1 fi if systemctl is-active nix-daemon.service; then echo "nix-daemon.service was still running" exit 1 fi if [ -e /nix ]; then echo "/nix exists" exit 1 fi if [ -e /home/runner/.ci-test-nix-home ]; then echo "/home/runner/.ci-test-nix-home exists" exit 1 fi 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: - uses: actions/checkout@v3 - run: brew install fish coreutils - uses: actions/download-artifact@v3 with: name: harmonic-x86_64-darwin - name: Move & set executable run: | chmod +x ./harmonic mkdir install-root cp nix-install.sh install-root/nix-install.sh mv harmonic install-root/harmonic-x86_64-darwin - name: Initial install uses: ./ with: local-root: install-root/ logger: pretty log-directives: harmonic=trace backtrace: full github-token: ${{ secrets.GITHUB_TOKEN }} - name: Initial uninstall (without a `nix run` first) run: sudo -E /nix/harmonic uninstall env: HARMONIC_NO_CONFIRM: true HARMONIC_LOGGER: pretty HARMONIC_LOG_DIRECTIVES: harmonic=trace RUST_BACKTRACE: full - name: Repeated install uses: ./ with: local-root: install-root/ logger: pretty log-directives: harmonic=trace backtrace: full github-token: ${{ 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 env: HARMONIC_NO_CONFIRM: true HARMONIC_LOGGER: pretty HARMONIC_LOG_DIRECTIVES: harmonic=trace RUST_BACKTRACE: full