Skip to content

Commit 92d7381

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. It also uses the more official `artifacts.nixos.org` endpoint to install stable releases now 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 right from `main`!
1 parent d2293fb commit 92d7381

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

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

Lines changed: 35 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,51 @@ 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+
EXPERIMENTAL_INSTALLER_SYSTEM="linux"
65+
echo "EXPERIMENTAL_INSTALLER_SYSTEM=$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV"
6066
elif [ "$RUNNER_OS" == "macOS" ]; then
61-
INSTALLER_OS="darwin"
67+
EXPERIMENTAL_INSTALLER_SYSTEM="darwin"
68+
echo "EXPERIMENTAL_INSTALLER_SYSTEM=$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV"
6269
else
6370
echo "::error ::Unsupported RUNNER_OS: $RUNNER_OS"
71+
exit 1
6472
fi
6573
6674
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"
6877
elif [ "$RUNNER_ARCH" == "ARM64" ]; then
69-
INSTALLER_ARCH="aarch64"
78+
EXPERIMENTAL_INSTALLER_ARCH=aarch64
79+
echo "EXPERIMENTAL_INSTALLER_ARCH=$EXPERIMENTAL_INSTALLER_ARCH" >> "$GITHUB_ENV"
7080
else
7181
echo "::error ::Unsupported RUNNER_ARCH: $RUNNER_ARCH"
82+
exit 1
7283
fi
7384
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")
7994
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"
8197
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"
83102
env:
84103
GH_TOKEN: ${{ inputs.github_token }}
85104
EXPERIMENTAL_INSTALLER_REPO: "NixOS/experimental-nix-installer"
@@ -94,6 +113,8 @@ runs:
94113
if: ${{ inputs.experimental-installer == 'true' }}
95114
with:
96115
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 }}' || '' }}
98119
nix-package-url: ${{ inputs.dogfood == 'true' && steps.download-nix-installer.outputs.tarball-path || (inputs.tarball_url || '') }}
99120
extra-conf: ${{ inputs.extra_nix_config }}

0 commit comments

Comments
 (0)