Skip to content

[codex] Add tag-driven GitHub releases#6

Merged
lobis merged 4 commits intomainfrom
codex/github-release-tags
Apr 9, 2026
Merged

[codex] Add tag-driven GitHub releases#6
lobis merged 4 commits intomainfrom
codex/github-release-tags

Conversation

@lobis
Copy link
Copy Markdown
Collaborator

@lobis lobis commented Apr 9, 2026

What changed

  • add a dedicated tag-driven GitHub release workflow for vMAJOR.MINOR.PATCH tags
  • publish release archives for macOS amd64, Windows amd64, Linux amd64, and Linux arm64
  • add AlmaLinux RPM build jobs for el9/el10 on x86_64 and aarch64
  • publish all generated archives, RPMs, and a SHA256SUMS.txt file to the GitHub Release
  • add eos-tui.spec for RPM packaging and document the release assets in the README

Why

The repo had CI but no automated release path. This adds a maintainable release workflow similar in shape to the GFAL project, while keeping this repo's packaging focused on Go binaries and RPMs.

Validation

  • gofmt -l .
  • go test ./...
  • go build ./...
  • parsed .github/workflows/release.yml locally
  • ran a local AlmaLinux 9 RPM smoke build from eos-tui.spec, which produced an RPM successfully

Notes

  • the generic Linux tarballs are built with CGO_ENABLED=0, so we do not need separate Ubuntu and AlmaLinux binary archives
  • the RPM jobs still build distro-specific artifacts for AlmaLinux 9 and 10

Summary by CodeRabbit

  • New Features

    • Homebrew install available via new tap and formula
    • Releases published automatically on tagged versions with downloadable archives
  • Chores

    • Automated release pipeline producing macOS (amd64), Windows (amd64), Linux (amd64/arm64) binaries
    • RPM packages for AlmaLinux 9/10 on x86_64 and aarch64
    • SHA256SUMS provided with each release
  • Documentation

    • README updated with Homebrew instructions, release details, and artifact list

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 9, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

Adds a new GitHub Actions release pipeline triggered by semver tags, a Homebrew tap update step, RPM packaging spec, and README release/install documentation. The workflow verifies formatting/tests, cross-compiles native binaries, builds RPMs in AlmaLinux containers, publishes a GitHub Release with artifacts and checksums, and optionally updates a Homebrew formula.

Changes

Cohort / File(s) Summary
Release Automation Workflow
.github/workflows/release.yml
Adds a tag-triggered GitHub Actions workflow with jobs: verify (tag check, gofmt, tests, go build), build-native (CGO=0 cross-compile matrix, archive artifacts), build-rpm (create source tarball, rpm build inside AlmaLinux containers across arches/versions), github-release (collect artifacts, generate SHA256SUMS.txt, publish release), and update-homebrew-tap (render/update Homebrew formula and push when token present).
Release Documentation
README.md
Adds "Via Homebrew" and "Releases" instructions describing tag-based release triggering (vMAJOR.MINOR.PATCH), listed downloadable binaries (macOS amd64, Windows amd64, Linux amd64/arm64), CGO-disabled Linux builds, RPM artifacts (AlmaLinux 9/10 x86_64/aarch64), SHA256SUMS, and HOMEBREW_TAP_GITHUB_TOKEN usage for auto-updating formula.
RPM Package Specification
eos-tui.spec
Introduces an RPM spec file defining package metadata, source tarball, runtime dependency (openssh-clients), build steps (CGO disabled, Go build with -trimpath/-buildvcs=false and LDFLAGS), installation of binary, LICENSE and README, file list, and initial changelog entry.

Sequence Diagram(s)

sequenceDiagram
    participant Git as "Git (tag push)"
    participant GH as "GitHub Actions"
    participant Builder as "Build runners / containers"
    participant ArtifactStore as "GitHub Artifacts"
    participant Release as "GitHub Release"
    participant TapRepo as "Homebrew Tap Repo"

    Git->>GH: Push tag vMAJOR.MINOR.PATCH
    GH->>GH: verify job (tag format, gofmt, tests, go build)
    GH->>Builder: build-native matrix (cross-compile, archive)
    Builder-->>ArtifactStore: upload archives
    GH->>Builder: build-rpm matrix (create src tar, rpmbuild in AlmaLinux)
    Builder-->>ArtifactStore: upload RPMs
    GH->>ArtifactStore: download all artifacts
    GH->>GH: compute SHA256SUMS.txt
    GH->>Release: create GitHub Release + attach artifacts and checksums
    alt HOMEBREW_TAP_GITHUB_TOKEN present
      GH->>Release: download source tarball
      GH->>TapRepo: update Formula/eos-tui.rb and push if changed
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐇 I tunneled a tag into the night,

Binaries baked, checksums set right,
RPMs rolled and formulas hopped,
Artifacts stacked — the release bell popped! 🥕✨

🚥 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 'Add tag-driven GitHub releases' clearly and accurately summarizes the main change: implementing an automated release workflow triggered by version tags.
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
  • Commit unit tests in branch codex/github-release-tags

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

@lobis lobis marked this pull request as ready for review April 9, 2026 12:49
Copy link
Copy Markdown

@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.

🧹 Nitpick comments (3)
.github/workflows/release.yml (1)

82-88: Consider adding macOS arm64 to the build matrix.

The matrix includes macOS amd64 but not arm64 (Apple Silicon). Adding a matrix entry would provide native binaries for Apple Silicon users:

Proposed matrix entry for macOS arm64
           - label: macOS amd64
             runner: macos-latest
             goos: darwin
             goarch: amd64
             exe_suffix: ""
             archive_ext: tar.gz
             asset_suffix: macos_amd64
+          - label: macOS arm64
+            runner: macos-latest
+            goos: darwin
+            goarch: arm64
+            exe_suffix: ""
+            archive_ext: tar.gz
+            asset_suffix: macos_arm64
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yml around lines 82 - 88, Add a macOS arm64 matrix
entry next to the existing "macOS amd64" entry: duplicate the block that
contains the label "macOS amd64" and change label to something like "macOS
arm64", set goarch: arm64 (leave runner: macos-latest and goos: darwin), update
exe_suffix/archive_ext as needed and set asset_suffix to a distinct value (e.g.,
macos_arm64) so the release job will build and publish native Apple Silicon
binaries alongside the amd64 ones; ensure the new entry is added to the same
matrix list used by the release workflow.
eos-tui.spec (1)

11-11: Consider using Recommends: instead of Requires: for openssh-clients.

Based on the application code, SSH is only used when an SSH target is explicitly configured via --ssh flag or EOS_TUI_SSH environment variable. When no SSH target is set, commands run locally without invoking SSH at all. Making this a hard dependency forces users to install openssh-clients even for local-only use cases.

Proposed change to make SSH a soft dependency
-Requires: openssh-clients
+Recommends: openssh-clients
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@eos-tui.spec` at line 11, Change the hard RPM dependency "Requires:
openssh-clients" to a soft dependency by replacing it with "Recommends:
openssh-clients"; update the spec entry that currently lists "Requires:
openssh-clients" (the package dependency line) so SSH is optional since SSH is
only used when the CLI flag --ssh or the EOS_TUI_SSH env var is set.
README.md (1)

45-50: Consider adding macOS arm64 (Apple Silicon) support.

The release binaries include macOS amd64 but not macOS arm64. Apple Silicon Macs (M1/M2/M3/M4) are now prevalent, and while Rosetta 2 can run amd64 binaries, native arm64 builds provide better performance and user experience.

This would require adding a corresponding matrix entry in the workflow as well.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 45 - 50, The README currently lists "macOS amd64" but
omits Apple Silicon; add "macOS arm64" to the release binaries list (replace or
append alongside the existing "macOS amd64" bullet). Also update the CI/release
workflow matrix (the matrix entry that defines target platforms/architectures)
to include an arm64 target for macOS so builds produce native Apple Silicon
binaries; look for references to the release matrix or strings like "macOS
amd64" in the workflow file and add the corresponding "macOS arm64" architecture
entry.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/workflows/release.yml:
- Around line 82-88: Add a macOS arm64 matrix entry next to the existing "macOS
amd64" entry: duplicate the block that contains the label "macOS amd64" and
change label to something like "macOS arm64", set goarch: arm64 (leave runner:
macos-latest and goos: darwin), update exe_suffix/archive_ext as needed and set
asset_suffix to a distinct value (e.g., macos_arm64) so the release job will
build and publish native Apple Silicon binaries alongside the amd64 ones; ensure
the new entry is added to the same matrix list used by the release workflow.

In `@eos-tui.spec`:
- Line 11: Change the hard RPM dependency "Requires: openssh-clients" to a soft
dependency by replacing it with "Recommends: openssh-clients"; update the spec
entry that currently lists "Requires: openssh-clients" (the package dependency
line) so SSH is optional since SSH is only used when the CLI flag --ssh or the
EOS_TUI_SSH env var is set.

In `@README.md`:
- Around line 45-50: The README currently lists "macOS amd64" but omits Apple
Silicon; add "macOS arm64" to the release binaries list (replace or append
alongside the existing "macOS amd64" bullet). Also update the CI/release
workflow matrix (the matrix entry that defines target platforms/architectures)
to include an arm64 target for macOS so builds produce native Apple Silicon
binaries; look for references to the release matrix or strings like "macOS
amd64" in the workflow file and add the corresponding "macOS arm64" architecture
entry.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0df913d8-5bec-45dc-bc56-ed7251051635

📥 Commits

Reviewing files that changed from the base of the PR and between 50485dd and 8a83af9.

📒 Files selected for processing (3)
  • .github/workflows/release.yml
  • README.md
  • eos-tui.spec

@lobis lobis merged commit 180da3b into main Apr 9, 2026
3 of 5 checks passed
@lobis lobis deleted the codex/github-release-tags branch April 9, 2026 13:19
lobis added a commit that referenced this pull request Apr 9, 2026
[codex] Add tag-driven GitHub releases
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.

1 participant