@@ -2,24 +2,96 @@ name: CI
22
33on :
44 push :
5- branches : [ main ]
5+ branches : [ main, dev ]
66 pull_request :
7- branches : [ main ]
7+ branches : [ main, dev ]
88
99env :
10- GRADLE_OPTS : " -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=4 -Dkotlin.incremental=false"
10+ GRADLE_OPTS : " -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=4 -Dkotlin.incremental=false -Dorg.gradle.caching=false "
1111
1212jobs :
13- test :
13+ # 🐳 Setup Docker & Testcontainers
14+ setup-docker :
15+ name : " 🐳 Setup Docker & Testcontainers"
1416 runs-on : ubuntu-latest
15- timeout-minutes : 45
16-
17+ timeout-minutes : 10
18+
1719 steps :
1820 - name : Checkout code
1921 uses : actions/checkout@v4
2022 with :
2123 fetch-depth : 0
2224
25+ - name : Set up Docker Buildx
26+ uses : docker/setup-buildx-action@v3
27+
28+ - name : Cache Docker layers
29+ uses : actions/cache@v4
30+ with :
31+ path : /tmp/.buildx-cache
32+ key : ${{ runner.os }}-docker-${{ hashFiles('**/Dockerfile*', '**/docker-compose*') }}
33+ restore-keys : |
34+ ${{ runner.os }}-docker-
35+
36+ - name : Verify Docker installation
37+ run : |
38+ docker --version
39+ docker info
40+ docker ps
41+
42+ - name : Pre-pull Testcontainers images
43+ run : |
44+ # 预拉取常用的测试镜像,提高 Testcontainers 启动速度
45+ docker pull postgres:15-alpine || true
46+ docker pull redis:7-alpine || true
47+ docker pull mysql:8.0 || true
48+ docker pull mongo:7 || true
49+ docker pull minio/minio:latest || true
50+ docker pull nginx:alpine || true
51+
52+ # ☕ Setup JDK
53+ setup-jdk :
54+ name : " ☕ Setup JDK"
55+ runs-on : ubuntu-latest
56+ needs : setup-docker
57+ timeout-minutes : 5
58+
59+ steps :
60+ - name : Checkout code
61+ uses : actions/checkout@v4
62+ with :
63+ fetch-depth : 0
64+
65+ - name : Set up JDK 17
66+ uses : actions/setup-java@v4
67+ with :
68+ java-version : ' 17'
69+ distribution : ' temurin'
70+
71+ - name : Verify Java installation
72+ run : |
73+ java -version
74+ javac -version
75+
76+ # 🔧 Setup Gradle
77+ setup-gradle :
78+ name : " 🔧 Setup Gradle"
79+ runs-on : ubuntu-latest
80+ needs : setup-jdk
81+ timeout-minutes : 10
82+
83+ steps :
84+ - name : Checkout code
85+ uses : actions/checkout@v4
86+ with :
87+ fetch-depth : 0
88+
89+ - name : Set up JDK 17
90+ uses : actions/setup-java@v4
91+ with :
92+ java-version : ' 17'
93+ distribution : ' temurin'
94+
2395 - name : Cache Gradle dependencies
2496 uses : actions/cache@v4
2597 with :
@@ -31,17 +103,54 @@ jobs:
31103 restore-keys : |
32104 ${{ runner.os }}-gradle-
33105
106+ - name : Setup Gradle
107+ uses : gradle/actions/setup-gradle@v4
108+ with :
109+ gradle-version : ' 9.0.0-rc-3'
110+ cache-read-only : false
111+ cache-cleanup : on-success
112+
113+ - name : Grant execute permission for gradlew
114+ run : chmod +x gradlew
115+
116+ - name : Warm up Gradle daemon
117+ run : ./gradlew --version
118+
119+ # 🧪 Run All Tests
120+ run-tests :
121+ name : " 🧪 Run All Tests"
122+ runs-on : ubuntu-latest
123+ needs : setup-gradle
124+ timeout-minutes : 45
125+
126+ steps :
127+ - name : Checkout code
128+ uses : actions/checkout@v4
129+ with :
130+ fetch-depth : 0
131+
34132 - name : Set up JDK 17
35133 uses : actions/setup-java@v4
36134 with :
37135 java-version : ' 17'
38136 distribution : ' temurin'
39137
138+ - name : Cache Gradle dependencies
139+ uses : actions/cache@v4
140+ with :
141+ path : |
142+ ~/.gradle/caches
143+ ~/.gradle/wrapper
144+ ~/.konan
145+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'gradle/libs.versions.toml') }}
146+ restore-keys : |
147+ ${{ runner.os }}-gradle-
148+
40149 - name : Setup Gradle
41150 uses : gradle/actions/setup-gradle@v4
42151 with :
43152 gradle-version : ' 9.0.0-rc-3'
44- cache-read-only : ${{ github.ref != 'refs/heads/main' }}
153+ cache-read-only : false
45154 cache-cleanup : on-success
46155
47156 - name : Set up Docker Buildx
@@ -55,61 +164,50 @@ jobs:
55164 restore-keys : |
56165 ${{ runner.os }}-docker-
57166
58- - name : Verify Docker installation
167+ - name : Pre-pull Testcontainers images
59168 run : |
60- docker --version
61- docker info
62- docker ps
169+ docker pull postgres:15-alpine || true
170+ docker pull redis:7-alpine || true
171+ docker pull mysql:8.0 || true
172+ docker pull mongo:7 || true
173+ docker pull minio/minio:latest || true
174+ docker pull nginx:alpine || true
63175
64176 - name : Grant execute permission for gradlew
65177 run : chmod +x gradlew
66178
67- - name : Warm up Gradle daemon
68- run : ./gradlew --version
69-
70- - name : Run build and tests
71- run : ./gradlew clean build test --no-daemon --stacktrace --parallel --build-cache --configuration-cache
179+ - name : Run all tests
180+ run : ./gradlew clean test --no-daemon --stacktrace --parallel --no-build-cache --no-configuration-cache --rerun-tasks
72181 env :
73182 # Testcontainers 优化配置
74183 TESTCONTAINERS_RYUK_DISABLED : false
75184 TESTCONTAINERS_CHECKS_DISABLE : false
76185 TESTCONTAINERS_REUSE_ENABLE : true
77186 TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX : " "
187+ # 启用容器重用标签,提高缓存效率
188+ TESTCONTAINERS_REUSE_HASH_LABELS : true
78189 # Docker 性能优化
79190 DOCKER_HOST : unix:///var/run/docker.sock
80191 TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE : /var/run/docker.sock
81192 TESTCONTAINERS_HOST_OVERRIDE : localhost
193+ # Docker 镜像缓存优化
194+ DOCKER_BUILDKIT : 1
195+ BUILDKIT_PROGRESS : plain
82196 # JVM 性能调优
83197 MAVEN_OPTS : " -Xmx2g -XX:+UseG1GC"
84198 # CI 环境配置
85199 CI : true
86200 GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED : true
87201
88- - name : Upload test results
89- uses : actions/upload-artifact@v4
90- if : always()
91- with :
92- name : test-results
93- path : |
94- **/build/test-results/test/
95- **/build/reports/tests/test/
96- **/build/reports/jacoco/
97-
98- - name : Upload coverage reports
99- uses : actions/upload-artifact@v4
100- if : always()
101- with :
102- name : coverage-reports
103- path : |
104- **/build/reports/jacoco/test/html/
105- **/build/reports/jacoco/test/jacocoTestReport.xml
106-
107202 - name : Cleanup Docker containers
108203 if : always()
109204 run : |
110- docker container prune -f --filter "until=1h"
111- docker image prune -f --filter "until=24h"
112- docker volume prune -f --filter "label!=keep"
205+ # 清理停止的容器,但保留可重用的容器
206+ docker container prune -f --filter "until=1h" --filter "label!=org.testcontainers.reuse.enable=true"
207+ # 保留常用镜像,只清理较老的镜像
208+ docker image prune -f --filter "until=48h" --filter "dangling=true"
209+ # 清理未使用的卷,但保留标记为保留的卷
210+ docker volume prune -f --filter "label!=keep" --filter "label!=org.testcontainers"
113211
114212 - name : Cache cleanup
115213 if : always()
0 commit comments