fix(agent): default S3 RequestChecksumCalculation to WhenRequired #32
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release install smoke | |
| # Gates changes to the tag-release machinery by running the full ship-then- | |
| # install flow on a throwaway kind cluster (hack/release-smoke.sh), for BOTH | |
| # shipped install paths: the rendered manifest (release-assets.yml) and the | |
| # Helm chart (helm-publish.yml). Each builds the image, installs it, and | |
| # asserts the operator comes up and reconciles a 1-node cluster. Catches | |
| # release-pipeline regressions (image/manifest tag drift, broken OPERATOR_IMAGE | |
| # wiring, CRDs that don't apply, a chart missing an RBAC rule) on the PR that | |
| # introduces them, not on the first real tag. The image is loaded into kind, | |
| # never pushed — no registry credentials. | |
| on: | |
| # No paths filter on the trigger: `smoke (helm)` and `smoke (manifest)` are | |
| # *required* status checks, and a workflow skipped at the trigger never | |
| # reports them, leaving the required contexts stuck in "Expected" and | |
| # blocking the PR forever (e.g. docs-only PRs). Path filtering lives in the | |
| # `changes` job below instead; the two smoke jobs are skipped via `if:` when | |
| # nothing release-relevant changed, and a skipped job still reports its check | |
| # as "skipped", which branch protection treats as passing. | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: release-smoke-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| changes: | |
| # Cheap (~seconds, no checkout) gate. PR-only: manual dispatch always runs | |
| # both smokes unconditionally (see the `if` on the smoke jobs). | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| release: ${{ steps.filter.outputs.release }} | |
| steps: | |
| - uses: dorny/paths-filter@v3 | |
| id: filter | |
| with: | |
| # True when the PR touches the tag-release machinery or anything it | |
| # ships. Matches the paths this workflow used to filter on at the | |
| # trigger; PRs that touch none of these skip the two kind smokes. | |
| filters: | | |
| release: | |
| - '.github/workflows/release-smoke.yml' | |
| - '.github/workflows/docker-publish.yml' | |
| - '.github/workflows/release-assets.yml' | |
| - '.github/workflows/helm-publish.yml' | |
| - 'hack/release-smoke.sh' | |
| - 'charts/**' | |
| - 'Makefile' | |
| - 'Dockerfile' | |
| - 'api/**' | |
| # The manifest and helm smokes are two separate jobs, NOT a `strategy.matrix`, | |
| # on purpose. The required status contexts are `smoke (manifest)` and | |
| # `smoke (helm)` — the per-leg names a matrix produces *when it runs*. But a | |
| # matrix job skipped via `if:` collapses to a SINGLE check named just `smoke`, | |
| # so the per-leg names are never reported and the required contexts stay stuck | |
| # in "Expected", blocking docs-only PRs forever. A plain job, by contrast, | |
| # reports its check under its own `name:` even when skipped — so naming each | |
| # job exactly after its required context makes the skip satisfy the gate. | |
| smoke-manifest: | |
| # `name` is what becomes the check-run context, so it must equal the | |
| # required status check string exactly — including the parentheses. The | |
| # job *id* (`smoke-manifest`) can't contain spaces, hence the split. | |
| name: smoke (manifest) | |
| needs: changes | |
| # Always run on manual dispatch; for PRs, run only when release-relevant | |
| # files changed. When skipped, the `smoke (manifest)` check still reports | |
| # as "skipped" (= passing), so the PR is not blocked. | |
| if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.release == 'true' }} | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: release-install smoke (manifest, kind) | |
| # Builds the image, installs via the rendered manifest, and asserts the | |
| # operator is Available and a 1-node EtcdCluster reaches READY. On | |
| # failure the script's EXIT trap dumps cluster state before teardown. | |
| run: make release-smoke | |
| smoke-helm: | |
| # `name` must equal the required status check string exactly (see | |
| # smoke-manifest above for why the job id and name differ). | |
| name: smoke (helm) | |
| needs: changes | |
| # Always run on manual dispatch; for PRs, run only when release-relevant | |
| # files changed. When skipped, the `smoke (helm)` check still reports as | |
| # "skipped" (= passing), so the PR is not blocked. | |
| if: ${{ github.event_name != 'pull_request' || needs.changes.outputs.release == 'true' }} | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Install Helm | |
| uses: azure/setup-helm@v4 | |
| with: | |
| version: 'v3.16.4' | |
| - name: release-install smoke (helm, kind) | |
| # Builds the image, installs via the Helm chart, and asserts the | |
| # operator is Available and a 1-node EtcdCluster reaches READY. On | |
| # failure the script's EXIT trap dumps cluster state before teardown. | |
| run: make helm-smoke |