aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2021-02-25 16:08:43 +0100
committerGitHub <noreply@github.com>2021-02-25 16:08:43 +0100
commitc189031e8be0530d73a817571ad7f81ad5eedce6 (patch)
tree1375d1f24bad36195caef97a15a5aee4728f2433
parent199081ad00e6ee4c704eaac34211b454fe0f310c (diff)
parent22aec8cef43e77bba356d099868fe0a6e7545b43 (diff)
Merge pull request #4549 from NixOS/installer-artifact
Test macos/linux installer script for each push
-rw-r--r--.github/workflows/test.yml44
-rw-r--r--flake.nix70
-rwxr-xr-xscripts/install.in2
-rwxr-xr-xscripts/prepare-installer-for-github-actions10
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
diff --git a/flake.nix b/flake.nix
index 3ad7cca97..e59ec9a35 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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"