Skip to content

Commit 83b7f25

Browse files
authored
Optimize CircleCI Configuration for Maven Central Releases (OpenFeign#1338)
Updates the Circle CI configuration to follow Circle best practices and configure workflows for snapshot and tag releases.
1 parent 04bd147 commit 83b7f25

4 files changed

Lines changed: 178 additions & 45 deletions

File tree

.circleci/config.yml

Lines changed: 176 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,32 @@
1212
# the License.
1313
#
1414

15-
# our job defaults
16-
defaults: &defaults
17-
working_directory: ~/feign
18-
environment:
19-
# Customize the JVM maximum heap limit
20-
MAVEN_OPTS: -Xmx3200m
21-
steps:
22-
- checkout
23-
- restore_cache:
24-
keys:
25-
- feign-dependencies-{{ checksum "pom.xml" }}
26-
- feign-dependencies-
27-
- run: mvn dependency:resolve-plugins go-offline:resolve-dependencies install -DskipTests=true
28-
- save_cache:
29-
paths:
30-
- ~/.m2
31-
key: feign-dependencies-{{ checksum "pom.xml" }}
32-
- run: mvn -o test
33-
34-
version: 2.1
15+
# common executors
16+
executors:
17+
java:
18+
parameters:
19+
version:
20+
description: 'jdk version to use'
21+
default: '8'
22+
type: string
23+
docker:
24+
- image: circleci/openjdk:<<parameters.version>>
3525

26+
# common commands
3627
commands:
28+
resolve-dependencies:
29+
description: 'Download and prepare all dependencies'
30+
steps:
31+
- run:
32+
name: 'Resolving Dependencies'
33+
command: |
34+
mvn dependency:resolve-plugins go-offline:resolve-dependencies -DskipTests=true
35+
verify-formatting:
36+
steps:
37+
- run:
38+
name: 'Verify formatting'
39+
command: |
40+
scripts/no-git-changes.sh
3741
configure-gpg:
3842
steps:
3943
- run:
@@ -43,51 +47,180 @@ commands:
4347
nexus-deploy:
4448
steps:
4549
- run:
46-
name: 'Deploy to Sonatype'
50+
name: 'Deploy Core Modules Sonatype'
4751
command: |
4852
mvn -nsu -s .circleci/settings.xml -P release -pl -:feign-benchmark -DskipTests=true deploy
53+
nexus-deploy-jdk11:
54+
steps:
55+
- run:
56+
name: 'Deploy JDK 11 Modules to Sonatype'
57+
command: |
58+
mvn -B -nsu -s ./travis/settings.xml -P release,java11 -pl :feign-java11 -DskipTests=true deploy
4959
50-
jobs:
51-
jdk8:
52-
docker:
53-
- image: circleci/openjdk:8
54-
<<: *defaults
60+
# our job defaults
61+
defaults: &defaults
62+
working_directory: ~/feign
63+
environment:
64+
# Customize the JVM maximum heap limit
65+
MAVEN_OPTS: -Xmx3200m
5566

56-
jdk11:
57-
docker:
58-
- image: circleci/openjdk:11
59-
<<: *defaults
67+
# branch filters
68+
master-only: &master-only
69+
branches:
70+
only: master
6071

61-
jdk14:
62-
docker:
63-
- image: circleci/openjdk:14-buster
72+
tags-only: &tags-only
73+
branches:
74+
ignore: /.*/
75+
tags:
76+
only: /.*/
77+
78+
all-branches: &all-branches
79+
branches:
80+
ignore: master
81+
tags:
82+
ignore: /.*/
83+
84+
version: 2.1
85+
86+
jobs:
87+
test:
88+
parameters:
89+
jdk:
90+
description: 'jdk version to use'
91+
default: '8'
92+
type: string
93+
executor:
94+
name: java
95+
version: <<parameters.jdk>>
6496
<<: *defaults
97+
steps:
98+
- checkout
99+
- restore_cache:
100+
keys:
101+
- feign-dependencies-{{ checksum "pom.xml" }}
102+
- feign-dependencies-
103+
- resolve-dependencies
104+
- save_cache:
105+
paths:
106+
- ~/.m2
107+
key: feign-dependencies-{{ checksum "pom.xml" }}
108+
- run:
109+
name: 'Test'
110+
command: |
111+
mvn -o test
112+
- verify-formatting
65113

66114
deploy:
67-
docker:
68-
- image: circleci/openjdk:8
115+
parameters:
116+
jdk:
117+
description: 'jdk version to use'
118+
default: '8'
119+
type: string
120+
executor:
121+
name: java
122+
version: <<parameters.jdk>>
123+
<<: *defaults
69124
steps:
70125
- checkout
71126
- restore_cache:
72127
keys:
73128
- feign-dependencies-{{ checksum "pom.xml" }}
74129
- feign-dependencies-
130+
- resolve-dependencies
75131
- configure-gpg
76132
- nexus-deploy
77133

134+
deploy-jdk11:
135+
parameters:
136+
jdk:
137+
description: 'jdk version to use'
138+
default: '11'
139+
type: string
140+
executor:
141+
name: java
142+
version: <<parameters.jdk>>
143+
<<: *defaults
144+
steps:
145+
- checkout
146+
- restore_cache:
147+
keys:
148+
- feign-dependencies-{{ checksum "pom.xml" }}
149+
- feign-dependencies-
150+
- resolve-dependencies
151+
- configure-gpg
152+
- nexus-deploy-jdk11
153+
78154
workflows:
79155
version: 2
80156
build:
81157
jobs:
82-
- jdk8
83-
- jdk11
84-
- jdk14
158+
- test:
159+
jdk: '8'
160+
name: 'jdk 8'
161+
filters:
162+
<<: *all-branches
163+
- test:
164+
jdk: '11'
165+
name: 'jdk 11'
166+
filters:
167+
<<: *all-branches
168+
- test:
169+
jdk: '14-buster'
170+
name: 'jdk 14'
171+
filters:
172+
<<: *all-branches
173+
174+
snapshot:
175+
jobs:
176+
- test:
177+
jdk: '8'
178+
name: 'jdk 8'
179+
filters:
180+
<<: *master-only
181+
- test:
182+
jdk: '11'
183+
name: 'jdk 11'
184+
filters:
185+
<<: *master-only
186+
- test:
187+
jdk: '14-buster'
188+
name: 'jdk 14'
189+
filters:
190+
<<: *master-only
191+
- deploy:
192+
jdk: '8'
193+
name: 'deploy snapshot'
194+
requires:
195+
- 'jdk 8'
196+
- 'jdk 11'
197+
- 'jdk 14'
198+
context: Sonatype
199+
filters:
200+
<<: *master-only
201+
- deploy-jdk11:
202+
jdk: '11'
203+
name: 'deploy jdk11 snapshot modules'
204+
requires:
205+
- 'jdk 11'
206+
- 'deploy snapshot'
207+
context: Sonatype
208+
filters:
209+
<<: *master-only
210+
211+
release:
212+
jobs:
85213
- deploy:
214+
jdk: '8'
215+
name: 'release to maven central'
216+
context: Sonatype
217+
filters:
218+
<<: *tags-only
219+
- deploy-jdk11:
220+
jdk: '11'
221+
name: 'release jdk11 artifacts to maven central'
86222
requires:
87-
- jdk8
88-
- jdk11
89-
- jdk14
223+
- 'release to maven central'
90224
context: Sonatype
91225
filters:
92-
branches:
93-
only: master
226+
<<: *tags-only

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@
538538
</configuration>
539539
<executions>
540540
<execution>
541-
<phase>compile</phase>
541+
<phase>validate</phase>
542542
<goals>
543543
<goal>check</goal>
544544
</goals>
@@ -565,7 +565,7 @@
565565
</configuration>
566566
<executions>
567567
<execution>
568-
<phase>verify</phase>
568+
<phase>validate</phase>
569569
<goals>
570570
<goal>format</goal>
571571
</goals>

scripts/no-git-changes.sh

100644100755
File mode changed.

scripts/release.sh

100644100755
File mode changed.

0 commit comments

Comments
 (0)