feat(helm): complete chart normalization with ConfigMap, HPA, and OCI migration
- Added debug mode, structured ConfigMap pattern, and README to all charts - Migrated all flat-structure charts to hierarchical values under chartname key - Fixed templates to use correct hierarchical paths - Renamed helm-rustical key to rustical, added HPA support - Fixed ingress YAML parsing (oxicloud), nested env vars (rustical) - Pushed all normalized charts to OCI registry as 1.0.0+ and updated ArgoCD apps
This commit is contained in:
parent
d0f40c0967
commit
1fd2bfef3d
71 changed files with 2150 additions and 965 deletions
174
scripts/source-repos.sh
Executable file
174
scripts/source-repos.sh
Executable file
|
|
@ -0,0 +1,174 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
PROJECTS_DIR="k8s/services/argo"
|
||||
APPS_DIR="k8s/argo-apps"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $(basename "$0") [OPTIONS]
|
||||
|
||||
List and manage source repos in ArgoCD projects.
|
||||
|
||||
OPTIONS:
|
||||
-l, --list List all source repos (default)
|
||||
-u, --unused List unused source repos
|
||||
-d, --delete-unused Delete unused source repos from projects
|
||||
-h, --help Show this help message
|
||||
|
||||
Examples:
|
||||
$(basename "$0") # List all source repos
|
||||
$(basename "$0") -u # List unused source repos
|
||||
$(basename "$0") -d # Delete unused source repos
|
||||
EOF
|
||||
}
|
||||
|
||||
get_all_project_repos() {
|
||||
awk '/^[[:space:]]*sourceRepos:/,/^[[:space:]]*[a-z]+:/' "$PROJECTS_DIR"/project-*.yaml | \
|
||||
grep -E '^[[:space:]]+-[[:space:]]+' | \
|
||||
sed 's/^[[:space:]]*- //' | \
|
||||
sort -u
|
||||
}
|
||||
|
||||
get_all_app_repos() {
|
||||
grep -E '(^\s+-\s+repoURL:|^\s+repoURL:)' "$APPS_DIR"/*.yaml 2>/dev/null | \
|
||||
sed 's/.*repoURL: *//' | \
|
||||
sort -u
|
||||
}
|
||||
|
||||
get_project_name_from_repo() {
|
||||
local repo="$1"
|
||||
for project_file in "$PROJECTS_DIR"/project-*.yaml; do
|
||||
local project_name
|
||||
project_name=$(basename "$project_file" .yaml | sed 's/^project-//')
|
||||
if awk '/^[[:space:]]*sourceRepos:/,/^[[:space:]]*[a-z]+:/' "$project_file" | \
|
||||
grep -qE "^[[:space:]]+- ${repo//\./\\.}$"; then
|
||||
echo "$project_name"
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
list_all() {
|
||||
echo "=== All Source Repos in ArgoCD Projects ==="
|
||||
echo ""
|
||||
while IFS= read -r repo; do
|
||||
local project
|
||||
project=$(get_project_name_from_repo "$repo")
|
||||
echo "[$project] $repo"
|
||||
done < <(get_all_project_repos)
|
||||
}
|
||||
|
||||
list_unused() {
|
||||
local all_repos
|
||||
local all_app_repos
|
||||
all_repos=$(get_all_project_repos)
|
||||
all_app_repos=$(get_all_app_repos)
|
||||
|
||||
echo "=== Unused Source Repos ==="
|
||||
echo ""
|
||||
|
||||
local found_unused=false
|
||||
while IFS= read -r repo; do
|
||||
if ! echo "$all_app_repos" | grep -qF -- "$repo"; then
|
||||
found_unused=true
|
||||
local project
|
||||
project=$(get_project_name_from_repo "$repo")
|
||||
echo "[$project] $repo"
|
||||
fi
|
||||
done < <(echo "$all_repos")
|
||||
|
||||
if [ "$found_unused" = false ]; then
|
||||
echo "No unused source repos found."
|
||||
fi
|
||||
}
|
||||
|
||||
delete_unused() {
|
||||
local all_repos
|
||||
local all_app_repos
|
||||
all_repos=$(get_all_project_repos)
|
||||
all_app_repos=$(get_all_app_repos)
|
||||
|
||||
local found_unused=false
|
||||
local to_delete=()
|
||||
|
||||
while IFS= read -r repo; do
|
||||
if ! echo "$all_app_repos" | grep -qF -- "$repo"; then
|
||||
found_unused=true
|
||||
to_delete+=("$repo")
|
||||
fi
|
||||
done < <(echo "$all_repos")
|
||||
|
||||
if [ "$found_unused" = false ]; then
|
||||
echo "No unused source repos found."
|
||||
return
|
||||
fi
|
||||
|
||||
echo "The following source repos will be deleted:"
|
||||
echo ""
|
||||
for repo in "${to_delete[@]}"; do
|
||||
local project
|
||||
project=$(get_project_name_from_repo "$repo")
|
||||
echo "[$project] $repo"
|
||||
done
|
||||
echo ""
|
||||
|
||||
read -p "Are you sure? [y/N] " -r
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Aborted."
|
||||
return
|
||||
fi
|
||||
|
||||
for repo in "${to_delete[@]}"; do
|
||||
for project_file in "$PROJECTS_DIR"/project-*.yaml; do
|
||||
if grep -q "sourceRepos:" "$project_file"; then
|
||||
local escaped_repo
|
||||
escaped_repo="${repo//\./\\.}"
|
||||
if grep -qE "^[[:space:]]+- $escaped_repo$" "$project_file"; then
|
||||
sed -i "s|^[[:space:]]*- $escaped_repo$||" "$project_file"
|
||||
sed -i '/^[[:space:]]*-$/d' "$project_file"
|
||||
sed -i '/^[[:space:]]*$/d' "$project_file"
|
||||
echo "Deleted '$repo' from $(basename "$project_file")"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
COMMAND="list_all"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-l|--list)
|
||||
COMMAND="list_all"
|
||||
;;
|
||||
-u|--unused)
|
||||
COMMAND="list_unused"
|
||||
;;
|
||||
-d|--delete-unused)
|
||||
COMMAND="delete_unused"
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
case "$COMMAND" in
|
||||
list_all)
|
||||
list_all
|
||||
;;
|
||||
list_unused)
|
||||
list_unused
|
||||
;;
|
||||
delete_unused)
|
||||
delete_unused
|
||||
;;
|
||||
esac
|
||||
Loading…
Add table
Add a link
Reference in a new issue