Build #31
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |