|
7 | 7 | experimental-installer:
|
8 | 8 | description: "Whether to use the experimental installer to install Nix"
|
9 | 9 | default: false
|
| 10 | + experimental-installer-version: |
| 11 | + description: "Version of the experimental installer to use. If `latest`, the newest artifact from the default branch is used." |
| 12 | + # TODO: This should probably be pinned to a release after https://github.com/NixOS/experimental-nix-installer/pull/49 lands in one |
| 13 | + default: "latest" |
10 | 14 | extra_nix_config:
|
11 | 15 | description: "Gets appended to `/etc/nix/nix.conf` if passed."
|
12 | 16 | install_url:
|
@@ -50,36 +54,45 @@ runs:
|
50 | 54 | env:
|
51 | 55 | GH_TOKEN: ${{ inputs.github_token }}
|
52 | 56 | DOGFOOD_REPO: "NixOS/nix"
|
53 |
| - - name: "Download experimental installer" |
| 57 | + - name: "Gather system info for experimental installer" |
54 | 58 | shell: bash
|
55 |
| - id: download-experimental-nix-installer |
56 | 59 | if: ${{ inputs.experimental-installer == 'true' }}
|
57 | 60 | run: |
|
| 61 | + echo "::notice Using experimental installer from $EXPERIMENTAL_INSTALLER_REPO (https://github.com/$EXPERIMENTAL_INSTALLER_REPO)" |
| 62 | +
|
58 | 63 | if [ "$RUNNER_OS" == "Linux" ]; then
|
59 |
| - INSTALLER_OS="linux" |
| 64 | + echo "EXPERIMENTAL_INSTALLER_SYSTEM=linux" >> "$GITHUB_ENV" |
60 | 65 | elif [ "$RUNNER_OS" == "macOS" ]; then
|
61 |
| - INSTALLER_OS="darwin" |
| 66 | + echo "EXPERIMENTAL_INSTALLER_SYSTEM=darwin" >> "$GITHUB_ENV" |
62 | 67 | else
|
63 | 68 | echo "::error ::Unsupported RUNNER_OS: $RUNNER_OS"
|
| 69 | + exit 1 |
64 | 70 | fi
|
65 | 71 |
|
66 | 72 | if [ "$RUNNER_ARCH" == "X64" ]; then
|
67 |
| - INSTALLER_ARCH="x86_64" |
| 73 | + echo "EXPERIMENTAL_INSTALLER_ARCH=x86_64" >> "$GITHUB_ENV" |
68 | 74 | elif [ "$RUNNER_ARCH" == "ARM64" ]; then
|
69 |
| - INSTALLER_ARCH="aarch64" |
| 75 | + echo "EXPERIMENTAL_INSTALLER_ARCH=aarch64" >> "$GITHUB_ENV" |
70 | 76 | else
|
71 | 77 | echo "::error ::Unsupported RUNNER_ARCH: $RUNNER_ARCH"
|
| 78 | + exit 1 |
72 | 79 | fi
|
73 | 80 |
|
74 |
| - EXPERIMENTAL_INSTALLER_ARTIFACT="nix-installer-$INSTALLER_ARCH-$INSTALLER_OS" |
75 |
| - EXPERIMENTAL_INSTALLER_PATH="$GITHUB_WORKSPACE/$EXPERIMENTAL_INSTALLER_ARTIFACT" |
76 |
| - # TODO: This uses the latest release. It should probably be pinned, or dogfood the experimental repo's default branch - similar to the above |
77 |
| - gh release download -R "$EXPERIMENTAL_INSTALLER_REPO" -D "$EXPERIMENTAL_INSTALLER_PATH" -p "nix-installer.sh" -p "$EXPERIMENTAL_INSTALLER_ARTIFACT" |
78 |
| - chmod +x "$EXPERIMENTAL_INSTALLER_PATH/$EXPERIMENTAL_INSTALLER_ARTIFACT" |
| 81 | + echo "EXPERIMENTAL_INSTALLER_ARTIFACT=nix-installer-$EXPERIMENTAL_INSTALLER_ARCH-$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV" |
| 82 | + env: |
| 83 | + EXPERIMENTAL_INSTALLER_REPO: "NixOS/experimental-nix-installer" |
| 84 | + - name: "Download latest experimental installer" |
| 85 | + shell: bash |
| 86 | + id: download-latest-experimental-installer |
| 87 | + if: ${{ inputs.experimental-installer == 'true' && inputs.experimental-installer-version == 'latest' }} |
| 88 | + run: | |
| 89 | + RUN_ID=$(gh run list --repo "$EXPERIMENTAL_INSTALLER_REPO" --workflow ci.yml --branch main --status success --json databaseId --jq ".[0].databaseId") |
79 | 90 |
|
80 |
| - echo "installer-path=$EXPERIMENTAL_INSTALLER_PATH" >> "$GITHUB_OUTPUT" |
| 91 | + EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR="$GITHUB_WORKSPACE/$EXPERIMENTAL_INSTALLER_ARTIFACT" |
| 92 | + mkdir -p "$EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR" |
81 | 93 |
|
82 |
| - echo "::notice Using experimental installer from $EXPERIMENTAL_INSTALLER_REPO (https://github.com/$EXPERIMENTAL_INSTALLER_REPO)" |
| 94 | + gh run download "$RUN_ID" --repo "$EXPERIMENTAL_INSTALLER_REPO" -n "$EXPERIMENTAL_INSTALLER_ARTIFACT" -D "$EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR" |
| 95 | + echo "installer-path=file://$EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR" >> "$GITHUB_OUTPUT" |
83 | 96 | env:
|
84 | 97 | GH_TOKEN: ${{ inputs.github_token }}
|
85 | 98 | EXPERIMENTAL_INSTALLER_REPO: "NixOS/experimental-nix-installer"
|
|
94 | 107 | if: ${{ inputs.experimental-installer == 'true' }}
|
95 | 108 | with:
|
96 | 109 | diagnostic-endpoint: ""
|
97 |
| - local-root: ${{ steps.download-experimental-nix-installer.outputs.installer-path }} |
| 110 | + # TODO: It'd be nice to use `artifacts.nixos.org` for both of these, maybe through an `/experimental-installer/latest` endpoint? or `/commit/<hash>`? |
| 111 | + source-url: ${{ inputs.experimental-installer-version == 'latest' && steps.download-latest-experimental-installer.outputs.installer-path || 'https://artifacts.nixos.org/experimental-installer/tag/${{ inputs.experimental-installer-version }}/${{ env.EXPERIMENTAL_INSTALLER_ARTIFACT }}' }} |
98 | 112 | nix-package-url: ${{ inputs.dogfood == 'true' && steps.download-nix-installer.outputs.tarball-path || (inputs.tarball_url || '') }}
|
99 | 113 | extra-conf: ${{ inputs.extra_nix_config }}
|
0 commit comments