Repository navigation
ci: one release "latest" with stable file names and SHA256SUMS (#60) - #64
Conversation
Every push to master (or a manual run on master) replaces the latest
release once all build and test jobs pass: title "Camex <version>",
files camex-{aarch64,arm,mipsel,x86_64}, camex-android.apk (signed,
checked), camex-macos.zip, camex-windows-{x86_64,i686}.zip and
SHA256SUMS, checked with sha256sum -c before publishing. The v* tag
trigger and the workflow_dispatch version input are gone; a newer run
cancels an older one. The APK goes to Telegram only when the version
differs from the title of the previous latest release.
READMEs: a Permanent links section, the release badge links to
releases/latest, the release process describes latest instead of
tags.
PR Summary by QodoPublish one replaceable latest release with stable assets and checksums
AI Description
Diagram
High-Level Assessment
Files changed (4)
|
Code Review by Qodo
1.
|
| gh release delete latest --repo "$GITHUB_REPOSITORY" --cleanup-tag --yes 2>/dev/null || true | ||
| gh release create latest release/* \ |
There was a problem hiding this comment.
2. A failed replacement removes all downloads 🐞 Bug ☼ Reliability
The publish step deletes the existing release and tag before attempting a single `gh release create`, with no recovery if creation fails. A cancellation or API failure after deletion leaves the documented latest downloads unavailable until another run succeeds.
Agent Prompt
## Issue description
Deleting the existing release before its replacement succeeds can leave the permanent downloads absent.
## Fix Focus Areas
- .github/workflows/build.yml[530-536]
- .github/workflows/build.yml[25-27]
## Recommended Fix
Publish using an update or staged replacement that preserves the existing release on failure. Do not suppress unexpected deletion errors, and account for cancellation during publication.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
…f-way Review on #64: - master runs share one concurrency group (pushes and manual runs) and are queued instead of cancelled, so a run is never stopped between deleting and recreating latest, nor before its Telegram post; - the release job checks that the built commit is still the head of master and skips publishing otherwise (an older manual run); - gh release create is retried three times, removing a half-created release between attempts; - only 'release not found' counts as no previous release; any other lookup error fails the job instead of posting an unchanged version.
|
Thanks, @qodo. All four addressed in bcdd010:
Checked with stubbed |
Thanks for the detailed verification. Based on the changes described in
The remaining Telegram API failure behavior is an acknowledged best-effort notification policy rather than a release correctness issue. |
Closes #60 (steps 1–3 and the documentation; step 4, removing the old releases, is done by hand after the first
latestis checked).Release job (
.github/workflows/build.yml)masteror a manualworkflow_dispatchonmaster, afterlinux,smoke,android,windows,wine-smokeandmacos. Thev*tag trigger and theversioninput are removed, and so is the version-vs-tag check. Aconcurrencygroup cancels an older run of the same branch, solatestcarries the newest commit.gh release delete latest --cleanup-tag, thengh release create latest --latest --target <built commit> --title "Camex <CAMEX_VERSION>"with short notes (version, commit, pointers to CHANGELOG.md and README.md).camex-aarch64,camex-arm,camex-mipsel,camex-x86_64,camex-android.apk,camex-macos.zip,camex-windows-x86_64.zip,camex-windows-i686.zip,SHA256SUMS(sha256sum *, thensha256sum -cbefore publishing). Every file is taken by name, so the debug APK, which is now built on every run, cannot slip in. The release APK must passapksigner verify: an unsigned one fails the job instead of being published.Camex <version>differs from the title of the currentlatest, as in OpenIPC/vtesse.!startsWith(github.ref, 'refs/tags/')condition (there are no tags any more).Checked locally: the YAML parses; the "Collect release files" step was run with stub artifacts: all nine files,
sha256sum -cOK, the zip contents are right (camex.exe,LICENSE,README.md,wintun.dllof the right architecture), andnewis set only when the title changes.Documentation
releases/latest,releases/latest/download/<file>, the table of files,sha256sum -c); the release badge links toreleases/latest; "Versioning & Release Process" describeslatestinstead of tags (PR → merge →latestreplaced; Telegram on a version change; manual rebuild).CHANGELOG.mdalready names this change in 3.0.2 (docs: CHANGELOG.md with the version history (#59) #62).After the merge
The first push to
masterpublisheslatestas Camex 3.0.2 and posts the APK to Telegram. When its files are checked (the Linux binaries on OpenIPC cameras, the APK on the TV box,SHA256SUMS), thev2.3.8,v3.0.0andv3.0.1releases and their tags are removed (#60 step 4); their notes are in CHANGELOG.md (#59).