Files
argocd-apps/ci/validate-no-secrets.sh
T
unkinben 08a75ea01a
ci/woodpecker/pr/vector-test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/kubeconform Pipeline was successful
certificates: restore the validly-signed intermediate in vault-ca-cert
Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
2026-07-28 23:02:09 +10:00

28 lines
970 B
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Check staged files for plain Kubernetes Secrets
ERRORS=0
while IFS= read -r -d '' file; do
# Skip if file doesn't exist (e.g., deleted files)
[[ -f "$file" ]] || continue
# Check if the file contains a plain Kubernetes Secret
if grep -q "^kind: Secret" "$file"; then
# Explicit opt-out for public-data bootstrap secrets (e.g. the CA bundle
# that establishes Vault trust and therefore cannot be Vault-sourced).
if grep -q "^# pre-commit: allow-plain-secret" "$file"; then
continue
fi
# Allow secure secret types
if ! grep -q -E "^kind: (SealedSecret|ExternalSecret|VaultStaticSecret|VaultDynamicSecret)" "$file"; then
echo "BLOCKED: $file contains a plain Kubernetes Secret" >&2
echo " Use VaultStaticSecret or VaultDynamicSecret instead" >&2
((ERRORS++))
fi
fi
done < <(git diff --cached --name-only --diff-filter=ACM -z | grep -zE '\.(yaml|yml)$')
exit $ERRORS