Skip to content

ci(tests): remove redundant Release E2E workflow - #2978

Merged
myasnikovdaniil merged 1 commit into
mainfrom
chore/remove-release-e2e
Jun 25, 2026
Merged

myasnikovdaniil merged 1 commit into
mainfrom
chore/remove-release-e2e

Conversation

@myasnikovdaniil

@myasnikovdaniil myasnikovdaniil commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

What this PR does

Removes the Release E2E workflow (.github/workflows/release-e2e.yaml), which ran the full bats suite on every release tag.

Why it's redundant. release-e2e.yaml was a non-blocking alarm — its own header states "a failure here is an alarm, not a release blocker." The coverage it provided is already delivered by the release-cut PR: the "Prepare release" commit bakes image digests into packages/core/ (installer, platform, testing) and other packages, and select-e2e.sh's full-suite pattern escalates any packages/core/ change to the full suite. So the release PR already runs the whole suite against the commit the tag will point at.

Why now. The workflow has never been green since it was added (2026-05-02) — every tag run (v1.5.0-rc.2, -rc.3, v1.5.0) failed at the build step. Even after #2973 fixed the registry login earlier today, the next run still failed at Build Talos image. A perpetually-red, non-gating duplicate is pure noise.

Changes

  • Delete .github/workflows/release-e2e.yaml.
  • Drop release-e2e from the full-suite pattern in hack/select-e2e.sh.
  • Repoint the workflow-trigger unit test in hack/select-e2e_test.bats to pull-requests.yaml (the remaining E2E workflow), preserving "workflow edit → full suite" coverage. All 11 select-e2e_test.bats cases pass.
  • Update docs/agents/e2e-testing.md to describe the release-cut PR as where the full suite runs.

Refs #2397.

Release note

ci(tests): remove the redundant Release E2E workflow; the full E2E suite already runs on the release-cut PR

Summary by CodeRabbit

  • Chores

    • Removed automated release end-to-end testing workflow
    • Updated E2E test selection logic to reflect testing infrastructure changes
  • Documentation

    • Updated E2E testing procedures documentation to reflect current testing approach

The Release E2E workflow (`release-e2e.yaml`) ran the full bats suite on
every release tag as a non-blocking alarm — its own header notes "a
failure here is an alarm, not a release blocker." It duplicates coverage
the release-cut PR already provides: the "Prepare release" commit bakes
image digests into `packages/core/` (and other packages), which TIA
escalates to the full suite, so the release PR exercises the whole suite
against the commit the tag will point at.

It has also never been green since it was added (2026-05-02): every tag
run failed at the build step. Even after #2973 fixed the registry login
today, the next run still failed (Build Talos image). Removing a
perpetually-red, non-gating duplicate removes noise without losing
coverage.

Removes the workflow, drops `release-e2e` from `select-e2e.sh`'s
full-suite pattern, repoints its unit test to `pull-requests.yaml`, and
updates the e2e-testing doc.

Refs #2397

Assisted-By: Claude <[email protected]>
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Myasnikov Daniil <[email protected]>
@github-actions github-actions Bot added area/testing Issues or PRs related to testing (e2e, bats, unit tests) size/L This PR changes 100-499 lines, ignoring generated files labels Jun 22, 2026
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request removes the 'Release E2E' workflow, which served as a non-blocking, redundant alarm that frequently failed. The full E2E suite coverage is already adequately provided by the release-cut PR process, making this workflow unnecessary. The changes include cleaning up the CI configuration, updating test coverage, and refining documentation to reflect the current testing strategy.

Highlights

  • Workflow Removal: Deleted the redundant .github/workflows/release-e2e.yaml workflow, which was non-gating and consistently failing.
  • CI Logic Update: Updated hack/select-e2e.sh to remove the release-e2e workflow from the full-suite trigger pattern.
  • Test Adjustment: Repointed the workflow-trigger unit test in hack/select-e2e_test.bats to verify the pull-requests.yaml workflow instead.
  • Documentation Update: Updated E2E testing documentation to clarify that full suite coverage is handled by the release-cut PR.
New Features

🧠 You can now enable Memory (public preview) to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/release-e2e.yaml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment Gemini (@gemini-code-assist) Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on Gemini (@gemini-code-assist) comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

@dosubot dosubot Bot added area/ci Issues or PRs related to CI workflows, GitHub Actions, automation kind/cleanup Categorizes issue or PR as related to cleanup of code, process, or technical debt labels Jun 22, 2026
@coderabbitai

coderabbitai Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7562eb19-5b80-4d7e-a34e-dbb37e5edf3a

📥 Commits

Reviewing files that changed from the base of the PR and between 77d42ab and b81e92a.

📒 Files selected for processing (4)
  • .github/workflows/release-e2e.yaml
  • docs/agents/e2e-testing.md
  • hack/select-e2e.sh
  • hack/select-e2e_test.bats
💤 Files with no reviewable changes (1)
  • .github/workflows/release-e2e.yaml

📝 Walkthrough

Walkthrough

The release-e2e.yaml GitHub Actions workflow (169 lines) is deleted entirely. References to it are removed from hack/select-e2e.sh's full-suite trigger regex (replaced with pull-requests.yaml), the matching bats test, and docs/agents/e2e-testing.md.

Changes

Remove release-e2e workflow and update trigger references

Layer / File(s) Summary
Update full-suite trigger pattern and bats tests
hack/select-e2e.sh, hack/select-e2e_test.bats, .github/workflows/release-e2e.yaml
release-e2e.yaml is deleted. full_suite_pattern in select-e2e.sh is updated to match .github/workflows/pull-requests.yaml instead; the bats test for workflow-change triggering the full suite is updated to use pull-requests.yaml.
Docs update
docs/agents/e2e-testing.md
Opening guidance and TIA section drop explicit release-e2e.yaml references; the TIA note now describes full-suite escalation at release-cut time via the "Prepare release" commit.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

  • cozystack/cozystack#2559: The release-workflow logic being removed/reworked here (release-e2e.yaml as a full-suite trigger in select-e2e.sh) was originally introduced in this PR.
  • cozystack/cozystack#2932: Both PRs modify docs/agents/e2e-testing.md and the TIA guidance around when the full E2E suite runs, including release-e2e.yaml references.

Suggested labels

area/ci, area/testing, size/M

Suggested reviewers

  • kvaps
  • lllamnyp
  • androndo
  • IvanHunters

Poem

🐇 Hop hop, the old workflow is gone,
No more release-e2e to carry on.
The full-suite trigger found a new friend,
Pull-requests.yaml from start to end.
Docs updated, patterns aligned just right—
A cleaner CI path, fluffy and bright! 🌟

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'ci(tests): remove redundant Release E2E workflow' directly and clearly summarizes the main change—removing the Release E2E workflow. It is concise, specific, and accurately reflects the primary objective of the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/remove-release-e2e

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request removes references to the deprecated release-e2e.yaml workflow from the E2E testing documentation, the select-e2e.sh script, and its corresponding BATS tests. The coverage gap is now closed at release-cut time when image digests are baked into the packages, which naturally triggers the full test suite. No review comments were provided, and there is no additional feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — the removed Release E2E workflow is genuinely redundant: the full E2E suite already runs on the release-cut PR, and the deleted workflow was non-blocking and had never been green, so it provided no real signal. Removing it drops noise without losing coverage.

Business context: deletes a tag-triggered full-suite E2E workflow whose coverage is already delivered by the release-cut PR.

Coverage equivalence (the central question) — verified end to end:

  1. The Prepare release vX.Y.Z commit pins image digests into packages/core/{installer,platform,testing}/values.yaml, and the release-cut PR carries the release label.
    • Evidence: docs/release.md:193-195 (digest pins land in packages/core/...); .github/workflows/tags.yaml:138 (the Prepare release commit); .github/workflows/tags.yaml:239 (labels: ['release']).
  2. On that PR the selector runs (it is skipped only under the full-e2e label), and any packages/core/ path matches the full-suite pattern, so the whole bats suite runs against the commit the tag will point at.
    • Evidence: hack/select-e2e.sh:22 (full-suite pattern matches packages/core/); .github/workflows/pull-requests.yaml:298-300 (selector gated only by full-e2e; E2E runs on release PRs via the draft-release asset path). Reproduced against the real Prepare release v1.5.1 commit: the selector escalates to the full suite (33-39 apps).

No dangling references: a whole-tree search finds zero remaining mentions of the deleted workflow; nothing references it via workflow_run or a uses: pointer.

  • Evidence: grep -rni 'release-e2e' . on the PR head returns nothing.

Tests: select-e2e_test.bats is repointed to pull-requests.yaml, preserving "workflow edit -> full suite" coverage; all 11 cases pass locally.

  • Evidence: hack/select-e2e_test.bats:114-118; local run reports 1..11 ... ok 11.

Blockers: none.

Non-blocking:

  1. Timing nuance: the deleted workflow ran the full suite against the exact published tag commit (after the force-move), whereas the release-cut PR runs it against the release-branch head before merge. If main diverges during the release-PR window, the final force-moved tag (merge) commit is not itself independently E2E'd. Net signal still improves, since the deleted workflow was non-blocking and perpetually red. Evidence: docs/release.md:540-542 (the tag is force-moved onto the merge commit by pull-requests-release.yaml); deleted release-e2e.yaml header — "a failure here is an alarm, not a release blocker."
  2. The deleted workflow triggered only on push: tags, so it could not have been a PR-merge required status check; I cannot read branch protection, but the trigger type rules out a PR gate. Evidence: deleted .github/workflows/release-e2e.yaml on: push: tags.

@IvanHunters IvanHunters left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict

LGTM.

Removing a perpetually-red, non-gating workflow whose coverage is provably already delivered by the release-cut PR via TIA escalation. Wiring is consistent, tests pass, docs match the new reality, and no stale references remain.

Red-team concerns

  • Release PR vs tag-commit SHA mismatch (pre-existing, not a regression). tags.yaml:138 adds a "Prepare release" commit after make build runs against the tagged commit. The published images/charts are built from the tag commit, but the release PR's E2E runs against tag commit + prepare-release commit. So if packages/core/ only changes in the prepare-release commit (typical case), the full suite is exercised against a tree that is one commit ahead of what the tag actually points at. In practice this is fine — the only delta is digest rewrites in values.yaml pointing at images that were just pushed — but it is worth being explicit about in the doc that "the full suite runs against the release PR head", not "against the tag commit". The old release-e2e.yaml did run on the tag itself (alarm semantics). The new doc text (docs/agents/e2e-testing.md:62) says "the commit the tag will point at" — technically true only if no merge-cleanup commits land on the release branch between tag and release-PR merge. Minor wording polish, not blocking.
  • prepare-release commit empty path. tags.yaml:138 ends with || echo "No changes to commit". If a retag (or a re-run of the publish workflow against an already-published tag) produces no git add . delta, no "Prepare release" commit lands, the release PR's diff against base would not include packages/core/ digest churn, and TIA would not escalate. Low-probability (retag scenario), not introduced by this PR, but the safety-net behaviour release-e2e.yaml previously provided on the tag itself is gone — there is now no independent verification that the tagged commit's artifacts build and install end-to-end. Acceptable given the workflow never produced a green signal anyway.

Caveats

  • Phase 5b (existing-customer upgrade impact / fresh-install impact) does not apply: this PR touches only .github/workflows/, hack/, and docs/. No runtime impact on running clusters and no install-path changes.
  • shellcheck reports 3 issues in hack/select-e2e.sh (SC2011 at line 25, SC2016 at lines 42 and 47) but git blame confirms all three predate this PR — out of scope here.
  • Verified locally: bats hack/select-e2e_test.bats → 11/11 passing, including the renamed pull-requests workflow change triggers full suite.
  • Verified locally: simulating a release-cut diff (packages/core/{platform,installer,testing,talos}/values.yaml) through hack/select-e2e.sh selects all 18 apps (full suite).
  • Verified locally: grep -r release-e2e over the working tree finds zero references outside .git/. No dangling docs, badges, needs:, workflow_run, or workflow_call references. retest.yaml already targets pull-requests.yaml. tags.yaml does not depend on release-e2e.

Recommended follow-ups

  • Consider tightening the new doc wording in docs/agents/e2e-testing.md:62 to say "against the release-cut PR head (tag commit + prepare-release commit)" so future readers do not assume the suite runs on the exact tagged SHA.
  • Pre-existing shellcheck findings on hack/select-e2e.sh (SC2011, SC2016) can be cleaned up in a follow-up; not a blocker here.

@myasnikovdaniil
myasnikovdaniil merged commit a036cfd into main Jun 25, 2026
19 of 20 checks passed
@myasnikovdaniil
myasnikovdaniil deleted the chore/remove-release-e2e branch June 25, 2026 05:26
myasnikovdaniil added a commit that referenced this pull request Jun 26, 2026
## What this PR does

Cleans up four GitHub Actions workflows that are redundant, broken, or
noisier than they need to be. Each change is its own commit so they can
be reviewed (or reverted) independently.

- **`retest.yaml` — removed.** The `/retest` command re-ran a job named
`Prepare environment`, but the TIA / job-split refactor of
`pull-requests.yaml` collapsed that into a *step* inside the `E2E Tests`
job, so the job lookup can never match. Every real `/retest` invocation
since fails with `Could not find "Prepare environment" job` — **10
failed runs spanning 2026-01-08 → 2026-06-24, none that ever completed a
retest**. (The 41 runs GitHub records as `success` are `issue_comment`
events where the job-level `if`-guard was false, so no steps ran.) `gh
run rerun --failed` covers the need.

- **`codeql.yml` — switch Go to manual build; keep the per-PR run.** The
Go `autobuild` ran `make`, whose included `hack/common-envs.mk` does a
`$(shell git fetch upstream --tags)` at parse time — a network call to a
non-origin remote that has nothing to do with the analysis and is a
flake vector. Replace it with `build-mode: manual` that compiles each
first-party module explicitly (the root module, `api/apps/v1alpha1`, and
the three nested image modules; the gitignored `_repos/*` upstream
clones drop out for free on a clean checkout). Same coverage, no
upstream fetch. The `pull_request` trigger is **kept on purpose**:
per-PR analysis is the only mode that diffs *new* alerts against the
base branch and annotates them on the changed lines — the basis for
promoting CodeQL to a required pre-merge check (follow-up: add `CodeQL /
Analyze (go)` to branch protection and set the code-scanning failure
threshold to errors-only). No `paths` filter — a required check that is
path-skipped never reports and would block PRs that touch no Go.

- **`scorecard.yml` — badge-only; stop polluting code-scanning.**
Scorecard uploads one code-scanning alert per check, which floods
Security → Code scanning and buries CodeQL's first-party findings. Drop
the `upload-sarif` step and the now-unneeded `security-events: write`;
keep `publish_results` (the public scorecard.dev badge is the canonical
view). Also drop the redundant `push:[main]` trigger — the weekly cron +
`branch_protection_rule` already cover it.

- **`update-releasenotes.yaml` — path-gate to changelog changes + manual
hatch.** The release body is synced from `docs/changelogs/v*.md`, which
only lands on main when the changelog PR merges or a maintainer edits an
existing changelog. Gate the `push` trigger to `docs/changelogs/v*.md`
(the `v*` glob skips `template.md` / `patch-template.md`) so the
self-hosted job stops firing on every unrelated main push, and add
`workflow_dispatch` as a manual re-sync hatch.

- **`SECURITY.md` — document the security scanners.** Add an "Automated
security analysis" subsection describing the CodeQL (SAST) and OpenSSF
Scorecard (supply-chain) setup, including the manual Go build, the
new-alert-on-diff behaviour, the intent to make CodeQL a required
pre-merge check, and how findings are dismissed — so the posture is
documented, not just encoded in YAML.

Not touched: `release-e2e.yaml` — already removed by #2978.

### Release note

```release-note
NONE
```


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated automation workflows for security checks and release-note
generation.
  * Removed an unused retry workflow and tightened when some checks run.

* **Documentation**
* Expanded security guidance to better explain automated analysis, alert
handling, and reporting.
  * Clarified when release notes updates are generated.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/ci Issues or PRs related to CI workflows, GitHub Actions, automation area/testing Issues or PRs related to testing (e2e, bats, unit tests) kind/cleanup Categorizes issue or PR as related to cleanup of code, process, or technical debt size/L This PR changes 100-499 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants