1+ name : Build and Release CodeCatcher
2+
3+ on :
4+ push :
5+ branches :
6+ - master
7+
8+ permissions :
9+ contents : write
10+ jobs :
11+ build :
12+ runs-on : ubuntu-latest
13+ steps :
14+ - name : Checkout repository
15+ uses : actions/checkout@v2
16+ with :
17+ fetch-depth : 0
18+
19+ - name : Set up jdk
20+ uses : actions/setup-java@v2
21+ with :
22+ distribution : ' adopt'
23+ java-version : ' 17'
24+
25+ - name : Setup some android tools
26+ run : sudo apt-get update && sudo apt-get install -y aapt apksigner
27+
28+ - name : Cache gradle dependencies
29+ uses : actions/cache@v4
30+ with :
31+ path : ~/.gradle/caches
32+ key : codecatcher-${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
33+ restore-keys : |
34+ codecatcher-${{ runner.os }}-gradle-
35+
36+ - name : Build apk
37+ run : ./gradlew assembleRelease
38+
39+ - name : Decode keystore
40+ env :
41+ JKS_BASE64 : ${{ secrets.JKS_BASE64 }}
42+ run : |
43+ echo "$JKS_BASE64" | base64 --decode > certificate.jks
44+
45+ - name : Sign apk with key
46+ env :
47+ JKS_PASSWORD : ${{ secrets.JKS_PASSWORD }}
48+ KEY_ALIAS : ${{ secrets.KEY_ALIAS }}
49+ KEY_PASSWORD : ${{ secrets.KEY_PASSWORD }}
50+ run : |
51+ UNSIGNED_APK_PATH="app/build/outputs/apk/release/app-release.apk"
52+ SIGNED_APK_PATH="app/build/outputs/apk/release/app-release-signed.apk"
53+
54+ apksigner sign \
55+ --ks certificate.jks \
56+ --ks-key-alias "$KEY_ALIAS" \
57+ --ks-pass "pass:$JKS_PASSWORD" \
58+ --key-pass "pass:$KEY_PASSWORD" \
59+ --out $SIGNED_APK_PATH \
60+ $UNSIGNED_APK_PATH
61+
62+ - name : Verify apk
63+ run : |
64+ apksigner verify --print-certs "app/build/outputs/apk/release/app-release-signed.apk"
65+
66+ - name : Rename APK as app name
67+ run : |
68+ mv app/build/outputs/apk/release/app-release-signed.apk "app/build/outputs/apk/release/CodeCatcher.apk"
69+
70+ - name : Create a tag
71+ run : |
72+ VERSION_NAME=$(aapt dump badging app/build/outputs/apk/release/CodeCatcher.apk | grep versionName | awk -F"'" '{print $6}')
73+ echo "Version Name: $VERSION_NAME"
74+ TAG="v${VERSION_NAME}"
75+ git config user.name "GitHub Actions"
76+ git config user.email "actions@github.com"
77+ git tag $TAG
78+ git push origin $TAG
79+
80+ - name : Get latest tag
81+ id : get_tag
82+ run : |
83+ # Fetch the latest tag from Git
84+ LATEST_TAG=$(git describe --tags --abbrev=0)
85+ echo "Latest Tag: $LATEST_TAG"
86+ echo "latest_tag=$LATEST_TAG" >> $GITHUB_OUTPUT
87+
88+ - name : Create release
89+ id : create_release
90+ uses : softprops/action-gh-release@v2
91+ with :
92+ tag_name : ${{ steps.get_tag.outputs.latest_tag }}
93+ files : " app/build/outputs/apk/release/CodeCatcher.apk"
94+ env :
95+ GITHUB_TOKEN : ${{ secrets.TOKEN }}
0 commit comments