-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7e5c763
commit f97f0e6
Showing
1 changed file
with
164 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
name: Bump to new version | ||
on: | ||
push: | ||
branches: | ||
- '**' | ||
paths: | ||
- 'app/build.gradle.kts' | ||
workflow_dispatch: | ||
|
||
jobs: | ||
check-version: | ||
if: "!contains(github.ref, 'refs/tags')" | ||
runs-on: ubuntu-latest | ||
outputs: | ||
version_changed: ${{ steps.check_version.outputs.version_changed }} | ||
new_version: ${{ steps.check_version.outputs.new_version }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Check if version changed | ||
id: check_version | ||
run: | | ||
if [ ! -f app/build.gradle.kts ]; then | ||
echo "File app/build.gradle.kts does not exist" | ||
echo "version_changed=false" >> $GITHUB_OUTPUT | ||
exit 0 | ||
fi | ||
NEW_VERSION=$(grep -oP 'versionName\s*=\s*"\K[^"]+' app/build.gradle.kts || echo "") | ||
if [ -z "$NEW_VERSION" ]; then | ||
echo "Could not find versionName in app/build.gradle.kts" | ||
echo "version_changed=false" >> $GITHUB_OUTPUT | ||
exit 0 | ||
fi | ||
OLD_VERSION=$(git diff HEAD^ HEAD -- app/build.gradle.kts | grep -oP 'versionName\s*=\s*"\K[^"]+' || echo "") | ||
if [ -z "$OLD_VERSION" ]; then | ||
echo "Could not find previous version, assuming version changed" | ||
echo "version_changed=true" >> $GITHUB_OUTPUT | ||
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT | ||
elif [ "$OLD_VERSION" != "$NEW_VERSION" ]; then | ||
echo "Version changed from $OLD_VERSION to $NEW_VERSION" | ||
echo "version_changed=true" >> $GITHUB_OUTPUT | ||
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT | ||
else | ||
echo "Version did not change" | ||
echo "version_changed=false" >> $GITHUB_OUTPUT | ||
fi | ||
- name: Debug output | ||
run: | | ||
echo "version_changed: ${{ steps.check_version.outputs.version_changed }}" | ||
echo "new_version: ${{ steps.check_version.outputs.new_version }}" | ||
build: | ||
needs: check-version | ||
if: needs.check-version.outputs.version_changed == 'true' || github.event_name == 'workflow_dispatch' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
java-version: '17' | ||
distribution: 'zulu' | ||
cache: gradle | ||
|
||
- name: Grant execute permission for gradlew | ||
run: chmod +x gradlew | ||
|
||
- name: Build with Gradle | ||
run: ./gradlew assembleRelease | ||
|
||
- name: List APK files | ||
run: ls -R app/build/outputs/apk/foss/release/ | ||
|
||
- name: Upload APK | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: app | ||
path: app/build/outputs/apk/foss/release/*.apk | ||
|
||
sign: | ||
needs: build | ||
if: always() | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
java-version: '17' | ||
distribution: 'zulu' | ||
cache: gradle | ||
|
||
- name: Download APK from build job | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: app | ||
path: app/build/outputs/apk/foss/release/ | ||
|
||
- name: List downloaded APK files | ||
run: ls -R app/build/outputs/apk/foss/release/ | ||
|
||
- name: Decode keystore secret | ||
run: echo "${{ secrets.KEYSTORE }}" | base64 --decode > my-release-key.jks | ||
|
||
- name: Install Android SDK Build Tools | ||
run: | | ||
sudo apt-get update | ||
sudo apt-get install -y wget unzip | ||
wget "https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip" -O android-sdk.zip | ||
unzip android-sdk.zip -d $HOME/android-sdk | ||
mkdir -p $HOME/android-sdk/cmdline-tools/latest | ||
mv $HOME/android-sdk/cmdline-tools/* $HOME/android-sdk/cmdline-tools/latest/ --backup=numbered || true | ||
export ANDROID_HOME=$HOME/android-sdk | ||
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH | ||
yes | sdkmanager --licenses | ||
sdkmanager "build-tools;34.0.0" | ||
- name: Sign APK with apksigner | ||
run: | | ||
$ANDROID_HOME/build-tools/34.0.0/apksigner sign \ | ||
--ks my-release-key.jks \ | ||
--ks-key-alias ${{ secrets.KEY_ALIAS }} \ | ||
--ks-pass pass:${{ secrets.KEYSTORE_PASSWORD }} \ | ||
--key-pass pass:${{ secrets.KEY_PASSWORD }} \ | ||
--out app/build/outputs/apk/foss/release/app-foss-release.apk \ | ||
--v4-signing-enabled true \ | ||
app/build/outputs/apk/foss/release/app-foss-release-unsigned.apk | ||
- name: Verify Signed APK | ||
run: | | ||
$ANDROID_HOME/build-tools/34.0.0/apksigner verify --verbose app/build/outputs/apk/foss/release/app-foss-release.apk | ||
- name: Rename APK to Metrolist.apk | ||
run: mv app/build/outputs/apk/foss/release/app-foss-release.apk app/build/outputs/apk/foss/release/Metrolist.apk | ||
|
||
- name: Upload Signed APK | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: Metrolist | ||
path: app/build/outputs/apk/foss/release/Metrolist.apk | ||
|
||
create-release: | ||
needs: [check-version, sign] | ||
if: needs.check-version.outputs.version_changed == 'true' || github.event_name == 'workflow_dispatch' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Download Signed APK | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: Metrolist | ||
path: ./ | ||
|
||
- name: Create Release | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} | ||
run: | | ||
gh release create v${{ needs.check-version.outputs.new_version }} \ | ||
--title "${{ needs.check-version.outputs.new_version }}" \ | ||
--notes "Release of version ${{ needs.check-version.outputs.new_version }}" \ | ||
Metrolist.apk |