From 7d8f5167c86fd66d191da09f8060ec5d5742304d Mon Sep 17 00:00:00 2001 From: dvirlabs Date: Sun, 22 Jun 2025 19:33:00 +0300 Subject: [PATCH] Test the script --- automation/cloudflared-sync.sh | 49 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/automation/cloudflared-sync.sh b/automation/cloudflared-sync.sh index 3dcf23f..0e6174a 100644 --- a/automation/cloudflared-sync.sh +++ b/automation/cloudflared-sync.sh @@ -1,8 +1,8 @@ #!/bin/bash set -e -# đŸ“Ļ Install required tools (run via Woodpecker .woodpecker.yml) -# Ensure apk installs: yq, jq, git, bash, curl +# đŸ“Ļ Ensure apk installs: yq, jq, git, bash, curl +# Required for pipeline: alpine image + apk add --no-cache git bash curl yq jq echo "🔍 Scanning for apps with cname.yaml..." @@ -12,7 +12,7 @@ mkdir -p .tmp-repos # === REPO CONFIG === SANDBOX_REPO_URL="https://git.dvirlabs.com/dvirlabs/sandbox.git" -INFRA_REPO_URL="https://git.dvirlabs.com/dvirlabs/infra.git" +INFRA_REPO_URL="https://${GIT_TOKEN}@git.dvirlabs.com/dvirlabs/infra.git" SANDBOX_CLONE=".tmp-repos/sandbox" INFRA_CLONE=".tmp-repos/infra" GENERATED_FILE="generated-values/cloudflared-values.yaml" @@ -44,7 +44,6 @@ find "$SANDBOX_CLONE/manifests" -name cname.yaml | while read -r cname_file; do echo "✅ Found $hostname → $service" - # Append new entry to generated ingress list yq eval ".ingress += [{\"hostname\": \"$hostname\", \"service\": \"$service\"}]" -i "$GENERATED_FILE" fi done @@ -56,41 +55,41 @@ cat "$GENERATED_FILE" echo "🔁 Merging new entries into: $ORIGINAL_FILE" TEMP_FILE=$(mktemp) +cp "$ORIGINAL_FILE" "$TEMP_FILE" -# Copy original ingress list -yq eval '.cloudflare.ingress' "$ORIGINAL_FILE" > "$TEMP_FILE" - -# Append new unique entries (skip existing hostnames) -yq eval '.ingress' "$GENERATED_FILE" | yq eval -o=json '.' - | jq -c '.[]' | while read -r new_entry; do +# Loop through new entries and append only if hostname not exists +yq eval '.ingress' "$GENERATED_FILE" | yq -o=json | jq -c '.[]' | while read -r new_entry; do hostname=$(echo "$new_entry" | jq -r '.hostname') service=$(echo "$new_entry" | jq -r '.service') - exists=$(yq e ".cloudflare.ingress[] | select(.hostname == \"$hostname\")" "$ORIGINAL_FILE") + exists=$(yq e ".cloudflare.ingress[] | select(.hostname == \"$hostname\")" "$TEMP_FILE") if [ -z "$exists" ]; then echo "➕ Adding $hostname → $service" - yq eval ". += [{\"hostname\": \"$hostname\", \"service\": \"$service\"}]" -i "$TEMP_FILE" + yq eval ".cloudflare.ingress += [{\"hostname\": \"$hostname\", \"service\": \"$service\"}]" -i "$TEMP_FILE" else echo "âš ī¸ $hostname already exists, skipping" fi done -# === STEP 4: Write merged file === -yq eval ' - .cloudflare.ingress = load("'"$TEMP_FILE"'") | - .cloudflare.tunnelName = .cloudflare.tunnelName | - .cloudflare.enableWarp = .cloudflare.enableWarp | - .cloudflare.secretName = .cloudflare.secretName | - .cloudflared = .cloudflared -' "$ORIGINAL_FILE" > "$MERGED_FILE" +# === STEP 4: Overwrite only ingress list and preserve all other fields === +echo "📝 Writing final merged values.yaml" +cp "$TEMP_FILE" "$MERGED_FILE" echo "✅ Final merged values.yaml:" cat "$MERGED_FILE" # === STEP 5: Optional push to Git === -# cd "$INFRA_CLONE" -# git config user.name "woodpecker-bot" -# git config user.email "ci@dvirlabs.com" -# git add manifests/cloudflared/values.yaml -# git commit -m "chore(cloudflared): auto-add ingress from sandbox" -# git push +cd "$INFRA_CLONE" +git config user.name "woodpecker-bot" +git config user.email "ci@dvirlabs.com" +git remote set-url origin "https://${GIT_TOKEN}@git.dvirlabs.com/dvirlabs/infra.git" + +if ! git diff --quiet manifests/cloudflared/values.yaml; then + git add manifests/cloudflared/values.yaml + git commit -m "chore(cloudflared): auto-merge CNAME entries from sandbox" + git push origin HEAD + echo "✅ Changes pushed successfully." +else + echo "â„šī¸ No changes to commit." +fi