Skip to content

Build

Build #31

Workflow file for this run

name: Build
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
version_name:
description: 'Version name (e.g. 1.2.0)'
required: true
default: '1.0.0'
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v5
- name: Resolve version
id: ver
run: |
if [ "${{ github.event_name }}" = "push" ]; then
# strip leading 'v' from tag
NAME=${GITHUB_REF_NAME#v}
else
NAME=${{ github.event.inputs.version_name }}
fi
# version code = major*10000 + minor*100 + patch
IFS='.' read -r MAJ MIN PAT <<< "$NAME"
CODE=$(( MAJ * 10000 + MIN * 100 + (PAT + 0) ))
echo "name=$NAME" >> $GITHUB_OUTPUT
echo "code=$CODE" >> $GITHUB_OUTPUT
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Prepare Android signing
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
for key in ANDROID_KEYSTORE_BASE64 ANDROID_KEYSTORE_PASSWORD ANDROID_KEY_ALIAS; do
if [ -z "${!key}" ]; then
echo "Missing required secret: $key" >&2
exit 1
fi
done
echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/release.keystore"
KEY_PASSWORD="${ANDROID_KEY_PASSWORD:-$ANDROID_KEYSTORE_PASSWORD}"
keytool -list \
-keystore "$RUNNER_TEMP/release.keystore" \
-storepass "$ANDROID_KEYSTORE_PASSWORD" \
-alias "$ANDROID_KEY_ALIAS" \
-keypass "$KEY_PASSWORD" >/dev/null
echo "SIGNING_KEY_PASSWORD=$KEY_PASSWORD" >> "$GITHUB_ENV"
- name: Build release APK
env:
SIGNING_STORE_FILE: ${{ runner.temp }}/release.keystore
SIGNING_STORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
SIGNING_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ env.SIGNING_KEY_PASSWORD }}
run: |
./gradlew assembleRelease \
-PversionName=${{ steps.ver.outputs.name }} \
-PversionCode=${{ steps.ver.outputs.code }}
- name: Upload APK
uses: actions/upload-artifact@v6
with:
name: bbspace-${{ steps.ver.outputs.name }}.apk
path: app/build/outputs/apk/release/*.apk
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: app/build/outputs/apk/release/*.apk
body_path: .github/release-notes.md
- name: Create GitHub Release (manual)
if: github.event_name == 'workflow_dispatch'
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.ver.outputs.name }}
name: v${{ steps.ver.outputs.name }}
target_commitish: ${{ github.sha }}
files: app/build/outputs/apk/release/*.apk
body_path: .github/release-notes.md