git.iko.soy/parseable-android
on icon help sign in
134 lines 4.1 kB history raw
1name: CI
3on:
4 pull_request:
5 branches: [ master, main ]
6 push:
7 branches: [ master, main ]
9jobs:
10 build:
11 name: Build & Lint
12 runs-on: ubuntu-latest
13 concurrency:
14 group: ci-build-${{ github.ref }}
15 cancel-in-progress: true
17 steps:
18 - name: Checkout code
19 uses: actions/checkout@v4
21 - name: Decode release keystore
22 if: env.RELEASE_KEYSTORE_BASE64 != ''
23 env:
24 RELEASE_KEYSTORE_BASE64: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}
25 run: echo "$RELEASE_KEYSTORE_BASE64" | base64 -d > app/release.keystore
27 - name: Set up JDK 17
28 uses: actions/setup-java@v4
29 with:
30 java-version: '17'
31 distribution: 'temurin'
33 - name: Setup Gradle
34 uses: gradle/actions/setup-gradle@v4
36 - name: Setup Android SDK
37 uses: android-actions/setup-android@v3
39 - name: Generate Gradle wrapper
40 run: gradle wrapper --gradle-version 8.9
42 - name: Build release APK
43 env:
44 RELEASE_KEYSTORE_FILE: ${{ secrets.RELEASE_KEYSTORE_BASE64 != '' && 'release.keystore' || '' }}
45 RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
46 RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
47 RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
48 run: ./gradlew assembleRelease
50 - name: Run unit tests
51 run: ./gradlew testReleaseUnitTest testDebugUnitTest
53 - name: Run Android Lint
54 run: ./gradlew lintRelease
56 - name: Upload release APK
57 if: github.event_name == 'pull_request'
58 uses: actions/upload-artifact@v4
59 with:
60 name: parseable-android-release
61 path: app/build/outputs/apk/release/*.apk
62 retention-days: 14
64 - name: Upload lint results
65 if: always()
66 uses: actions/upload-artifact@v4
67 with:
68 name: lint-results
69 path: app/build/reports/lint-results-release.html
70 retention-days: 14
72 release:
73 name: Create Release
74 needs: build
75 if: github.event_name == 'push'
76 runs-on: ubuntu-latest
77 concurrency:
78 group: release
79 cancel-in-progress: false
80 permissions:
81 contents: write
83 steps:
84 - name: Checkout code
85 uses: actions/checkout@v4
87 - name: Decode release keystore
88 if: env.RELEASE_KEYSTORE_BASE64 != ''
89 env:
90 RELEASE_KEYSTORE_BASE64: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}
91 run: echo "$RELEASE_KEYSTORE_BASE64" | base64 -d > app/release.keystore
93 - name: Set version from commit timestamp
94 run: |
95 VERSION_NAME=$(TZ=UTC git log -1 --format='%cd' --date=format-local:'%Y.%m.%d.%H%M')
96 echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
98 - name: Set up JDK 17
99 uses: actions/setup-java@v4
100 with:
101 java-version: '17'
102 distribution: 'temurin'
104 - name: Setup Gradle
105 uses: gradle/actions/setup-gradle@v4
107 - name: Setup Android SDK
108 uses: android-actions/setup-android@v3
110 - name: Generate Gradle wrapper
111 run: gradle wrapper --gradle-version 8.9
113 - name: Build release APK
114 env:
115 RELEASE_KEYSTORE_FILE: ${{ secrets.RELEASE_KEYSTORE_BASE64 != '' && 'release.keystore' || '' }}
116 RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
117 RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
118 RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
119 run: ./gradlew assembleRelease
121 - name: Rename APK with version
122 run: |
123 for apk in app/build/outputs/apk/release/*.apk; do
124 mv "$apk" "app/build/outputs/apk/release/parseable-android-${VERSION_NAME}.apk"
125 done
127 - name: Create release
128 uses: softprops/action-gh-release@v2
129 with:
130 tag_name: v${{ env.VERSION_NAME }}
131 name: v${{ env.VERSION_NAME }}
132 generate_release_notes: true
133 files: |
134 app/build/outputs/apk/release/*.apk