From fdc03ef1d1e6d8a763b5cf57f6c8285ef90e8d21 Mon Sep 17 00:00:00 2001 From: Siddarth Kumar Date: Wed, 27 May 2026 13:06:59 +0530 Subject: [PATCH] ci: init release candidate workflow --- .github/workflows/release-android.yml | 27 ++++++++++++++++++++++----- Makefile | 10 ++++++++-- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release-android.yml b/.github/workflows/release-android.yml index 0d83c49..2f0fff0 100644 --- a/.github/workflows/release-android.yml +++ b/.github/workflows/release-android.yml @@ -158,11 +158,19 @@ jobs: make setup make patch-node-modules + # Derive versionName from the pushed tag (v1.1.14, v1.1.14-rc1, ...). + - name: Determine version from tag + id: version + run: | + VERSION="${GITHUB_REF#refs/tags/v}" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + - name: Build release APK (${{ matrix.abi }}) run: | make release-android \ ANDROID_TARGETS=${{ matrix.gomobile_target }} \ - ANDROID_ABI=${{ matrix.abi }} + ANDROID_ABI=${{ matrix.abi }} \ + VERSION_NAME=${{ steps.version.outputs.version }} env: RELEASE_KEYSTORE_PATH: /tmp/release.keystore RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }} @@ -206,11 +214,16 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Read version from VERSION file + - name: Determine version from tag id: version run: | - VERSION=$(cat VERSION | tr -d '[:space:]') - echo "version=${VERSION}" >> "$GITHUB_OUTPUT" + VERSION="${GITHUB_REF#refs/tags/v}" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + if [[ "$VERSION" == *-rc* ]]; then + echo "is_rc=true" >> "$GITHUB_OUTPUT" + else + echo "is_rc=false" >> "$GITHUB_OUTPUT" + fi - name: Download all APKs uses: actions/download-artifact@v4 @@ -237,7 +250,11 @@ jobs: arm64-v8a versionCode (for F-Droid reproducible-build metadata): `${{ steps.stage.outputs.versioncode }}` append_body: true - draft: true + # RCs auto-publish as prereleases so F-Droid CI can pull them without + # waiting on a manual button click. Final releases stay draft so a + # human eyeballs the artifacts before they go public. + draft: ${{ steps.version.outputs.is_rc != 'true' }} + prerelease: ${{ steps.version.outputs.is_rc == 'true' }} generate_release_notes: true files: | apks/syncup-*.apk diff --git a/Makefile b/Makefile index 92939f3..c72d0c2 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,12 @@ IOS_APP = mobile-app/ios/build/Build/Products/Release-iphonesimulator/syncup.app ANDROID_PACKAGE = com.siddarthkay.syncup ANDROID_APK = mobile-app/android/app/build/outputs/apk/release/app-release.apk +# VERSION_NAME defaults to the VERSION file but can be overridden on the CLI, +# e.g. for release-candidate tags where the tag (v1.1.14-rc1) carries the +# version but the committed VERSION file still points at the last shipped +# release. CI passes this explicitly when building from a tag. +VERSION_NAME ?= $(shell cat VERSION 2>/dev/null | tr -d '[:space:]') + setup: @$(MAKE) -C backend setup @$(MAKE) -C mobile-app install @@ -56,14 +62,14 @@ patch-node-modules: release-android: @$(MAKE) -C backend android $(if $(ANDROID_TARGETS),ANDROID_TARGETS=$(ANDROID_TARGETS)) @$(MAKE) -C mobile-app release-android \ - VERSION_NAME=$(shell cat VERSION 2>/dev/null | tr -d '[:space:]') \ + VERSION_NAME=$(VERSION_NAME) \ ANDROID_ABI=$(ANDROID_ABI) # PR Android build: .pr applicationId suffix, release-signed. pr-android: @$(MAKE) -C backend android @$(MAKE) -C mobile-app pr-android \ - VERSION_NAME=$(shell cat VERSION 2>/dev/null | tr -d '[:space:]') + VERSION_NAME=$(VERSION_NAME) # One-shot: create + push certs/profiles to the match repo. Run this once, # on your Mac, after filling in .env.fastlane. Idempotent.