• 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

42.67
/core/jreleaser-model-impl/src/main/java/org/jreleaser/model/internal/packagers/SnapPackager.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.Stereotype;
24
import org.jreleaser.model.internal.common.AbstractModelObject;
25
import org.jreleaser.model.internal.common.Artifact;
26
import org.jreleaser.model.internal.common.Domain;
27
import org.jreleaser.util.PlatformUtils;
28

29
import java.util.ArrayList;
30
import java.util.Collection;
31
import java.util.LinkedHashMap;
32
import java.util.LinkedHashSet;
33
import java.util.List;
34
import java.util.Map;
35
import java.util.Set;
36

37
import static java.util.Collections.emptySet;
38
import static java.util.Collections.unmodifiableList;
39
import static java.util.Collections.unmodifiableMap;
40
import static java.util.Collections.unmodifiableSet;
41
import static java.util.stream.Collectors.toList;
42
import static org.jreleaser.model.Distribution.DistributionType.BINARY;
43
import static org.jreleaser.model.Distribution.DistributionType.FLAT_BINARY;
44
import static org.jreleaser.model.Distribution.DistributionType.JAVA_BINARY;
45
import static org.jreleaser.model.Distribution.DistributionType.JLINK;
46
import static org.jreleaser.model.Distribution.DistributionType.NATIVE_IMAGE;
47
import static org.jreleaser.model.Distribution.DistributionType.NATIVE_PACKAGE;
48
import static org.jreleaser.model.Distribution.DistributionType.SINGLE_JAR;
49
import static org.jreleaser.model.JReleaserOutput.nag;
50
import static org.jreleaser.model.api.packagers.SnapPackager.SKIP_SNAP;
51
import static org.jreleaser.model.api.packagers.SnapPackager.TYPE;
52
import static org.jreleaser.util.CollectionUtils.setOf;
53
import static org.jreleaser.util.FileType.DEB;
54
import static org.jreleaser.util.FileType.JAR;
55
import static org.jreleaser.util.FileType.RPM;
56
import static org.jreleaser.util.FileType.TAR;
57
import static org.jreleaser.util.FileType.TAR_BZ2;
58
import static org.jreleaser.util.FileType.TAR_GZ;
59
import static org.jreleaser.util.FileType.TAR_XZ;
60
import static org.jreleaser.util.FileType.TBZ2;
61
import static org.jreleaser.util.FileType.TGZ;
62
import static org.jreleaser.util.FileType.TXZ;
63
import static org.jreleaser.util.StringUtils.isBlank;
64
import static org.jreleaser.util.StringUtils.isFalse;
65

66
/**
67
 * @author Andres Almiray
68
 * @since 0.1.0
69
 */
70
public final class SnapPackager extends AbstractRepositoryPackager<org.jreleaser.model.api.packagers.SnapPackager, SnapPackager> {
71
    private static final Map<org.jreleaser.model.Distribution.DistributionType, Set<String>> SUPPORTED = new LinkedHashMap<>();
1✔
72
    private static final long serialVersionUID = 478495088345166846L;
73

74
    static {
75
        Set<String> extensions = setOf(
1✔
76
            TAR_BZ2.extension(),
1✔
77
            TAR_GZ.extension(),
1✔
78
            TAR_XZ.extension(),
1✔
79
            TBZ2.extension(),
1✔
80
            TGZ.extension(),
1✔
81
            TXZ.extension(),
1✔
82
            TAR.extension());
1✔
83

84
        SUPPORTED.put(NATIVE_IMAGE, extensions);
1✔
85
        SUPPORTED.put(BINARY, extensions);
1✔
86
        SUPPORTED.put(JAVA_BINARY, extensions);
1✔
87
        SUPPORTED.put(JLINK, extensions);
1✔
88
        SUPPORTED.put(NATIVE_PACKAGE, setOf(DEB.extension(), RPM.extension()));
1✔
89
        SUPPORTED.put(SINGLE_JAR, setOf(JAR.extension()));
1✔
90
        SUPPORTED.put(FLAT_BINARY, emptySet());
1✔
91
    }
1✔
92

93
    private final Set<String> localPlugs = new LinkedHashSet<>();
1✔
94
    private final Set<String> localSlots = new LinkedHashSet<>();
1✔
95
    private final List<Plug> plugs = new ArrayList<>();
1✔
96
    private final List<Slot> slots = new ArrayList<>();
1✔
97
    private final List<Architecture> architectures = new ArrayList<>();
1✔
98
    private final SnapRepository repository = new SnapRepository();
1✔
99

100
    private String packageName;
101
    private String base;
102
    private String grade;
103
    private String confinement;
104
    private String exportedLogin;
105
    private Boolean remoteBuild;
106

107
    @JsonIgnore
1✔
108
    private final org.jreleaser.model.api.packagers.SnapPackager immutable = new org.jreleaser.model.api.packagers.SnapPackager() {
1✔
109
        private static final long serialVersionUID = 1130318970087212327L;
110

111
        private List<? extends org.jreleaser.model.api.packagers.SnapPackager.Architecture> architectures;
112
        private List<? extends org.jreleaser.model.api.packagers.SnapPackager.Slot> slots;
113
        private List<? extends org.jreleaser.model.api.packagers.SnapPackager.Plug> plugs;
114

115
        @Override
116
        public String getPackageName() {
117
            return packageName;
×
118
        }
119

120
        @Override
121
        public String getBase() {
122
            return base;
×
123
        }
124

125
        @Override
126
        public String getGrade() {
127
            return grade;
×
128
        }
129

130
        @Override
131
        public String getConfinement() {
132
            return confinement;
×
133
        }
134

135
        @Override
136
        public Set<String> getLocalPlugs() {
137
            return unmodifiableSet(localPlugs);
×
138
        }
139

140
        @Override
141
        public Set<String> getLocalSlots() {
142
            return unmodifiableSet(localSlots);
×
143
        }
144

145
        @Override
146
        public List<? extends org.jreleaser.model.api.packagers.SnapPackager.Plug> getPlugs() {
147
            if (null == plugs) {
×
148
                plugs = SnapPackager.this.plugs.stream()
×
149
                    .map(SnapPackager.Plug::asImmutable)
×
150
                    .collect(toList());
×
151
            }
152
            return plugs;
×
153
        }
154

155
        @Override
156
        public List<? extends org.jreleaser.model.api.packagers.SnapPackager.Slot> getSlots() {
157
            if (null == slots) {
×
158
                slots = SnapPackager.this.slots.stream()
×
159
                    .map(SnapPackager.Slot::asImmutable)
×
160
                    .collect(toList());
×
161
            }
162
            return slots;
×
163
        }
164

165
        @Override
166
        public List<? extends org.jreleaser.model.api.packagers.SnapPackager.Architecture> getArchitectures() {
167
            if (null == architectures) {
×
168
                architectures = SnapPackager.this.architectures.stream()
×
169
                    .map(SnapPackager.Architecture::asImmutable)
×
170
                    .collect(toList());
×
171
            }
172
            return architectures;
×
173
        }
174

175
        @Override
176
        public String getExportedLogin() {
177
            return exportedLogin;
×
178
        }
179

180
        @Override
181
        public boolean isRemoteBuild() {
182
            return SnapPackager.this.isRemoteBuild();
×
183
        }
184

185
        @Override
186
        public org.jreleaser.model.api.packagers.PackagerRepository getRepository() {
187
            return repository.asImmutable();
×
188
        }
189

190
        @Override
191
        public org.jreleaser.model.api.packagers.PackagerRepository getSnap() {
192
            return getRepository();
×
193
        }
194

195
        @Override
196
        public org.jreleaser.model.api.packagers.PackagerRepository getPackagerRepository() {
197
            return getRepository();
×
198
        }
199

200
        @Override
201
        public org.jreleaser.model.api.common.CommitAuthor getCommitAuthor() {
202
            return SnapPackager.this.getCommitAuthor().asImmutable();
×
203
        }
204

205
        @Override
206
        public String getTemplateDirectory() {
207
            return SnapPackager.this.getTemplateDirectory();
×
208
        }
209

210
        @Override
211
        public List<String> getSkipTemplates() {
212
            return unmodifiableList(SnapPackager.this.getSkipTemplates());
×
213
        }
214

215
        @Override
216
        public String getType() {
217
            return SnapPackager.this.getType();
×
218
        }
219

220
        @Override
221
        public String getDownloadUrl() {
222
            return SnapPackager.this.getDownloadUrl();
×
223
        }
224

225
        @Override
226
        public boolean supportsPlatform(String platform) {
227
            return SnapPackager.this.supportsPlatform(platform);
×
228
        }
229

230
        @Override
231
        public boolean supportsDistribution(Distribution.DistributionType distributionType) {
232
            return SnapPackager.this.supportsDistribution(distributionType);
×
233
        }
234

235
        @Override
236
        public Set<String> getSupportedFileExtensions(Distribution.DistributionType distributionType) {
237
            return SnapPackager.this.getSupportedFileExtensions(distributionType);
×
238
        }
239

240
        @Override
241
        public Set<Stereotype> getSupportedStereotypes() {
242
            return SnapPackager.this.getSupportedStereotypes();
×
243
        }
244

245
        @Override
246
        public boolean isSnapshotSupported() {
247
            return SnapPackager.this.isSnapshotSupported();
×
248
        }
249

250
        @Override
251
        public boolean isContinueOnError() {
252
            return SnapPackager.this.isContinueOnError();
×
253
        }
254

255
        @Override
256
        public boolean isSkipPublishing() {
NEW
257
            return SnapPackager.this.isSkipPublishing();
×
258
        }
259

260
        @Override
261
        public Active getActive() {
262
            return SnapPackager.this.getActive();
×
263
        }
264

265
        @Override
266
        public boolean isEnabled() {
267
            return SnapPackager.this.isEnabled();
×
268
        }
269

270
        @Override
271
        public Map<String, Object> asMap(boolean full) {
272
            return unmodifiableMap(SnapPackager.this.asMap(full));
×
273
        }
274

275
        @Override
276
        public String getPrefix() {
277
            return SnapPackager.this.prefix();
×
278
        }
279

280
        @Override
281
        public Map<String, Object> getExtraProperties() {
282
            return unmodifiableMap(SnapPackager.this.getExtraProperties());
×
283
        }
284
    };
285

286
    public SnapPackager() {
287
        super(TYPE);
1✔
288
    }
1✔
289

290
    @Override
291
    public org.jreleaser.model.api.packagers.SnapPackager asImmutable() {
292
        return immutable;
1✔
293
    }
294

295
    @Override
296
    public void merge(SnapPackager source) {
297
        super.merge(source);
1✔
298
        this.packageName = merge(this.packageName, source.packageName);
1✔
299
        this.base = merge(this.base, source.base);
1✔
300
        this.grade = merge(this.grade, source.grade);
1✔
301
        this.confinement = merge(this.confinement, source.confinement);
1✔
302
        this.exportedLogin = merge(this.exportedLogin, source.exportedLogin);
1✔
303
        this.remoteBuild = merge(this.remoteBuild, source.remoteBuild);
1✔
304
        setLocalPlugs(merge(this.localPlugs, source.localPlugs));
1✔
305
        setLocalSlots(merge(this.localSlots, source.localSlots));
1✔
306
        setPlugs(merge(this.plugs, source.plugs));
1✔
307
        setSlots(merge(this.slots, source.slots));
1✔
308
        setArchitectures(merge(this.architectures, source.architectures));
1✔
309
        setRepository(source.repository);
1✔
310
    }
1✔
311

312
    public String getPackageName() {
313
        return packageName;
1✔
314
    }
315

316
    public void setPackageName(String packageName) {
317
        this.packageName = packageName;
1✔
318
    }
1✔
319

320
    public String getBase() {
321
        return base;
1✔
322
    }
323

324
    public void setBase(String base) {
325
        this.base = base;
1✔
326
    }
1✔
327

328
    public String getGrade() {
329
        return grade;
1✔
330
    }
331

332
    public void setGrade(String grade) {
333
        this.grade = grade;
1✔
334
    }
1✔
335

336
    public String getConfinement() {
337
        return confinement;
1✔
338
    }
339

340
    public void setConfinement(String confinement) {
341
        this.confinement = confinement;
1✔
342
    }
1✔
343

344
    public Set<String> getLocalPlugs() {
345
        return localPlugs;
1✔
346
    }
347

348
    public void setLocalPlugs(Set<String> localPlugs) {
349
        this.localPlugs.clear();
1✔
350
        this.localPlugs.addAll(localPlugs);
1✔
351
    }
1✔
352

353
    public Set<String> getLocalSlots() {
354
        return localSlots;
1✔
355
    }
356

357
    public void setLocalSlots(Set<String> localSlots) {
358
        this.localSlots.clear();
1✔
359
        this.localSlots.addAll(localSlots);
1✔
360
    }
1✔
361

362
    public List<Plug> getPlugs() {
363
        return plugs;
1✔
364
    }
365

366
    public void setPlugs(List<Plug> plugs) {
367
        this.plugs.clear();
1✔
368
        this.plugs.addAll(plugs);
1✔
369
    }
1✔
370

371
    public List<Slot> getSlots() {
372
        return slots;
1✔
373
    }
374

375
    public void setSlots(List<Slot> slots) {
376
        this.slots.clear();
1✔
377
        this.slots.addAll(slots);
1✔
378
    }
1✔
379

380
    public List<Architecture> getArchitectures() {
381
        return architectures;
1✔
382
    }
383

384
    public void setArchitectures(List<Architecture> architectures) {
385
        this.architectures.clear();
1✔
386
        this.architectures.addAll(architectures);
1✔
387
    }
1✔
388

389
    public void addArchitecture(List<Architecture> architectures) {
390
        this.architectures.addAll(architectures);
1✔
391
    }
1✔
392

393
    public void addArchitecture(Architecture architecture) {
394
        if (null != architecture) {
×
395
            this.architectures.add(architecture);
×
396
        }
397
    }
×
398

399
    public String getExportedLogin() {
400
        return exportedLogin;
×
401
    }
402

403
    public void setExportedLogin(String exportedLogin) {
404
        this.exportedLogin = exportedLogin;
×
405
    }
×
406

407
    public boolean isRemoteBuild() {
408
        return null != remoteBuild && remoteBuild;
1✔
409
    }
410

411
    public void setRemoteBuild(Boolean remoteBuild) {
412
        this.remoteBuild = remoteBuild;
1✔
413
    }
1✔
414

415
    public boolean isRemoteBuildSet() {
416
        return null != remoteBuild;
1✔
417
    }
418

419
    public SnapRepository getRepository() {
420
        return repository;
1✔
421
    }
422

423
    public void setRepository(SnapRepository repository) {
424
        this.repository.merge(repository);
1✔
425
    }
1✔
426

427
    @Deprecated
428
    public SnapRepository getSnap() {
429
        return getRepository();
×
430
    }
431

432
    @Deprecated
433
    public void setSnap(SnapRepository repository) {
434
        nag("snap.snap is deprecated since 1.8.0 and will be removed in 2.0.0. Use snap.repository instead");
×
435
        setRepository(repository);
×
436
    }
×
437

438
    @Override
439
    protected void asMap(boolean full, Map<String, Object> props) {
440
        super.asMap(full, props);
1✔
441
        props.put("packageName", packageName);
1✔
442
        props.put("base", base);
1✔
443
        props.put("grade", grade);
1✔
444
        props.put("confinement", confinement);
1✔
445
        props.put("exportedLogin", exportedLogin);
1✔
446
        props.put("remoteBuild", isRemoteBuild());
1✔
447
        props.put("repository", repository.asMap(full));
1✔
448
        props.put("localPlugs", localPlugs);
1✔
449
        props.put("localSlots", localSlots);
1✔
450

451
        Map<String, Map<String, Object>> mapped = new LinkedHashMap<>();
1✔
452
        for (int i = 0; i < plugs.size(); i++) {
1✔
453
            mapped.put("plug " + i, plugs.get(i).asMap(full));
×
454
        }
455
        props.put("plugs", mapped);
1✔
456

457
        mapped = new LinkedHashMap<>();
1✔
458
        for (int i = 0; i < slots.size(); i++) {
1✔
459
            mapped.put("slot " + i, slots.get(i).asMap(full));
×
460
        }
461
        props.put("slots", mapped);
1✔
462

463
        mapped = new LinkedHashMap<>();
1✔
464
        for (int i = 0; i < architectures.size(); i++) {
1✔
465
            mapped.put("architecture " + i, architectures.get(i).asMap(full));
1✔
466
        }
467
        props.put("architectures", mapped);
1✔
468
    }
1✔
469

470
    @Override
471
    public RepositoryTap getRepositoryTap() {
472
        return getRepository();
1✔
473
    }
474

475
    public PackagerRepository getPackagerRepository() {
476
        return getRepository();
×
477
    }
478

479
    @Override
480
    public boolean supportsPlatform(String platform) {
481
        return isBlank(platform) || PlatformUtils.isUnix(platform);
1✔
482
    }
483

484
    @Override
485
    public boolean supportsDistribution(org.jreleaser.model.Distribution.DistributionType distributionType) {
486
        return SUPPORTED.containsKey(distributionType);
1✔
487
    }
488

489
    @Override
490
    public Set<String> getSupportedFileExtensions(org.jreleaser.model.Distribution.DistributionType distributionType) {
491
        return unmodifiableSet(SUPPORTED.getOrDefault(distributionType, emptySet()));
1✔
492
    }
493

494
    @Override
495
    protected boolean isNotSkipped(Artifact artifact) {
496
        return isFalse(artifact.getExtraProperties().get(SKIP_SNAP));
1✔
497
    }
498

499
    public static final class Attribute {
500
        public final String key;
501
        public final String value;
502

503
        public Attribute(String key, String value) {
×
504
            this.key = key;
×
505
            this.value = value;
×
506
        }
×
507
    }
508

509
    public static final class Slot extends AbstractModelObject<Slot> implements Domain {
×
510
        private static final long serialVersionUID = 8422045649925759163L;
511

512
        private final Map<String, String> attributes = new LinkedHashMap<>();
×
513
        private final List<String> reads = new ArrayList<>();
×
514
        private final List<String> writes = new ArrayList<>();
×
515
        private String name;
516

517
        @JsonIgnore
×
518
        private final org.jreleaser.model.api.packagers.SnapPackager.Slot immutable = new org.jreleaser.model.api.packagers.SnapPackager.Slot() {
×
519
            private static final long serialVersionUID = -3518924698578544847L;
520

521
            @Override
522
            public String getName() {
523
                return name;
×
524
            }
525

526
            @Override
527
            public Map<String, String> getAttributes() {
528
                return unmodifiableMap(attributes);
×
529
            }
530

531
            @Override
532
            public List<String> getReads() {
533
                return unmodifiableList(reads);
×
534
            }
535

536
            @Override
537
            public List<String> getWrites() {
538
                return unmodifiableList(writes);
×
539
            }
540

541
            @Override
542
            public Map<String, Object> asMap(boolean full) {
543
                return unmodifiableMap(Slot.this.asMap(full));
×
544
            }
545
        };
546

547
        public org.jreleaser.model.api.packagers.SnapPackager.Slot asImmutable() {
548
            return immutable;
×
549
        }
550

551
        @Override
552
        public void merge(Slot source) {
553
            this.name = merge(this.name, source.name);
×
554
            setAttributes(merge(this.attributes, source.attributes));
×
555
            setReads(merge(this.reads, source.reads));
×
556
            setWrites(merge(this.writes, source.writes));
×
557
        }
×
558

559
        public String getName() {
560
            return name;
×
561
        }
562

563
        public void setName(String name) {
564
            this.name = name;
×
565
        }
×
566

567
        public Map<String, String> getAttributes() {
568
            return attributes;
×
569
        }
570

571
        public void setAttributes(Map<String, String> attributes) {
572
            this.attributes.clear();
×
573
            this.attributes.putAll(attributes);
×
574
        }
×
575

576
        public Collection<Attribute> getAttrs() {
577
            return attributes.entrySet().stream()
×
578
                .map(e -> new Attribute(e.getKey(), e.getValue()))
×
579
                .collect(toList());
×
580
        }
581

582
        public List<String> getReads() {
583
            return reads;
×
584
        }
585

586
        public void setReads(List<String> reads) {
587
            this.reads.clear();
×
588
            this.reads.addAll(reads);
×
589
        }
×
590

591
        public List<String> getWrites() {
592
            return writes;
×
593
        }
594

595
        public void setWrites(List<String> writes) {
596
            this.writes.clear();
×
597
            this.writes.addAll(writes);
×
598
        }
×
599

600
        public boolean getHasReads() {
601
            return !reads.isEmpty();
×
602
        }
603

604
        public boolean getHasWrites() {
605
            return !writes.isEmpty();
×
606
        }
607

608
        @Override
609
        public Map<String, Object> asMap(boolean full) {
610
            Map<String, Object> map = new LinkedHashMap<>();
×
611
            map.put(name, attributes);
×
612
            map.put("read", reads);
×
613
            map.put("write", writes);
×
614
            return map;
×
615
        }
616

617
        public static Slot copyOf(Slot other) {
618
            Slot copy = new Slot();
×
619
            copy.setName(other.getName());
×
620
            copy.setAttributes(other.getAttributes());
×
621
            copy.setReads(other.getReads());
×
622
            copy.setWrites(other.getWrites());
×
623
            return copy;
×
624
        }
625
    }
626

627
    public static final class Plug extends AbstractModelObject<Plug> implements Domain {
×
628
        private static final long serialVersionUID = 8041902336260999261L;
629

630
        private final Map<String, String> attributes = new LinkedHashMap<>();
×
631
        private final List<String> reads = new ArrayList<>();
×
632
        private final List<String> writes = new ArrayList<>();
×
633
        private String name;
634

635
        @JsonIgnore
×
636
        private final org.jreleaser.model.api.packagers.SnapPackager.Plug immutable = new org.jreleaser.model.api.packagers.SnapPackager.Plug() {
×
637
            private static final long serialVersionUID = -5689359361910963388L;
638

639
            @Override
640
            public String getName() {
641
                return name;
×
642
            }
643

644
            @Override
645
            public Map<String, String> getAttributes() {
646
                return unmodifiableMap(attributes);
×
647
            }
648

649
            @Override
650
            public List<String> getReads() {
651
                return unmodifiableList(reads);
×
652
            }
653

654
            @Override
655
            public List<String> getWrites() {
656
                return unmodifiableList(writes);
×
657
            }
658

659
            @Override
660
            public Map<String, Object> asMap(boolean full) {
661
                return unmodifiableMap(Plug.this.asMap(full));
×
662
            }
663
        };
664

665
        public org.jreleaser.model.api.packagers.SnapPackager.Plug asImmutable() {
666
            return immutable;
×
667
        }
668

669
        @Override
670
        public void merge(Plug source) {
671
            this.name = merge(this.name, source.name);
×
672
            setAttributes(merge(this.attributes, source.attributes));
×
673
            setReads(merge(this.reads, source.reads));
×
674
            setWrites(merge(this.writes, source.writes));
×
675
        }
×
676

677
        public String getName() {
678
            return name;
×
679
        }
680

681
        public void setName(String name) {
682
            this.name = name;
×
683
        }
×
684

685
        public Map<String, String> getAttributes() {
686
            return attributes;
×
687
        }
688

689
        public void setAttributes(Map<String, String> attributes) {
690
            this.attributes.clear();
×
691
            this.attributes.putAll(attributes);
×
692
        }
×
693

694
        public Collection<Attribute> getAttrs() {
695
            return attributes.entrySet().stream()
×
696
                .map(e -> new Attribute(e.getKey(), e.getValue()))
×
697
                .collect(toList());
×
698
        }
699

700
        public List<String> getReads() {
701
            return reads;
×
702
        }
703

704
        public void setReads(List<String> reads) {
705
            this.reads.clear();
×
706
            this.reads.addAll(reads);
×
707
        }
×
708

709
        public List<String> getWrites() {
710
            return writes;
×
711
        }
712

713
        public void setWrites(List<String> writes) {
714
            this.writes.clear();
×
715
            this.writes.addAll(writes);
×
716
        }
×
717

718
        public boolean getHasReads() {
719
            return !reads.isEmpty();
×
720
        }
721

722
        public boolean getHasWrites() {
723
            return !writes.isEmpty();
×
724
        }
725

726
        @Override
727
        public Map<String, Object> asMap(boolean full) {
728
            Map<String, Object> map = new LinkedHashMap<>();
×
729
            map.put(name, attributes);
×
730
            map.put("reads", reads);
×
731
            map.put("writes", writes);
×
732
            return map;
×
733
        }
734

735
        public static Plug copyOf(Plug other) {
736
            Plug copy = new Plug();
×
737
            copy.setName(other.getName());
×
738
            copy.setAttributes(other.getAttributes());
×
739
            copy.setReads(other.getReads());
×
740
            copy.setWrites(other.getWrites());
×
741
            return copy;
×
742
        }
743
    }
744

745
    public static final class SnapRepository extends PackagerRepository {
746
        private static final long serialVersionUID = 4117738159449060256L;
747

748
        public SnapRepository() {
749
            super("snap", "snap");
1✔
750
        }
1✔
751
    }
752

753
    public static final class Architecture extends AbstractModelObject<Architecture> implements Domain {
1✔
754
        private static final long serialVersionUID = 1878739013053454056L;
755

756
        private final List<String> buildOn = new ArrayList<>();
1✔
757
        private final List<String> runOn = new ArrayList<>();
1✔
758
        private Boolean ignoreError;
759

760
        @JsonIgnore
1✔
761
        private final org.jreleaser.model.api.packagers.SnapPackager.Architecture immutable = new org.jreleaser.model.api.packagers.SnapPackager.Architecture() {
1✔
762
            private static final long serialVersionUID = 7707062117835809382L;
763

764
            @Override
765
            public List<String> getBuildOn() {
766
                return unmodifiableList(buildOn);
×
767
            }
768

769
            @Override
770
            public List<String> getRunOn() {
771
                return unmodifiableList(runOn);
×
772
            }
773

774
            @Override
775
            public boolean isIgnoreError() {
776
                return Architecture.this.isIgnoreError();
×
777
            }
778

779
            @Override
780
            public Map<String, Object> asMap(boolean full) {
781
                return unmodifiableMap(Architecture.this.asMap(full));
×
782
            }
783
        };
784

785
        public org.jreleaser.model.api.packagers.SnapPackager.Architecture asImmutable() {
786
            return immutable;
×
787
        }
788

789
        @Override
790
        public void merge(Architecture source) {
791
            this.ignoreError = merge(this.ignoreError, source.ignoreError);
×
792
            setBuildOn(merge(this.buildOn, source.buildOn));
×
793
            setRunOn(merge(this.runOn, source.runOn));
×
794
        }
×
795

796
        public List<String> getBuildOn() {
797
            return buildOn;
1✔
798
        }
799

800
        public void setBuildOn(List<String> buildOn) {
801
            this.buildOn.clear();
1✔
802
            this.buildOn.addAll(buildOn);
1✔
803
        }
1✔
804

805
        public List<String> getRunOn() {
806
            return runOn;
×
807
        }
808

809
        public void setRunOn(List<String> runOn) {
810
            this.runOn.clear();
×
811
            this.runOn.addAll(runOn);
×
812
        }
×
813

814
        public boolean hasBuildOn() {
815
            return !buildOn.isEmpty();
1✔
816
        }
817

818
        public boolean hasRunOn() {
819
            return !runOn.isEmpty();
1✔
820
        }
821

822
        public boolean isIgnoreError() {
823
            return null != ignoreError && ignoreError;
1✔
824
        }
825

826
        public void setIgnoreError(Boolean ignoreError) {
827
            this.ignoreError = ignoreError;
×
828
        }
×
829

830
        public boolean isIgnoreErrorSet() {
831
            return null != ignoreError;
×
832
        }
833

834
        @Override
835
        public Map<String, Object> asMap(boolean full) {
836
            Map<String, Object> map = new LinkedHashMap<>();
1✔
837
            map.put("buildOn", buildOn);
1✔
838
            map.put("runOn", runOn);
1✔
839
            map.put("ignoreError", isIgnoreError());
1✔
840
            return map;
1✔
841
        }
842
    }
843
}
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