• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jreleaser / jreleaser / #528

05 Aug 2025 05:40PM UTC coverage: 49.2% (-0.006%) from 49.206%
#528

push

github

aalmiray
feat(packagers): Allow packagers to skip publish step

Closes #1936

34 of 75 new or added lines in 40 files covered. (45.33%)

1 existing line in 1 file now uncovered.

26299 of 53453 relevant lines covered (49.2%)

0.49 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

68.29
/core/jreleaser-model-impl/src/main/java/org/jreleaser/model/internal/packagers/SdkmanPackager.java
1
/*
2
 * SPDX-License-Identifier: Apache-2.0
3
 *
4
 * Copyright 2020-2025 The JReleaser authors.
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *     https://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
package org.jreleaser.model.internal.packagers;
19

20
import com.fasterxml.jackson.annotation.JsonIgnore;
21
import org.jreleaser.model.Active;
22
import org.jreleaser.model.Distribution;
23
import org.jreleaser.model.Sdkman;
24
import org.jreleaser.model.Stereotype;
25
import org.jreleaser.model.internal.common.Artifact;
26
import org.jreleaser.model.internal.common.TimeoutAware;
27

28
import java.util.LinkedHashMap;
29
import java.util.Map;
30
import java.util.Set;
31

32
import static java.util.Collections.emptySet;
33
import static java.util.Collections.unmodifiableMap;
34
import static java.util.Collections.unmodifiableSet;
35
import static org.jreleaser.model.Constants.HIDE;
36
import static org.jreleaser.model.Constants.UNSET;
37
import static org.jreleaser.model.Distribution.DistributionType.BINARY;
38
import static org.jreleaser.model.Distribution.DistributionType.JAVA_BINARY;
39
import static org.jreleaser.model.Distribution.DistributionType.JLINK;
40
import static org.jreleaser.model.api.packagers.SdkmanPackager.SKIP_SDKMAN;
41
import static org.jreleaser.model.api.packagers.SdkmanPackager.TYPE;
42
import static org.jreleaser.util.CollectionUtils.setOf;
43
import static org.jreleaser.util.FileType.ZIP;
44
import static org.jreleaser.util.StringUtils.isFalse;
45
import static org.jreleaser.util.StringUtils.isNotBlank;
46

47
/**
48
 * @author Andres Almiray
49
 * @since 0.6.0
50
 */
51
public final class SdkmanPackager extends AbstractPackager<org.jreleaser.model.api.packagers.SdkmanPackager, SdkmanPackager> implements TimeoutAware {
52
    private static final Map<org.jreleaser.model.Distribution.DistributionType, Set<String>> SUPPORTED = new LinkedHashMap<>();
1✔
53
    private static final long serialVersionUID = 3632422575248447545L;
54

55
    static {
56
        Set<String> extensions = setOf(ZIP.extension());
1✔
57
        SUPPORTED.put(JAVA_BINARY, extensions);
1✔
58
        SUPPORTED.put(JLINK, extensions);
1✔
59
        SUPPORTED.put(BINARY, extensions);
1✔
60
    }
1✔
61

62
    private Sdkman.Command command;
63
    private String candidate;
64
    private String releaseNotesUrl;
65
    private String consumerKey;
66
    private String consumerToken;
67
    private int connectTimeout;
68
    private int readTimeout;
69
    @JsonIgnore
70
    private boolean published;
71

72
    @JsonIgnore
1✔
73
    private final org.jreleaser.model.api.packagers.SdkmanPackager immutable = new org.jreleaser.model.api.packagers.SdkmanPackager() {
1✔
74
        private static final long serialVersionUID = 6417525554199862450L;
75

76
        @Override
77
        public String getCandidate() {
78
            return candidate;
×
79
        }
80

81
        @Override
82
        public String getReleaseNotesUrl() {
83
            return releaseNotesUrl;
×
84
        }
85

86
        @Override
87
        public Sdkman.Command getCommand() {
88
            return command;
×
89
        }
90

91
        @Override
92
        public String getConsumerKey() {
93
            return consumerKey;
×
94
        }
95

96
        @Override
97
        public String getConsumerToken() {
98
            return consumerToken;
×
99
        }
100

101
        @Override
102
        public boolean isPublished() {
103
            return SdkmanPackager.this.isPublished();
×
104
        }
105

106
        @Override
107
        public Integer getConnectTimeout() {
108
            return connectTimeout;
×
109
        }
110

111
        @Override
112
        public Integer getReadTimeout() {
113
            return readTimeout;
×
114
        }
115

116
        @Override
117
        public String getType() {
118
            return SdkmanPackager.this.getType();
×
119
        }
120

121
        @Override
122
        public String getDownloadUrl() {
123
            return SdkmanPackager.this.getDownloadUrl();
×
124
        }
125

126
        @Override
127
        public boolean supportsPlatform(String platform) {
128
            return SdkmanPackager.this.supportsPlatform(platform);
×
129
        }
130

131
        @Override
132
        public boolean supportsDistribution(Distribution.DistributionType distributionType) {
133
            return SdkmanPackager.this.supportsDistribution(distributionType);
×
134
        }
135

136
        @Override
137
        public Set<String> getSupportedFileExtensions(Distribution.DistributionType distributionType) {
138
            return SdkmanPackager.this.getSupportedFileExtensions(distributionType);
×
139
        }
140

141
        @Override
142
        public Set<Stereotype> getSupportedStereotypes() {
143
            return SdkmanPackager.this.getSupportedStereotypes();
×
144
        }
145

146
        @Override
147
        public boolean isSnapshotSupported() {
148
            return SdkmanPackager.this.isSnapshotSupported();
×
149
        }
150

151
        @Override
152
        public boolean isContinueOnError() {
153
            return SdkmanPackager.this.isContinueOnError();
×
154
        }
155

156
        @Override
157
        public boolean isSkipPublishing() {
NEW
158
            return SdkmanPackager.this.isSkipPublishing();
×
159
        }
160

161
        @Override
162
        public Active getActive() {
163
            return SdkmanPackager.this.getActive();
×
164
        }
165

166
        @Override
167
        public boolean isEnabled() {
168
            return SdkmanPackager.this.isEnabled();
×
169
        }
170

171
        @Override
172
        public Map<String, Object> asMap(boolean full) {
173
            return unmodifiableMap(SdkmanPackager.this.asMap(full));
×
174
        }
175

176
        @Override
177
        public String getPrefix() {
178
            return SdkmanPackager.this.prefix();
×
179
        }
180

181
        @Override
182
        public Map<String, Object> getExtraProperties() {
183
            return unmodifiableMap(SdkmanPackager.this.getExtraProperties());
×
184
        }
185
    };
186

187
    public SdkmanPackager() {
188
        super(TYPE);
1✔
189
    }
1✔
190

191
    @Override
192
    public org.jreleaser.model.api.packagers.SdkmanPackager asImmutable() {
193
        return immutable;
1✔
194
    }
195

196
    @Override
197
    public void merge(SdkmanPackager source) {
198
        super.merge(source);
1✔
199
        this.candidate = merge(this.candidate, source.candidate);
1✔
200
        this.releaseNotesUrl = merge(this.releaseNotesUrl, source.releaseNotesUrl);
1✔
201
        this.command = merge(this.command, source.command);
1✔
202
        this.consumerKey = merge(this.consumerKey, source.consumerKey);
1✔
203
        this.consumerToken = merge(this.consumerToken, source.consumerToken);
1✔
204
        this.connectTimeout = merge(this.connectTimeout, source.connectTimeout);
1✔
205
        this.readTimeout = merge(this.readTimeout, source.readTimeout);
1✔
206
        this.published = merge(this.published, source.published);
1✔
207
    }
1✔
208

209
    public String getCandidate() {
210
        return candidate;
1✔
211
    }
212

213
    public void setCandidate(String candidate) {
214
        this.candidate = candidate;
1✔
215
    }
1✔
216

217
    public String getReleaseNotesUrl() {
218
        return releaseNotesUrl;
1✔
219
    }
220

221
    public void setReleaseNotesUrl(String releaseNotesUrl) {
222
        this.releaseNotesUrl = releaseNotesUrl;
1✔
223
    }
1✔
224

225
    public Sdkman.Command getCommand() {
226
        return command;
1✔
227
    }
228

229
    public void setCommand(Sdkman.Command command) {
230
        this.command = command;
1✔
231
    }
1✔
232

233
    public void setCommand(String str) {
234
        setCommand(Sdkman.Command.of(str));
×
235
    }
×
236

237
    public boolean isCommandSet() {
238
        return null != command;
×
239
    }
240

241
    public String getConsumerKey() {
242
        return consumerKey;
1✔
243
    }
244

245
    public void setConsumerKey(String consumerKey) {
246
        this.consumerKey = consumerKey;
1✔
247
    }
1✔
248

249
    public String getConsumerToken() {
250
        return consumerToken;
1✔
251
    }
252

253
    public void setConsumerToken(String consumerToken) {
254
        this.consumerToken = consumerToken;
1✔
255
    }
1✔
256

257
    @Override
258
    public Integer getConnectTimeout() {
259
        return connectTimeout;
1✔
260
    }
261

262
    @Override
263
    public void setConnectTimeout(Integer connectTimeout) {
264
        this.connectTimeout = connectTimeout;
1✔
265
    }
1✔
266

267
    @Override
268
    public Integer getReadTimeout() {
269
        return readTimeout;
1✔
270
    }
271

272
    @Override
273
    public void setReadTimeout(Integer readTimeout) {
274
        this.readTimeout = readTimeout;
1✔
275
    }
1✔
276

277
    public boolean isPublished() {
278
        return published;
×
279
    }
280

281
    public void setPublished(boolean published) {
282
        this.published = published;
1✔
283
    }
1✔
284

285
    @Override
286
    protected void asMap(boolean full, Map<String, Object> props) {
287
        props.put("candidate", candidate);
1✔
288
        props.put("command", command);
1✔
289
        props.put("releaseNotesUrl", releaseNotesUrl);
1✔
290
        props.put("connectTimeout", connectTimeout);
1✔
291
        props.put("readTimeout", readTimeout);
1✔
292
        props.put("consumerKey", isNotBlank(consumerKey) ? HIDE : UNSET);
1✔
293
        props.put("consumerToken", isNotBlank(consumerToken) ? HIDE : UNSET);
1✔
294
    }
1✔
295

296
    @Override
297
    public boolean supportsPlatform(String platform) {
298
        return true;
1✔
299
    }
300

301
    @Override
302
    public boolean supportsDistribution(org.jreleaser.model.Distribution.DistributionType distributionType) {
303
        return SUPPORTED.containsKey(distributionType);
1✔
304
    }
305

306
    @Override
307
    public Set<String> getSupportedFileExtensions(org.jreleaser.model.Distribution.DistributionType distributionType) {
308
        return unmodifiableSet(SUPPORTED.getOrDefault(distributionType, emptySet()));
1✔
309
    }
310

311
    @Override
312
    protected boolean isNotSkipped(Artifact artifact) {
313
        return isFalse(artifact.getExtraProperties().get(SKIP_SDKMAN));
1✔
314
    }
315
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc