• 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

62.38
/core/jreleaser-model-impl/src/main/java/org/jreleaser/model/internal/packagers/WingetPackager.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 com.fasterxml.jackson.annotation.JsonProperty;
22
import org.jreleaser.model.Active;
23
import org.jreleaser.model.Distribution;
24
import org.jreleaser.model.Stereotype;
25
import org.jreleaser.model.api.common.Domain;
26
import org.jreleaser.model.api.packagers.WingetPackager.Installer.Mode;
27
import org.jreleaser.model.api.packagers.WingetPackager.Installer.Scope;
28
import org.jreleaser.model.api.packagers.WingetPackager.Installer.Type;
29
import org.jreleaser.model.api.packagers.WingetPackager.Installer.UpgradeBehavior;
30
import org.jreleaser.model.internal.common.AbstractModelObject;
31
import org.jreleaser.model.internal.common.Artifact;
32
import org.jreleaser.util.PlatformUtils;
33

34
import java.util.ArrayList;
35
import java.util.Comparator;
36
import java.util.LinkedHashMap;
37
import java.util.LinkedHashSet;
38
import java.util.List;
39
import java.util.Map;
40
import java.util.Objects;
41
import java.util.Set;
42

43
import static java.util.Collections.emptySet;
44
import static java.util.Collections.singleton;
45
import static java.util.Collections.unmodifiableList;
46
import static java.util.Collections.unmodifiableMap;
47
import static java.util.Collections.unmodifiableSet;
48
import static org.jreleaser.model.Distribution.DistributionType.BINARY;
49
import static org.jreleaser.model.Distribution.DistributionType.JAVA_BINARY;
50
import static org.jreleaser.model.Distribution.DistributionType.JLINK;
51
import static org.jreleaser.model.Distribution.DistributionType.NATIVE_IMAGE;
52
import static org.jreleaser.model.Distribution.DistributionType.NATIVE_PACKAGE;
53
import static org.jreleaser.model.api.packagers.WingetPackager.SKIP_WINGET;
54
import static org.jreleaser.model.api.packagers.WingetPackager.TYPE;
55
import static org.jreleaser.util.CollectionUtils.setOf;
56
import static org.jreleaser.util.FileType.EXE;
57
import static org.jreleaser.util.FileType.MSI;
58
import static org.jreleaser.util.FileType.ZIP;
59
import static org.jreleaser.util.StringUtils.isBlank;
60
import static org.jreleaser.util.StringUtils.isFalse;
61

62
/**
63
 * @author Andres Almiray
64
 * @since 1.5.0
65
 */
66
public final class WingetPackager extends AbstractRepositoryPackager<org.jreleaser.model.api.packagers.WingetPackager, WingetPackager> {
67
    private static final long serialVersionUID = -9015011090998365168L;
68

69
    private static final Map<Distribution.DistributionType, Set<String>> SUPPORTED = new LinkedHashMap<>();
1✔
70

71
    static {
72
        SUPPORTED.put(NATIVE_IMAGE, setOf(ZIP.extension()));
1✔
73
        SUPPORTED.put(BINARY, setOf(ZIP.extension()));
1✔
74
        SUPPORTED.put(JAVA_BINARY, setOf(ZIP.extension()));
1✔
75
        SUPPORTED.put(JLINK, setOf(ZIP.extension()));
1✔
76
        SUPPORTED.put(NATIVE_PACKAGE, setOf(MSI.extension(), EXE.extension()));
1✔
77
    }
1✔
78

79
    private final WingetRepository repository = new WingetRepository();
1✔
80
    private final List<String> tags = new ArrayList<>();
1✔
81
    @JsonProperty("package")
1✔
82
    private final Package pack = new Package();
83
    private final Publisher publisher = new Publisher();
1✔
84
    private final Installer installer = new Installer();
1✔
85

86
    private String defaultLocale;
87
    private String author;
88
    private String moniker;
89
    private String minimumOsVersion;
90
    private String productCode;
91

92
    @JsonIgnore
1✔
93
    private final org.jreleaser.model.api.packagers.WingetPackager immutable = new org.jreleaser.model.api.packagers.WingetPackager() {
1✔
94
        private static final long serialVersionUID = -6514405944610257520L;
95

96
        @Override
97
        public Package getPackage() {
98
            return WingetPackager.this.getPackage().asImmutable();
×
99
        }
100

101
        @Override
102
        public Publisher getPublisher() {
103
            return WingetPackager.this.getPublisher().asImmutable();
×
104
        }
105

106
        @Override
107
        public Installer getInstaller() {
108
            return WingetPackager.this.getInstaller().asImmutable();
×
109
        }
110

111
        @Override
112
        public String getDefaultLocale() {
113
            return WingetPackager.this.getDefaultLocale();
×
114
        }
115

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

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

126
        @Override
127
        public List<String> getTags() {
128
            return unmodifiableList(WingetPackager.this.getTags());
×
129
        }
130

131
        @Override
132
        public String getMinimumOsVersion() {
133
            return WingetPackager.this.getMinimumOsVersion();
×
134
        }
135

136
        @Override
137
        public String getProductCode() {
138
            return WingetPackager.this.getProductCode();
×
139
        }
140

141
        @Override
142
        public org.jreleaser.model.api.packagers.PackagerRepository getRepository() {
143
            return repository.asImmutable();
×
144
        }
145

146
        @Override
147
        public org.jreleaser.model.api.packagers.PackagerRepository getPackagerRepository() {
148
            return getRepository();
×
149
        }
150

151
        @Override
152
        public org.jreleaser.model.api.common.CommitAuthor getCommitAuthor() {
153
            return WingetPackager.this.getCommitAuthor().asImmutable();
×
154
        }
155

156
        @Override
157
        public String getTemplateDirectory() {
158
            return WingetPackager.this.getTemplateDirectory();
×
159
        }
160

161
        @Override
162
        public List<String> getSkipTemplates() {
163
            return unmodifiableList(WingetPackager.this.getSkipTemplates());
×
164
        }
165

166
        @Override
167
        public String getType() {
168
            return WingetPackager.this.getType();
×
169
        }
170

171
        @Override
172
        public String getDownloadUrl() {
173
            return WingetPackager.this.getDownloadUrl();
×
174
        }
175

176
        @Override
177
        public boolean supportsPlatform(String platform) {
178
            return WingetPackager.this.supportsPlatform(platform);
×
179
        }
180

181
        @Override
182
        public boolean supportsDistribution(Distribution.DistributionType distributionType) {
183
            return WingetPackager.this.supportsDistribution(distributionType);
×
184
        }
185

186
        @Override
187
        public Set<String> getSupportedFileExtensions(Distribution.DistributionType distributionType) {
188
            return WingetPackager.this.getSupportedFileExtensions(distributionType);
×
189
        }
190

191
        @Override
192
        public Set<Stereotype> getSupportedStereotypes() {
193
            return WingetPackager.this.getSupportedStereotypes();
×
194
        }
195

196
        @Override
197
        public boolean isSnapshotSupported() {
198
            return WingetPackager.this.isSnapshotSupported();
×
199
        }
200

201
        @Override
202
        public boolean isContinueOnError() {
203
            return WingetPackager.this.isContinueOnError();
×
204
        }
205

206
        @Override
207
        public boolean isSkipPublishing() {
NEW
208
            return WingetPackager.this.isSkipPublishing();
×
209
        }
210

211
        @Override
212
        public Active getActive() {
213
            return WingetPackager.this.getActive();
×
214
        }
215

216
        @Override
217
        public boolean isEnabled() {
218
            return WingetPackager.this.isEnabled();
×
219
        }
220

221
        @Override
222
        public Map<String, Object> asMap(boolean full) {
223
            return unmodifiableMap(WingetPackager.this.asMap(full));
×
224
        }
225

226
        @Override
227
        public String getPrefix() {
228
            return WingetPackager.this.prefix();
×
229
        }
230

231
        @Override
232
        public Map<String, Object> getExtraProperties() {
233
            return unmodifiableMap(WingetPackager.this.getExtraProperties());
×
234
        }
235
    };
236

237
    public WingetPackager() {
238
        super(TYPE);
1✔
239
    }
1✔
240

241
    @Override
242
    public org.jreleaser.model.api.packagers.WingetPackager asImmutable() {
243
        return immutable;
×
244
    }
245

246
    @Override
247
    public void merge(WingetPackager source) {
248
        super.merge(source);
1✔
249
        this.defaultLocale = merge(this.defaultLocale, source.defaultLocale);
1✔
250
        this.author = merge(this.author, source.author);
1✔
251
        this.moniker = merge(this.moniker, source.moniker);
1✔
252
        this.minimumOsVersion = merge(this.minimumOsVersion, source.minimumOsVersion);
1✔
253
        this.productCode = merge(this.productCode, source.productCode);
1✔
254
        setPackage(source.pack);
1✔
255
        setPublisher(source.publisher);
1✔
256
        setInstaller(source.installer);
1✔
257
        setRepository(source.repository);
1✔
258
        setTags(merge(this.tags, source.tags));
1✔
259
    }
1✔
260

261
    public String getDefaultLocale() {
262
        return defaultLocale;
1✔
263
    }
264

265
    public void setDefaultLocale(String defaultLocale) {
266
        this.defaultLocale = defaultLocale;
1✔
267
    }
1✔
268

269
    public String getAuthor() {
270
        return author;
1✔
271
    }
272

273
    public void setAuthor(String author) {
274
        this.author = author;
1✔
275
    }
1✔
276

277
    public String getMoniker() {
278
        return moniker;
1✔
279
    }
280

281
    public void setMoniker(String moniker) {
282
        this.moniker = moniker;
1✔
283
    }
1✔
284

285
    public String getMinimumOsVersion() {
286
        return minimumOsVersion;
1✔
287
    }
288

289
    public void setMinimumOsVersion(String minimumOsVersion) {
290
        this.minimumOsVersion = minimumOsVersion;
1✔
291
    }
1✔
292

293
    public String getProductCode() {
294
        return productCode;
1✔
295
    }
296

297
    public void setProductCode(String productCode) {
298
        this.productCode = productCode;
1✔
299
    }
1✔
300

301
    public List<String> getTags() {
302
        return tags;
1✔
303
    }
304

305
    public void setTags(List<String> tags) {
306
        this.tags.clear();
1✔
307
        this.tags.addAll(tags);
1✔
308
    }
1✔
309

310
    @JsonProperty("package")
311
    public Package getPackage() {
312
        return pack;
1✔
313
    }
314

315
    public void setPackage(Package pack) {
316
        this.pack.merge(pack);
1✔
317
    }
1✔
318

319
    public Publisher getPublisher() {
320
        return publisher;
1✔
321
    }
322

323
    public void setPublisher(Publisher publisher) {
324
        this.publisher.merge(publisher);
1✔
325
    }
1✔
326

327
    public Installer getInstaller() {
328
        return installer;
1✔
329
    }
330

331
    public void setInstaller(Installer installer) {
332
        this.installer.merge(installer);
1✔
333
    }
1✔
334

335
    public WingetRepository getRepository() {
336
        return repository;
1✔
337
    }
338

339
    public void setRepository(WingetRepository repository) {
340
        this.repository.merge(repository);
1✔
341
    }
1✔
342

343
    @Override
344
    protected void asMap(boolean full, Map<String, Object> props) {
345
        super.asMap(full, props);
1✔
346
        props.put("defaultLocale", defaultLocale);
1✔
347
        props.put("author", author);
1✔
348
        props.put("moniker", moniker);
1✔
349
        props.put("minimumOsVersion", minimumOsVersion);
1✔
350
        props.put("productCode", productCode);
1✔
351
        props.put("package", pack.asMap(full));
1✔
352
        props.put("publisher", publisher.asMap(full));
1✔
353
        props.put("installer", installer.asMap(full));
1✔
354
        props.put("repository", repository.asMap(full));
1✔
355
    }
1✔
356

357
    @Override
358
    public RepositoryTap getRepositoryTap() {
359
        return getPackagerRepository();
1✔
360
    }
361

362
    public PackagerRepository getPackagerRepository() {
363
        return getRepository();
1✔
364
    }
365

366
    @Override
367
    public boolean supportsPlatform(String platform) {
368
        return isBlank(platform) || PlatformUtils.isWindows(platform);
1✔
369
    }
370

371
    @Override
372
    public boolean supportsDistribution(Distribution.DistributionType distributionType) {
373
        return SUPPORTED.containsKey(distributionType);
1✔
374
    }
375

376
    @Override
377
    public Set<String> getSupportedFileExtensions(Distribution.DistributionType distributionType) {
378
        return unmodifiableSet(SUPPORTED.getOrDefault(distributionType, emptySet()));
1✔
379
    }
380

381
    @Override
382
    protected boolean isNotSkipped(Artifact artifact) {
383
        return isFalse(artifact.getExtraProperties().get(SKIP_WINGET));
1✔
384
    }
385

386
    public static final class WingetRepository extends PackagerRepository {
387
        private static final long serialVersionUID = -3859984358170896375L;
388

389
        public WingetRepository() {
390
            super("winget", "winget");
1✔
391
        }
1✔
392
    }
393

394
    public static final class Package extends AbstractModelObject<Package> implements Domain {
1✔
395
        private static final long serialVersionUID = -8531840172639009180L;
396

397
        private String identifier;
398
        private String name;
399
        private String version;
400
        private String url;
401

402
        @JsonIgnore
1✔
403
        private final org.jreleaser.model.api.packagers.WingetPackager.Package immutable = new org.jreleaser.model.api.packagers.WingetPackager.Package() {
1✔
404
            private static final long serialVersionUID = -681067573112565263L;
405

406
            @Override
407
            public String getIdentifier() {
408
                return Package.this.getIdentifier();
×
409
            }
410

411
            @Override
412
            public String getName() {
413
                return Package.this.getName();
×
414
            }
415

416
            @Override
417
            public String getUrl() {
418
                return Package.this.getUrl();
×
419
            }
420

421
            @Override
422
            public String getVersion() {
423
                return Package.this.getVersion();
×
424
            }
425

426
            @Override
427
            public Map<String, Object> asMap(boolean full) {
428
                return unmodifiableMap(Package.this.asMap(full));
×
429
            }
430
        };
431

432
        public org.jreleaser.model.api.packagers.WingetPackager.Package asImmutable() {
433
            return immutable;
×
434
        }
435

436
        @Override
437
        public void merge(Package source) {
438
            this.identifier = this.merge(this.identifier, source.identifier);
1✔
439
            this.name = this.merge(this.name, source.name);
1✔
440
            this.version = this.merge(this.version, source.version);
1✔
441
            this.url = this.merge(this.url, source.url);
1✔
442
        }
1✔
443

444
        public String getIdentifier() {
445
            return identifier;
1✔
446
        }
447

448
        public void setIdentifier(String identifier) {
449
            this.identifier = identifier;
1✔
450
        }
1✔
451

452
        public String getName() {
453
            return name;
1✔
454
        }
455

456
        public void setName(String name) {
457
            this.name = name;
1✔
458
        }
1✔
459

460
        public String getVersion() {
461
            return version;
1✔
462
        }
463

464
        public void setVersion(String version) {
465
            this.version = version;
1✔
466
        }
1✔
467

468
        public String getUrl() {
469
            return url;
1✔
470
        }
471

472
        public void setUrl(String url) {
473
            this.url = url;
1✔
474
        }
1✔
475

476
        @Override
477
        public Map<String, Object> asMap(boolean full) {
478
            Map<String, Object> props = new LinkedHashMap<>();
1✔
479
            props.put("identifier", identifier);
1✔
480
            props.put("name", name);
1✔
481
            props.put("version", version);
1✔
482
            props.put("url", url);
1✔
483
            return props;
1✔
484
        }
485
    }
486

487
    public static final class Publisher extends AbstractModelObject<Publisher> implements Domain {
1✔
488
        private static final long serialVersionUID = -3812598331451051428L;
489

490
        private String name;
491
        private String url;
492
        private String supportUrl;
493

494
        @JsonIgnore
1✔
495
        private final org.jreleaser.model.api.packagers.WingetPackager.Publisher immutable = new org.jreleaser.model.api.packagers.WingetPackager.Publisher() {
1✔
496
            private static final long serialVersionUID = -5458105963902729331L;
497

498
            @Override
499
            public String getName() {
500
                return Publisher.this.getName();
×
501
            }
502

503
            @Override
504
            public String getUrl() {
505
                return Publisher.this.getUrl();
×
506
            }
507

508
            @Override
509
            public String getSupportUrl() {
510
                return Publisher.this.getSupportUrl();
×
511
            }
512

513
            @Override
514
            public Map<String, Object> asMap(boolean full) {
515
                return unmodifiableMap(Publisher.this.asMap(full));
×
516
            }
517
        };
518

519
        public org.jreleaser.model.api.packagers.WingetPackager.Publisher asImmutable() {
520
            return immutable;
×
521
        }
522

523
        @Override
524
        public void merge(Publisher source) {
525
            this.name = this.merge(this.name, source.name);
1✔
526
            this.url = this.merge(this.url, source.url);
1✔
527
            this.supportUrl = this.merge(this.supportUrl, source.supportUrl);
1✔
528
        }
1✔
529

530
        public String getName() {
531
            return name;
1✔
532
        }
533

534
        public void setName(String name) {
535
            this.name = name;
1✔
536
        }
1✔
537

538
        public String getUrl() {
539
            return url;
1✔
540
        }
541

542
        public void setUrl(String url) {
543
            this.url = url;
1✔
544
        }
1✔
545

546
        public String getSupportUrl() {
547
            return supportUrl;
1✔
548
        }
549

550
        public void setSupportUrl(String supportUrl) {
551
            this.supportUrl = supportUrl;
1✔
552
        }
1✔
553

554
        @Override
555
        public Map<String, Object> asMap(boolean full) {
556
            Map<String, Object> props = new LinkedHashMap<>();
1✔
557
            props.put("name", name);
1✔
558
            props.put("url", url);
1✔
559
            props.put("supportUrl", supportUrl);
1✔
560
            return props;
1✔
561
        }
562
    }
563

564
    public static final class Installer extends AbstractModelObject<Installer> implements Domain {
1✔
565
        private static final long serialVersionUID = 4609121090512808243L;
566

567
        private final Set<Mode> modes = new LinkedHashSet<>();
1✔
568
        private final Dependencies dependencies = new Dependencies();
1✔
569
        private Type type = Type.WIX;
1✔
570
        private Scope scope = Scope.MACHINE;
1✔
571
        private UpgradeBehavior upgradeBehavior = UpgradeBehavior.INSTALL;
1✔
572
        private String command;
573

574
        @JsonIgnore
1✔
575
        private final org.jreleaser.model.api.packagers.WingetPackager.Installer immutable = new org.jreleaser.model.api.packagers.WingetPackager.Installer() {
1✔
576
            private static final long serialVersionUID = 8677697915447641476L;
577

578
            @Override
579
            public Type getType() {
580
                return Installer.this.getType();
×
581
            }
582

583
            @Override
584
            public Scope getScope() {
585
                return Installer.this.getScope();
×
586
            }
587

588
            @Override
589
            public Set<Mode> getModes() {
590
                return unmodifiableSet(Installer.this.getModes());
×
591
            }
592

593
            @Override
594
            public UpgradeBehavior getUpgradeBehavior() {
595
                return Installer.this.getUpgradeBehavior();
×
596
            }
597

598
            @Override
599
            public String getCommand() {
600
                return Installer.this.getCommand();
×
601
            }
602

603
            @Override
604
            public org.jreleaser.model.api.packagers.WingetPackager.Dependencies getDependencies() {
605
                return Installer.this.getDependencies().asImmutable();
×
606
            }
607

608
            @Override
609
            public Map<String, Object> asMap(boolean full) {
610
                return unmodifiableMap(Installer.this.asMap(full));
×
611
            }
612
        };
613

614
        public org.jreleaser.model.api.packagers.WingetPackager.Installer asImmutable() {
615
            return immutable;
×
616
        }
617

618
        @Override
619
        public void merge(Installer source) {
620
            this.type = this.merge(this.type, source.type);
1✔
621
            this.scope = this.merge(this.scope, source.scope);
1✔
622
            this.upgradeBehavior = this.merge(this.upgradeBehavior, source.upgradeBehavior);
1✔
623
            this.command = this.merge(this.command, source.command);
1✔
624
            setModes(merge(this.modes, source.modes));
1✔
625
            setDependencies(source.dependencies);
1✔
626
        }
1✔
627

628
        public Type getType() {
629
            return type;
×
630
        }
631

632
        public void setType(Type type) {
633
            this.type = type;
×
634
        }
×
635

636
        public void setType(String str) {
637
            setType(Type.of(str));
×
638
        }
×
639

640
        public Scope getScope() {
641
            return scope;
×
642
        }
643

644
        public void setScope(Scope scope) {
645
            this.scope = scope;
×
646
        }
×
647

648
        public void setScope(String str) {
649
            setScope(Scope.of(str));
×
650
        }
×
651

652
        public UpgradeBehavior getUpgradeBehavior() {
653
            return upgradeBehavior;
×
654
        }
655

656
        public void setUpgradeBehavior(UpgradeBehavior upgradeBehavior) {
657
            this.upgradeBehavior = upgradeBehavior;
×
658
        }
×
659

660
        public void setUpgradeBehavior(String str) {
661
            setUpgradeBehavior(UpgradeBehavior.of(str));
×
662
        }
×
663

664
        public Set<Mode> getModes() {
665
            return modes;
1✔
666
        }
667

668
        public void setModes(Set<Mode> modes) {
669
            this.modes.clear();
1✔
670
            this.modes.addAll(modes);
1✔
671
        }
1✔
672

673
        public String getCommand() {
674
            return command;
×
675
        }
676

677
        public void setCommand(String command) {
678
            this.command = command;
×
679
        }
×
680

681
        public Dependencies getDependencies() {
682
            return dependencies;
1✔
683
        }
684

685
        public void setDependencies(Dependencies dependencies) {
686
            this.dependencies.merge(dependencies);
1✔
687
        }
1✔
688

689
        @Override
690
        public Map<String, Object> asMap(boolean full) {
691
            Map<String, Object> props = new LinkedHashMap<>();
1✔
692
            props.put("type", type);
1✔
693
            props.put("scope", scope);
1✔
694
            props.put("upgradeBehavior", upgradeBehavior);
1✔
695
            props.put("modes", modes);
1✔
696
            props.put("command", command);
1✔
697
            props.put("dependencies", dependencies.asMap(full));
1✔
698
            return props;
1✔
699
        }
700
    }
701

702
    public static final class Dependencies extends AbstractModelObject<Dependencies> implements Domain {
1✔
703
        private static final long serialVersionUID = 8335992485241726722L;
704

705
        private final Set<String> windowsFeatures = new LinkedHashSet<>();
1✔
706
        private final Set<String> windowsLibraries = new LinkedHashSet<>();
1✔
707
        private final Set<String> externalDependencies = new LinkedHashSet<>();
1✔
708
        private final Set<PackageDependency> packageDependencies = new LinkedHashSet<>();
1✔
709

710
        @JsonIgnore
1✔
711
        private final org.jreleaser.model.api.packagers.WingetPackager.Dependencies immutable = new org.jreleaser.model.api.packagers.WingetPackager.Dependencies() {
1✔
712
            private static final long serialVersionUID = -2782564782601367602L;
713

714
            @Override
715
            public Set<String> getWindowsFeatures() {
716
                return unmodifiableSet(Dependencies.this.getWindowsFeatures());
×
717
            }
718

719
            @Override
720
            public Set<String> getWindowsLibraries() {
721
                return unmodifiableSet(Dependencies.this.getWindowsLibraries());
×
722
            }
723

724
            @Override
725
            public Set<String> getExternalDependencies() {
726
                return unmodifiableSet(Dependencies.this.getExternalDependencies());
×
727
            }
728

729
            @Override
730
            public Set<org.jreleaser.model.api.packagers.WingetPackager.PackageDependency> getPackageDependencies() {
731
                return unmodifiableSet(asImmutable().getPackageDependencies());
×
732
            }
733

734
            @Override
735
            public Map<String, Object> asMap(boolean full) {
736
                return unmodifiableMap(Dependencies.this.asMap(full));
×
737
            }
738
        };
739

740
        public org.jreleaser.model.api.packagers.WingetPackager.Dependencies asImmutable() {
741
            return immutable;
×
742
        }
743

744
        @Override
745
        public void merge(Dependencies source) {
746
            setWindowsFeatures(merge(this.windowsFeatures, source.windowsFeatures));
1✔
747
            setWindowsLibraries(merge(this.windowsLibraries, source.windowsLibraries));
1✔
748
            setExternalDependencies(merge(this.externalDependencies, source.externalDependencies));
1✔
749
            setPackageDependencies(mergeModel(this.packageDependencies, source.packageDependencies));
1✔
750
        }
1✔
751

752
        public boolean hasDependencies() {
753
            return !windowsFeatures.isEmpty() ||
×
754
                !windowsLibraries.isEmpty() ||
×
755
                !externalDependencies.isEmpty() ||
×
756
                !packageDependencies.isEmpty();
×
757
        }
758

759
        public boolean hasWindowsFeatures() {
760
            return !windowsFeatures.isEmpty();
×
761
        }
762

763
        public boolean hasWindowsLibraries() {
764
            return !windowsLibraries.isEmpty();
×
765
        }
766

767
        public boolean hasExternalDependencies() {
768
            return !externalDependencies.isEmpty();
×
769
        }
770

771
        public boolean hasPackageDependencies() {
772
            return !packageDependencies.isEmpty();
×
773
        }
774

775
        public Set<String> getWindowsFeatures() {
776
            return windowsFeatures;
×
777
        }
778

779
        public void setWindowsFeatures(Set<String> windowsFeatures) {
780
            this.windowsFeatures.clear();
1✔
781
            this.windowsFeatures.addAll(windowsFeatures);
1✔
782
        }
1✔
783

784
        public Set<String> getWindowsLibraries() {
785
            return windowsLibraries;
×
786
        }
787

788
        public void setWindowsLibraries(Set<String> windowsLibraries) {
789
            this.windowsLibraries.clear();
1✔
790
            this.windowsLibraries.addAll(windowsLibraries);
1✔
791
        }
1✔
792

793
        public Set<String> getExternalDependencies() {
794
            return externalDependencies;
×
795
        }
796

797
        public void setExternalDependencies(Set<String> externalDependencies) {
798
            this.externalDependencies.clear();
1✔
799
            this.externalDependencies.addAll(externalDependencies);
1✔
800
        }
1✔
801

802
        public Set<PackageDependency> getPackageDependencies() {
803
            return packageDependencies;
1✔
804
        }
805

806
        public void setPackageDependencies(Set<PackageDependency> packageDependencies) {
807
            this.packageDependencies.clear();
1✔
808
            this.packageDependencies.addAll(packageDependencies);
1✔
809
        }
1✔
810

811
        @Override
812
        public Map<String, Object> asMap(boolean full) {
813
            Map<String, Object> props = new LinkedHashMap<>();
1✔
814
            props.put("windowsFeatures", windowsFeatures);
1✔
815
            props.put("windowsLibraries", windowsLibraries);
1✔
816
            props.put("externalDependencies", externalDependencies);
1✔
817

818
            Map<String, Map<String, Object>> mappedDependencies = new LinkedHashMap<>();
1✔
819
            int i = 0;
1✔
820
            for (PackageDependency dependency : packageDependencies) {
1✔
821
                mappedDependencies.put("packageDependency " + (i++), dependency.asMap(full));
×
822
            }
×
823
            props.put("packageDependencies", mappedDependencies);
1✔
824

825
            return props;
1✔
826
        }
827

828
        public void addPackageDependency(PackageDependency packageDependency) {
829
            setPackageDependencies(mergeModel(this.packageDependencies, singleton(packageDependency)));
×
830
        }
×
831
    }
832

833
    public static final class PackageDependency extends AbstractModelObject<PackageDependency> implements Domain, Comparable<PackageDependency> {
×
834
        private static final long serialVersionUID = -4450142474645845838L;
835

836
        private String packageIdentifier;
837
        private String minimumVersion;
838

839
        @JsonIgnore
×
840
        private final org.jreleaser.model.api.packagers.WingetPackager.PackageDependency immutable = new org.jreleaser.model.api.packagers.WingetPackager.PackageDependency() {
×
841
            private static final long serialVersionUID = -8028336005839082886L;
842

843
            @Override
844
            public String getPackageIdentifier() {
845
                return packageIdentifier;
×
846
            }
847

848
            @Override
849
            public String getMinimumVersion() {
850
                return minimumVersion;
×
851
            }
852

853
            @Override
854
            public Map<String, Object> asMap(boolean full) {
855
                return PackageDependency.this.asMap(full);
×
856
            }
857
        };
858

859
        public org.jreleaser.model.api.packagers.WingetPackager.PackageDependency asImmutable() {
860
            return immutable;
×
861
        }
862

863
        @Override
864
        public void merge(PackageDependency source) {
865
            this.packageIdentifier = this.merge(this.packageIdentifier, source.packageIdentifier);
×
866
            this.minimumVersion = this.merge(this.minimumVersion, source.minimumVersion);
×
867
        }
×
868

869
        public String getPackageIdentifier() {
870
            return packageIdentifier;
×
871
        }
872

873
        public void setPackageIdentifier(String packageIdentifier) {
874
            this.packageIdentifier = packageIdentifier;
×
875
        }
×
876

877
        public String getMinimumVersion() {
878
            return minimumVersion;
×
879
        }
880

881
        public void setMinimumVersion(String minimumVersion) {
882
            this.minimumVersion = minimumVersion;
×
883
        }
×
884

885
        @Override
886
        public Map<String, Object> asMap(boolean full) {
887
            Map<String, Object> props = new LinkedHashMap<>();
×
888
            props.put("packageIdentifier", packageIdentifier);
×
889
            props.put("minimumVersion", minimumVersion);
×
890
            return props;
×
891
        }
892

893
        @Override
894
        public int compareTo(PackageDependency o) {
895
            return Comparator.comparing(PackageDependency::getPackageIdentifier)
×
896
                .compare(this, o);
×
897
        }
898

899
        @Override
900
        public boolean equals(Object o) {
901
            if (this == o) return true;
×
902
            if (o == null || getClass() != o.getClass()) return false;
×
903
            PackageDependency that = (PackageDependency) o;
×
904
            return packageIdentifier.equals(that.packageIdentifier);
×
905
        }
906

907
        @Override
908
        public int hashCode() {
909
            return Objects.hash(packageIdentifier);
×
910
        }
911
    }
912
}
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