@@ -20,13 +20,25 @@ executors:
2020
2121# common commands
2222commands :
23- install-java :
24- description : ' Install Java using SDKMAN '
23+ setup-build-environment :
24+ description : ' Setup Java and Maven dependencies with unified caching '
2525 steps :
2626 - restore_cache :
2727 keys :
28- - sdkman-java-{{ .Environment.CIRCLE_JOB }}-{{ checksum "~/.m2/toolchains.xml" }}
29- - sdkman-java-{{ .Environment.CIRCLE_JOB }}-
28+ - dependencies-v1-{{ checksum "pom.xml" }}
29+ - run :
30+ name : ' Check if cache was restored'
31+ command : |
32+ if [ -d "$HOME/.sdkman/candidates/java/21.0.2-tem" ] && [ -d ~/.m2/repository/io/github/openfeign ]; then
33+ echo "Complete cache hit detected - SDKMAN and Maven dependencies available."
34+ circleci step halt
35+ elif [ -d "$HOME/.sdkman/candidates/java/21.0.2-tem" ]; then
36+ echo "SDKMAN cache hit detected, but need to download Maven dependencies."
37+ elif [ -d ~/.m2/repository/io/github/openfeign ]; then
38+ echo "Maven cache hit detected, but need to install SDKMAN."
39+ else
40+ echo "No cache hit, setting up complete build environment."
41+ fi
3042 - run :
3143 name : ' Install SDKMAN!'
3244 command : |
@@ -50,17 +62,25 @@ commands:
5062 command : |
5163 mkdir -p ~/.m2
5264 cp .circleci/toolchains.xml ~/.m2/toolchains.xml
65+ - run :
66+ name : ' Download Maven dependencies'
67+ command : |
68+ source "$HOME/.sdkman/bin/sdkman-init.sh"
69+ ./mvnw -ntp -B \
70+ org.apache.maven.plugins:maven-dependency-plugin:3.8.1:go-offline \
71+ de.qaware.maven:go-offline-maven-plugin:1.2.8:resolve-dependencies \
72+ -T2
5373 - save_cache :
5474 paths :
5575 - ~/.sdkman
56- key : sdkman-java-{{ .Environment.CIRCLE_JOB }}-{{ checksum "~/.m2/toolchains.xml" }}
57- resolve-dependencies :
58- description : ' Download and prepare all dependencies'
76+ - ~/.m2
77+ key : dependencies-v1-{{ checksum "pom.xml" }}
78+ restore-build-environment :
79+ description : ' Restore cached build environment'
5980 steps :
60- - run :
61- name : ' Resolving Dependencies'
62- command : |
63- ./mvnw -ntp dependency:resolve-plugins go-offline:resolve-dependencies -DskipTests=true -B
81+ - restore_cache :
82+ keys :
83+ - dependencies-v1-{{ checksum "pom.xml" }}
6484 verify-formatting :
6585 steps :
6686 - run :
@@ -108,22 +128,21 @@ all-branches: &all-branches
108128version : 2.1
109129
110130jobs :
131+ setup-build-environment :
132+ executor :
133+ name : java
134+ << : *defaults
135+ steps :
136+ - checkout
137+ - setup-build-environment
138+
111139 test :
112140 executor :
113141 name : java
114142 << : *defaults
115143 steps :
116144 - checkout
117- - install-java
118- - restore_cache :
119- keys :
120- - feign-dependencies-v2-{{ checksum "pom.xml" }}
121- - feign-dependencies-v2-
122- - resolve-dependencies
123- - save_cache :
124- paths :
125- - ~/.m2/repository
126- key : feign-dependencies-v2-{{ checksum "pom.xml" }}
145+ - restore-build-environment
127146 - run :
128147 name : ' Test'
129148 command : |
@@ -137,28 +156,35 @@ jobs:
137156 << : *defaults
138157 steps :
139158 - checkout
140- - install-java
141- - restore_cache :
142- keys :
143- - feign-dependencies-v2-{{ checksum "pom.xml" }}
144- - feign-dependencies-v2-
145- - resolve-dependencies
159+ - restore-build-environment
146160 - configure-gpg
147161 - nexus-deploy
148162
149163workflows :
150164 version : 2
151165 build :
152166 jobs :
167+ - setup-build-environment :
168+ name : ' setup-environment'
169+ filters :
170+ << : *all-branches
153171 - test :
154172 name : ' pr-build'
173+ requires :
174+ - ' setup-environment'
155175 filters :
156176 << : *all-branches
157177
158178 snapshot :
159179 jobs :
180+ - setup-build-environment :
181+ name : ' setup-environment-snapshot'
182+ filters :
183+ << : *master-only
160184 - test :
161185 name : ' snapshot'
186+ requires :
187+ - ' setup-environment-snapshot'
162188 filters :
163189 << : *master-only
164190 - deploy :
@@ -171,8 +197,14 @@ workflows:
171197
172198 release :
173199 jobs :
200+ - setup-build-environment :
201+ name : ' setup-environment-release'
202+ filters :
203+ << : *tags-only
174204 - deploy :
175205 name : ' release to maven central'
206+ requires :
207+ - ' setup-environment-release'
176208 context : Sonatype
177209 filters :
178210 << : *tags-only
0 commit comments