diff --git a/modules/arion/default.nix b/modules/arion/default.nix index 41da620f..c132960d 100644 --- a/modules/arion/default.nix +++ b/modules/arion/default.nix @@ -103,17 +103,24 @@ in { runtimeInputs = [ (writeShellApplication { name = "pullImage"; - runtimeInputs = [nix-prefetch-docker]; + runtimeInputs = [nix-prefetch-docker skopeo]; text = '' FILE="$1" IMAGE=$(sed -n 's/.*imageName = "\([^"]*\).*/\1/p' "$FILE") TAG=$(sed -n 's/.*finalImageTag = "\([^"]*\).*/\1/p' "$FILE") + CURRENT_DIGEST=$(sed -n 's/.*imageDigest = "\([^"]*\).*/\1/p' "$FILE") + NEW_DIGEST=$(skopeo inspect "docker://$IMAGE:$TAG" | jq '.Digest' -r) + echo "$IMAGE $TAG" if ! grep "Locked" "$FILE"; then - PREFETCH=$(nix-prefetch-docker "$IMAGE" "$TAG") - echo -e "pkgs:\npkgs.dockerTools.pullImage $PREFETCH" > "$FILE" + if [[ "$CURRENT_DIGEST" == "$NEW_DIGEST" ]]; then + echo "Already up-to-date" + else + PREFETCH=$(nix-prefetch-docker "$IMAGE" "$TAG") + echo -e "pkgs:\npkgs.dockerTools.pullImage $PREFETCH" > "$FILE" + fi fi ''; })