containers/apps/ci-os/packages/flux-diff/default.nix

94 lines
No EOL
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" ];
};
}