Skip to content

Commit 1b2b928

Browse files
feat: add --no-integrations option (#1875)
* feat: add --no-integrations option * test: added tests for skipping integrations * feat: added support for `//NOINTEGRATIONS` tag --------- Co-authored-by: Tako Schotanus <tako@codejive.org>
1 parent bb74a38 commit 1b2b928

File tree

11 files changed

+150
-42
lines changed

11 files changed

+150
-42
lines changed

itests/noints.java

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
///usr/bin/env jbang "$0" "$@" ; exit $?
2+
//NOINTEGRATIONS
3+
4+
public class noints {
5+
public static void main(String... args) {
6+
System.out.println("No integrations here");
7+
}
8+
}

src/main/java/dev/jbang/catalog/Alias.java

+10-9
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class Alias extends CatalogItem {
4242
public final Boolean nativeImage;
4343
@SerializedName(value = "native-options")
4444
public final List<String> nativeOptions;
45+
public final Boolean integrations;
4546
public final String jfr;
4647
public final Map<String, String> debug;
4748
public final Boolean cds;
@@ -87,8 +88,7 @@ public int hashCode() {
8788

8889
public Alias() {
8990
this(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
90-
null,
91-
null, null, null, null, null, null, null);
91+
null, null, null, null, null, null, null, null, null);
9292
}
9393

9494
public Alias(String scriptRef,
@@ -107,6 +107,7 @@ public Alias(String scriptRef,
107107
List<String> compileOptions,
108108
Boolean nativeImage,
109109
List<String> nativeOptions,
110+
Boolean integrations,
110111
String jfr,
111112
Map<String, String> debug,
112113
Boolean cds,
@@ -134,6 +135,7 @@ public Alias(String scriptRef,
134135
this.compileOptions = compileOptions;
135136
this.nativeImage = nativeImage;
136137
this.nativeOptions = nativeOptions;
138+
this.integrations = integrations;
137139
this.jfr = jfr;
138140
this.debug = debug;
139141
this.cds = cds;
@@ -226,6 +228,7 @@ private static Alias merge(Alias a1, String name, Function<String, Alias> findUn
226228
List<String> nopts = a1.nativeOptions != null && !a1.nativeOptions.isEmpty() ? a1.nativeOptions
227229
: a2.nativeOptions;
228230
Boolean nimg = a1.nativeImage != null ? a1.nativeImage : a2.nativeImage;
231+
Boolean ints = a1.integrations != null ? a1.integrations : a2.integrations;
229232
String jfr = a1.jfr != null ? a1.jfr : a2.jfr;
230233
Map<String, String> debug = a1.debug != null ? a1.debug : a2.debug;
231234
Boolean cds = a1.cds != null ? a1.cds : a2.cds;
@@ -238,7 +241,7 @@ private static Alias merge(Alias a1, String name, Function<String, Alias> findUn
238241
List<JavaAgent> jags = a1.javaAgents != null && !a1.javaAgents.isEmpty() ? a1.javaAgents : a2.javaAgents;
239242
Catalog catalog = a2.catalog != null ? a2.catalog : a1.catalog;
240243
return new Alias(a2.scriptRef, desc, args, jopts, srcs, ress, deps, repos, cpaths, props, javaVersion,
241-
mainClass, moduleName, copts, nimg, nopts, jfr, debug, cds, inter, ep, ea, esa, mopts, jags,
244+
mainClass, moduleName, copts, nimg, nopts, ints, jfr, debug, cds, inter, ep, ea, esa, mopts, jags,
242245
catalog);
243246
} else {
244247
return a1;
@@ -283,16 +286,14 @@ private static Alias fromCatalog(String catalogName, String aliasName) {
283286
public Alias withCatalog(Catalog catalog) {
284287
return new Alias(scriptRef, description, arguments, runtimeOptions, sources, resources, dependencies,
285288
repositories, classpaths, properties, javaVersion, mainClass, moduleName, compileOptions, nativeImage,
286-
nativeOptions, jfr, debug, cds, interactive, enablePreview, enableAssertions, enableSystemAssertions,
287-
manifestOptions,
288-
javaAgents, catalog);
289+
nativeOptions, integrations, jfr, debug, cds, interactive, enablePreview, enableAssertions,
290+
enableSystemAssertions, manifestOptions, javaAgents, catalog);
289291
}
290292

291293
public Alias withScriptRef(String scriptRef) {
292294
return new Alias(scriptRef, description, arguments, runtimeOptions, sources, resources, dependencies,
293295
repositories, classpaths, properties, javaVersion, mainClass, moduleName, compileOptions, nativeImage,
294-
nativeOptions, jfr, debug, cds, interactive, enablePreview, enableAssertions, enableSystemAssertions,
295-
manifestOptions,
296-
javaAgents, catalog);
296+
nativeOptions, integrations, jfr, debug, cds, interactive, enablePreview, enableAssertions,
297+
enableSystemAssertions, manifestOptions, javaAgents, catalog);
297298
}
298299
}

src/main/java/dev/jbang/cli/Alias.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,10 @@ public Integer doCall() {
115115
dependencyInfoMixin.getDependencies(),
116116
dependencyInfoMixin.getRepositories(), dependencyInfoMixin.getClasspaths(),
117117
dependencyInfoMixin.getProperties(), buildMixin.javaVersion, buildMixin.main, buildMixin.module,
118-
buildMixin.compileOptions, nativeMixin.nativeImage, nativeMixin.nativeOptions,
118+
buildMixin.compileOptions, nativeMixin.nativeImage, nativeMixin.nativeOptions, buildMixin.integrations,
119119
runMixin.flightRecorderString, runMixin.debugString, runMixin.cds, runMixin.interactive,
120-
enablePreviewRequested,
121-
runMixin.enableAssertions, runMixin.enableSystemAssertions, buildMixin.manifestOptions,
122-
createJavaAgents(), null);
120+
enablePreviewRequested, runMixin.enableAssertions, runMixin.enableSystemAssertions,
121+
buildMixin.manifestOptions, createJavaAgents(), null);
123122
Path catFile = getCatalog(false);
124123
if (catFile == null) {
125124
catFile = Catalog.getCatalogFile(null);
@@ -149,6 +148,7 @@ ProjectBuilder createProjectBuilder() {
149148
.compileOptions(buildMixin.compileOptions)
150149
.nativeImage(nativeMixin.nativeImage)
151150
.nativeOptions(nativeMixin.nativeOptions)
151+
.integrations(buildMixin.integrations)
152152
.enablePreview(enablePreviewRequested);
153153
Path cat = getCatalog(false);
154154
if (cat != null) {

src/main/java/dev/jbang/cli/BaseBuildCommand.java

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ protected ProjectBuilder createBaseProjectBuilder() {
5252
.manifestOptions(buildMixin.manifestOptions)
5353
.nativeImage(nativeMixin.nativeImage)
5454
.nativeOptions(nativeMixin.nativeOptions)
55+
.integrations(buildMixin.integrations)
5556
.enablePreview(enablePreviewRequested);
5657

5758
// NB: Do not put `.mainClass(buildMixin.main)` here

src/main/java/dev/jbang/cli/BuildMixin.java

+10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Map;
66

77
import picocli.CommandLine;
8+
import picocli.CommandLine.Option;
89

910
public class BuildMixin {
1011
public String javaVersion;
@@ -33,6 +34,10 @@ void setJavaVersion(String javaVersion) {
3334
@CommandLine.Option(names = { "--manifest" }, parameterConsumer = KeyValueConsumer.class)
3435
public Map<String, String> manifestOptions;
3536

37+
@Option(names = {
38+
"--integrations" }, description = "Enable integration execution (default: true)", negatable = true)
39+
public Boolean integrations;
40+
3641
public List<String> opts() {
3742
List<String> opts = new ArrayList<>();
3843
if (javaVersion != null) {
@@ -47,6 +52,11 @@ public List<String> opts() {
4752
opts.add("--module");
4853
opts.add(module);
4954
}
55+
if (Boolean.TRUE.equals(integrations)) {
56+
opts.add("--integrations");
57+
} else if (Boolean.FALSE.equals(integrations)) {
58+
opts.add("--no-integrations");
59+
}
5060
if (compileOptions != null) {
5161
for (String c : compileOptions) {
5262
opts.add("-C");

src/main/java/dev/jbang/source/AppBuilder.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ public CmdGeneratorBuilder build() throws IOException {
9595
// do the actual building
9696
try {
9797
getCompileBuildStep().build();
98-
integrationResult = getIntegrationBuildStep().build();
98+
if (!project.disableIntegrations()) {
99+
integrationResult = getIntegrationBuildStep().build();
100+
}
99101
getJarBuildStep().build();
100102
} finally {
101103
if (!keepClasses()) {

src/main/java/dev/jbang/source/Project.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class Project {
3939
private String mainClass;
4040
private String moduleName;
4141
private boolean nativeImage;
42+
private boolean integrations = true;
4243
private boolean enablePreviewRequested;
4344

4445
private final List<Project> subProjects = new ArrayList<>();
@@ -49,10 +50,6 @@ public class Project {
4950
public static final String ATTR_PREMAIN_CLASS = "Premain-Class";
5051
public static final String ATTR_AGENT_CLASS = "Agent-Class";
5152

52-
public boolean enablePreview() {
53-
return enablePreviewRequested || (mainSource != null && mainSource.enablePreview());
54-
}
55-
5653
public enum BuildFile {
5754
jbang("build.jbang");
5855

@@ -197,6 +194,10 @@ public void setMainClass(String mainClass) {
197194
this.mainClass = mainClass;
198195
}
199196

197+
public boolean enablePreview() {
198+
return enablePreviewRequested || (mainSource != null && mainSource.enablePreview());
199+
}
200+
200201
public void setEnablePreviewRequested(boolean enablePreview) {
201202
this.enablePreviewRequested = enablePreview;
202203
}
@@ -220,6 +221,14 @@ public void setNativeImage(boolean isNative) {
220221
this.nativeImage = isNative;
221222
}
222223

224+
public boolean disableIntegrations() {
225+
return !integrations || (mainSource != null && mainSource.disableIntegrations());
226+
}
227+
228+
public void setIntegrations(boolean integrations) {
229+
this.integrations = integrations;
230+
}
231+
223232
public boolean enableCDS() {
224233
return mainSource != null && mainSource.enableCDS();
225234
}

src/main/java/dev/jbang/source/ProjectBuilder.java

+12
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class ProjectBuilder {
5252
private Map<String, String> manifestOptions = new HashMap<>();
5353
private File catalogFile;
5454
private Boolean nativeImage;
55+
private Boolean integrations;
5556
private String javaVersion;
5657
private Boolean enablePreview;
5758

@@ -172,6 +173,11 @@ public ProjectBuilder nativeImage(Boolean nativeImage) {
172173
return this;
173174
}
174175

176+
public ProjectBuilder integrations(Boolean integrations) {
177+
this.integrations = integrations;
178+
return this;
179+
}
180+
175181
public ProjectBuilder enablePreview(Boolean enablePreviewRequested) {
176182
this.enablePreview = enablePreviewRequested;
177183
return this;
@@ -429,6 +435,9 @@ private Project updateProject(Project prj) {
429435
if (nativeImage != null) {
430436
prj.setNativeImage(nativeImage);
431437
}
438+
if (integrations != null) {
439+
prj.setIntegrations(integrations);
440+
}
432441
if (enablePreview != null) {
433442
prj.setEnablePreviewRequested(enablePreview);
434443
}
@@ -595,6 +604,9 @@ private void updateFromAlias(Alias alias) {
595604
if (nativeOptions.isEmpty()) {
596605
nativeOptions(alias.nativeOptions);
597606
}
607+
if (integrations == null) {
608+
integrations(alias.integrations);
609+
}
598610
if (manifestOptions.isEmpty()) {
599611
manifestOptions(alias.manifestOptions);
600612
}

src/main/java/dev/jbang/source/Source.java

+4
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ public boolean enablePreview() {
111111
return !tagReader.collectRawOptions("PREVIEW").isEmpty();
112112
}
113113

114+
public boolean disableIntegrations() {
115+
return !tagReader.collectRawOptions("NOINTEGRATIONS").isEmpty();
116+
}
117+
114118
// Used only by tests
115119
static Source forResource(String resource, Function<String, String> replaceProperties) {
116120
return forResource(ResourceResolver.forResources(), resource, replaceProperties);

src/test/java/dev/jbang/cli/TestRun.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -2574,8 +2574,7 @@ void testAliasArguments() throws IOException {
25742574
File f = examplesTestFolder.resolve("echo.java").toFile();
25752575
List<String> args = Arrays.asList("foo", "bar");
25762576
Alias alias = new Alias(f.toString(), null, args, null, null, null, null, null, null, null, null, null, null,
2577-
null, null, null, null, null,
2578-
null, null, null, null, null, null, null, null);
2577+
null, null, null, null, null, null, null, null, null, null, null, null, null, null);
25792578
CatalogUtil.addNearestAlias("echo", alias);
25802579

25812580
CommandLine.ParseResult pr = JBang .getCommandLine()

0 commit comments

Comments
 (0)