Update version and publish APK #10
This file contains 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: Update version and publish APK | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: "Version number (must be in x.y.z format)" | |
required: true | |
release_type: | |
description: "Type of release (release or preview)" | |
required: true | |
default: "preview" | |
type: choice | |
options: | |
- release | |
- preview | |
jobs: | |
update_version_and_publish: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Get updated version name and version code | |
run: | | |
# Extract version name from github inputs | |
BASE_VERSION="${{ github.event.inputs.version }}" | |
BRANCH_NAME="release/v${BASE_VERSION}" | |
git fetch --all | |
if git rev-parse --verify origin/${BRANCH_NAME} >/dev/null 2>&1; then | |
echo "Branch ${BRANCH_NAME} exists, checking out..." | |
git checkout ${BRANCH_NAME} | |
else | |
echo "Branch ${BRANCH_NAME} does not exist, creating..." | |
git checkout -b ${BRANCH_NAME} | |
fi | |
CURRENT_RC=$(git tag -l "v${BASE_VERSION}-rc*" | sort | tail -n 1) | |
if [[ -z "$CURRENT_RC" ]]; then | |
RC_SUFFIX="-rc01" | |
else | |
SUFFIX_NUMBER=$(echo $CURRENT_RC | grep -oP '(?<=-rc)\d+') | |
NEXT_SUFFIX=$(printf "%02d" $((10#$SUFFIX_NUMBER + 1))) | |
RC_SUFFIX="-rc${NEXT_SUFFIX}" | |
fi | |
# Version name with rc suffix | |
if [[ "${{ github.event.inputs.release_type }}" == "preview" ]]; then | |
VERSION_NAME="${BASE_VERSION}${RC_SUFFIX}" | |
else | |
VERSION_NAME="${BASE_VERSION}" | |
fi | |
# Get existing version code from build.gradle | |
VERSION_CODE=$(grep "versionCode" app/build.gradle.kts | awk '{print $3}' | tr -d '\n') | |
# Increment existing version code by 1 | |
VERSION_CODE=$((VERSION_CODE + 1)) | |
# Set environment variable for later use | |
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV | |
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV | |
- name: Update app/build.gradle.kts updated version name and version code | |
run: | | |
echo "Updating version code to ${{ env.VERSION_CODE }} and version name to ${{ env.VERSION_NAME }}" | |
sed -i "s/versionCode = [0-9]\+/versionCode = ${{ env.VERSION_CODE }}/g" app/build.gradle.kts | |
sed -i "s/versionName = \"[^\"]*\"/versionName = \"${{ env.VERSION_NAME }}\"/g" app/build.gradle.kts | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: 3.3.0 | |
bundler-cache: true | |
- name: Set Up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: 17 | |
distribution: temurin | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
with: | |
validate-wrappers: true | |
gradle-home-cache-cleanup: true | |
- name: Decode keystore file | |
uses: timheuer/base64-to-file@v1 | |
id: keystore | |
with: | |
fileName: 'keystore.jks' | |
encodedString: ${{ secrets.KEYSTORE }} | |
- name: Decode Play API credentials file | |
uses: timheuer/base64-to-file@v1 | |
id: play_api_credentials | |
with: | |
fileName: 'play-api-credentials.json' | |
encodedString: ${{ secrets.PLAY_API_CREDENTIALS }} | |
- name: Build app | |
run: bundle exec fastlane build | |
if: ${{ github.event.inputs.release_type == 'preview' }} | |
env: | |
KEYSTORE: ${{ steps.keystore.outputs.filePath }} | |
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | |
KEY_ALIAS: ${{ secrets.KEY_ALIAS }} | |
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
- name: Build app and publish | |
run: bundle exec fastlane build | |
if: ${{ github.event.inputs.release_type == 'release' }} | |
env: | |
KEYSTORE: ${{ steps.keystore.outputs.filePath }} | |
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | |
KEY_ALIAS: ${{ secrets.KEY_ALIAS }} | |
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
PLAY_API_CREDENTIALS: ${{ steps.play_api_credentials.outputs.filePath }} | |
- name: Rename Files | |
run: | | |
mv app/build/outputs/apk/release/app-arm64-v8a-release.apk app/build/outputs/apk/release/nextplayer-v${{ env.VERSION_NAME }}-arm64-v8a.apk | |
mv app/build/outputs/apk/release/app-armeabi-v7a-release.apk app/build/outputs/apk/release/nextplayer-v${{ env.VERSION_NAME }}-armeabi-v7a.apk | |
mv app/build/outputs/apk/release/app-universal-release.apk app/build/outputs/apk/release/nextplayer-v${{ env.VERSION_NAME }}-universal.apk | |
mv app/build/outputs/apk/release/app-x86-release.apk app/build/outputs/apk/release/nextplayer-v${{ env.VERSION_NAME }}-x86.apk | |
mv app/build/outputs/apk/release/app-x86_64-release.apk app/build/outputs/apk/release/nextplayer-v${{ env.VERSION_NAME }}-x86_64.apk | |
- name: Commit and Push Changes | |
run: | | |
git config user.name "GitHub Actions" | |
git config user.email "[email protected]" | |
git add . | |
git commit -m "Release version ${{ env.VERSION_NAME }}" || echo "No changes to commit" | |
git config push.autoSetupRemote true | |
git push --set-upstream origin ${BRANCH_NAME} | |
- name: Create Draft Release | |
id: create_draft_release | |
uses: softprops/action-gh-release@v2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
files: app/build/outputs/apk/release/nextplayer* | |
draft: true | |
name: v${{ env.VERSION_NAME }} | |
generate_release_notes: true | |
prerelease: ${{ github.event.inputs.release_type == 'preview' }} | |
tag_name: v${{ env.VERSION_NAME }} |