diff --git a/.github/workflows/index-monitor.yml b/.github/workflows/index-monitor.yml index 95c4eab65aa8f3..c49a1a1569fd36 100644 --- a/.github/workflows/index-monitor.yml +++ b/.github/workflows/index-monitor.yml @@ -2,9 +2,8 @@ name: '[Index] Monitor remote index.yaml' on: schedule: - # In the 15th and 45th minutes - # To not overlap with the index-update workflow - - cron: '15,45 * * * *' + # Every 10 minutes + - cron: '*/10 * * * *' # Remove all permissions by default permissions: {} @@ -24,17 +23,35 @@ jobs: - name: Check index integrity id: integrity-check run: | - # Check the index.yaml integrity - REMOTE_MD5=($(curl -Ls http://charts.bitnami.com/bitnami/index.yaml | md5sum)) - REPOSITORY_MD5=($(md5sum bitnami/index.yaml)) - # Compare the index.yaml checksums remote and locally - if [[ "${REPOSITORY_MD5[0]}" == "${REMOTE_MD5[0]}" ]]; then - echo "result=passed" >> $GITHUB_OUTPUT - else - echo "result=failed" >> $GITHUB_OUTPUT - echo "Integrity check failed. Remote checksum '${REMOTE_MD5[0]}' does not match expected '${REPOSITORY_MD5[0]}'"; - exit 1 - fi + status="fail" + consecutive_failures=0 + # We want to check for consistent failures + # To do so, we will look for 3 consecutive failures with a 30 seconds wait + # A single success is enough to pass + while [[ "${status}" != "ok" && $consecutive_failures -lt 3 ]]; do + # Check the index.yaml integrity + REMOTE_MD5=($(curl -Ls http://charts.bitnami.com/bitnami/index.yaml | md5sum)) + REPOSITORY_MD5=($(md5sum bitnami/index.yaml)) + # Compare the index.yaml checksums remote and locally + if [[ "${REPOSITORY_MD5[0]}" == "${REMOTE_MD5[0]}" ]]; then + status='ok' + else + consecutive_failures++ + echo "Integrity check failed. Remote checksum '${REMOTE_MD5[0]}' does not match expected '${REPOSITORY_MD5[0]}'"; + fi + # Wait 30 seconds + sleep 30 + done + echo "result=${status}" >> $GITHUB_OUTPUT + - name: Show messages + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea + with: + script: | + if ("${{ steps.integrity-check.outputs.result }}" != "ok" ) { + core.setFailed("Integrity check failed"); + } else { + core.info("Integrity check succeeded") + } validation-check: name: Validate the helm repository can be added and updated runs-on: ubuntu-latest @@ -51,17 +68,44 @@ jobs: id: validation-check run: | repo="http://charts.bitnami.com/bitnami" - # Validates the helm repository can be added and updated - if helm repo add bitnami "${repo}" && helm repo update bitnami; then - echo "result=ok" >> $GITHUB_OUTPUT - else - echo "result=fail" >> $GITHUB_OUTPUT - echo "Failed to pull charts from helm repository '${repo}'" - exit 1 - fi + status="fail" + consecutive_failures=0 + # We want to check for consistent failures + # To do so, we will look for 3 consecutive failures with a 30 seconds wait + # A single success is enough to pass + while [[ "${status}" != "ok" && $consecutive_failures -lt 3 ]]; do + # Validates the helm repository can be added and updated + if helm repo add bitnami "${repo}" && helm repo update bitnami; then + status="ok" + else + consecutive_failures++ + echo "Failed to pull charts from helm repository '${repo}'" + fi + # Wait 30 seconds + sleep 30 + done + echo "result=${status}" >> $GITHUB_OUTPUT + - name: Show messages + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea + with: + script: | + if ("${{ steps.validation-check.outputs.result }}" != "ok" ) { + core.setFailed("Validation check failed"); + } else { + core.info("Validation check succeeded") + } upload: name: Re-upload index.yaml needs: [validation-check, integrity-check] if: ${{ always() && (needs.validation-check.outputs.result != 'ok' || needs.integrity-check.outputs.result != 'ok') }} uses: bitnami/charts/.github/workflows/sync-chart-cloudflare-index.yml@index secrets: inherit + notify: + name: Send notification + needs: [validation-check, integrity-check] + if: ${{ always() && (needs.validation-check.outputs.result != 'ok' || needs.integrity-check.outputs.result != 'ok') }} + uses: bitnami/charts/.github/workflows/gchat-notification.yml@main + with: + workflow: ${{ github.workflow }} + job-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + secrets: inherit