Skip to content

Commit 6761d0e

Browse files
committed
feat: add CI/CD configuration for release and build workflows
1 parent 7bee6fb commit 6761d0e

2 files changed

Lines changed: 260 additions & 0 deletions

File tree

.github/workflows/CD.yaml

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: Release Build
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*.*.*'
7+
8+
jobs:
9+
build:
10+
runs-on: ubuntu-latest
11+
timeout-minutes: 30
12+
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 0
18+
19+
- name: Set up JDK 17
20+
uses: actions/setup-java@v4
21+
with:
22+
distribution: 'zulu'
23+
java-version: 17
24+
25+
- name: Validate Gradle Wrapper
26+
uses: gradle/wrapper-validation-action@v3
27+
28+
- name: Set release version
29+
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
30+
31+
- name: Copy CI gradle.properties
32+
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
33+
34+
- name: chmod cache key
35+
run: chmod +x ./scripts/checksum.sh
36+
37+
- name: Generate cache key
38+
run: ./scripts/checksum.sh app checksum.txt
39+
40+
- name: Cache Gradle
41+
uses: actions/cache@v3
42+
with:
43+
path: |
44+
~/.gradle/caches/modules-*
45+
~/.gradle/caches/jars-*
46+
~/.gradle/caches/build-cache-*
47+
~/.gradle/wrapper/
48+
~/.gradle/caches/transforms-*
49+
key: gradle-${{ hashFiles('checksum.txt') }}
50+
restore-keys: |
51+
gradle-
52+
53+
- name: Setup Gradle
54+
uses: gradle/gradle-build-action@v3
55+
56+
- name: Build Release APK
57+
run: ./gradlew assembleRelease --no-daemon --stacktrace
58+
59+
- name: Sign Release APK
60+
uses: r0adkll/sign-android-release@v1
61+
with:
62+
releaseDirectory: app/build/outputs/apk/release
63+
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
64+
alias: ${{ secrets.KEY_ALIAS }}
65+
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
66+
keyPassword: ${{ secrets.KEY_PASSWORD }}
67+
env:
68+
BUILD_TOOLS_VERSION: "34.0.0"
69+
70+
- name: Rename APK
71+
run: |
72+
mkdir -p release
73+
cp ${{ steps.sign_app.outputs.signedReleaseFile }} release/BreakingBad-${{ env.RELEASE_VERSION }}.apk
74+
75+
- name: Generate changelog
76+
id: changelog
77+
uses: metcalfc/changelog-generator@v4.1.0
78+
with:
79+
myToken: ${{ secrets.GITHUB_TOKEN }}
80+
81+
- name: Create GitHub Release
82+
uses: softprops/action-gh-release@v1
83+
with:
84+
files: release/BreakingBad-${{ env.RELEASE_VERSION }}.apk
85+
name: Release ${{ env.RELEASE_VERSION }}
86+
body: |
87+
## 변경 사항
88+
${{ steps.changelog.outputs.changelog }}
89+
draft: false
90+
prerelease: false
91+
env:
92+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/CI.yaml

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
name: Build
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- develop
7+
8+
concurrency:
9+
group: build-${{ github.ref }}
10+
cancel-in-progress: true
11+
12+
env:
13+
JAVA_TOOL_OPTIONS: -Xmx4g
14+
15+
jobs:
16+
spotless:
17+
runs-on: ubuntu-latest
18+
timeout-minutes: 10
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v4
22+
23+
- name: Validate Gradle Wrapper
24+
uses: gradle/wrapper-validation-action@v3
25+
26+
- name: Copy CI gradle.properties
27+
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
28+
29+
- name: Set up JDK 17
30+
uses: actions/setup-java@v4
31+
with:
32+
distribution: 'zulu'
33+
java-version: 17
34+
35+
- name: chmod cache key
36+
run: chmod +x ./scripts/checksum.sh
37+
38+
- name: Generate cache key
39+
run: ./scripts/checksum.sh app checksum.txt
40+
41+
- uses: actions/cache@v3
42+
with:
43+
path: |
44+
~/.gradle/caches/modules-*
45+
~/.gradle/caches/jars-*
46+
~/.gradle/caches/build-cache-*
47+
~/.gradle/wrapper/
48+
~/.gradle/caches/transforms-*
49+
key: gradle-${{ hashFiles('checksum.txt') }}
50+
restore-keys: |
51+
gradle-
52+
53+
- name: Setup Gradle
54+
uses: gradle/gradle-build-action@v3
55+
56+
- name: Check Spotless
57+
run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache --no-daemon --stacktrace
58+
59+
tests:
60+
runs-on: ubuntu-latest
61+
timeout-minutes: 20
62+
steps:
63+
- name: Checkout
64+
uses: actions/checkout@v4
65+
66+
- name: Set up JDK 17
67+
uses: actions/setup-java@v4
68+
with:
69+
distribution: 'zulu'
70+
java-version: 17
71+
72+
- name: chmod cache key
73+
run: chmod +x ./scripts/checksum.sh
74+
75+
- name: Generate cache key
76+
run: ./scripts/checksum.sh app checksum.txt
77+
78+
- uses: actions/cache@v3
79+
with:
80+
path: |
81+
~/.gradle/caches/modules-*
82+
~/.gradle/caches/jars-*
83+
~/.gradle/caches/build-cache-*
84+
~/.gradle/wrapper/
85+
~/.gradle/caches/transforms-*
86+
key: gradle-${{ hashFiles('checksum.txt') }}
87+
restore-keys: |
88+
gradle-
89+
90+
- name: Copy CI gradle.properties
91+
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
92+
93+
- name: Setup Gradle
94+
uses: gradle/gradle-build-action@v3
95+
96+
- name: UnitTest
97+
run: ./gradlew testDebugUnitTest --no-daemon --stacktrace
98+
99+
- name: Check Kover
100+
run: ./gradlew koverXmlReportDebug --no-daemon
101+
102+
- name: Display local test coverage
103+
uses: madrapps/jacoco-report@v1.6.1
104+
with:
105+
title: test coverage report
106+
min-coverage-overall: 40
107+
min-coverage-changed-files: 60
108+
update-comment: true
109+
skip-if-no-changes: true
110+
continue-on-error: false
111+
paths: |
112+
${{ github.workspace }}/feature/**/build/reports/kover/reportDebug.xml
113+
token: ${{ secrets.GITHUB_TOKEN }}
114+
115+
build:
116+
runs-on: ubuntu-latest
117+
timeout-minutes: 15
118+
needs: [spotless, tests]
119+
steps:
120+
- name: Checkout
121+
uses: actions/checkout@v4
122+
123+
- name: Set up JDK 17
124+
uses: actions/setup-java@v4
125+
with:
126+
distribution: 'zulu'
127+
java-version: 17
128+
129+
- name: chmod cache key
130+
run: chmod +x ./scripts/checksum.sh
131+
132+
- name: Generate cache key
133+
run: ./scripts/checksum.sh app checksum.txt
134+
135+
- uses: actions/cache@v3
136+
with:
137+
path: |
138+
~/.gradle/caches/modules-*
139+
~/.gradle/caches/jars-*
140+
~/.gradle/caches/build-cache-*
141+
~/.gradle/wrapper/
142+
~/.gradle/caches/transforms-*
143+
key: gradle-${{ hashFiles('checksum.txt') }}
144+
restore-keys: |
145+
gradle-
146+
147+
- name: Copy CI gradle.properties
148+
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
149+
150+
- name: Setup Gradle
151+
uses: gradle/gradle-build-action@v3
152+
153+
- name: Build Debug APK
154+
run: ./gradlew assembleDebug --no-daemon
155+
156+
- name: Run Android Lint
157+
run: ./gradlew lintDebug --no-daemon
158+
159+
- name: Upload build reports
160+
if: always()
161+
uses: actions/upload-artifact@v3
162+
with:
163+
name: build-reports
164+
path: app/build/reports
165+
166+
- name: Delete checksum.txt after build
167+
if: always()
168+
run: rm -f checksum.txt

0 commit comments

Comments
 (0)