Print APK difference between release builds #477
Workflow file for this run
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
name: Multiplatform Build | |
on: | |
push: | |
branches: [ main, development ] | |
pull_request: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
danger: | |
name: Run Danger (Ktlint, android lint) | |
runs-on: macos-14 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'zulu' | |
java-version: '17' | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Danger Checks | |
run: | | |
gem install bundler | |
bundle install | |
bundle exec danger | |
env: | |
DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
snapshot: | |
name: Snapshot test with paparazzi | |
env: | |
BUILD_NUMBER: ${{github.event.number}} | |
runs-on: macos-14 | |
needs: danger | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'zulu' | |
java-version: '17' | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Snapshot test (shared-ui) | |
run: ./gradlew verifyPaparazzi --continue | |
- name: Commit and Push Images to GitHub Pages | |
if: failure() | |
run: ./commit-images.sh | |
- name: Generate snapshot difference markdown | |
if: failure() | |
run: ./gradlew createPaparazziReportComment | |
- name: Print out contents of snapshots.md | |
if: failure() | |
run: cat snapshots.md | |
- name: Comment snapshot difference markdown file on PR | |
uses: thollander/actions-comment-pull-request@v3 | |
if: failure() | |
with: | |
file-path: snapshots.md | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
comment-tag: snapshots | |
iosTest: | |
name: Run iOS unit tests | |
env: | |
SENTRY_BASE_URL_ANDROID: ${{secrets.SENTRY_BASE_URL_ANDROID}} | |
SENTRY_AUTH_TOKEN: ${{secrets.SENTRY_AUTH_TOKEN}} | |
runs-on: macos-latest | |
needs: danger | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'zulu' | |
java-version: '17' | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Unit tests iOS | |
run: ./gradlew iosSimulatorArm64Test | |
jvmTest: | |
name: Run JVM unit tests and generate coverage badge | |
needs: danger | |
env: | |
SENTRY_BASE_URL_ANDROID: ${{secrets.SENTRY_BASE_URL_ANDROID}} | |
SENTRY_AUTH_TOKEN: ${{secrets.SENTRY_AUTH_TOKEN}} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up JDK | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'zulu' | |
- name: Run JVM unit tests | |
run: ./gradlew testDebugUnitTest -Pkover koverXmlReport | |
- name: Add coverage Report to PR | |
id: jacoco | |
uses: madrapps/jacoco-report@v1.7.1 | |
with: | |
paths: | | |
${{ github.workspace }}/build/reports/kover/report.xml | |
token: ${{ secrets.GITHUB_TOKEN }} | |
update-comment: true | |
title: Code Coverage | |
min-coverage-overall: 92 | |
min-coverage-changed-files: 85 | |
- name: Print code coverage info | |
run: | | |
echo "Total coverage ${{ steps.jacoco.outputs.coverage-overall }}" | |
echo "Changed Files coverage ${{ steps.jacoco.outputs.coverage-changed-files }}" | |
- name: Post changed files coverage violation | |
if: ${{ steps.jacoco.outputs.coverage-changed-files < 80.0 }} | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.setFailed('Coverage for changed files ${{steps.jacoco.outputs.coverage-changed-files}} is less than 80%!') | |
# - name: Verify minimum code coverage (90%) | |
# run: ./gradlew testDebugUnitTest -Pkover koverVerify | |
- name: Post overall coverage violation | |
if: ${{ steps.jacoco.outputs.coverage-overall < 92.0 }} | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.setFailed('Coverage for total project: ${{steps.jacoco.outputs.coverage-overall}} is less than 92%!') | |
- name: Update dynamic badge gist | |
if: github.ref == 'refs/heads/development' | |
uses: schneegans/dynamic-badges-action@v1.7.0 | |
with: | |
auth: ${{secrets.SECRET_GITHUB_GIST}} | |
gistID: 129c8d4608ea11b81849152dba085532 | |
filename: superdiary-badge.json | |
label: coverage | |
message: ${{ steps.jacoco.outputs.coverage-overall }} | |
valColorRange: ${{ steps.jacoco.outputs.coverage-overall }} | |
minColorRange: 0 | |
maxColorRange: 100 | |
androidRelease: | |
name: Build android app (release) | |
runs-on: macos-14 | |
# needs: jvmTest | |
env: | |
SENTRY_BASE_URL_ANDROID: ${{secrets.SENTRY_BASE_URL_ANDROID}} | |
SENTRY_AUTH_TOKEN: ${{secrets.SENTRY_AUTH_TOKEN}} | |
GOOGLE_SERVER_CLIENT_ID: ${{secrets.GOOGLE_SERVER_CLIENT_ID}} | |
MAPS_API_KEY_ANDROID: ${{secrets.MAPS_API_KEY_ANDROID}} | |
OPENAI_KEY: ${{secrets.OPENAI_KEY}} | |
STORE_FILE_BASE64: ${{secrets.SIGNING_KEY_BASE64}} | |
STORE_PASSWORD: ${{secrets.SIGNING_KEYSTORE_PASSWORD}} | |
KEY_ALIAS: ${{secrets.SIGNING_KEY_ALIAS}} | |
KEY_PASSWORD: ${{secrets.SIGNING_KEY_PASSWORD}} | |
SUPABASE_URL: ${{secrets.SUPABASE_URL}} | |
SUPABASE_KEY: ${{secrets.SUPABASE_KEY}} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'zulu' | |
java-version: '17' | |
- name: Setup secrets.properties and Configurations/Release.xcconfig | |
run: ./environments.sh | |
- name: Decode keystore file from secrets | |
run: echo "$STORE_FILE_BASE64" | base64 --decode > keystore | |
- name: Inject Signing params into gradle.properties | |
run: | | |
echo STORE_FILE=keystore >> gradle.properties | |
echo STORE_PASSWORD="$STORE_PASSWORD" >> gradle.properties | |
echo KEY_PASSWORD="$KEY_PASSWORD" >> gradle.properties | |
echo KEY_ALIAS="$KEY_ALIAS" >> gradle.properties | |
cat gradle.properties | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
# - name: Build Android App (Release) | |
# run: ./gradlew androidApp:app:assembleRelease | |
- name: Get latest artifact ID | |
run: | | |
ARTIFACT_ID=$(gh api repos/rafsanjani/superdiary/actions/artifacts \ | |
--jq '.artifacts | sort_by(.updated_at) | last | .id') | |
echo "ARTIFACT_ID=$ARTIFACT_ID" >> $GITHUB_ENV | |
- name: Download the artifact | |
run: | | |
gh api repos/{owner}/{repo}/actions/artifacts/$ARTIFACT_ID/zip \ | |
--output artifact.zip | |
- name: Extract artifact | |
run: unzip artifact.zip | |
- name: Run APK Diff | |
run: | | |
gh release download -p '*.zip' -R jakewharton/diffuse 0.3.0 | |
unzip diffuse-0.3.0.zip | |
./diffuse-0.3.0/bin/diffuse diff app-release.apk androidApp/app/build/outputs/apk/release/app-release.apk > apk_differences.txt | |
{ echo "\`\`\`"; head -n 17 apk_differences.txt; echo "\`\`\`"; echo; } >> apk_differences_summary.txt | |
- name: Post APK diff to Pull Request | |
uses: thollander/actions-comment-pull-request@v3 | |
with: | |
file-path: apk_differences_summary.txt | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
comment-tag: apk_difference | |
# | |
# iOSReleaseBuild: | |
# name: Build iOS app (Release) | |
# runs-on: macos-14 | |
# # needs: iosTest | |
# steps: | |
# - uses: actions/checkout@v4 | |
# with: | |
# lfs: true | |
# - uses: actions/setup-java@v4 | |
# with: | |
# distribution: 'zulu' | |
# java-version: '17' | |
# | |
# - name: Setup secrets.properties and Configurations/Release.xcconfig | |
# run: ./environments.sh | |
# | |
# - name: Setup Gradle | |
# uses: gradle/actions/setup-gradle@v4 | |
# | |
# - uses: maxim-lobanov/setup-xcode@v1 | |
# with: | |
# xcode-version: latest-stable | |
# | |
# - name: Build iOS App (Release) | |
# run: | | |
# cd iosApp | |
# cat Configurations/Release.xcconfig | |
# xcodebuild \ | |
# -scheme iosApp \ | |
# -configuration Debug \ | |
# -destination 'generic/platform=iOS' \ | |
# build | |
# |