123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- name: '[Index] Sync index.yaml with OCI releases'
- on:
- schedule:
- - cron: "*/30 * * * *"
- # Remove all permissions by default.
- permissions: {}
- jobs:
- find-new-releases:
- runs-on: ubuntu-latest
- name: Find new releases
- outputs:
- new-releases: ${{ steps.get-new-releases.outputs.new-releases }}
- permissions:
- contents: read
- if: ${{ github.repository_owner == 'bitnami' }}
- steps:
- - id: checkout-repo
- name: Checkout repo
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- with:
- ref: index
- path: index
- - uses: oras-project/setup-oras@5c0b487ce3fe0ce3ab0d034e63669e426e294e4d
- - id: get-oci-index
- name: Get OCI index
- run: |
- oras pull registry-1.docker.io/bitnamicharts/charts-index:latest
- cat charts-index.json | yq -P | yq eval '. | .entries[] |= .versions' > ./oci_index.yaml
- - id: get-charts-index
- name: Get Charts index
- run: |
- cp index/bitnami/index.yaml ./charts_index.yaml
- - id: merge
- name: Generate merged index
- run: |
- yq eval-all '. as $item ireduce ({}; . *+ $item )' charts_index.yaml oci_index.yaml > duplicates_index.yaml
- yq eval '.entries[] |= unique_by(.name + .version)' duplicates_index.yaml > merged_index.yaml
- - id: get-new-releases
- name: Find new versions
- run: |
- yq eval '.entries[][] | .name + ":" + .version' charts_index.yaml |sort| uniq > charts_index_releases
- yq eval '.entries[][] | .name + ":" + .version' merged_index.yaml | sort| uniq > merged_index_releases
- new_releases="$(comm -13 charts_index_releases merged_index_releases | tr "\n" " " | sed 's/ $//')"
- if [ -n "${new_releases}" ]; then
- echo "Found new releases: ${new_releases}"
- else
- echo "No new releases detected"
- fi
- echo "new-releases=$new_releases" >> $GITHUB_OUTPUT
- update-index:
- runs-on: ubuntu-latest
- needs:
- - find-new-releases
- name: Update index
- if: ${{ needs.find-new-releases.outputs.new-releases != '' }}
- steps:
- - name: Install helm
- run: |
- HELM_TARBALL="helm-v3.8.1-linux-amd64.tar.gz"
- curl -SsLfO "https://get.helm.sh/${HELM_TARBALL}" && sudo tar xf "$HELM_TARBALL" --strip-components 1 -C /usr/local/bin
- # Install file plugin
- helm plugin add https://github.com/zoobab/helm_file_repo
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- with:
- ref: 'index'
- path: index
- # The token is persisted in the local git config and enables scripts to run authenticated git commands.
- token: ${{ secrets.BITNAMI_BOT_TOKEN }}
- - id: update-index
- name: Pull charts and update index
- env:
- NEW_RELEASES: ${{ needs.find-new-releases.outputs.new-releases }}
- run: |
- cd index
- # Configure git
- git config user.name "Bitnami Containers"
- git config user.email "bitnami-bot@vmware.com"
- read -r -a new_releases_arr <<< $NEW_RELEASES
- for release in "${new_releases_arr[@]}"; do
- read -r -a release_arr <<< "$(tr ':' ' ' <<< "$release")"
- chart_name="${release_arr[0]}"
- chart_version="${release_arr[1]}"
- ## Update index
- # Download published asset
- mkdir ../download
- helm pull "oci://registry-1.docker.io/bitnamicharts/${chart_name}" --version "${chart_version}" --destination ../download
- # Rebuild index
- helm repo index --url oci://registry-1.docker.io/bitnamicharts --merge bitnami/index.yaml ../download
- # Replace .tgz in URL with OCI tag
- sed -i "s|oci://registry-1.docker.io/bitnamicharts/$chart_name-$chart_version.tgz|oci://registry-1.docker.io/bitnamicharts/$chart_name:$chart_version|" ../download/index.yaml
- # Check index integrity
- if [[ $(stat -c%s bitnami/index.yaml) -gt $(stat -c%s ../download/index.yaml) ]]; then
- echo "New index.yaml file is shorter than the current one"
- exit 1
- fi
- # Check repo can be loaded
- if ! helm repo add cache file://../download/ ; then
- echo "New index.yaml file can't be used as a file"
- exit 1
- else
- # Remove the repo
- helm repo remove cache
- fi
- cp ../download/index.yaml bitnami/index.yaml
- # Remove chart files
- rm -rf ../download
- done
- # Avoid overriding index branch when remote commit does not match our checkout commit
- current_commit_id=$(git rev-parse index)
- # Push changes
- git add bitnami/index.yaml && git commit --signoff --amend --no-edit
- git push origin index --force-with-lease=index:${current_commit_id}
- notify:
- name: Send notification
- needs:
- - update-index
- if: ${{ always() && (needs.update-index.result == 'failure') }}
- uses: bitnami/support/.github/workflows/gchat-notification.yml@main
- with:
- workflow: ${{ github.workflow }}
- job-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- secrets:
- webhook-url: ${{ secrets.GCHAT_CONTENT_ALERTS_WEBHOOK_URL }}
|