Merge pull request #744 from rafsanjani/rafsanjani-patch-1 #463
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}} | |
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: Gradle Wrapper Validation | |
uses: gradle/actions/wrapper-validation@v4 | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Build Android App (Release) | |
run: ./gradlew androidApp:app:assembleRelease | |
- name: Upload APK artifact | |
if: success() | |
uses: actions/upload-artifact@v4 | |
with: | |
path: androidApp/app/build/outputs/apk/release/app-release.apk | |
# | |
# 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 | |
# | |
# - name: Upload APK artifact | |
# if: success() | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# path: androidApp/app/build/outputs/apk/release/app-release.apk |