diff --git a/action.yml b/action.yml index 2aa828b..dc1e7a3 100644 --- a/action.yml +++ b/action.yml @@ -4,6 +4,10 @@ branding: color: "purple" description: "Free, no-configuration Nix cache. Cut CI time by 50% or more by caching to GitHub Actions' cache." inputs: + use-gha-cache: + description: "Whether to upload build results to the GitHub Actions cache." + default: true + required: false listen: description: The host and port to listen on. default: 127.0.0.1:37515 @@ -19,6 +23,7 @@ inputs: source-pr: description: The PR of `magic-nix-cache` to use. Conflicts with all other `source-*` options. required: false + default: 1 source-revision: description: The revision of `nix-magic-nix-cache` to use. Conflicts with all other `source-*` options. required: false @@ -31,6 +36,16 @@ inputs: diagnostic-endpoint: description: "Diagnostic endpoint url where diagnostics and performance data is sent. To disable set this to an empty string." default: "https://install.determinate.systems/magic-nix-cache/perf" + use-flakehub: + description: "Whether to upload build results to FlakeHub." + default: true + required: false + flakehub-cache-server: + description: "The FlakeHub binary cache server." + default: "https://attic-test.fly.dev" + flakehub-api-server: + description: "The FlakeHub API server." + default: "https://api.flakehub.com" runs: using: "node16" diff --git a/bun.lockb b/bun.lockb index 93764e1..5f50faf 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/dist/index.js b/dist/index.js index 31fc9e6..4256df1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3,7 +3,7 @@ import * as os$2 from 'node:os'; import os__default from 'node:os'; import * as path$1 from 'node:path'; import { spawn } from 'node:child_process'; -import { openSync, writeSync, close, createWriteStream } from 'node:fs'; +import { openSync, createWriteStream } from 'node:fs'; import { pipeline } from 'node:stream/promises'; import { setTimeout as setTimeout$1 } from 'timers/promises'; import { promisify as promisify$1, inspect } from 'node:util'; @@ -12120,7 +12120,7 @@ function getCacherUrl() { const runnerArch = process.env.RUNNER_ARCH; const runnerOs = process.env.RUNNER_OS; const binarySuffix = `${runnerArch}-${runnerOs}`; - const urlPrefix = `https://install.determinate.systems/magic-nix-cache`; + const urlPrefix = `https://magic-nix-cache-priv20231208150408868500000001.s3.us-east-2.amazonaws.com`; if (coreExports.getInput('source-url')) { return coreExports.getInput('source-url'); } @@ -12128,7 +12128,7 @@ function getCacherUrl() { return `${urlPrefix}/tag/${coreExports.getInput('source-tag')}/${binarySuffix}`; } if (coreExports.getInput('source-pr')) { - return `${urlPrefix}/pr/${coreExports.getInput('source-pr')}/${binarySuffix}`; + return `${urlPrefix}/pr_${coreExports.getInput('source-pr')}/magic-nix-cache-${binarySuffix}`; } if (coreExports.getInput('source-branch')) { return `${urlPrefix}/branch/${coreExports.getInput('source-branch')}/${binarySuffix}`; @@ -12144,7 +12144,7 @@ async function fetchAutoCacher(destination) { mode: 0o755, }); const binary_url = getCacherUrl(); - coreExports.debug(`Fetching the Magic Nix Cache from ${binary_url}`); + coreExports.info(`Fetching the Magic Nix Cache from ${binary_url}`); return pipeline(gotClient.stream(binary_url), stream); } async function setUpAutoCache() { @@ -12181,35 +12181,41 @@ async function setUpAutoCache() { else { runEnv = process.env; } - const output = openSync(`${daemonDir}/parent.log`, 'a'); + const outputPath = `${daemonDir}/parent.log`; + const output = openSync(outputPath, 'a'); const launch = spawn(daemonBin, [ '--daemon-dir', daemonDir, '--listen', coreExports.getInput('listen'), '--upstream', coreExports.getInput('upstream-cache'), - '--diagnostic-endpoint', coreExports.getInput('diagnostic-endpoint') - ], { + '--diagnostic-endpoint', coreExports.getInput('diagnostic-endpoint'), + '--nix-conf', `${process.env["HOME"]}/.config/nix/nix.conf` + ].concat(coreExports.getInput('use-flakehub') === 'true' ? [ + '--use-flakehub', + '--flakehub-cache-server', coreExports.getInput('flakehub-cache-server'), + '--flakehub-api-server', coreExports.getInput('flakehub-api-server'), + '--flakehub-api-server-netrc', path$1.join(process.env['RUNNER_TEMP'], 'determinate-nix-installer-netrc'), + ] : []).concat(coreExports.getInput('use-gha-cache') === 'true' ? [ + '--use-gha-cache' + ] : []), { stdio: ['ignore', output, output], env: runEnv }); await new Promise((resolve, reject) => { - launch.on('exit', (code, signal) => { + launch.on('exit', async (code, signal) => { + const log = await fs$2.readFile(outputPath, 'utf-8'); + console.log(log); if (signal) { - reject(new Error(`Daemon was killed by signal ${signal}`)); + reject(new Error(`Daemon was killed by signal ${signal}: ${log}`)); } else if (code) { - reject(new Error(`Daemon exited with code ${code}`)); + reject(new Error(`Daemon exited with code ${code}: ${log}`)); } else { resolve(); } }); }); - await fs$2.mkdir(`${process.env["HOME"]}/.config/nix`, { recursive: true }); - const nixConf = openSync(`${process.env["HOME"]}/.config/nix/nix.conf`, 'a'); - writeSync(nixConf, `${"\n"}extra-substituters = http://${coreExports.getInput('listen')}/?trusted=1&compression=zstd¶llel-compression=true${"\n"}`); - writeSync(nixConf, `fallback = true${"\n"}`); - close(nixConf); - coreExports.debug('Launched Magic Nix Cache'); + coreExports.info('Launched Magic Nix Cache'); coreExports.exportVariable(ENV_CACHE_DAEMONDIR, daemonDir); } async function notifyAutoCache() { diff --git a/src/index.ts b/src/index.ts index 1d6afaf..406f927 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,7 +4,7 @@ import * as fs from 'node:fs/promises'; import * as os from 'node:os'; import * as path from 'node:path'; import { spawn } from 'node:child_process'; -import { createWriteStream, openSync, writeSync, close } from 'node:fs'; +import { createWriteStream, openSync } from 'node:fs'; import { pipeline } from 'node:stream/promises'; import { setTimeout } from 'timers/promises'; import { inspect } from 'node:util'; @@ -34,7 +34,7 @@ function getCacherUrl() : string { const runnerArch = process.env.RUNNER_ARCH; const runnerOs = process.env.RUNNER_OS; const binarySuffix = `${runnerArch}-${runnerOs}`; - const urlPrefix = `https://install.determinate.systems/magic-nix-cache`; + const urlPrefix = `https://magic-nix-cache-priv20231208150408868500000001.s3.us-east-2.amazonaws.com`; if (core.getInput('source-url')) { return core.getInput('source-url'); @@ -45,7 +45,7 @@ function getCacherUrl() : string { } if (core.getInput('source-pr')) { - return `${urlPrefix}/pr/${core.getInput('source-pr')}/${binarySuffix}`; + return `${urlPrefix}/pr_${core.getInput('source-pr')}/magic-nix-cache-${binarySuffix}`; } if (core.getInput('source-branch')) { @@ -66,7 +66,7 @@ async function fetchAutoCacher(destination: string) { }); const binary_url = getCacherUrl(); - core.debug(`Fetching the Magic Nix Cache from ${binary_url}`); + core.info(`Fetching the Magic Nix Cache from ${binary_url}`); return pipeline( gotClient.stream(binary_url), @@ -113,15 +113,26 @@ async function setUpAutoCache() { runEnv = process.env; } - const output = openSync(`${daemonDir}/parent.log`, 'a'); + const outputPath = `${daemonDir}/parent.log`; + const output = openSync(outputPath, 'a'); const launch = spawn( daemonBin, [ '--daemon-dir', daemonDir, '--listen', core.getInput('listen'), '--upstream', core.getInput('upstream-cache'), - '--diagnostic-endpoint', core.getInput('diagnostic-endpoint') - ], + '--diagnostic-endpoint', core.getInput('diagnostic-endpoint'), + '--nix-conf', `${process.env["HOME"]}/.config/nix/nix.conf` + ].concat( + core.getInput('use-flakehub') === 'true' ? [ + '--use-flakehub', + '--flakehub-cache-server', core.getInput('flakehub-cache-server'), + '--flakehub-api-server', core.getInput('flakehub-api-server'), + '--flakehub-api-server-netrc', path.join(process.env['RUNNER_TEMP'], 'determinate-nix-installer-netrc'), + ] : []).concat( + core.getInput('use-gha-cache') === 'true' ? [ + '--use-gha-cache' + ] : []), { stdio: ['ignore', output, output], env: runEnv @@ -129,24 +140,20 @@ async function setUpAutoCache() { ); await new Promise((resolve, reject) => { - launch.on('exit', (code, signal) => { + launch.on('exit', async (code, signal) => { + const log: string = await fs.readFile(outputPath, 'utf-8'); + console.log(log); if (signal) { - reject(new Error(`Daemon was killed by signal ${signal}`)); + reject(new Error(`Daemon was killed by signal ${signal}: ${log}`)); } else if (code) { - reject(new Error(`Daemon exited with code ${code}`)); + reject(new Error(`Daemon exited with code ${code}: ${log}`)); } else { resolve(); } }); }); - await fs.mkdir(`${process.env["HOME"]}/.config/nix`, { recursive: true }); - const nixConf = openSync(`${process.env["HOME"]}/.config/nix/nix.conf`, 'a'); - writeSync(nixConf, `${"\n"}extra-substituters = http://${core.getInput('listen')}/?trusted=1&compression=zstd¶llel-compression=true${"\n"}`); - writeSync(nixConf, `fallback = true${"\n"}`); - close(nixConf); - - core.debug('Launched Magic Nix Cache'); + core.info('Launched Magic Nix Cache'); core.exportVariable(ENV_CACHE_DAEMONDIR, daemonDir); }