Compare commits

..

3 Commits

Author SHA1 Message Date
gustavderdrache 5f9e43ae73 pnpm run all 2025-06-23 12:43:41 -04:00
gustavderdrache 0b77516ea1 Bump detsys-ts PR reference 2025-06-23 11:40:39 -04:00
gustavderdrache 3610f32cba Track correlations (DeterminateSystems/detsys-ts#101) 2025-06-20 18:07:13 -04:00
15 changed files with 83721 additions and 98441 deletions
+2 -1
View File
@@ -7,8 +7,9 @@ EXPECTED_VERSION="${1}"
INSTALLED_NIX_VERSION_OUTPUT=$(nix --version)
INSTALLED_NIX_VERSION=$(echo "${INSTALLED_NIX_VERSION_OUTPUT}" | awk '{print $NF}')
EXPECTED_OUTPUT="nix (Nix) ${EXPECTED_VERSION}"
if [ "${INSTALLED_NIX_VERSION}" != "${EXPECTED_VERSION}" ]; then
if [ "${INSTALLED_NIX_VERSION_OUTPUT}" != "${EXPECTED_OUTPUT}" ]; then
echo "Nix version ${INSTALLED_NIX_VERSION} didn't match expected version ${EXPECTED_VERSION}"
exit 1
else
+32 -26
View File
@@ -8,7 +8,7 @@ on:
jobs:
tests:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
needs:
- check-dist-up-to-date
- install-nix
@@ -24,46 +24,48 @@ jobs:
check-dist-up-to-date:
name: Check the dist/ folder is up to date
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/flakehub-cache-action@main
- name: npm install
run: nix develop --command npm ci
- name: pnpm install
run: nix develop --command pnpm install
- name: prettier format
run: nix develop --command npm run check-fmt
run: nix develop --command pnpm run check-fmt
- name: ESLint
run: nix develop --command npm run lint
run: nix develop --command pnpm run lint
- name: tsup build
run: nix develop --command npm run build
run: nix develop --command pnpm run build
- name: ncc package
run: nix develop --command npm run package
run: nix develop --command pnpm run package
- name: Git status
run: git status --porcelain=v1
- name: Ensure no staged changes
run: git diff --exit-code
install-nix:
name: "Test: ${{ matrix.system.nix-system }} on ${{ matrix.system.runner }}${{ matrix.determinate && ' with determinate' || '' }}"
name: "Test: ${{ matrix.runner }}${{ matrix.determinate && ' with determinate' || '' }}"
strategy:
fail-fast: false
matrix:
system:
- {
nix-system: x86_64-linux,
runner: nscloud-ubuntu-22.04-amd64-4x16,
}
- { nix-system: aarch64-darwin, runner: macos-latest }
runner:
- ubuntu-latest
- nscloud-ubuntu-22.04-amd64-4x16
- namespace-profile-default-arm64
# - macos-12-large # determinate-nixd is broken on macos-12
- macos-13-large
- macos-14-large
- macos-14-xlarge # arm64
determinate:
- true
- false
runs-on: ${{ matrix.system.runner }}
runs-on: ${{ matrix.runner }}
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- name: Install Nix
uses: ./
with:
@@ -76,7 +78,7 @@ jobs:
run: echo $PATH
- name: Render the devshell
if: (success() || failure())
if: success() || failure()
run: |
nix develop --command date
@@ -144,17 +146,21 @@ jobs:
install-with-non-default-source-inputs:
name: Install Nix using non-default source-${{ matrix.inputs.key }}
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
strategy:
matrix:
inputs:
# https://github.com/DeterminateSystems/nix-installer/blob/v3.11.3
# https://github.com/DeterminateSystems/nix-installer/blob/v0.18.0
- key: url
value: https://github.com/DeterminateSystems/nix-installer/releases/download/v3.11.3/nix-installer-x86_64-linux
nix-version: "2.31.2" # 3.11.3 is based on 2.31.2
value: https://github.com/DeterminateSystems/nix-installer/releases/download/v0.18.0/nix-installer-x86_64-linux
nix-version: "2.21.2"
# https://github.com/DeterminateSystems/nix-installer/tree/7011c077ec491da410fbc39f68676b0908b9ce7e
- key: revision
value: 7011c077ec491da410fbc39f68676b0908b9ce7e
nix-version: "2.19.2"
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- name: Install with alternative source-${{ matrix.inputs.key }}
uses: ./
with:
@@ -165,9 +171,9 @@ jobs:
install-no-id-token:
name: Install Nix without an ID token
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: ./
with:
_internal-strict-mode: true
+1 -4
View File
@@ -1,6 +1,3 @@
.direnv/
dist/
lib/
node_modules/
package-lock.json
node_modules/
+1 -1
View File
@@ -1,5 +1,5 @@
# Submitting Pull Requests
Run `npm ci` to install necessary JS tools.
Run `pnpm install` to install necessary JS tools.
This action is based off https://github.com/actions/javascript-action. As part of your contributing flow you **must** run `npm run all` before we can merge.
+13 -34
View File
@@ -1,14 +1,14 @@
# The Determinate Nix Installer Action
The fast, friendly, and reliable GitHub Action to install [Determinate Nix][det-nix] with [flakes].
The Determinate Nix Installer Action is based on [Determinate Nix Installer][installer], which is responsible for tens of thousands of installs daily.
Based on the [Determinate Nix Installer](https://github.com/DeterminateSystems/nix-installer), responsible for over tens of thousands of Nix installs daily.
The fast, friendly, and reliable GitHub Action to install Nix with Flakes.
## Supports
-**Accelerated KVM** on open source projects and larger runners. See [GitHub's announcement](https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/) for more info.
- ✅ Linux (x86_64 and aarch64)
- ✅ macOS (aarch64)
- ✅ Windows Subsystem for Linux (WSL) (x86_64 and aarch64)
- ✅ Linux, x86_64, aarch64, and i686
- ✅ macOS, x86_64 and aarch64
- ✅ WSL2, x86_64 and aarch64
- ✅ Containers
- ✅ Valve's SteamOS
- ✅ GitHub Enterprise Server
@@ -27,18 +27,14 @@ jobs:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- run: nix build .
```
> [!NOTE]
> This Action installs [Determinate Nix][det-nix] by default.
> You can, however, use it to install [upstream Nix](#installing-upstream-nix) until **January 1, 2026**.
### With FlakeHub
To fetch private flakes from FlakeHub and Nix builds from FlakeHub Cache, update the `permissions` block and use [`determinate-nix-action`][determinate-nix-action] instead of this Action:
To fetch private flakes from FlakeHub and Nix builds from FlakeHub Cache, update the `permissions` block and use [`determinate-nix-action`][determinate-nix-action]:
```yaml
on:
@@ -54,7 +50,7 @@ jobs:
id-token: "write"
contents: "read"
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: DeterminateSystems/determinate-nix-action@v3
- run: nix build .
```
@@ -63,8 +59,8 @@ See [`.github/workflows/ci.yml`](.github/workflows/ci.yml) for a full example.
### Pinning the version
This GitHub Action uses the most recent version of Determinate Nix Installer, even when the Action itself is pinned.
If you wish to pin your CI workflows to a specific Determinate Nix version, use the [`determinate-nix-action`][determinate-nix-action].
This GitHub Action uses the most recent version of the Determinate Nix Installer, even when the Action itself is pinned.
If you wish to pin your CI workflows to a specific version, use the [`determinate-nix-action`][determinate-nix-action].
That Action is updated and tagged for every Determinate release.
The `DeterminateSystems/determinate-nix-action@v3.5.2` reference, for example, always installs Determinate Nix v3.5.2.
@@ -88,8 +84,8 @@ Differing from the upstream [Nix](https://github.com/NixOS/nix) installer script
- the `nix-command` and `flakes` features are enabled
- `bash-prompt-prefix` is set
- `auto-optimise-store` is set to `true` (On Linux only)
- `extra-nix-path` is set to `nixpkgs=flake:nixpkgs`
- `max-jobs` is set to `auto`
* `extra-nix-path` is set to `nixpkgs=flake:nixpkgs`
* `max-jobs` is set to `auto`
- KVM is enabled by default.
- an installation receipt (for uninstalling) is stored at `/nix/receipt.json` as well as a copy of the install binary at `/nix/nix-installer`
- `nix-channel --update` is not run, `~/.nix-channels` is not provisioned
@@ -100,7 +96,7 @@ Differing from the upstream [Nix](https://github.com/NixOS/nix) installer script
| Parameter | Description | Type | Default |
| :---------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------- | :------------------------------------------------------------- |
| `backtrace` | The setting for [`RUST_BACKTRACE`][backtrace] | string | |
| `determinate` | Whether to install [Determinate Nix](https://determinate.systems/enterprise) and log in to FlakeHub for private Flakes and binary caches. | Boolean | `true` |
| `determinate` | Whether to install [Determinate Nix](https://determinate.systems/enterprise) and log in to FlakeHub for private Flakes and binary caches. | Boolean | `false` |
| `extra-args` | Extra arguments to pass to the planner (prefer using structured `with:` arguments unless using a custom [planner]!) | string | |
| `extra-conf` | Extra configuration lines for `/etc/nix/nix.conf` (includes `access-tokens` with `secrets.GITHUB_TOKEN` automatically if `github-token` is set) | string | |
| `flakehub` | Deprecated. Implies `determinate`. | Boolean | `false` |
@@ -132,32 +128,15 @@ Differing from the upstream [Nix](https://github.com/NixOS/nix) installer script
| `reinstall` | Force a reinstall if an existing installation is detected (consider backing up `/nix/store`) | Boolean | `false` |
| `start-daemon` | If the daemon should be started, requires `planner: linux-multi` | Boolean | `false` |
| `trust-runner-user` | Whether to make the runner user trusted by the Nix daemon | Boolean | `true` |
| `summarize` | Whether to add a build summary and timeline chart to the GitHub job summary | Boolean | `true` |
| `diagnostic-endpoint` | Diagnostic endpoint url where the installer sends install [diagnostic reports](https://github.com/DeterminateSystems/nix-installer#diagnostics) to, to disable set this to an empty string | string | `https://install.determinate.systems/nix-installer/diagnostic` |
| `proxy` | The proxy to use (if any), valid proxy bases are `https://$URL`, `http://$URL` and `socks5://$URL` | string | |
| `ssl-cert-file` | An SSL cert to use (if any), used for fetching Nix and sets `NIX_SSL_CERT_FILE` for Nix | string | |
## Installing upstream Nix
Although Determinate Nix is the default, you can also use this Action to install [upstream Nix][upstream].
Make sure to set `determinate: false` in the Action's configuration:
```yaml
- uses: DeterminateSystems/nix-installer-action@main
with:
determinate: false
```
This option will be available until **January 1, 2026**, at which point installing upstream Nix using this Action will no longer be possible.
[apfs]: https://en.wikipedia.org/wiki/Apple_File_System
[backtrace]: https://doc.rust-lang.org/std/backtrace/index.html#environment-variables
[dependabot-actions]: https://github.com/DeterminateSystems/determinate-nix-action?tab=readme-ov-file#-automate-updates-with-dependabot
[det-nix]: https://docs.determinate.systems/determinate-nix
[determinate-nix-action]: https://github.com/DeterminateSystems/determinate-nix-action
[github token]: https://docs.github.com/en/actions/security-guides/automatic-token-authentication
[installer]: https://github.com/DeterminateSystems/nix-installer
[planner]: https://github.com/determinateSystems/nix-installer#usage
[profile]: https://nixos.org/manual/nix/stable/package-management/profiles
[tracing directives]: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives
[upstream]: https://github.com/NixOS/nix
+2 -5
View File
@@ -10,7 +10,7 @@ inputs:
determinate:
description: |
Whether to install [Determinate Nix](https://determinate.systems/enterprise) and log in to FlakeHub for private Flakes and binary caches.
default: true
default: false
extra-args:
description: Extra args to pass to the planner (prefer using structured `with:` arguments unless using a custom planner!)
required: false
@@ -126,9 +126,6 @@ inputs:
trust-runner-user:
description: Whether to make the runner user trusted by the Nix daemon
default: true
summarize:
description: Whether to add a build summary and timeline chart to the GitHub job summary
default: true
nix-installer-branch:
description: (deprecated) The branch of `nix-installer` to use (conflicts with `nix-installer-tag`, `nix-installer-revision`, `nix-installer-pr`)
required: false
@@ -150,6 +147,6 @@ inputs:
default: false
runs:
using: "node24"
using: "node20"
main: "dist/index.js"
post: "dist/index.js"
Generated Vendored
+77199 -90116
View File
File diff suppressed because one or more lines are too long
Generated
+22 -7
View File
@@ -1,21 +1,36 @@
{
"nodes": {
"nixpkgs": {
"flake-schemas": {
"locked": {
"lastModified": 1777954456,
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
"revCount": 992384,
"lastModified": 1693491534,
"narHash": "sha256-ifw8Td8kD08J8DxFbYjeIx5naHcDLz7s2IFP3X42I/U=",
"rev": "c702cbb663d6d70bbb716584a2ee3aeb35017279",
"revCount": 21,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.992384%2Brev-549bd84d6279f9852cae6225e372cc67fb91a4c1/019df915-70b5-73a2-a5a4-63c620b45d9f/source.tar.gz"
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.1/018a4c59-80e1-708a-bb4d-854930c20f72/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/0.1"
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A.tar.gz"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1696879762,
"narHash": "sha256-Ud6bH4DMcYHUDKavNMxAhcIpDGgHMyL/yaDEAVSImQY=",
"rev": "f99e5f03cc0aa231ab5950a15ed02afec45ed51a",
"revCount": 534224,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.534224%2Brev-f99e5f03cc0aa231ab5950a15ed02afec45ed51a/018b1d3c-12f0-76a5-b796-7668d7633f08/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/0.1.0.tar.gz"
}
},
"root": {
"inputs": {
"flake-schemas": "flake-schemas",
"nixpkgs": "nixpkgs"
}
}
+20 -34
View File
@@ -2,44 +2,30 @@
{
description = "Development environment for the Nix Installer action for GitHub.";
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1";
inputs = {
flake-schemas.url = "https://flakehub.com/f/DeterminateSystems/flake-schemas/*.tar.gz";
nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.0.tar.gz";
};
outputs =
{ self, ... }@inputs:
outputs = { self, flake-schemas, nixpkgs }:
let
supportedSystems = [
"x86_64-linux"
"aarch64-darwin"
];
forEachSupportedSystem =
f:
inputs.nixpkgs.lib.genAttrs supportedSystems (
system:
f {
inherit system;
pkgs = import inputs.nixpkgs { inherit system; };
}
);
supportedSystems = [ "x86_64-linux" "aarch64-darwin" "aarch64-linux" "x86_64-darwin" ];
forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f {
pkgs = import nixpkgs { inherit system; };
});
in
{
devShells = forEachSupportedSystem (
{ pkgs, system }:
{
default = pkgs.mkShell {
packages = with pkgs; [
nodejs_latest
self.formatter.${system}
schemas = flake-schemas.schemas;
# Keep people from accidentally running pnpm
(writeScriptBin "pnpm" ''
echo "pnpm is no longer used in this repo; use npm instead"
exit 1
'')
];
};
}
);
formatter = forEachSupportedSystem ({ pkgs, ... }: pkgs.nixfmt);
devShells = forEachSupportedSystem ({ pkgs }: {
default = pkgs.mkShell {
packages = with pkgs; [
nodejs_latest
nixpkgs-fmt
nodePackages_latest.pnpm
nodePackages_latest.typescript-language-server
];
};
});
};
}
-8097
View File
File diff suppressed because it is too large Load Diff
+14 -14
View File
@@ -12,7 +12,7 @@
"lint": "eslint src/**/*.ts",
"package": "ncc build",
"test": "vitest --watch false",
"all": "npm run test && npm run format && npm run lint && npm run build && npm run package"
"all": "pnpm run test && pnpm run format && pnpm run lint && pnpm run build && pnpm run package"
},
"repository": {
"type": "git",
@@ -26,27 +26,27 @@
},
"homepage": "https://github.com/DeterminateSystems/nix-installer-action#readme",
"dependencies": {
"@actions/core": "^3.0.0",
"@actions/exec": "^3.0.0",
"@actions/github": "^9.0.0",
"detsys-ts": "github:DeterminateSystems/detsys-ts",
"got": "^14.6.6",
"@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1",
"@actions/github": "^6.0.1",
"detsys-ts": "github:DeterminateSystems/detsys-ts#gustavderdrache/write-correlation",
"got": "^14.4.7",
"string-argv": "^0.3.2",
"vitest": "^3.2.4"
"vitest": "^3.2.0"
},
"devDependencies": {
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/node": "^20.19.37",
"@types/node": "^20.17.57",
"@types/uuid": "^9.0.8",
"@typescript-eslint/eslint-plugin": "^7.18.0",
"@vercel/ncc": "^0.38.4",
"@vercel/ncc": "^0.38.3",
"eslint": "^8.57.1",
"eslint-import-resolver-typescript": "^3.10.1",
"eslint-plugin-github": "^4.10.2",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-prettier": "^5.5.5",
"prettier": "^3.8.1",
"tsup": "^8.5.1",
"typescript": "^5.9.3"
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-prettier": "^5.4.1",
"prettier": "^3.5.3",
"tsup": "^8.5.0",
"typescript": "^5.8.3"
}
}
+6399
View File
File diff suppressed because it is too large Load Diff
+15 -96
View File
@@ -12,7 +12,7 @@ import got from "got";
import { setTimeout } from "node:timers/promises";
import { getFixHashes } from "./fixHashes.js";
import { annotateMismatches } from "./annotate.js";
import { DEvent, getRecentEvents } from "./events.js";
import { getRecentEvents } from "./events.js";
import { makeMermaidReport } from "./mermaid.js";
import { summarizeFailures } from "./failuresummary.js";
import { SpawnOptions, spawn } from "node:child_process";
@@ -20,15 +20,12 @@ import { SpawnOptions, spawn } from "node:child_process";
// Nix installation events
const EVENT_INSTALL_NIX_FAILURE = "install_nix_failure";
const EVENT_INSTALL_NIX_START = "install_nix_start";
const EVENT_INSTALL_NIX_SUCCESS = "install_nix_success";
const EVENT_INSTALL_NIX_SUCCESS = "install_nix_start";
const EVENT_SETUP_KVM = "setup_kvm";
const EVENT_UNINSTALL_NIX = "uninstall";
// FlakeHub events
const EVENT_LOGIN_START = "flakehub-login:start";
const EVENT_LOGIN_FAILURE = "flakehub-login:failure";
const EVENT_LOGIN_SUCCESS = "flakehub-login:success";
const EVENT_LOGIN_END = "flakehub-login:end";
const EVENT_LOGIN_TO_FLAKEHUB = "login_to_flakehub";
// Other events
const EVENT_CONCLUDE_JOB = "conclude_job";
@@ -48,7 +45,6 @@ const FACT_SENT_SIGTERM = "sent_sigterm";
// Flags
const FLAG_DETERMINATE = "--determinate";
const FLAG_PREFER_UPSTREAM_NIX = "--prefer-upstream-nix";
// Pre/post state keys
const STATE_DAEMONDIR = "DNI_DAEMONDIR";
@@ -88,23 +84,8 @@ class NixInstallerAction extends DetSysAction {
startDaemon: boolean;
trustRunnerUser: boolean;
runnerOs: string | undefined;
summarize: boolean;
constructor() {
if (platform.getArchOs() === "X64-macOS") {
// Holy guacamole this is ugly
actionsCore.error(
"Determinate Nix Installer no longer supports macOS on Intel. Please migrate to Apple Silicon, and use Nix's built-in Rosetta support to build for Intel. See: https://github.com/DeterminateSystems/nix-src/issues/224",
);
const sourceTag = inputs.getStringOrUndefined("source-tag");
if (sourceTag === undefined) {
actionsCore.notice(
"Pinning the installer tag to v3.12.2 (the last version to support Intel Macs) as a temporary fallback.",
);
process.env["INPUT_SOURCE-TAG"] = "v3.12.2";
}
}
super({
name: "nix-installer",
fetchStyle: "nix-style",
@@ -153,27 +134,24 @@ class NixInstallerAction extends DetSysAction {
this.reinstall = inputs.getBool("reinstall");
this.startDaemon = inputs.getBool("start-daemon");
this.trustRunnerUser = inputs.getBool("trust-runner-user");
this.summarize = inputs.getBool("summarize");
this.runnerOs = process.env["RUNNER_OS"];
}
async main(): Promise<void> {
actionsCore.saveState(STATE_START_DATETIME, new Date().toISOString());
await this.scienceDebugFly();
await this.detectAndForceNoSystemd();
await this.install();
actionsCore.saveState(STATE_START_DATETIME, new Date().toISOString());
}
async post(): Promise<void> {
await this.annotateMismatches();
if (this.summarize) {
try {
await this.summarizeExecution();
} catch (err: unknown) {
this.recordEvent("summarize-execution:error", {
exception: stringifyError(err),
});
}
try {
await this.summarizeExecution();
} catch (err: unknown) {
this.recordEvent("summarize-execution:error", {
exception: stringifyError(err),
});
}
await this.cleanupNoSystemd();
await this.reportOverall();
@@ -304,7 +282,7 @@ class NixInstallerAction extends DetSysAction {
}
if (this.nixBuildUserBase !== null) {
executionEnv.NIX_INSTALLER_NIX_BUILD_USER_ID_BASE = `${this.nixBuildUserBase}`;
executionEnv.NIX_INSTALLER_NIX_BUILD_USER_ID_BASE = `${this.nixBuildUserCount}`;
}
if (this.nixPackageUrl !== null) {
@@ -396,7 +374,6 @@ class NixInstallerAction extends DetSysAction {
}
extraConf += "\n";
}
extraConf += `build-provenance-tags = ${JSON.stringify(this.getBuildProvenanceTags())}\n`;
if (this.extraConf !== null && this.extraConf.length !== 0) {
extraConf += this.extraConf.join("\n");
extraConf += "\n";
@@ -422,26 +399,6 @@ class NixInstallerAction extends DetSysAction {
return executionEnv;
}
getBuildProvenanceTags(): Record<string, string> {
const mapping = {
GITHUB_WORKFLOW_REF: "github_workflow_ref",
GITHUB_WORKFLOW_SHA: "github_workflow_sha",
GITHUB_SHA: "github_sha",
GITHUB_RUN_ATTEMPT: "github_run_attempt",
GITHUB_RUN_ID: "github_run_id",
GITHUB_RUN_NUMBER: "github_run_number",
GITHUB_JOB: "github_job",
GITHUB_REF: "github_ref",
GITHUB_REPOSITORY: "github_repository",
GITHUB_SERVER_URL: "github_server_url",
};
const tags = Object.entries(mapping)
.map(([sourceKey, targetKey]) => [targetKey, process.env[sourceKey]])
.filter(([_, value]) => value !== undefined);
return { ...Object.fromEntries(tags), builder: "github-actions" };
}
private get installerArgs(): string[] {
const args = ["install"];
@@ -472,8 +429,6 @@ class NixInstallerAction extends DetSysAction {
if (this.extraArgs && !this.extraArgs.includes(FLAG_DETERMINATE)) {
args.push(FLAG_DETERMINATE);
}
} else {
args.push(FLAG_PREFER_UPSTREAM_NIX);
}
return args;
@@ -661,8 +616,6 @@ class NixInstallerAction extends DetSysAction {
const startDate = new Date(actionsCore.getState(STATE_START_DATETIME));
const { events, hasMismatches } = await getRecentEvents(startDate);
await this.reportPassFailCount(events);
const mermaidSummary = makeMermaidReport(events);
const failureSummary = await summarizeFailures(events);
@@ -713,29 +666,6 @@ class NixInstallerAction extends DetSysAction {
}
}
async reportPassFailCount(events: DEvent[]): Promise<void> {
let built = 0;
let failed = 0;
let unknown = 0;
for (const event of events) {
switch (event.c) {
case "BuiltPathResponseEventV1":
built++;
break;
case "BuildFailureResponseEventV1":
failed++;
break;
default:
unknown++;
}
}
this.addFact("nix_builds_succeeded", built);
this.addFact("nix_builds_failed", failed);
this.addFact("nix_builds_unknown_event", unknown);
}
async setGithubPath(): Promise<void> {
// Interim versions of the `nix-installer` crate may have already manipulated `$GITHUB_PATH`, as root even! Accessing that will be an error.
try {
@@ -760,8 +690,6 @@ class NixInstallerAction extends DetSysAction {
}
async flakehubLogin(): Promise<void> {
this.recordEvent(EVENT_LOGIN_START);
const canLogin =
process.env["ACTIONS_ID_TOKEN_REQUEST_URL"] &&
process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"];
@@ -772,20 +700,14 @@ class NixInstallerAction extends DetSysAction {
const head = pr?.head?.repo?.full_name;
if (pr && base !== head) {
this.recordEvent(EVENT_LOGIN_FAILURE, { reason: "fork" });
this.recordEvent(EVENT_LOGIN_END);
actionsCore.info(
`FlakeHub is disabled because this is a fork. GitHub Actions does not allow OIDC authentication from forked repositories ("${head}" is not from the same repository as "${base}").`,
`Not logging in to FlakeHub: GitHub Actions does not allow OIDC authentication from forked repositories ("${head}" is not the same repository as "${base}").`,
);
return;
}
this.recordEvent(EVENT_LOGIN_FAILURE, { reason: "not-configured" });
this.recordEvent(EVENT_LOGIN_END);
actionsCore.info(
"FlakeHub is disabled because the workflow is misconfigured. Please make sure that `id-token: write` and `contents: read` are set for this step's (or job's) permissions so that GitHub Actions provides OIDC token endpoints.",
`Not logging in to FlakeHub: GitHub Actions has not provided OIDC token endpoints; please make sure that \`id-token: write\` and \`contents: read\` are set for this step's (or job's) permissions.`,
);
actionsCore.info(
`For more information, see https://docs.determinate.systems/guides/github-actions/#nix-installer-action`,
@@ -794,18 +716,15 @@ class NixInstallerAction extends DetSysAction {
}
actionsCore.startGroup("Logging in to FlakeHub");
this.recordEvent(EVENT_LOGIN_TO_FLAKEHUB);
try {
await actionsExec.exec(`determinate-nixd`, ["login", "github-action"]);
this.recordEvent(EVENT_LOGIN_SUCCESS);
} catch (e: unknown) {
actionsCore.warning(`FlakeHub Login failure: ${stringifyError(e)}`);
this.recordEvent(EVENT_LOGIN_FAILURE, {
reason: "failed",
this.recordEvent("flakehub-login:failure", {
exception: stringifyError(e),
});
}
this.recordEvent(EVENT_LOGIN_END);
actionsCore.endGroup();
}
+1 -1
View File
@@ -5,7 +5,7 @@ export default defineConfig({
name,
entry: ["src/index.ts"],
format: ["esm"],
target: "node24",
target: "node20",
bundle: true,
splitting: false,
clean: true,
-5
View File
@@ -1,5 +0,0 @@
export default {
test: {
exclude: ["**/node_modules/**", "**/.direnv/**"],
},
};