Skip to content

Conversation

@nanotaboada
Copy link
Owner

@nanotaboada nanotaboada commented Jan 24, 2026

Implements tag-triggered CD pipeline with famous coaches release names (A-Z).

  • Separate CI (python-ci.yml) from CD (python-cd.yml)
  • CI runs on every push/PR: lint, test, coverage only
  • CD runs only on version tags (v*..-*): build, test, publish
  • Validate semver and coach names (A-Z list from CHANGELOG)
  • Multi-platform Docker builds (amd64, arm64)
  • Auto-generate GitHub releases with changelog
  • Publish 3 Docker tags per release: semver, coach name, latest

This change is Reviewable

Summary by CodeRabbit

  • New Features

    • Added an automated continuous delivery pipeline: tag-triggered releases, tests, multi-architecture Docker image builds/pushes, changelog generation, and GitHub release creation with image pull instructions.
  • Documentation

    • Added comprehensive changelog and release conventions.
    • Added release process, tagging instructions, and release examples to README.
  • Chores

    • Updated CI workflows and removed the prior container publish job for a streamlined CI.

✏️ Tip: You can customize this high-level summary in your review settings.

Implements tag-triggered CD pipeline with famous coaches release names (A-Z).

- Separate CI (python-ci.yml) from CD (python-cd.yml)
- CI runs on every push/PR: lint, test, coverage only
- CD runs only on version tags (v*.*.*-*): build, test, publish
- Validate semver and coach names (A-Z list from CHANGELOG)
- Multi-platform Docker builds (amd64, arm64)
- Auto-generate GitHub releases with changelog
- Publish 3 Docker tags per release: semver, coach name, latest
@nanotaboada nanotaboada linked an issue Jan 24, 2026 that may be closed by this pull request
16 tasks
@coderabbitai
Copy link

coderabbitai bot commented Jan 24, 2026

Walkthrough

Adds a tag-triggered CD workflow that validates semver and coach, runs tests, builds/pushes multi-arch Docker images, generates a changelog, and creates a GitHub release. Removes the Docker publish job from CI and adds release documentation (CHANGELOG, README).

Changes

Cohort / File(s) Summary
GitHub Actions — New CD workflow
\.github/workflows/python-cd.yml
New tag-triggered workflow: parses tag into semver & coach, validates values, sets up Python, runs tests/coverage, logs into GHCR, configures Buildx, builds & pushes linux/amd64 and linux/arm64 images (semver, coach, latest tags), generates changelog by comparing tags, and creates a GitHub Release with release notes and image pull commands.
GitHub Actions — CI adjustments
\.github/workflows/python-ci.yml
Removed container job that pushed images to GHCR (login/build/push steps removed); downgraded some action versions (checkout v6.0.2→v6.0.1, setup-python v6.2.0→v6.1.0) and updated workflow structure.
Documentation
CHANGELOG.md, README.md
Adds CHANGELOG.md with conventions, coach-based release naming, 1.0.0 entry and release instructions; updates README.md with Releases section, tagging/pushing commands, coach table, and CI badge link.

Sequence Diagram(s)

sequenceDiagram
    actor Developer
    participant GitHub as "GitHub (Tag Push)"
    participant CD as "GitHub Actions CD"
    participant Test as "Test Runner (pytest)"
    participant Registry as "GHCR (Container Registry)"
    participant Release as "GitHub Release"

    Developer->>GitHub: Push tag vX.Y.Z-COACH
    GitHub->>CD: Trigger CD workflow
    CD->>CD: Parse & validate semver and coach
    CD->>Test: Run tests & coverage
    Test-->>CD: Test results
    CD->>Registry: Login, setup Buildx, build & push images (amd64, arm64)
    Registry-->>CD: Images pushed
    CD->>CD: Generate changelog (compare with previous semver-tag)
    CD->>Release: Create release with changelog & image tags
    Release-->>Developer: Release published
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title follows Conventional Commits format with 'feat:' prefix, is descriptive of the main change (tag-based releases with coach naming), stays well under 80 characters (70 chars), and accurately reflects the changeset which adds CD workflow, CHANGELOG, and release documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/named-releases-cicd

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.

@codacy-production
Copy link

codacy-production bot commented Jan 24, 2026

Coverage summary from Codacy

See diff coverage on Codacy

Coverage variation Diff coverage
+0.00%
Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (60d44f7) 131 119 90.84%
Head commit (35860f6) 131 (+0) 119 (+0) 90.84% (+0.00%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#469) 0 0 ∅ (not applicable)

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

See your quality gate settings    Change summary preferences

@codecov
Copy link

codecov bot commented Jan 24, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 89.65%. Comparing base (60d44f7) to head (35860f6).
⚠️ Report is 3 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #469   +/-   ##
=======================================
  Coverage   89.65%   89.65%           
=======================================
  Files           3        3           
  Lines         116      116           
=======================================
  Hits          104      104           
  Misses         12       12           
Components Coverage Δ
Services 79.31% <ø> (ø)
Routes 100.00% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.github/workflows/python-cd.yml:
- Around line 111-164: The generated changelog in the "Generate changelog" step
is written to changelog.txt and exported as the step output (changelog) but not
included in the release; update the "Create GitHub Release" action
(softprops/action-gh-release) to embed the changelog by adding a Changelog
section inside the body and referencing the step output ${{
steps.changelog.outputs.changelog }} (e.g. append "## Changelog\n\n${{
steps.changelog.outputs.changelog }}" to the existing body), or alternatively
attach changelog.txt via the action's files/assets input if you prefer it as an
asset.

In `@CHANGELOG.md`:
- Line 55: Replace the placeholder release date "2026-XX-XX" in the CHANGELOG
header "## [1.0.0 - Ancelotti] - 2026-XX-XX" with a valid token such as "TBD" or
move the entire "1.0.0 - Ancelotti" entry under an "## [Unreleased]" section so
the changelog contains no invalid dates; update the header text accordingly to
ensure tooling and readers parse the file correctly.
🧹 Nitpick comments (2)
.github/workflows/python-cd.yml (1)

43-57: Consider sourcing VALID_COACHES from a single source of truth.
Hardcoding the list here risks drift from CHANGELOG/README. If feasible, parse it from CHANGELOG.md or a dedicated shared file.

.github/workflows/python-ci.yml (1)

19-26: Reconsider version pinning strategy for GitHub actions.

actions/checkout is pinned to v6.0.1, which is one patch behind the latest v6.0.2 released Jan 9. actions/setup-python is already at v6.1.0, the current latest release, so no update is needed there.

Consider using major version tags (v6) instead of exact versions to automatically receive patch updates and security fixes without manual intervention, as recommended by GitHub's guidance for these actions.

- Add Changelog section to GitHub release body
- Replace "2026-XX-XX" with "TBD" in CHANGELOG.md
@nanotaboada nanotaboada force-pushed the feat/named-releases-cicd branch from a1deeb9 to 35860f6 Compare January 24, 2026 15:49
@sonarqubecloud
Copy link

@nanotaboada nanotaboada merged commit 20740ba into master Jan 24, 2026
18 checks passed
@nanotaboada nanotaboada deleted the feat/named-releases-cicd branch January 24, 2026 16:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] Implement Named Releases with Tag-Based Deployment

2 participants