Skip to content

Commit 2dae353

Browse files
add workflow for building and signing app
1 parent 4935775 commit 2dae353

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
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

Comments
 (0)