1 changed files with 90 additions and 0 deletions
@ -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 |
Loading…
Reference in new issue