Skip to content

fix(agent): default S3 RequestChecksumCalculation to WhenRequired #32

fix(agent): default S3 RequestChecksumCalculation to WhenRequired

fix(agent): default S3 RequestChecksumCalculation to WhenRequired #32

Workflow file for this run

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