Skip to content

Commit

Permalink
feat(ci): apk size comparison workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
mikehardy committed Jun 19, 2024
1 parent 8e0b537 commit ce41a47
Showing 1 changed file with 113 additions and 0 deletions.
113 changes: 113 additions & 0 deletions .github/workflows/compare_apk_size.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: APK Size Comparison

on:
workflow_dispatch:
inputs:
prNumber:
description: "Number of PR to calculate sizes for"
required: true
type: number

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
sizeCheck:
name: APK Size Check
timeout-minutes: 30
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
env:
# could be better, '/home/runner' should be '~/' but neither that nor '$HOME' worked
STOREFILEDIR: /home/runner/src
STOREFILE: android-keystore
STOREPASS: testpass
KEYPASS: testpass
KEYALIAS: nrkeystorealias
steps:
- name: Configure JDK
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "21"

- name: Test Credential Prep
run: |
echo "KSTOREPWD=$STOREPASS" >> $GITHUB_ENV
echo "KEYPWD=$KEYPASS" >> $GITHUB_ENV
mkdir $STOREFILEDIR
cd $STOREFILEDIR
echo y | keytool -genkeypair -dname "cn=AnkiDroid, ou=ankidroid, o=AnkiDroid, c=US" -alias $KEYALIAS -keypass $KEYPASS -keystore "$STOREFILE" -storepass $STOREPASS -keyalg RSA -validity 20000
shell: bash

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
timeout-minutes: 5
with:
cache-read-only: true
gradle-home-cache-cleanup: true

- name: Checkout PR
uses: actions/checkout@v4
with:
fetch-depth: 1
ref: 'refs/pull/${{ github.event.inputs.prNumber }}/head'

- name: Assemble PR APK
# This makes sure we fetch gradle network resources with a retry
uses: nick-invision/retry@v3
with:
timeout_minutes: 10
retry_wait_seconds: 60
max_attempts: 3
command: ./gradlew :AnkiDroid:assemblePlayRelease --daemon

- name: Get PR APK size
run: echo NEWSIZE=`ls -lrt AnkiDroid/build/outputs/apk/play/release/AnkiDroid-play-arm64-v8a-release.apk | awk '{print $5}'` >> $GITHUB_ENV

- uses: actions/checkout@v4
with:
ref: main
fetch-depth: 1

- name: Assemble Baseline APK
# This makes sure we fetch gradle network resources with a retry
uses: nick-invision/retry@v3
with:
timeout_minutes: 10
retry_wait_seconds: 60
max_attempts: 3
command: ./gradlew :AnkiDroid:assemblePlayRelease --daemon

- name: Get Baseline APK size
run: echo OLDSIZE=`ls -lrt AnkiDroid/build/outputs/apk/play/release/AnkiDroid-play-arm64-v8a-release.apk | awk '{print $5}'` >> $GITHUB_ENV

- name: Post comment
uses: actions/github-script@v7
with:
script: |
var inputs = ${{ toJSON(inputs) }}
let prNumber = inputs['prNumber'];
async function getPullRequest() {
return await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
}
const pullRequestData = await getPullRequest();
async function addComment(prNumber, oldSize, newSize) {
return await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: `Old APK size: @${oldSize}
New APK size: @${newSize}`
})
}
await addComment(prNumber, process.env.OLDSIZE, process.env.NEWSIZE);

0 comments on commit ce41a47

Please sign in to comment.