diff --git a/dist/main/index.js b/dist/main/index.js index 652f280b..66aa2977 100644 --- a/dist/main/index.js +++ b/dist/main/index.js @@ -7754,6 +7754,8 @@ var PushMode; (function (PushMode) { // Disable pushing entirely. PushMode["None"] = "None"; + // Push paths provided via the `pathsToPush` input. + PushMode["PushPaths"] = "PushPaths"; // Scans the entire store during the pre- and post-hooks and uploads the difference. // This is a very simple method and is likely to work in any environment. // There are two downsides: @@ -7821,7 +7823,10 @@ async function setup() { // Determine the push mode to use let pushMode = PushMode.None; if (hasPushTokens && !skipPush) { - if (useDaemon) { + if (pathsToPush) { + pushMode = PushMode.PushPaths; + } + else if (useDaemon) { let supportsDaemonInterface = (cachixVersion) ? semver_1.default.gte(cachixVersion, '1.7.0') : false; let supportsPostBuildHook = await isTrustedUser(); if (!supportsDaemonInterface) { @@ -7895,6 +7900,10 @@ async function upload() { } break; } + case PushMode.PushPaths: { + await exec.exec(cachixBin, ["push", cachixArgs, name, pathsToPush]); + break; + } case PushMode.Daemon: { const daemonDir = process.env[ENV_CACHIX_DAEMON_DIR]; if (!daemonDir) { @@ -7921,7 +7930,7 @@ async function upload() { break; } case PushMode.StoreScan: { - await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, pathsToPush, pushFilter]); + await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, pushFilter]); break; } } diff --git a/dist/main/push-paths.sh b/dist/main/push-paths.sh index 5a565fba..16c08a74 100755 --- a/dist/main/push-paths.sh +++ b/dist/main/push-paths.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -euo pipefail -cachix=$1 cachixArgs=${2:--j8} cache=$3 pathsToPush=$4 pushFilter=$5 +cachix=$1 cachixArgs=${2:--j8} cache=$3 pushFilter=$4 filterPaths() { local regex=$1 @@ -12,12 +12,10 @@ filterPaths() { done | xargs } -if [[ -z $pathsToPush ]]; then - pathsToPush=$(comm -13 <(sort /tmp/store-path-pre-build) <("$(dirname "$0")"/list-nix-store.sh)) +pathsToPush=$(comm -13 <(sort /tmp/store-path-pre-build) <("$(dirname "$0")"/list-nix-store.sh)) - if [[ -n $pushFilter ]]; then - pathsToPush=$(filterPaths $pushFilter "$pathsToPush") - fi +if [[ -n $pushFilter ]]; then + pathsToPush=$(filterPaths $pushFilter "$pathsToPush") fi echo "$pathsToPush" | "$cachix" push $cachixArgs "$cache" diff --git a/src/main.ts b/src/main.ts index 82598840..de6f5d00 100644 --- a/src/main.ts +++ b/src/main.ts @@ -30,6 +30,8 @@ const ENV_CACHIX_DAEMON_DIR = 'CACHIX_DAEMON_DIR'; enum PushMode { // Disable pushing entirely. None = 'None', + // Push paths provided via the `pathsToPush` input. + PushPaths = 'PushPaths', // Scans the entire store during the pre- and post-hooks and uploads the difference. // This is a very simple method and is likely to work in any environment. // There are two downsides: @@ -107,7 +109,9 @@ async function setup() { let pushMode = PushMode.None; if (hasPushTokens && !skipPush) { - if (useDaemon) { + if (pathsToPush) { + pushMode = PushMode.PushPaths; + } else if (useDaemon) { let supportsDaemonInterface = (cachixVersion) ? semver.gte(cachixVersion, '1.7.0') : false; let supportsPostBuildHook = await isTrustedUser(); @@ -169,6 +173,7 @@ async function setup() { break; } + case PushMode.StoreScan: { // Remember existing store paths await exec.exec("sh", ["-c", `${__dirname}/list-nix-store.sh > /tmp/store-path-pre-build`]); @@ -200,6 +205,12 @@ async function upload() { break; } + + case PushMode.PushPaths: { + await exec.exec(cachixBin, ["push", cachixArgs, name, pathsToPush]); + break; + } + case PushMode.Daemon: { const daemonDir = process.env[ENV_CACHIX_DAEMON_DIR]; @@ -233,7 +244,7 @@ async function upload() { } case PushMode.StoreScan: { - await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, pathsToPush, pushFilter]); + await exec.exec(`${__dirname}/push-paths.sh`, [cachixBin, cachixArgs, name, pushFilter]); break; } }