Skip to content

Commit 71ff2a4

Browse files
committed
ci: allow for using the latest build of the experimental installer
Until these repos are potentially merged, this is good for dogfooding alongside the experimental installer More immediately though, we need a patch for the experimental installer to really work in CI at all, and that hasn't landed in a tag yet. So, this lets us use it now!
1 parent d2293fb commit 71ff2a4

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

.github/actions/install-nix-action/action.yaml

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ inputs:
77
experimental-installer:
88
description: "Whether to use the experimental installer to install Nix"
99
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"
1014
extra_nix_config:
1115
description: "Gets appended to `/etc/nix/nix.conf` if passed."
1216
install_url:
@@ -50,36 +54,45 @@ runs:
5054
env:
5155
GH_TOKEN: ${{ inputs.github_token }}
5256
DOGFOOD_REPO: "NixOS/nix"
53-
- name: "Download experimental installer"
57+
- name: "Gather system info for experimental installer"
5458
shell: bash
55-
id: download-experimental-nix-installer
5659
if: ${{ inputs.experimental-installer == 'true' }}
5760
run: |
61+
echo "::notice Using experimental installer from $EXPERIMENTAL_INSTALLER_REPO (https://github.com/$EXPERIMENTAL_INSTALLER_REPO)"
62+
5863
if [ "$RUNNER_OS" == "Linux" ]; then
59-
INSTALLER_OS="linux"
64+
echo "EXPERIMENTAL_INSTALLER_SYSTEM=linux" >> "$GITHUB_ENV"
6065
elif [ "$RUNNER_OS" == "macOS" ]; then
61-
INSTALLER_OS="darwin"
66+
echo "EXPERIMENTAL_INSTALLER_SYSTEM=darwin" >> "$GITHUB_ENV"
6267
else
6368
echo "::error ::Unsupported RUNNER_OS: $RUNNER_OS"
69+
exit 1
6470
fi
6571
6672
if [ "$RUNNER_ARCH" == "X64" ]; then
67-
INSTALLER_ARCH="x86_64"
73+
echo "EXPERIMENTAL_INSTALLER_ARCH=x86_64" >> "$GITHUB_ENV"
6874
elif [ "$RUNNER_ARCH" == "ARM64" ]; then
69-
INSTALLER_ARCH="aarch64"
75+
echo "EXPERIMENTAL_INSTALLER_ARCH=aarch64" >> "$GITHUB_ENV"
7076
else
7177
echo "::error ::Unsupported RUNNER_ARCH: $RUNNER_ARCH"
78+
exit 1
7279
fi
7380
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")
7990
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"
8193
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"
8396
env:
8497
GH_TOKEN: ${{ inputs.github_token }}
8598
EXPERIMENTAL_INSTALLER_REPO: "NixOS/experimental-nix-installer"
@@ -94,6 +107,7 @@ runs:
94107
if: ${{ inputs.experimental-installer == 'true' }}
95108
with:
96109
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 }}' }}
98112
nix-package-url: ${{ inputs.dogfood == 'true' && steps.download-nix-installer.outputs.tarball-path || (inputs.tarball_url || '') }}
99113
extra-conf: ${{ inputs.extra_nix_config }}

0 commit comments

Comments
 (0)