Skip to content

Commit 132bc97

Browse files
authored
Merge pull request #183 from cachix/fix-179
store-scan: improve error handling when listing the store fails
2 parents 991af99 + 662a883 commit 132bc97

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

dist/main/index.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -7842,9 +7842,9 @@ async function setup() {
78427842
}
78437843
}
78447844
core.saveState('pushMode', pushMode);
7845+
const tmpdir = process.env['RUNNER_TEMP'] ?? os.tmpdir();
78457846
switch (pushMode) {
78467847
case PushMode.Daemon: {
7847-
const tmpdir = process.env['RUNNER_TEMP'] ?? os.tmpdir();
78487848
const daemonDir = await fs.mkdtemp(path.join(tmpdir, 'cachix-daemon-'));
78497849
const daemonLog = (0, node_fs_1.openSync)(`${daemonDir}/daemon.log`, 'a');
78507850
const daemon = (0, node_child_process_1.spawn)(cachixBin, [
@@ -7877,7 +7877,9 @@ async function setup() {
78777877
}
78787878
case PushMode.StoreScan: {
78797879
// Remember existing store paths
7880-
await exec.exec("sh", ["-c", `${__dirname}/list-nix-store.sh > /tmp/store-path-pre-build`]);
7880+
const preBuildPathsFile = `${tmpdir}/store-path-pre-build`;
7881+
core.saveState('preBuildPathsFile', preBuildPathsFile);
7882+
await exec.exec("sh", ["-c", `${__dirname}/list-nix-store.sh > ${preBuildPathsFile}`]);
78817883
break;
78827884
}
78837885
default:
@@ -7930,7 +7932,8 @@ async function upload() {
79307932
break;
79317933
}
79327934
case PushMode.StoreScan: {
7933-
await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, pushFilter]);
7935+
const preBuildPathsFile = core.getState('preBuildPathsFile');
7936+
await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, preBuildPathsFile, pushFilter]);
79347937
break;
79357938
}
79367939
}

dist/main/push-paths.sh

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4-
cachix=$1 cachixArgs=${2:--j8} cache=$3 pushFilter=$4
4+
cachix=$1 cachixArgs=${2:--j8} cache=$3 preBuildPathsFile=$4 pushFilter=$5
55

66
filterPaths() {
77
local regex=$1
@@ -12,10 +12,21 @@ filterPaths() {
1212
done | xargs
1313
}
1414

15-
pathsToPush=$(comm -13 <(sort /tmp/store-path-pre-build) <("$(dirname "$0")"/list-nix-store.sh))
15+
pathsToPush=""
16+
preBuildPaths=$(sort "$preBuildPathsFile")
17+
if [ $? -eq 0 ]; then
18+
postBuildPaths=$("$(dirname "$0")"/list-nix-store.sh | sort)
19+
if [ $? -eq 0 ]; then
20+
pathsToPush=$(comm -13 <(echo "$preBuildPaths") <(echo "$postBuildPaths"))
21+
else
22+
echo "::error::Failed to list post-build store paths."
23+
fi
24+
else
25+
printf "::error::Failed to find pre-build store paths. Expected cached paths in %s\n" "$preBuildPathsFile"
26+
fi
1627

1728
if [[ -n $pushFilter ]]; then
18-
pathsToPush=$(filterPaths $pushFilter "$pathsToPush")
29+
pathsToPush=$(filterPaths $pushFilter "$pathsToPush")
1930
fi
2031

2132
echo "$pathsToPush" | "$cachix" push $cachixArgs "$cache"

src/main.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,10 @@ async function setup() {
130130

131131
core.saveState('pushMode', pushMode);
132132

133+
const tmpdir = process.env['RUNNER_TEMP'] ?? os.tmpdir();
134+
133135
switch (pushMode) {
134136
case PushMode.Daemon: {
135-
const tmpdir = process.env['RUNNER_TEMP'] ?? os.tmpdir();
136137
const daemonDir = await fs.mkdtemp(path.join(tmpdir, 'cachix-daemon-'));
137138
const daemonLog = openSync(`${daemonDir}/daemon.log`, 'a');
138139

@@ -176,7 +177,9 @@ async function setup() {
176177

177178
case PushMode.StoreScan: {
178179
// Remember existing store paths
179-
await exec.exec("sh", ["-c", `${__dirname}/list-nix-store.sh > /tmp/store-path-pre-build`]);
180+
const preBuildPathsFile = `${tmpdir}/store-path-pre-build`;
181+
core.saveState('preBuildPathsFile', preBuildPathsFile);
182+
await exec.exec("sh", ["-c", `${__dirname}/list-nix-store.sh > ${preBuildPathsFile}`]);
180183
break;
181184
}
182185

@@ -244,7 +247,8 @@ async function upload() {
244247
}
245248

246249
case PushMode.StoreScan: {
247-
await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, pushFilter]);
250+
const preBuildPathsFile = core.getState('preBuildPathsFile');
251+
await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, preBuildPathsFile, pushFilter]);
248252
break;
249253
}
250254
}

0 commit comments

Comments
 (0)