94 lines
2.6 KiB
Nix
94 lines
2.6 KiB
Nix
|
{ pkgs, lib, fluxLocal, ... }:
|
||
|
|
||
|
with pkgs;
|
||
|
|
||
|
writeShellApplication rec {
|
||
|
name = "flux-diff";
|
||
|
|
||
|
runtimeInputs = [ fluxLocal ];
|
||
|
|
||
|
text = ''
|
||
|
#!/usr/bin/env bash
|
||
|
set -euo pipefail
|
||
|
|
||
|
# Ensure flux-local is available
|
||
|
export PATH="${fluxLocal}/bin:$PATH"
|
||
|
|
||
|
# Default values for inputs
|
||
|
PATH_INPUT="''${PATH_INPUT:-kubernetes}"
|
||
|
RESOURCE="''${RESOURCE:-kustomization}"
|
||
|
LIVE_BRANCH_DIR="''${LIVE_BRANCH_DIR:-./workspace/default}"
|
||
|
PR_BRANCH_DIR="''${PR_BRANCH_DIR:-./workspace/pull}"
|
||
|
DIFF_LINES="''${DIFF_LINES:-6}"
|
||
|
STRIP_ATTRS="''${STRIP_ATTRS:-helm.sh/chart,checksum/config,app.kubernetes.io/version,chart}"
|
||
|
LIMIT_BYTES="''${LIMIT_BYTES:-10000}"
|
||
|
SKIP_SECRETS="''${SKIP_SECRETS:-true}"
|
||
|
SKIP_CRDS="''${SKIP_CRDS:-true}"
|
||
|
KUSTOMIZE_BUILD_FLAGS="''${KUSTOMIZE_BUILD_FLAGS:-}"
|
||
|
SOURCES="''${SOURCES:-}"
|
||
|
API_VERSIONS="''${API_VERSIONS:-}"
|
||
|
DEBUG="''${DEBUG:-false}"
|
||
|
|
||
|
# Adjust log level based on debug input
|
||
|
if [[ "$DEBUG" == "true" ]]; then
|
||
|
LOG_LEVEL="DEBUG"
|
||
|
else
|
||
|
LOG_LEVEL="INFO"
|
||
|
fi
|
||
|
|
||
|
# Additional flags for helmrelease resources
|
||
|
EXTRA_FLAGS=""
|
||
|
if [[ "$RESOURCE" == "helmrelease" && -n "$API_VERSIONS" ]]; then
|
||
|
EXTRA_FLAGS="--api-versions=$API_VERSIONS"
|
||
|
fi
|
||
|
|
||
|
# Adjust skip flags
|
||
|
if [[ "$SKIP_SECRETS" == "true" ]]; then
|
||
|
SKIP_SECRETS_FLAG="--skip-secrets"
|
||
|
else
|
||
|
SKIP_SECRETS_FLAG="--no-skip-secrets"
|
||
|
fi
|
||
|
|
||
|
if [[ "$SKIP_CRDS" == "true" ]]; then
|
||
|
SKIP_CRDS_FLAG="--skip-crds"
|
||
|
else
|
||
|
SKIP_CRDS_FLAG="--no-skip-crds"
|
||
|
fi
|
||
|
|
||
|
# Loop over paths and resources
|
||
|
for path in $PATH_INPUT; do
|
||
|
diff_file="diff-$path-$RESOURCE.patch"
|
||
|
|
||
|
flux-local \
|
||
|
--log-level "$LOG_LEVEL" \
|
||
|
diff "$RESOURCE" \
|
||
|
--unified "$DIFF_LINES" \
|
||
|
--path "$PR_BRANCH_DIR/$path" \
|
||
|
--path-orig "$LIVE_BRANCH_DIR/$path" \
|
||
|
--strip-attrs "$STRIP_ATTRS" \
|
||
|
$SKIP_SECRETS_FLAG \
|
||
|
$SKIP_CRDS_FLAG \
|
||
|
--limit-bytes "$LIMIT_BYTES" \
|
||
|
--all-namespaces \
|
||
|
--kustomize-build-flags="$KUSTOMIZE_BUILD_FLAGS" \
|
||
|
--sources "$SOURCES" \
|
||
|
--output-file "$diff_file" \
|
||
|
"$EXTRA_FLAGS"
|
||
|
|
||
|
# Output the diff if it exists
|
||
|
if [[ -s "$diff_file" ]]; then
|
||
|
echo "Differences found for path: $path and resource: $RESOURCE"
|
||
|
cat "$diff_file"
|
||
|
else
|
||
|
echo "No differences found for path: $path and resource: $RESOURCE"
|
||
|
fi
|
||
|
done
|
||
|
'';
|
||
|
|
||
|
meta = with lib; {
|
||
|
homepage = "https://code.252.no/tommy/containers";
|
||
|
description = "Perform Flux diffs locally";
|
||
|
license = licenses.mit;
|
||
|
maintainers = with maintainers; [ "tommy-skaug" ];
|
||
|
};
|
||
|
}
|