1+ name : Build, test and snapshot
2+
3+ on :
4+ push :
5+ branches :
6+ - ' task/**'
7+ - ' bug/**'
8+ - ' fix/**'
9+ - ' epic/**'
10+ pull_request :
11+ branches :
12+ - ' epic/**'
13+ types : [ closed ]
14+
15+ jobs :
16+ detect-changes :
17+ runs-on : ubuntu-latest
18+ outputs :
19+ lib-changed : ${{ steps.changes.outputs.lib }}
20+ lib-compose-changed : ${{ steps.changes.outputs.lib-compose }}
21+
22+ steps :
23+ - uses : actions/checkout@v3
24+ with :
25+ fetch-depth : 0
26+
27+ - name : Get changed files
28+ id : changes
29+ run : |
30+ # Get the last successful commit on the default branch
31+ git fetch origin main
32+ LAST_SUCCESSFUL_COMMIT=$(git rev-parse origin/main)
33+
34+ # Compare changes between current commit and last successful commit
35+ if git diff --name-only HEAD $LAST_SUCCESSFUL_COMMIT | grep -q "^lib/"; then
36+ echo "lib=true" >> $GITHUB_OUTPUT
37+ else
38+ echo "lib=false" >> $GITHUB_OUTPUT
39+ fi
40+
41+ if git diff --name-only HEAD $LAST_SUCCESSFUL_COMMIT | grep -q "^lib-compose/"; then
42+ echo "lib-compose=true" >> $GITHUB_OUTPUT
43+ else
44+ echo "lib-compose=false" >> $GITHUB_OUTPUT
45+ fi
46+
47+ build_test :
48+ runs-on : ubuntu-latest
49+ steps :
50+ - name : Checkout code
51+ uses : actions/checkout@v4
52+
53+ - name : Enable KVM group perms
54+ run : |
55+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
56+ sudo udevadm control --reload-rules
57+ sudo udevadm trigger --name-match=kvm
58+ ls /dev/kvm
59+
60+ - name : Setup Java 17
61+ uses : actions/setup-java@v4
62+ with :
63+ distribution : ' temurin'
64+ java-version : ' 17'
65+
66+ - name : Restore gradle.properties
67+ env :
68+
69+ MAPBOX_DOWNLOADS_TOKEN : ${{ secrets.MAPBOX_DOWNLOADS_TOKEN }}
70+ shell : bash
71+ run : |
72+ mkdir -p ~/.gradle/
73+ echo "GRADLE_USER_HOME=${HOME}/.gradle" >> $GITHUB_ENV
74+ echo "MAPBOX_DOWNLOADS_TOKEN=${MAPBOX_DOWNLOADS_TOKEN}">> ~/.gradle/gradle.properties
75+
76+ - name : Setup Gradle
77+ uses : gradle/actions/setup-gradle@v4
78+
79+ - name : Check for SNAPSHOT dependencies
80+ if : github.event_name == 'pull_request' && github.base_ref == 'staging'
81+ run : ./gradlew :lib:checkSnapshotDependencies
82+
83+ - name : Setup Android SDK
84+ uses : android-actions/setup-android@v3
85+
86+ - name : Accept licenses
87+ run : yes | sdkmanager --licenses || true
88+
89+ - name : Run Lib Unit Test
90+ run : ./gradlew lib:testDebugUnitTest
91+
92+ - name : Upload Lib Test Results
93+ uses : actions/upload-artifact@v4
94+ with :
95+ name : lib-test-results
96+ path : lib/build/test-results/testDebugUnitTest
97+
98+ - name : Run Lib Compose Unit Test
99+ run : ./gradlew lib-compose:jacocoTestReport
100+
101+ - name : Upload Lib Compose Test Results
102+ uses : actions/upload-artifact@v4
103+ with :
104+ name : lib-compose-test-results
105+ path : lib-compose/build/reports/jacoco/jacocoTestReport
106+
107+ snapshot-lib :
108+ # This job must explicitly depend on build_test and detect-changes
109+ needs : [build_test, detect-changes]
110+ # Run for direct commits to epic branches OR when PRs are merged into epic branches
111+ # AND only when build_test succeeds AND lib has changed
112+ if : >
113+ success() &&
114+ needs.detect-changes.outputs.lib-changed == 'true' &&
115+ ((github.event_name == 'push' && startsWith(github.ref, 'refs/heads/epic/')) ||
116+ (github.event_name == 'pull_request' && github.event.action == 'closed' &&
117+ github.event.pull_request.merged == true && startsWith(github.base_ref, 'epic/')))
118+ runs-on : ubuntu-latest
119+ steps :
120+ - name : Checkout code
121+ uses : actions/checkout@v4
122+
123+ - name : Set up JDK
124+ uses : actions/setup-java@v3
125+ with :
126+ distribution : ' temurin'
127+ java-version : ' 17'
128+
129+ - name : Restore gradle.properties
130+ env :
131+ MAVEN_CENTRAL_USERNAME : ${{ secrets.MAVEN_CENTRAL_USERNAME }}
132+ MAVEN_CENTRAL_PASSWORD : ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
133+ MAPBOX_DOWNLOADS_TOKEN : ${{ secrets.MAPBOX_DOWNLOADS_TOKEN }}
134+ shell : bash
135+ run : |
136+ mkdir -p ~/.gradle/
137+ echo "GRADLE_USER_HOME=${HOME}/.gradle" >> $GITHUB_ENV
138+ echo "MAVEN_CENTRAL_USERNAME=${MAVEN_CENTRAL_USERNAME}">> ~/.gradle/gradle.properties
139+ echo "MAVEN_CENTRAL_PASSWORD=${MAVEN_CENTRAL_PASSWORD}">> ~/.gradle/gradle.properties
140+ echo "MAPBOX_DOWNLOADS_TOKEN=${MAPBOX_DOWNLOADS_TOKEN}">> ~/.gradle/gradle.properties
141+ echo "IS_SNAPSHOT_RELEASE=true">> ~/.gradle/gradle.properties
142+ cat ~/.gradle/gradle.properties
143+
144+ - name : Setup Gradle with caching
145+ uses : gradle/actions/setup-gradle@v4
146+ with :
147+ cache-read-only : false
148+
149+ - name : Setup Android SDK
150+ uses : android-actions/setup-android@v3
151+
152+ - name : Publish SNAPSHOT
153+ run : ./gradlew lib:publishMavenPublicationToSonatypeSnapshotsRepository
154+ snapshot-compose-lib :
155+ # This job must explicitly depend on build_test and detect-changes
156+ needs : [build_test, detect-changes]
157+ # Run for direct commits to epic branches OR when PRs are merged into epic branches
158+ # AND only when build_test succeeds AND lib-compose has changed
159+ if : >
160+ success() &&
161+ needs.detect-changes.outputs.lib-compose-changed == 'true' &&
162+ ((github.event_name == 'push' && startsWith(github.ref, 'refs/heads/epic/')) ||
163+ (github.event_name == 'pull_request' && github.event.action == 'closed' &&
164+ github.event.pull_request.merged == true && startsWith(github.base_ref, 'epic/')))
165+ runs-on : ubuntu-latest
166+ steps :
167+ - name : Checkout code
168+ uses : actions/checkout@v4
169+
170+ - name : Set up JDK
171+ uses : actions/setup-java@v3
172+ with :
173+ distribution : ' temurin'
174+ java-version : ' 17'
175+
176+ - name : Restore gradle.properties
177+ env :
178+ MAVEN_CENTRAL_USERNAME : ${{ secrets.MAVEN_CENTRAL_USERNAME }}
179+ MAVEN_CENTRAL_PASSWORD : ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
180+ MAPBOX_DOWNLOADS_TOKEN : ${{ secrets.MAPBOX_DOWNLOADS_TOKEN }}
181+ shell : bash
182+ run : |
183+ mkdir -p ~/.gradle/
184+ echo "GRADLE_USER_HOME=${HOME}/.gradle" >> $GITHUB_ENV
185+ echo "MAVEN_CENTRAL_USERNAME=${MAVEN_CENTRAL_USERNAME}">> ~/.gradle/gradle.properties
186+ echo "MAVEN_CENTRAL_PASSWORD=${MAVEN_CENTRAL_PASSWORD}">> ~/.gradle/gradle.properties
187+ echo "MAPBOX_DOWNLOADS_TOKEN=${MAPBOX_DOWNLOADS_TOKEN}">> ~/.gradle/gradle.properties
188+ echo "IS_SNAPSHOT_RELEASE=true">> ~/.gradle/gradle.properties
189+ cat ~/.gradle/gradle.properties
190+
191+ - name : Setup Gradle with caching
192+ uses : gradle/actions/setup-gradle@v4
193+ with :
194+ cache-read-only : false
195+
196+ - name : Setup Android SDK
197+ uses : android-actions/setup-android@v3
198+
199+ - name : Publish SNAPSHOT
200+ run : ./gradlew lib-compose:publishMavenPublicationToSonatypeSnapshotsRepository
0 commit comments