From 652a5247a629765150f4e1a1bebdadf6f9451685 Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 3 Apr 2025 16:15:41 -0300 Subject: [PATCH] Add drone pipeline to release charts in gh-pages branch --- .drone.yml | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..5d929fb --- /dev/null +++ b/.drone.yml @@ -0,0 +1,90 @@ +kind: pipeline +type: docker +name: update-helm-charts + +steps: + # Step 1: Lint all Helm charts + - name: lint-charts + image: alpine/helm:latest + commands: + - find charts -maxdepth 1 -type d -not -path charts -exec helm lint {} \; + + # Step 2: Package only changed Helm charts + - name: package-changed-charts + image: alpine/helm:latest + commands: + - mkdir -p charts/dist + # Detect changed chart directories and package them + - CHANGED_CHARTS=$(git diff --name-only $DRONE_PREV_COMMIT $DRONE_COMMIT | grep '^charts/' | sed 's|/[^/]*$||' | sort -u) + - if [ -n "$CHANGED_CHARTS" ]; then echo "$CHANGED_CHARTS" | xargs -I {} helm package {} --destination charts/dist; else echo "No charts changed"; fi + depends_on: + - lint-charts + + # Step 3: Fetch the existing index.yaml from Gitea (if it exists) + - name: fetch-existing-index + image: curlimages/curl + commands: + - apk add jq + - LATEST_TAG=$(curl -s -H "Authorization: token $GITEA_API_KEY" https://git.interlegis.leg.br/api/v1/repos/seit/rancher-charts/releases?limit=1 | jq -r '.[0].tag_name') + - if [ -n "$LATEST_TAG" ]; then curl -L -o charts/dist/index.yaml https://git.interlegis.leg.br/seit/rancher-charts/releases/download/$LATEST_TAG/index.yaml || true; fi + environment: + GITEA_API_KEY: + from_secret: gitea_api_key + depends_on: + - package-changed-charts + + # Step 4: Update index.yaml with changed charts (skip if no changes) + - name: update-index + image: alpine/helm:latest + commands: + - if [ -n "$(ls charts/dist/*.tgz 2>/dev/null)" ]; then helm repo index charts/dist --url https://git.interlegis.leg.br/seit/rancher-charts/raw/branch/gh-pages/ --merge charts/dist/index.yaml; else echo "No new charts to index"; fi + depends_on: + - fetch-existing-index + + # Step 5: Push charts and index to gh-pages branch without credentials file + - name: push-to-branch + image: alpine/git + commands: + # Set up the gh-pages branch + - git fetch origin gh-pages || echo "gh-pages not found, will create it" + - git checkout gh-pages || git checkout -b gh-pages + # Copy new chart artifacts + - mkdir -p charts/dist + - cp -r $DRONE_WORKSPACE/charts/dist/* charts/dist/ + # Commit changes + - git add charts/dist/* + - git commit -m "Update Helm charts from commit ${DRONE_COMMIT}" || echo "No changes to commit" + # Push with API key in URL and check for failure + - git push https://x:${GITEA_API_KEY}@git.interlegis.leg.br/seit/rancher-charts.git HEAD:gh-pages --force || { echo "Git push failed"; exit 1; } + environment: + GITEA_API_KEY: + from_secret: gitea_api_key + when: + condition: ls charts/dist/*.tgz 2>/dev/null # Only run if there are new .tgz files + depends_on: + - update-index + + # Step 6: Create or update Gitea release with changed artifacts + - name: release-to-gitea + image: plugins/gitea-release + settings: + api_key: + from_secret: gitea_api_key + base_url: https://git.interlegis.leg.br + files: + - charts/dist/*.tar.gz + - charts/dist/index.yaml + title: "Helm Charts Update - ${DRONE_COMMIT}" + note: "Updated Helm repository from commit ${DRONE_COMMIT}" + draft: false + prerelease: true + when: + condition: ls charts/dist/*.tgz 2>/dev/null # Only run if there are new .tgz files + depends_on: + - push-to-branch + +trigger: + branch: + - main + event: + - push \ No newline at end of file