Skip to content

feat: Add config import/export & upgrade Gradle/workflows #22

feat: Add config import/export & upgrade Gradle/workflows

feat: Add config import/export & upgrade Gradle/workflows #22

Workflow file for this run

name: CI
on:
push:
branches:
- "**"
# Serialize CI builds so the daily build number is deterministic.
concurrency:
group: ci-daily-build-number
cancel-in-progress: false
permissions:
contents: read
actions: read
jobs:
build:
name: Build CI APK
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up JDK 21
uses: actions/setup-java@v6
with:
distribution: temurin
java-version: 21
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v6
- name: Restore signing keystore from secrets
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
run: |
if [ -n "$KEYSTORE_BASE64" ]; then
mkdir -p keystore
echo "$KEYSTORE_BASE64" | base64 --decode > keystore/release.jks
printf 'storeFile=keystore/release.jks\nstorePassword=%s\nkeyAlias=betterheybox\nkeyPassword=%s\n' \
"$KEYSTORE_PASSWORD" "$KEYSTORE_PASSWORD" > keystore.properties
else
echo "No KEYSTORE_BASE64 secret - building unsigned APK"
fi
- name: Calculate CI version
id: version
env:
GH_TOKEN: ${{ github.token }}
GITHUB_RUN_ID: ${{ github.run_id }}
run: |
base_version="$(git tag --list 'v*' --sort=-version:refname | head -n 1)"
if [ -z "$base_version" ]; then
base_version="$(sed -n 's/^VERSION_NAME=//p' gradle.properties | head -n 1)"
fi
base_version="${base_version#v}"
if [[ ! "$base_version" =~ ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$ ]]; then
echo "VERSION_NAME must be numeric semver (x.y.z), got: $base_version" >&2
exit 1
fi
build_date="$(date -u +%y%m%d)"
build_date_iso="$(date -u +%Y-%m-%d)"
runs_today="$(gh api --paginate \
"/repos/${GITHUB_REPOSITORY}/actions/workflows/ci.yml/runs?event=push&created=${build_date_iso}..${build_date_iso}&per_page=100" \
--jq '.workflow_runs[].id' 2>/dev/null \
| grep -v "^${GITHUB_RUN_ID}$" \
| sort -u \
| wc -l \
| tr -d ' ')"
daily_build=$(( ${runs_today:-0} + 1 ))
ci_version="v${base_version}-${build_date}${daily_build}"
echo "version=${ci_version}" >> "$GITHUB_OUTPUT"
echo "version_name=${ci_version}" >> "$GITHUB_OUTPUT"
echo "version_code=${GITHUB_RUN_NUMBER}" >> "$GITHUB_OUTPUT"
echo "CI version: ${ci_version}"
- name: Build release APK
run: |
chmod +x gradlew
./gradlew assembleRelease \
--project-prop VERSION_NAME="${{ steps.version.outputs.version_name }}" \
--project-prop VERSION_CODE="${{ steps.version.outputs.version_code }}"
- name: Prepare CI artifact
env:
CI_VERSION: ${{ steps.version.outputs.version }}
run: |
mkdir -p dist
cp app/build/outputs/apk/release/*.apk "dist/BetterHeybox-${CI_VERSION}.apk"
printf '%s\n' "$CI_VERSION" > dist/version.txt
- name: Upload CI artifact
uses: actions/upload-artifact@v7
with:
name: BetterHeybox-${{ steps.version.outputs.version }}
path: dist/
retention-days: 14