Skip to content

Commit 090f7fb

Browse files
authored
Merge pull request #14002 from getchoo-contrib/getchoo/dogfood-experimental-installer
Add experimental installer to installer tests
2 parents 2ce3437 + 92d7381 commit 090f7fb

File tree

2 files changed

+92
-1
lines changed

2 files changed

+92
-1
lines changed

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

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,22 @@ inputs:
44
dogfood:
55
description: "Whether to use Nix installed from the latest artifact from master branch"
66
required: true # Be explicit about the fact that we are using unreleased artifacts
7+
experimental-installer:
8+
description: "Whether to use the experimental installer to install Nix"
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"
714
extra_nix_config:
815
description: "Gets appended to `/etc/nix/nix.conf` if passed."
916
install_url:
1017
description: "URL of the Nix installer"
1118
required: false
1219
default: "https://releases.nixos.org/nix/nix-2.30.2/install"
20+
tarball_url:
21+
description: "URL of the Nix tarball to use with the experimental installer"
22+
required: false
1323
github_token:
1424
description: "Github token"
1525
required: true
@@ -37,14 +47,74 @@ runs:
3747
3848
gh run download "$RUN_ID" --repo "$DOGFOOD_REPO" -n "$INSTALLER_ARTIFACT" -D "$INSTALLER_DOWNLOAD_DIR"
3949
echo "installer-path=file://$INSTALLER_DOWNLOAD_DIR" >> "$GITHUB_OUTPUT"
50+
TARBALL_PATH="$(find "$INSTALLER_DOWNLOAD_DIR" -name 'nix*.tar.xz' -print | head -n 1)"
51+
echo "tarball-path=file://$TARBALL_PATH" >> "$GITHUB_OUTPUT"
4052
4153
echo "::notice ::Dogfooding Nix installer from master (https://github.com/$DOGFOOD_REPO/actions/runs/$RUN_ID)"
4254
env:
4355
GH_TOKEN: ${{ inputs.github_token }}
4456
DOGFOOD_REPO: "NixOS/nix"
57+
- name: "Gather system info for experimental installer"
58+
shell: bash
59+
if: ${{ inputs.experimental-installer == 'true' }}
60+
run: |
61+
echo "::notice Using experimental installer from $EXPERIMENTAL_INSTALLER_REPO (https://github.com/$EXPERIMENTAL_INSTALLER_REPO)"
62+
63+
if [ "$RUNNER_OS" == "Linux" ]; then
64+
EXPERIMENTAL_INSTALLER_SYSTEM="linux"
65+
echo "EXPERIMENTAL_INSTALLER_SYSTEM=$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV"
66+
elif [ "$RUNNER_OS" == "macOS" ]; then
67+
EXPERIMENTAL_INSTALLER_SYSTEM="darwin"
68+
echo "EXPERIMENTAL_INSTALLER_SYSTEM=$EXPERIMENTAL_INSTALLER_SYSTEM" >> "$GITHUB_ENV"
69+
else
70+
echo "::error ::Unsupported RUNNER_OS: $RUNNER_OS"
71+
exit 1
72+
fi
73+
74+
if [ "$RUNNER_ARCH" == "X64" ]; then
75+
EXPERIMENTAL_INSTALLER_ARCH=x86_64
76+
echo "EXPERIMENTAL_INSTALLER_ARCH=$EXPERIMENTAL_INSTALLER_ARCH" >> "$GITHUB_ENV"
77+
elif [ "$RUNNER_ARCH" == "ARM64" ]; then
78+
EXPERIMENTAL_INSTALLER_ARCH=aarch64
79+
echo "EXPERIMENTAL_INSTALLER_ARCH=$EXPERIMENTAL_INSTALLER_ARCH" >> "$GITHUB_ENV"
80+
else
81+
echo "::error ::Unsupported RUNNER_ARCH: $RUNNER_ARCH"
82+
exit 1
83+
fi
84+
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")
94+
95+
EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR="$GITHUB_WORKSPACE/$EXPERIMENTAL_INSTALLER_ARTIFACT"
96+
mkdir -p "$EXPERIMENTAL_INSTALLER_DOWNLOAD_DIR"
97+
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"
102+
env:
103+
GH_TOKEN: ${{ inputs.github_token }}
104+
EXPERIMENTAL_INSTALLER_REPO: "NixOS/experimental-nix-installer"
45105
- uses: cachix/install-nix-action@c134e4c9e34bac6cab09cf239815f9339aaaf84e # v31.5.1
106+
if: ${{ inputs.experimental-installer != 'true' }}
46107
with:
47108
# Ternary operator in GHA: https://www.github.com/actions/runner/issues/409#issuecomment-752775072
48109
install_url: ${{ inputs.dogfood == 'true' && format('{0}/install', steps.download-nix-installer.outputs.installer-path) || inputs.install_url }}
49110
install_options: ${{ inputs.dogfood == 'true' && format('--tarball-url-prefix {0}', steps.download-nix-installer.outputs.installer-path) || '' }}
50111
extra_nix_config: ${{ inputs.extra_nix_config }}
112+
- uses: DeterminateSystems/nix-installer-action@786fff0690178f1234e4e1fe9b536e94f5433196 # v20
113+
if: ${{ inputs.experimental-installer == 'true' }}
114+
with:
115+
diagnostic-endpoint: ""
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 }}' || '' }}
119+
nix-package-url: ${{ inputs.dogfood == 'true' && steps.download-nix-installer.outputs.tarball-path || (inputs.tarball_url || '') }}
120+
extra-conf: ${{ inputs.extra_nix_config }}

.github/workflows/ci.yml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,19 @@ jobs:
171171
- scenario: on ubuntu
172172
runs-on: ubuntu-24.04
173173
os: linux
174+
experimental-installer: false
174175
- scenario: on macos
175176
runs-on: macos-14
176177
os: darwin
178+
experimental-installer: false
179+
- scenario: on ubuntu (experimental)
180+
runs-on: ubuntu-24.04
181+
os: linux
182+
experimental-installer: true
183+
- scenario: on macos (experimental)
184+
runs-on: macos-14
185+
os: darwin
186+
experimental-installer: true
177187
name: installer test ${{ matrix.scenario }}
178188
runs-on: ${{ matrix.runs-on }}
179189
steps:
@@ -185,11 +195,22 @@ jobs:
185195
path: out
186196
- name: Looking up the installer tarball URL
187197
id: installer-tarball-url
188-
run: echo "installer-url=file://$GITHUB_WORKSPACE/out" >> "$GITHUB_OUTPUT"
198+
run: |
199+
echo "installer-url=file://$GITHUB_WORKSPACE/out" >> "$GITHUB_OUTPUT"
200+
TARBALL_PATH="$(find "$GITHUB_WORKSPACE/out" -name 'nix*.tar.xz' -print | head -n 1)"
201+
echo "tarball-path=file://$TARBALL_PATH" >> "$GITHUB_OUTPUT"
189202
- uses: cachix/install-nix-action@v31
203+
if: ${{ !matrix.experimental-installer }}
190204
with:
191205
install_url: ${{ format('{0}/install', steps.installer-tarball-url.outputs.installer-url) }}
192206
install_options: ${{ format('--tarball-url-prefix {0}', steps.installer-tarball-url.outputs.installer-url) }}
207+
- uses: ./.github/actions/install-nix-action
208+
if: ${{ matrix.experimental-installer }}
209+
with:
210+
dogfood: false
211+
experimental-installer: true
212+
tarball_url: ${{ steps.installer-tarball-url.outputs.tarball-path }}
213+
github_token: ${{ secrets.GITHUB_TOKEN }}
193214
- run: sudo apt install fish zsh
194215
if: matrix.os == 'linux'
195216
- run: brew install fish

0 commit comments

Comments
 (0)