Skip to content

Commit df23cd6

Browse files
committed
Cache dependencies
Signed-off-by: Marvin Froeder <velo.br@gmail.com>
1 parent 5ff3e65 commit df23cd6

1 file changed

Lines changed: 60 additions & 28 deletions

File tree

.circleci/config.yml

Lines changed: 60 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,25 @@ executors:
2020

2121
# common commands
2222
commands:
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: |
@@ -41,7 +53,7 @@ commands:
4153
jdk_versions=("8.0.382-tem" "11.0.22-tem" "17.0.10-tem" "21.0.2-tem")
4254
for jdk_version in "${jdk_versions[@]}"; do
4355
if [ ! -d "$HOME/.sdkman/candidates/java/$jdk_version" ]; then
44-
yes n | sdk install java "$jdk_version"
56+
echo "n" | sdk install java "$jdk_version" || true
4557
fi
4658
done
4759
sdk default java 21.0.2-tem
@@ -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
108128
version: 2.1
109129

110130
jobs:
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

149163
workflows:
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

Comments
 (0)