Merge pull request #4 from DeterminateSystems/fetch-closure

Fetch the magic-nix-cache closure from S3
This commit is contained in:
Eelco Dolstra 2024-01-09 19:04:06 +01:00 committed by GitHub
commit 574d324eb5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 43 deletions

View file

@ -48,18 +48,35 @@ jobs:
run: | run: |
.github/workflows/cache-test.sh .github/workflows/cache-test.sh
# run-x86_64-darwin: run-x86_64-darwin:
# name: Run x86_64 Darwin name: Run x86_64 Darwin
# runs-on: macos-12 runs-on: macos-12
# steps: steps:
# - uses: actions/checkout@v3 - uses: actions/checkout@v3
# - name: Install Nix - name: Install Nix
# uses: DeterminateSystems/nix-installer-action@main uses: DeterminateSystems/nix-installer-action@main
# with: with:
# extra-conf: | extra-conf: |
# narinfo-cache-negative-ttl = 0 narinfo-cache-negative-ttl = 0
# - name: Cache the store - name: Cache the store
# uses: ./ uses: ./
# - name: Check the cache for liveness - name: Check the cache for liveness
# run: | run: |
# .github/workflows/cache-test.sh .github/workflows/cache-test.sh
run-aarch64-darwin:
name: Run aarch64 Darwin
concurrency: build-ARM64-macOS
runs-on: macos-latest-xlarge
steps:
- uses: actions/checkout@v3
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
narinfo-cache-negative-ttl = 0
- name: Cache the store
uses: ./
- name: Check the cache for liveness
run: |
.github/workflows/cache-test.sh

View file

@ -23,7 +23,7 @@ inputs:
source-pr: source-pr:
description: The PR of `magic-nix-cache` to use. Conflicts with all other `source-*` options. description: The PR of `magic-nix-cache` to use. Conflicts with all other `source-*` options.
required: false required: false
default: 3 default: 8
source-revision: source-revision:
description: The revision of `nix-magic-nix-cache` to use. Conflicts with all other `source-*` options. description: The revision of `nix-magic-nix-cache` to use. Conflicts with all other `source-*` options.
required: false required: false

20
dist/index.js generated vendored
View file

@ -2,9 +2,8 @@ import * as fs$2 from 'node:fs/promises';
import * as os$2 from 'node:os'; import * as os$2 from 'node:os';
import os__default from 'node:os'; import os__default from 'node:os';
import * as path$1 from 'node:path'; import * as path$1 from 'node:path';
import { spawn } from 'node:child_process'; import { spawn, exec } from 'node:child_process';
import { openSync, createWriteStream } from 'node:fs'; import { openSync } from 'node:fs';
import { pipeline } from 'node:stream/promises';
import { setTimeout as setTimeout$1 } from 'timers/promises'; import { setTimeout as setTimeout$1 } from 'timers/promises';
import { promisify as promisify$1, inspect } from 'node:util'; import { promisify as promisify$1, inspect } from 'node:util';
import require$$0 from 'os'; import require$$0 from 'os';
@ -12138,14 +12137,14 @@ function getCacherUrl() {
} }
return `${urlPrefix}/latest/${binarySuffix}`; return `${urlPrefix}/latest/${binarySuffix}`;
} }
async function fetchAutoCacher(destination) { async function fetchAutoCacher() {
const stream = createWriteStream(destination, {
encoding: "binary",
mode: 0o755,
});
const binary_url = getCacherUrl(); const binary_url = getCacherUrl();
coreExports.info(`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); const { stdout } = await promisify$1(exec)(`curl "${binary_url}" | xz -d | nix-store --import`);
const paths = stdout.split(os$2.EOL);
// Since the export is in reverse topologically sorted order, magic-nix-cache is always the penultimate entry in the list (the empty string left by split being the last).
const last_path = paths.at(-2);
return `${last_path}/bin/magic-nix-cache`;
} }
async function setUpAutoCache() { async function setUpAutoCache() {
const tmpdir = process.env['RUNNER_TEMP'] || os$2.tmpdir(); const tmpdir = process.env['RUNNER_TEMP'] || os$2.tmpdir();
@ -12167,8 +12166,7 @@ async function setUpAutoCache() {
daemonBin = coreExports.getInput('source-binary'); daemonBin = coreExports.getInput('source-binary');
} }
else { else {
daemonBin = `${daemonDir}/magic-nix-cache`; daemonBin = await fetchAutoCacher();
await fetchAutoCacher(daemonBin);
} }
var runEnv; var runEnv;
if (coreExports.isDebug()) { if (coreExports.isDebug()) {

View file

@ -3,11 +3,10 @@
import * as fs from 'node:fs/promises'; import * as fs from 'node:fs/promises';
import * as os from 'node:os'; import * as os from 'node:os';
import * as path from 'node:path'; import * as path from 'node:path';
import { spawn } from 'node:child_process'; import { spawn, exec } from 'node:child_process';
import { createWriteStream, openSync } from 'node:fs'; import { openSync } from 'node:fs';
import { pipeline } from 'node:stream/promises';
import { setTimeout } from 'timers/promises'; import { setTimeout } from 'timers/promises';
import { inspect } from 'node:util'; import { inspect, promisify } from 'node:util';
import * as core from '@actions/core'; import * as core from '@actions/core';
import { Tail } from 'tail'; import { Tail } from 'tail';
@ -59,19 +58,18 @@ function getCacherUrl() : string {
return `${urlPrefix}/latest/${binarySuffix}`; return `${urlPrefix}/latest/${binarySuffix}`;
} }
async function fetchAutoCacher(destination: string) { async function fetchAutoCacher() {
const stream = createWriteStream(destination, {
encoding: "binary",
mode: 0o755,
});
const binary_url = getCacherUrl(); const binary_url = getCacherUrl();
core.info(`Fetching the Magic Nix Cache from ${binary_url}`); core.info(`Fetching the Magic Nix Cache from ${binary_url}`);
return pipeline( const { stdout } = await promisify(exec)(`curl "${binary_url}" | xz -d | nix-store --import`);
gotClient.stream(binary_url),
stream const paths = stdout.split(os.EOL);
);
// Since the export is in reverse topologically sorted order, magic-nix-cache is always the penultimate entry in the list (the empty string left by split being the last).
const last_path = paths.at(-2);
return `${last_path}/bin/magic-nix-cache`;
} }
async function setUpAutoCache() { async function setUpAutoCache() {
@ -98,8 +96,7 @@ async function setUpAutoCache() {
if (core.getInput('source-binary')) { if (core.getInput('source-binary')) {
daemonBin = core.getInput('source-binary'); daemonBin = core.getInput('source-binary');
} else { } else {
daemonBin = `${daemonDir}/magic-nix-cache`; daemonBin = await fetchAutoCacher();
await fetchAutoCacher(daemonBin);
} }
var runEnv; var runEnv;