Release from git.borodutch.com (Forgejo Actions) #36

Open
backmeupplz wants to merge 3 commits from forgejo-release into main
Owner

Moves the Release workflow from .github/workflows/ to .forgejo/workflows/, so a release published on git.borodutch.com ships everything. GitHub stops running it once this is merged.

What changed

  • Trigger: release: published on Forgejo, plus workflow_dispatch with the same dry-run / testflight-only / full modes. Gates, store submissions and artifact names are unchanged.
  • APK on the release: the new shared .github/scripts/attach.sh attaches absplus-X.Y.Z.apk and absplus.apk to the Forgejo release, replacing files with the same name. It then waits for the tag to reach the GitHub mirror, creates the GitHub release if it's missing (same title, notes and prerelease flag, --verify-tag), and uploads the same files there with --clobber. absplus.app and F-Droid keep downloading from GitHub. It uses GH_MIRROR_TOKEN for GitHub and the job token for Forgejo.
  • Android job: adds android-actions/setup-android@v3 (platform-tools), because the Forgejo job image has no Android SDK.
  • iOS job (shared Mac, host mode): the App Store Connect key goes to a folder in $RUNNER_TEMP, which is removed at the end, instead of ~/.appstoreconnect. ios/release.sh (which now passes --p8-file-path to altool) and appstore.py read API_PRIVATE_KEYS_DIR and still default to ~/.appstoreconnect/private_keys. I dropped the sudo xcode-select "Newest Xcode" step: it needs sudo and would change the whole machine, so the Mac's selected Xcode is used.
  • .github/scripts stays in place. It is byte-identical in absplus, meshtastic-plus and todorant (new: attach.sh, plus the appstore.py key folder).
  • The README release section now uses tea release create.

Validation

  • forgejo-runner validate passes. The script unit tests pass. attach.sh was run against a mock Forgejo API with a stub gh, covering the replace, create and missing-release paths.
  • A temporary push trigger with MODE hard-coded to dry-run ran on the Forgejo runners (run 37), and I removed it in the last commit:
    • version: ok.
    • iOS on macos-26: archive, cloud-signed export and the App Review dry-run all succeeded ("Would use build 1.2.1 (6), now VALID…").
    • Android: built and signed. Google Play's dry run got as far as the bundle upload, where Play answered "Version code 6 has already been used". That is expected when dry-running an already-released version and shows the Play credentials work. The F-Droid dry run printed its diff.
  • Not exercised, since that would publish: the attach.sh uploads with the real tokens.

Not ported

Nothing. Every job runs on Forgejo.

First real release

  1. Merge this PR.
  2. Bump versionName/versionCode, add fastlane/metadata/android/en-US/changelogs/<versionCode>.txt, and merge.
  3. tea release create --repo backmeupplz/absplus --tag vX.Y.Z --target main --title "ABS+ X.Y.Z" --note-file fastlane/metadata/android/en-US/changelogs/<versionCode>.txt
  4. Watch Actions → Release on git.borodutch.com. Check that both releases (Forgejo and GitHub) have absplus-X.Y.Z.apk and absplus.apk, and that GitHub marks the release Latest.

🤖 Generated with Claude Code

Moves the Release workflow from `.github/workflows/` to `.forgejo/workflows/`, so a release published on git.borodutch.com ships everything. GitHub stops running it once this is merged. ## What changed - **Trigger:** `release: published` on Forgejo, plus `workflow_dispatch` with the same `dry-run` / `testflight-only` / `full` modes. Gates, store submissions and artifact names are unchanged. - **APK on the release:** the new shared `.github/scripts/attach.sh` attaches `absplus-X.Y.Z.apk` and `absplus.apk` to the Forgejo release, replacing files with the same name. It then waits for the tag to reach the GitHub mirror, creates the GitHub release if it's missing (same title, notes and prerelease flag, `--verify-tag`), and uploads the same files there with `--clobber`. absplus.app and F-Droid keep downloading from GitHub. It uses `GH_MIRROR_TOKEN` for GitHub and the job token for Forgejo. - **Android job:** adds `android-actions/setup-android@v3` (platform-tools), because the Forgejo job image has no Android SDK. - **iOS job (shared Mac, host mode):** the App Store Connect key goes to a folder in `$RUNNER_TEMP`, which is removed at the end, instead of `~/.appstoreconnect`. `ios/release.sh` (which now passes `--p8-file-path` to altool) and `appstore.py` read `API_PRIVATE_KEYS_DIR` and still default to `~/.appstoreconnect/private_keys`. I dropped the `sudo xcode-select` "Newest Xcode" step: it needs sudo and would change the whole machine, so the Mac's selected Xcode is used. - `.github/scripts` stays in place. It is byte-identical in absplus, meshtastic-plus and todorant (new: `attach.sh`, plus the `appstore.py` key folder). - The README release section now uses `tea release create`. ## Validation - `forgejo-runner validate` passes. The script unit tests pass. `attach.sh` was run against a mock Forgejo API with a stub `gh`, covering the replace, create and missing-release paths. - A temporary `push` trigger with MODE hard-coded to `dry-run` ran on the Forgejo runners (run 37), and I removed it in the last commit: - version: ok. - iOS on macos-26: archive, cloud-signed export and the App Review dry-run all succeeded ("Would use build 1.2.1 (6), now VALID…"). - Android: built and signed. Google Play's dry run got as far as the bundle upload, where Play answered "Version code 6 has already been used". That is expected when dry-running an already-released version and shows the Play credentials work. The F-Droid dry run printed its diff. - Not exercised, since that would publish: the `attach.sh` uploads with the real tokens. ## Not ported Nothing. Every job runs on Forgejo. ## First real release 1. Merge this PR. 2. Bump `versionName`/`versionCode`, add `fastlane/metadata/android/en-US/changelogs/<versionCode>.txt`, and merge. 3. `tea release create --repo backmeupplz/absplus --tag vX.Y.Z --target main --title "ABS+ X.Y.Z" --note-file fastlane/metadata/android/en-US/changelogs/<versionCode>.txt` 4. Watch Actions → Release on git.borodutch.com. Check that both releases (Forgejo and GitHub) have `absplus-X.Y.Z.apk` and `absplus.apk`, and that GitHub marks the release Latest. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
A release published on git.borodutch.com now runs the Release workflow there. It attaches the
APKs to that release and to the same release on the GitHub mirror, which it creates when missing
(releases don't mirror and the download links point at GitHub). The Android job installs the SDK,
which the Forgejo job image lacks, and the iOS job keeps the App Store Connect key in its temp
folder instead of ~/.appstoreconnect on the shared Mac, without sudo xcode-select.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TEMPORARY: dry-run this branch on Forgejo Actions
Some checks failed
Release / version (push) Successful in 13s
Release / ios (push) Successful in 47s
Release / android (push) Failing after 7m17s
7074f701df
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove the temporary dry-run trigger
Some checks failed
Checks / iOS (loading) (pull_request) Failing after 2m11s
Checks / iOS (isolation-retained) (pull_request) Failing after 12m8s
Checks / android (pull_request) Successful in 8m15s
Checks / iOS (offline-progress) (pull_request) Successful in 18m58s
df810afb51
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Some checks failed
Checks / iOS (loading) (pull_request) Failing after 2m11s
Checks / iOS (isolation-retained) (pull_request) Failing after 12m8s
Checks / android (pull_request) Successful in 8m15s
Checks / iOS (offline-progress) (pull_request) Successful in 18m58s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin forgejo-release:forgejo-release
git switch forgejo-release

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff forgejo-release
git switch forgejo-release
git rebase main
git switch main
git merge --ff-only forgejo-release
git switch forgejo-release
git rebase main
git switch main
git merge --no-ff forgejo-release
git switch main
git merge --squash forgejo-release
git switch main
git merge --ff-only forgejo-release
git switch main
git merge forgejo-release
git push origin main
Sign in to join this conversation.
No description provided.