|
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,51 @@ 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 | + EXPERIMENTAL_INSTALLER_SYSTEM="linux" |
| 65 | + echo "EXPERIMENTAL_INSTALLER_SYSTEM=$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV" |
60 | 66 | elif [ "$RUNNER_OS" == "macOS" ]; then |
61 | | - INSTALLER_OS="darwin" |
| 67 | + EXPERIMENTAL_INSTALLER_SYSTEM="darwin" |
| 68 | + echo "EXPERIMENTAL_INSTALLER_SYSTEM=$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV" |
62 | 69 | else |
63 | 70 | echo "::error ::Unsupported RUNNER_OS: $RUNNER_OS" |
| 71 | + exit 1 |
64 | 72 | fi |
65 | 73 |
|
66 | 74 | if [ "$RUNNER_ARCH" == "X64" ]; then |
67 | | - INSTALLER_ARCH="x86_64" |
| 75 | + EXPERIMENTAL_INSTALLER_ARCH=x86_64 |
| 76 | + echo "EXPERIMENTAL_INSTALLER_ARCH=$EXPERIMENTAL_INSTALLER_ARCH" >> "$GITHUB_ENV" |
68 | 77 | elif [ "$RUNNER_ARCH" == "ARM64" ]; then |
69 | | - INSTALLER_ARCH="aarch64" |
| 78 | + EXPERIMENTAL_INSTALLER_ARCH=aarch64 |
| 79 | + echo "EXPERIMENTAL_INSTALLER_ARCH=$EXPERIMENTAL_INSTALLER_ARCH" >> "$GITHUB_ENV" |
70 | 80 | else |
71 | 81 | echo "::error ::Unsupported RUNNER_ARCH: $RUNNER_ARCH" |
| 82 | + exit 1 |
72 | 83 | fi |
73 | 84 |
|
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" |
| 85 | + echo "EXPERIMENTAL_INSTALLER_ARTIFACT=nix-installer-$EXPERIMENTAL_INSTALLER_ARCH-$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV" |
| 86 | + env: |
| 87 | + EXPERIMENTAL_INSTALLER_REPO: "NixOS/experimental-nix-installer" |
| 88 | + - name: "Download latest experimental installer" |
| 89 | + shell: bash |
| 90 | + id: download-latest-experimental-installer |
| 91 | + if: ${{ inputs.experimental-installer == 'true' && inputs.experimental-installer-version == 'latest' }} |
| 92 | + run: | |
| 93 | + RUN_ID=$(gh run list --repo "$EXPERIMENTAL_INSTALLER_REPO" --workflow ci.yml --branch main --status success --json databaseId --jq ".[0].databaseId") |
79 | 94 |
|
80 | | - echo "installer-path=$EXPERIMENTAL_INSTALLER_PATH" >> "$GITHUB_OUTPUT" |
| 95 | + EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR="$GITHUB_WORKSPACE/$EXPERIMENTAL_INSTALLER_ARTIFACT" |
| 96 | + mkdir -p "$EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR" |
81 | 97 |
|
82 | | - echo "::notice Using experimental installer from $EXPERIMENTAL_INSTALLER_REPO (https://github.com/$EXPERIMENTAL_INSTALLER_REPO)" |
| 98 | + gh run download "$RUN_ID" --repo "$EXPERIMENTAL_INSTALLER_REPO" -n "$EXPERIMENTAL_INSTALLER_ARTIFACT" -D "$EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR" |
| 99 | + # Executable permissions are lost in artifacts |
| 100 | + find $EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR -type f -exec chmod +x {} + |
| 101 | + echo "installer-path=$EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR" >> "$GITHUB_OUTPUT" |
83 | 102 | env: |
84 | 103 | GH_TOKEN: ${{ inputs.github_token }} |
85 | 104 | EXPERIMENTAL_INSTALLER_REPO: "NixOS/experimental-nix-installer" |
|
94 | 113 | if: ${{ inputs.experimental-installer == 'true' }} |
95 | 114 | with: |
96 | 115 | diagnostic-endpoint: "" |
97 | | - local-root: ${{ steps.download-experimental-nix-installer.outputs.installer-path }} |
| 116 | + # TODO: It'd be nice to use `artifacts.nixos.org` for both of these, maybe through an `/experimental-installer/latest` endpoint? or `/commit/<hash>`? |
| 117 | + local-root: ${{ inputs.experimental-installer-version == 'latest' && steps.download-latest-experimental-installer.outputs.installer-path || '' }} |
| 118 | + source-url: ${{ inputs.experimental-installer-version != 'latest' && 'https://artifacts.nixos.org/experimental-installer/tag/${{ inputs.experimental-installer-version }}/${{ env.EXPERIMENTAL_INSTALLER_ARTIFACT }}' || '' }} |
98 | 119 | nix-package-url: ${{ inputs.dogfood == 'true' && steps.download-nix-installer.outputs.tarball-path || (inputs.tarball_url || '') }} |
99 | 120 | extra-conf: ${{ inputs.extra_nix_config }} |
0 commit comments