mirror of
https://github.com/cachix/install-nix-action.git
synced 2025-05-06 17:13:12 +00:00
Compare commits
35 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5261181216 | ||
![]() |
b2b89c6cb1 | ||
![]() |
0c65bbe3c1 | ||
![]() |
4f800b725c | ||
![]() |
80f8d94dab | ||
![]() |
83772d105a | ||
![]() |
48cf9b5849 | ||
![]() |
eafea807c1 | ||
![]() |
9b4ef2ff2d | ||
![]() |
754537aaed | ||
![]() |
edf986efb3 | ||
![]() |
f3ff3f99d8 | ||
![]() |
d1ca217b38 | ||
![]() |
21e6bcccb0 | ||
![]() |
53fb48f556 | ||
![]() |
b21ff82707 | ||
![]() |
02a151ada4 | ||
![]() |
066004291c | ||
![]() |
e8dbd0c992 | ||
![]() |
91a0719595 | ||
![]() |
d81eadf041 | ||
![]() |
3d69a1d4d2 | ||
![]() |
265a04a520 | ||
![]() |
89fd1e98db | ||
![]() |
a76df16350 | ||
![]() |
a49b703498 | ||
![]() |
f3f544c44b | ||
![]() |
14344b39ca | ||
![]() |
b1deb06f62 | ||
![]() |
08dcb3a5e6 | ||
![]() |
4204e15198 | ||
![]() |
6a10e2e9fd | ||
![]() |
2bb614e91a | ||
![]() |
9f70348d77 | ||
![]() |
4f91dc2b65 |
56
.github/workflows/test.yml
vendored
56
.github/workflows/test.yml
vendored
|
@ -6,11 +6,8 @@ on:
|
|||
- master
|
||||
|
||||
env:
|
||||
nixpkgs_channel: nixpkgs=channel:nixos-24.05
|
||||
nixpkgs_channel: nixpkgs=channel:nixos-24.11
|
||||
oldest_supported_installer: nix-2.8.0
|
||||
# Fetch new versions from the Nix CI run: https://github.com/NixOS/nix/blob/master/.github/workflows/ci.yml
|
||||
# TODO: add pinning upstream or rethink this
|
||||
pinned_installer_hash: zfzfrbb59jsqrfkldwj8drcr9nhhc49k
|
||||
|
||||
jobs:
|
||||
simple-build:
|
||||
|
@ -19,11 +16,12 @@ jobs:
|
|||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- ubuntu-24.04-arm
|
||||
- macos-latest
|
||||
- macos-13
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Install Nix
|
||||
uses: ./
|
||||
with:
|
||||
|
@ -40,11 +38,12 @@ jobs:
|
|||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- ubuntu-24.04-arm
|
||||
- macos-latest
|
||||
- macos-13
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Install Nix
|
||||
uses: ./
|
||||
with:
|
||||
|
@ -58,11 +57,12 @@ jobs:
|
|||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- ubuntu-24.04-arm
|
||||
- macos-latest
|
||||
- macos-13
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Install Nix
|
||||
uses: ./
|
||||
with:
|
||||
|
@ -78,32 +78,43 @@ jobs:
|
|||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- ubuntu-24.04-arm
|
||||
- macos-latest
|
||||
- macos-13
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Install Nix
|
||||
uses: ./
|
||||
- run: nix flake show github:NixOS/nixpkgs
|
||||
|
||||
installer-options:
|
||||
latest-installer:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
# - macos-latest missing installer for aarch64-darwin
|
||||
- macos-13
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
system: x86_64-linux
|
||||
- os: ubuntu-24.04-arm
|
||||
system: aarch64-linux
|
||||
- os: macos-latest
|
||||
system: aarch64-darwin
|
||||
- os: macos-13
|
||||
system: x86_64-darwin
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Run NAR server
|
||||
run: |
|
||||
curl --location https://github.com/cachix/nar-toolbox/releases/download/v0.1.0/nar-toolbox-${{ matrix.system }} -O
|
||||
chmod +x ./nar-toolbox-${{ matrix.system }}
|
||||
./nar-toolbox-${{ matrix.system }} serve https://cache.nixos.org &
|
||||
- name: Install Nix
|
||||
uses: ./
|
||||
with:
|
||||
nix_path: ${{ env.nixpkgs_channel }}
|
||||
install_options: --tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve
|
||||
install_url: https://nixos-nix-install-tests.cachix.org/serve/${{ env.pinned_installer_hash }}/install
|
||||
install_url: https://hydra.nixos.org/job/nix/master/installerScript/latest-finished/download/1/install
|
||||
install_options: "--tarball-url-prefix http://localhost:8080"
|
||||
- run: nix-build test.nix
|
||||
|
||||
oldest-supported-installer:
|
||||
|
@ -112,11 +123,12 @@ jobs:
|
|||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- ubuntu-24.04-arm
|
||||
- macos-latest
|
||||
- macos-13
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Install Nix
|
||||
uses: ./
|
||||
with:
|
||||
|
@ -130,7 +142,11 @@ jobs:
|
|||
os: [ubuntu-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- run: curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
|
||||
- run: docker pull ghcr.io/catthehacker/ubuntu:js-20.04
|
||||
- run: ./bin/act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:js-20.04 push -j simple-build
|
||||
- run: docker pull ghcr.io/catthehacker/ubuntu:js-24.04
|
||||
- run: |
|
||||
./bin/act push \
|
||||
-P ubuntu-latest=ghcr.io/catthehacker/ubuntu:js-24.04 \
|
||||
-j simple-build \
|
||||
--matrix os:ubuntu-latest
|
||||
|
|
93
.gitignore
vendored
93
.gitignore
vendored
|
@ -1,93 +1,2 @@
|
|||
__tests__/runner/*
|
||||
|
||||
# comment out in distribution branches
|
||||
node_modules/
|
||||
|
||||
# Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
jspm_packages/
|
||||
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
.env.test
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
# next.js build output
|
||||
.next
|
||||
|
||||
# nuxt.js build output
|
||||
.nuxt
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
.env*
|
||||
|
|
64
README.md
64
README.md
|
@ -34,7 +34,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: cachix/install-nix-action@v27
|
||||
- uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
nix_path: nixpkgs=channel:nixos-unstable
|
||||
- run: nix-build
|
||||
|
@ -52,7 +52,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: cachix/install-nix-action@v27
|
||||
- uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
github_access_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- run: nix build
|
||||
|
@ -75,6 +75,8 @@ To install Nix from any commit, go to [the corresponding installer_test action](
|
|||
|
||||
- `enable_kvm`: whether to enable KVM for hardware-accelerated virtualization on Linux. Enabled by default if available.
|
||||
|
||||
- `set_as_trusted_user`: whether to add the current user to `trusted-users`. Enabled by default.
|
||||
|
||||
|
||||
## Differences from the default Nix installer
|
||||
|
||||
|
@ -146,7 +148,7 @@ Otherwise, you can add any binary cache to nix.conf using
|
|||
install-nix-action's own `extra_nix_config` input:
|
||||
|
||||
```yaml
|
||||
- uses: cachix/install-nix-action@v27
|
||||
- uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
|
||||
|
@ -172,3 +174,59 @@ Or you can disable pure mode entirely with the `--impure` flag:
|
|||
```
|
||||
nix develop --impure
|
||||
```
|
||||
|
||||
### How do I pass AWS credentials to the Nix daemon?
|
||||
|
||||
In multi-user mode, Nix commands that operate on the Nix store are forwarded to a privileged daemon. This daemon runs in a separate context from your GitHub Actions workflow and cannot access the workflow's environment variables. Consequently, any secrets or credentials defined in your workflow environment will not be available to Nix operations that require store access.
|
||||
|
||||
There are two ways to pass AWS credentials to the Nix daemon:
|
||||
- Configure a default profile using the AWS CLI
|
||||
- Install Nix in single-user mode
|
||||
|
||||
#### Configure a default profile using the AWS CLI
|
||||
|
||||
The Nix daemon supports reading AWS credentials from the `~/.aws/credentials` file.
|
||||
|
||||
We can use the AWS CLI to configure a default profile using short-lived credentials fetched using OIDC:
|
||||
|
||||
```yaml
|
||||
job:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
# Required permissions to request AWS credentials
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: cachix/install-nix-action@v31
|
||||
- name: Assume AWS Role
|
||||
uses: aws-actions/configure-aws-credentials@v4.1.0
|
||||
with:
|
||||
aws-region: us-east-1
|
||||
role-to-assume: arn:aws-cn:iam::123456789100:role/my-github-actions-role
|
||||
- name: Make AWS Credentials accessible to nix-daemon
|
||||
run: |
|
||||
sudo -i aws configure set aws_access_key_id "${AWS_ACCESS_KEY_ID}"
|
||||
sudo -i aws configure set aws_secret_access_key "${AWS_SECRET_ACCESS_KEY}"
|
||||
sudo -i aws configure set aws_session_token "${AWS_SESSION_TOKEN}"
|
||||
sudo -i aws configure set region "${AWS_REGION}"
|
||||
```
|
||||
|
||||
#### Install Nix in single-user mode
|
||||
|
||||
In some environments it may be possible to install Nix in single-user mode by passing the `--no-daemon` flag to the installer.
|
||||
This mode is normally used on platforms without an init system, like systemd, and in containerized environments with a single user that can own the entire Nix store.
|
||||
|
||||
This approach is more generic as it allows passing environment variables directly to Nix, including secrets, proxy settings, and other configuration options.
|
||||
|
||||
However, it may not be suitable for all environments. [Consult the Nix manual](https://nix.dev/manual/nix/latest/installation/nix-security) for the latest restrictions and differences between the two modes.
|
||||
|
||||
For example, single-user mode is currently supported on hosted Linux GitHub runners, like `ubuntu-latest`.
|
||||
It is not supported on macOS runners, like `macos-latest`.
|
||||
|
||||
```yaml
|
||||
- uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
install_options: --no-daemon
|
||||
```
|
||||
|
|
44
RELEASE.md
Normal file
44
RELEASE.md
Normal file
|
@ -0,0 +1,44 @@
|
|||
# Release
|
||||
|
||||
As of v31, releases of this action follow Semantic Versioning.
|
||||
|
||||
### Publishing a new release
|
||||
|
||||
#### Publish the release
|
||||
|
||||
Draft [a new release on GitHub](https://github.com/cachix/install-nix-action/releases):
|
||||
|
||||
- In `Choose a tag`, create a new tag, like `v31.2.1`, following semver.
|
||||
- Click `Generate release notes`.
|
||||
- `Set as the latest release` should be selected automatically.
|
||||
- Publish release
|
||||
|
||||
#### Update the major tag
|
||||
|
||||
The major tag, like `v31`, allows downstream users to opt-in to automatic non-breaking updates.
|
||||
|
||||
This process follows GitHub's own guidelines:
|
||||
https://github.com/actions/toolkit/blob/main/docs/action-versioning.md
|
||||
|
||||
##### Fetch the latest tags
|
||||
|
||||
```
|
||||
git pull --tags --force
|
||||
```
|
||||
|
||||
##### Move the tag
|
||||
|
||||
```
|
||||
git tag -fa v31
|
||||
```
|
||||
```
|
||||
git push origin v31 --force
|
||||
```
|
||||
|
||||
#### Update the release notes for the major tag
|
||||
|
||||
Find the release on GitHub: https://github.com/cachix/install-nix-action/releases
|
||||
|
||||
Edit the release and click `Generate release notes`.
|
||||
Edit the formatting and publish.
|
||||
|
|
@ -5,7 +5,7 @@ inputs:
|
|||
extra_nix_config:
|
||||
description: 'Gets appended to `/etc/nix/nix.conf` if passed.'
|
||||
github_access_token:
|
||||
description: 'Configure nix to pull from github using the given github token.'
|
||||
description: 'Configure Nix to pull from GitHub using the given GitHub token.'
|
||||
install_url:
|
||||
description: 'Installation URL that will contain a script to install Nix.'
|
||||
install_options:
|
||||
|
@ -16,6 +16,10 @@ inputs:
|
|||
description: 'Enable KVM for hardware-accelerated virtualization on Linux, if available.'
|
||||
required: false
|
||||
default: true
|
||||
set_as_trusted_user:
|
||||
description: 'Add current user to `trusted-users`.'
|
||||
required: false
|
||||
default: true
|
||||
branding:
|
||||
color: 'blue'
|
||||
icon: 'sun'
|
||||
|
@ -31,4 +35,5 @@ runs:
|
|||
INPUT_INSTALL_URL: ${{ inputs.install_url }}
|
||||
INPUT_NIX_PATH: ${{ inputs.nix_path }}
|
||||
INPUT_ENABLE_KVM: ${{ inputs.enable_kvm }}
|
||||
INPUT_SET_AS_TRUSTED_USER: ${{ inputs.set_as_trusted_user }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
|
|
|
@ -34,8 +34,10 @@ add_config "max-jobs = auto"
|
|||
if [[ $OSTYPE =~ darwin ]]; then
|
||||
add_config "ssl-cert-file = /etc/ssl/cert.pem"
|
||||
fi
|
||||
# Allow binary caches for user
|
||||
add_config "trusted-users = root ${USER:-}"
|
||||
# Allow binary caches specified at user level
|
||||
if [[ $INPUT_SET_AS_TRUSTED_USER == 'true' ]]; then
|
||||
add_config "trusted-users = root ${USER:-}"
|
||||
fi
|
||||
# Add a GitHub access token.
|
||||
# Token-less access is subject to lower rate limits.
|
||||
if [[ -n "${INPUT_GITHUB_ACCESS_TOKEN:-}" ]]; then
|
||||
|
@ -65,7 +67,6 @@ fi
|
|||
# Nix installer flags
|
||||
installer_options=(
|
||||
--no-channel-add
|
||||
--darwin-use-unencrypted-nix-store-volume
|
||||
--nix-extra-conf-file "$workdir/nix.conf"
|
||||
)
|
||||
|
||||
|
@ -93,7 +94,7 @@ echo "installer options: ${installer_options[*]}"
|
|||
|
||||
# There is --retry-on-errors, but only newer curl versions support that
|
||||
curl_retries=5
|
||||
while ! curl -sS -o "$workdir/install" -v --fail -L "${INPUT_INSTALL_URL:-https://releases.nixos.org/nix/nix-2.24.6/install}"
|
||||
while ! curl -sS -o "$workdir/install" -v --fail -L "${INPUT_INSTALL_URL:-https://releases.nixos.org/nix/nix-2.28.3/install}"
|
||||
do
|
||||
sleep 1
|
||||
((curl_retries--))
|
||||
|
|
Loading…
Reference in a new issue