diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2021-02-25 16:08:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-25 16:08:43 +0100 |
commit | c189031e8be0530d73a817571ad7f81ad5eedce6 (patch) | |
tree | 1375d1f24bad36195caef97a15a5aee4728f2433 | |
parent | 199081ad00e6ee4c704eaac34211b454fe0f310c (diff) | |
parent | 22aec8cef43e77bba356d099868fe0a6e7545b43 (diff) |
Merge pull request #4549 from NixOS/installer-artifact
Test macos/linux installer script for each push
-rw-r--r-- | .github/workflows/test.yml | 44 | ||||
-rw-r--r-- | flake.nix | 70 | ||||
-rwxr-xr-x | scripts/install.in | 2 | ||||
-rwxr-xr-x | scripts/prepare-installer-for-github-actions | 10 |
4 files changed, 90 insertions, 36 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 021642f4c..bde6106e0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,10 +8,52 @@ jobs: matrix: os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} + env: + CACHIX_NAME: nix-ci steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v2.3.4 with: fetch-depth: 0 - uses: cachix/install-nix-action@v12 + - uses: cachix/cachix-action@v8 + with: + name: '${{ env.CACHIX_NAME }}' + signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' #- run: nix flake check - run: nix-build -A checks.$(if [[ `uname` = Linux ]]; then echo x86_64-linux; else echo x86_64-darwin; fi) + installer: + if: github.event_name == 'push' + needs: tests + runs-on: ubuntu-latest + env: + CACHIX_NAME: nix-ci + outputs: + installerURL: ${{ steps.prepare-installer.outputs.installerURL }} + steps: + - uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + - uses: cachix/install-nix-action@v12 + - uses: cachix/cachix-action@v8 + with: + name: '${{ env.CACHIX_NAME }}' + signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' + - id: prepare-installer + run: scripts/prepare-installer-for-github-actions + installer_test: + if: github.event_name == 'push' + needs: installer + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + env: + CACHIX_NAME: nix-ci + steps: + - uses: actions/checkout@v2.3.4 + - uses: cachix/install-nix-action@master + with: + install_url: '${{needs.installer.outputs.installerURL}}' + install_options: '--tarball-url-prefix https://${{ env.CACHIX_NAME }}.cachix.org/serve' + - run: nix-instantiate -E 'builtins.currentTime' --eval +
\ No newline at end of file @@ -110,6 +110,40 @@ ]; }; + installScriptFor = systems: + with nixpkgsFor.x86_64-linux; + runCommand "installer-script" + { buildInputs = [ nix ]; + } + '' + mkdir -p $out/nix-support + + # Converts /nix/store/50p3qk8kka9dl6wyq40vydq945k0j3kv-nix-2.4pre20201102_550e11f/bin/nix + # To 50p3qk8kka9dl6wyq40vydq945k0j3kv/bin/nix + tarballPath() { + # Remove the store prefix + local path=''${1#${builtins.storeDir}/} + # Get the path relative to the derivation root + local rest=''${path#*/} + # Get the derivation hash + local drvHash=''${path%%-*} + echo "$drvHash/$rest" + } + + substitute ${./scripts/install.in} $out/install \ + ${pkgs.lib.concatMapStrings + (system: + '' \ + --replace '@tarballHash_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \ + --replace '@tarballPath_${system}@' $(tarballPath ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \ + '' + ) + systems + } --replace '@nixVersion@' ${version} + + echo "file installer $out/install" >> $out/nix-support/hydra-build-products + ''; + in { # A Nixpkgs overlay that overrides the 'nix' and @@ -314,40 +348,8 @@ # to https://nixos.org/nix/install. It downloads the binary # tarball for the user's system and calls the second half of the # installation script. - installerScript = - with nixpkgsFor.x86_64-linux; - runCommand "installer-script" - { buildInputs = [ nix ]; - } - '' - mkdir -p $out/nix-support - - # Converts /nix/store/50p3qk8kka9dl6wyq40vydq945k0j3kv-nix-2.4pre20201102_550e11f/bin/nix - # To 50p3qk8kka9dl6wyq40vydq945k0j3kv/bin/nix - tarballPath() { - # Remove the store prefix - local path=''${1#${builtins.storeDir}/} - # Get the path relative to the derivation root - local rest=''${path#*/} - # Get the derivation hash - local drvHash=''${path%%-*} - echo "$drvHash/$rest" - } - - substitute ${./scripts/install.in} $out/install \ - ${pkgs.lib.concatMapStrings - (system: - '' \ - --replace '@tarballHash_${system}@' $(nix --experimental-features nix-command hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \ - --replace '@tarballPath_${system}@' $(tarballPath ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) \ - '' - ) - [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ] - } \ - --replace '@nixVersion@' ${version} - - echo "file installer $out/install" >> $out/nix-support/hydra-build-products - ''; + installerScript = installScriptFor [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]; + installerScriptForGHA = installScriptFor [ "x86_64-linux" "x86_64-darwin" ]; # Line coverage analysis. coverage = diff --git a/scripts/install.in b/scripts/install.in index 0eaf25bb3..7d25f7bd7 100755 --- a/scripts/install.in +++ b/scripts/install.in @@ -60,7 +60,7 @@ case "$(uname -s).$(uname -m)" in esac # Use this command-line option to fetch the tarballs using nar-serve or Cachix -if "${1:---tarball-url-prefix}"; then +if [ "${1:-}" = "--tarball-url-prefix" ]; then if [ -z "${2:-}" ]; then oops "missing argument for --tarball-url-prefix" fi diff --git a/scripts/prepare-installer-for-github-actions b/scripts/prepare-installer-for-github-actions new file mode 100755 index 000000000..92d930384 --- /dev/null +++ b/scripts/prepare-installer-for-github-actions @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -e + +script=$(nix-build -A outputs.hydraJobs.installerScriptForGHA --no-out-link) +installerHash=$(echo $script | cut -b12-43 -) + +installerURL=https://$CACHIX_NAME.cachix.org/serve/$installerHash/install + +echo "::set-output name=installerURL::$installerURL" |