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

jreleaser / jreleaser / #558

08 Dec 2025 02:56PM UTC coverage: 48.239% (+0.02%) from 48.215%
#558

push

github

aalmiray
feat(core): warn when a name template cannot be resolved

Closes #1960

Closes #1961

299 of 573 new or added lines in 133 files covered. (52.18%)

4 existing lines in 4 files now uncovered.

26047 of 53996 relevant lines covered (48.24%)

0.48 hits per line

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

0.0
/core/jreleaser-model-impl/src/main/java/org/jreleaser/model/internal/release/GitlabReleaser.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.release;
19

20
import com.fasterxml.jackson.annotation.JsonIgnore;
21
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
22
import org.jreleaser.model.Active;
23
import org.jreleaser.model.internal.JReleaserContext;
24
import org.jreleaser.mustache.TemplateContext;
25

26
import java.util.LinkedHashMap;
27
import java.util.Map;
28

29
import static java.util.Collections.unmodifiableMap;
30
import static org.jreleaser.model.Constants.KEY_IDENTIFIER;
31
import static org.jreleaser.model.Constants.KEY_PROJECT_IDENTIFIER;
32
import static org.jreleaser.model.JReleaserOutput.nag;
33

34
/**
35
 * @author Andres Almiray
36
 * @since 0.1.0
37
 */
38
public final class GitlabReleaser extends BaseReleaser<org.jreleaser.model.api.release.GitlabReleaser, GitlabReleaser> {
39
    private static final long serialVersionUID = 8626675568115866407L;
40

41
    private final Map<String, String> uploadLinks = new LinkedHashMap<>();
×
42
    private String projectIdentifier;
43

44
    @JsonIgnore
×
45
    private final org.jreleaser.model.api.release.GitlabReleaser immutable = new org.jreleaser.model.api.release.GitlabReleaser() {
×
46
        private static final long serialVersionUID = 6362243270119328338L;
47

48
        @Override
49
        public boolean isPrerelease() {
50
            return GitlabReleaser.this.isPrerelease();
×
51
        }
52

53
        @Override
54
        public String getIdentifier() {
55
            return getProjectIdentifier();
×
56
        }
57

58
        @Override
59
        public String getProjectIdentifier() {
60
            return projectIdentifier;
×
61
        }
62

63
        @Override
64
        public Map<String, String> getUploadLinks() {
65
            return unmodifiableMap(uploadLinks);
×
66
        }
67

68
        @Override
69
        public String getServiceName() {
70
            return GitlabReleaser.this.getServiceName();
×
71
        }
72

73
        @Override
74
        public boolean isReleaseSupported() {
75
            return GitlabReleaser.this.isReleaseSupported();
×
76
        }
77

78
        @Override
79
        public String getCanonicalRepoName() {
80
            return GitlabReleaser.this.getCanonicalRepoName();
×
81
        }
82

83
        @Override
84
        public String getReverseRepoHost() {
85
            return GitlabReleaser.this.getReverseRepoHost();
×
86
        }
87

88
        @Override
89
        public boolean isMatch() {
90
            return GitlabReleaser.this.isMatch();
×
91
        }
92

93
        @Override
94
        public String getHost() {
95
            return GitlabReleaser.this.getHost();
×
96
        }
97

98
        @Override
99
        public String getName() {
100
            return GitlabReleaser.this.getName();
×
101
        }
102

103
        @Override
104
        public String getRepoUrl() {
105
            return GitlabReleaser.this.getRepoUrl();
×
106
        }
107

108
        @Override
109
        public String getRepoCloneUrl() {
110
            return GitlabReleaser.this.getRepoCloneUrl();
×
111
        }
112

113
        @Override
114
        public String getCommitUrl() {
115
            return GitlabReleaser.this.getCommitUrl();
×
116
        }
117

118
        @Override
119
        public String getSrcUrl() {
120
            return GitlabReleaser.this.getSrcUrl();
×
121
        }
122

123
        @Override
124
        public String getDownloadUrl() {
125
            return GitlabReleaser.this.getDownloadUrl();
×
126
        }
127

128
        @Override
129
        public String getReleaseNotesUrl() {
130
            return GitlabReleaser.this.getReleaseNotesUrl();
×
131
        }
132

133
        @Override
134
        public String getLatestReleaseUrl() {
135
            return GitlabReleaser.this.getLatestReleaseUrl();
×
136
        }
137

138
        @Override
139
        public String getIssueTrackerUrl() {
140
            return GitlabReleaser.this.getIssueTrackerUrl();
×
141
        }
142

143
        @Override
144
        public String getUsername() {
145
            return GitlabReleaser.this.getUsername();
×
146
        }
147

148
        @Override
149
        public String getToken() {
150
            return GitlabReleaser.this.getToken();
×
151
        }
152

153
        @Override
154
        public String getTagName() {
155
            return GitlabReleaser.this.getTagName();
×
156
        }
157

158
        @Override
159
        public String getPreviousTagName() {
160
            return GitlabReleaser.this.getPreviousTagName();
×
161
        }
162

163
        @Override
164
        public String getReleaseName() {
165
            return GitlabReleaser.this.getReleaseName();
×
166
        }
167

168
        @Override
169
        public String getBranch() {
170
            return GitlabReleaser.this.getBranch();
×
171
        }
172

173
        @Override
174
        public String getBranchPush() {
175
            return GitlabReleaser.this.getBranchPush();
×
176
        }
177

178
        @Override
179
        public Prerelease getPrerelease() {
180
            return GitlabReleaser.this.getPrerelease().asImmutable();
×
181
        }
182

183
        @Override
184
        public boolean isSign() {
185
            return GitlabReleaser.this.isSign();
×
186
        }
187

188
        @Override
189
        public org.jreleaser.model.api.release.Changelog getChangelog() {
190
            return GitlabReleaser.this.getChangelog().asImmutable();
×
191
        }
192

193
        @Override
194
        public Milestone getMilestone() {
195
            return GitlabReleaser.this.getMilestone().asImmutable();
×
196
        }
197

198
        @Override
199
        public Issues getIssues() {
200
            return GitlabReleaser.this.getIssues().asImmutable();
×
201
        }
202

203
        @Override
204
        public boolean isSkipTag() {
205
            return GitlabReleaser.this.isSkipTag();
×
206
        }
207

208
        @Override
209
        public boolean isSkipRelease() {
210
            return GitlabReleaser.this.isSkipRelease();
×
211
        }
212

213
        @Override
214
        public boolean isOverwrite() {
215
            return GitlabReleaser.this.isOverwrite();
×
216
        }
217

218
        @Override
219
        public Update getUpdate() {
220
            return GitlabReleaser.this.getUpdate().asImmutable();
×
221
        }
222

223
        @Override
224
        public String getApiEndpoint() {
225
            return GitlabReleaser.this.getApiEndpoint();
×
226
        }
227

228
        @Override
229
        public boolean isArtifacts() {
230
            return GitlabReleaser.this.isArtifacts();
×
231
        }
232

233
        @Override
234
        public boolean isFiles() {
235
            return GitlabReleaser.this.isFiles();
×
236
        }
237

238
        @Override
239
        public boolean isChecksums() {
240
            return GitlabReleaser.this.isChecksums();
×
241
        }
242

243
        @Override
244
        public boolean isCatalogs() {
245
            return GitlabReleaser.this.isCatalogs();
×
246
        }
247

248
        @Override
249
        public boolean isSignatures() {
250
            return GitlabReleaser.this.isSignatures();
×
251
        }
252

253
        @Override
254
        public Active getUploadAssets() {
255
            return GitlabReleaser.this.getUploadAssets();
×
256
        }
257

258
        @Override
259
        public org.jreleaser.model.api.common.CommitAuthor getCommitAuthor() {
260
            return GitlabReleaser.this.getCommitAuthor().asImmutable();
×
261
        }
262

263
        @Override
264
        public Map<String, Object> asMap(boolean full) {
265
            return unmodifiableMap(GitlabReleaser.this.asMap(full));
×
266
        }
267

268
        @Override
269
        public boolean isEnabled() {
270
            return GitlabReleaser.this.isEnabled();
×
271
        }
272

273
        @Override
274
        public String getOwner() {
275
            return GitlabReleaser.this.getOwner();
×
276
        }
277

278
        @Override
279
        public Integer getConnectTimeout() {
280
            return GitlabReleaser.this.getConnectTimeout();
×
281
        }
282

283
        @Override
284
        public Integer getReadTimeout() {
285
            return GitlabReleaser.this.getReadTimeout();
×
286
        }
287
    };
288

289
    public GitlabReleaser() {
290
        super(org.jreleaser.model.api.release.GitlabReleaser.TYPE, true);
×
291
        setHost("gitlab.com");
×
292
        setRepoUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}");
×
293
        setRepoCloneUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}.git");
×
294
        setCommitUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}/-/commits");
×
295
        setSrcUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}/-/blob/{{repoBranch}}");
×
296
        setDownloadUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}/-/releases/{{tagName}}/downloads/{{artifactFile}}");
×
297
        setReleaseNotesUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}/-/releases/{{tagName}}");
×
298
        setLatestReleaseUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}/-/releases/permalink/latest");
×
299
        setIssueTrackerUrl("https://{{repoHost}}/{{repoOwner}}/{{repoName}}/-/issues");
×
300
    }
×
301

302
    @Override
303
    public org.jreleaser.model.api.release.GitlabReleaser asImmutable() {
304
        return immutable;
×
305
    }
306

307
    @Override
308
    public void merge(GitlabReleaser source) {
309
        super.merge(source);
×
310
        this.projectIdentifier = merge(this.projectIdentifier, source.projectIdentifier);
×
311
        setUploadLinks(merge(this.uploadLinks, source.uploadLinks));
×
312
    }
×
313

314
    @Override
315
    public String getReverseRepoHost() {
316
        return "com.gitlab";
×
317
    }
318

319
    @Deprecated
320
    @JsonPropertyDescription("gitlab.identifier is deprecated since 1.2.0 and will be removed in 2.0.0. Use gitlab.projectIdentifier instead")
321
    public String getIdentifier() {
322
        return getProjectIdentifier();
×
323
    }
324

325
    @Deprecated
326
    public void setIdentifier(String identifier) {
327
        nag("gitlab.identifier is deprecated since 1.2.0 and will be removed in 2.0.0. Use gitlab.projectIdentifier instead");
×
328
        setProjectIdentifier(identifier);
×
329
    }
×
330

331
    public String getProjectIdentifier() {
332
        return projectIdentifier;
×
333
    }
334

335
    public void setProjectIdentifier(String projectIdentifier) {
336
        this.projectIdentifier = projectIdentifier;
×
337
    }
×
338

339
    public Map<String, String> getUploadLinks() {
340
        return uploadLinks;
×
341
    }
342

343
    public void setUploadLinks(Map<String, String> uploadLinks) {
344
        this.uploadLinks.clear();
×
345
        this.uploadLinks.putAll(uploadLinks);
×
346
    }
×
347

348
    @Override
349
    public Map<String, Object> asMap(boolean full) {
350
        Map<String, Object> map = super.asMap(full);
×
351
        map.put("projectIdentifier", projectIdentifier);
×
352
        map.put("uploadLinks", uploadLinks);
×
353
        return map;
×
354
    }
355

356
    @Override
357
    public TemplateContext props(JReleaserContext context) {
NEW
358
        TemplateContext props = super.props(context);
×
359
        props.set(KEY_IDENTIFIER, projectIdentifier);
×
360
        props.set(KEY_PROJECT_IDENTIFIER, projectIdentifier);
×
361

362
        return props;
×
363
    }
364
}
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