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

jreleaser / jreleaser / #522

29 Jul 2025 09:15PM UTC coverage: 45.397% (-0.07%) from 45.469%
#522

push

github

aalmiray
feat(extensions): Refine JBang extension support

1 of 115 new or added lines in 9 files covered. (0.87%)

4 existing lines in 2 files now uncovered.

24047 of 52970 relevant lines covered (45.4%)

0.45 hits per line

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

49.12
/core/jreleaser-engine/src/main/java/org/jreleaser/engine/context/ModelValidator.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.engine.context;
19

20
import org.jreleaser.bundle.RB;
21
import org.jreleaser.engine.release.Releasers;
22
import org.jreleaser.extensions.api.ExtensionManager;
23
import org.jreleaser.extensions.api.ExtensionManagerHolder;
24
import org.jreleaser.extensions.internal.DefaultExtensionManager;
25
import org.jreleaser.model.JReleaserException;
26
import org.jreleaser.model.internal.JReleaserContext;
27
import org.jreleaser.model.internal.JReleaserModelPrinter;
28
import org.jreleaser.model.internal.extensions.Extension;
29
import org.jreleaser.util.Errors;
30
import org.jreleaser.util.PlatformUtils;
31

32
import java.util.Map;
33

34
import static org.jreleaser.util.StringUtils.isNotBlank;
35

36
/**
37
 * @author Andres Almiray
38
 * @since 1.0.0
39
 */
40
public final class ModelValidator {
41
    private ModelValidator() {
42
        // noop
43
    }
44

45
    public static void validate(JReleaserContext context) {
46
        try {
47
            Errors errors = context.validateModel();
1✔
48

49
            new JReleaserModelPrinter.Plain(context.getLogger().getTracer())
1✔
50
                .print(context.getModel().asMap(true));
1✔
51

52
            if (context.isStrict() && errors.hasWarnings()) {
1✔
53
                throw new JReleaserException(RB.$("ERROR_context_configurer_jreleaser_misconfigured") +
×
54
                    System.lineSeparator() + errors.warningsAsString());
×
55
            }
56

57
            switch (context.getMode()) {
1✔
58
                case ANNOUNCE:
59
                case CHANGELOG:
60
                case DOWNLOAD:
61
                case ASSEMBLE:
62
                case DEPLOY:
63
                    if (errors.hasConfigurationErrors()) {
1✔
64
                        throw new JReleaserException(RB.$("ERROR_context_configurer_jreleaser_misconfigured") +
×
65
                            System.lineSeparator() + errors.asString());
×
66
                    }
67
                    break;
68
                case FULL:
69
                default:
70
                    if (errors.hasErrors()) {
1✔
71
                        throw new JReleaserException(RB.$("ERROR_context_configurer_jreleaser_misconfigured") +
×
72
                            System.lineSeparator() + errors.asString());
×
73
                    }
74
                    break;
75
            }
76
        } catch (JReleaserException e) {
×
77
            context.getLogger().trace(e);
×
78
            throw e;
×
79
        } catch (Exception e) {
×
80
            context.getLogger().trace(e);
×
81
            throw new JReleaserException(RB.$("ERROR_context_configurer_jreleaser_misconfigured"), e);
×
82
        }
1✔
83

84
        if (!context.getMode().validateStandalone()) {
1✔
85
            context.setReleaser(Releasers.releaserFor(context));
1✔
86
        }
87

88
        report(context);
1✔
89
        loadExtensions(context);
1✔
90
    }
1✔
91

92
    private static void report(JReleaserContext context) {
93
        String version = context.getModel().getProject().getVersion();
1✔
94
        context.getModel().getProject().parseVersion();
1✔
95

96
        context.getLogger().info(RB.$("context.creator.report.project-version"), version);
1✔
97
        context.getLogger().info(RB.$("context.creator.report.release"), context.getModel().getProject().isSnapshot() ? " " : " " + RB.$("not") + " ");
1✔
98
        context.getLogger().info(RB.$("context.creator.report.timestamp"), context.getModel().getTimestamp());
1✔
99
        if (null != context.getModel().getCommit()) {
1✔
100
            context.getLogger().info(RB.$("context.creator.report.head"), context.getModel().getCommit().getShortHash());
1✔
101
        }
102
        context.getLogger().info(RB.$("context.creator.report.platform"), PlatformUtils.getCurrentFull());
1✔
103
    }
1✔
104

105
    private static void loadExtensions(JReleaserContext context) {
106
        ExtensionManager em = ExtensionManagerHolder.get();
1✔
107

108
        if (!(em instanceof DefaultExtensionManager)) {
1✔
109
            context.getLogger().warn(RB.$("context.creator.extension.manager.error"));
×
110
            return;
×
111
        }
112

113
        DefaultExtensionManager extensionManager = (DefaultExtensionManager) em;
1✔
114
        for (Map.Entry<String, Extension> e : context.getModel().getExtensions().entrySet()) {
1✔
115
            Extension extension = e.getValue();
×
116
            DefaultExtensionManager.ExtensionBuilder builder = extensionManager.configureExtension(e.getKey())
×
117
                .withEnabled(extension.isEnabled());
×
118
            if (isNotBlank(extension.getGav())) {
×
119
                builder = builder.withGav(extension.getGav());
×
120
            }
121
            if (isNotBlank(extension.getDirectory())) {
×
122
                builder = builder.withDirectory(extension.getDirectory());
×
123
            }
NEW
124
            if (extension.getJbang().isSet()) {
×
125
                builder = builder.withJBang(extension.getJbang());
×
126
            }
127

128
            for (Extension.Provider provider : extension.getProviders()) {
×
NEW
129
                System.out.println(provider.asImmutable());
×
130
                builder = builder.withExtensionPoint(provider.getType(), provider.getProperties());
×
131
            }
×
132

133
            builder.build();
×
134
        }
×
135

136
        extensionManager.load(context);
1✔
137
    }
1✔
138
}
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