Skip to content

Commit

Permalink
Create release workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
mostafaalagamy authored Aug 10, 2024
1 parent 7e5c763 commit f97f0e6
Showing 1 changed file with 164 additions and 0 deletions.
164 changes: 164 additions & 0 deletions .github/workflows/release.yml
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

0 comments on commit f97f0e6

Please sign in to comment.