Skip to content

Commit

Permalink
feat: add --no-integrations option (#1875)
Browse files Browse the repository at this point in the history
* feat: add --no-integrations option

* test: added tests for skipping integrations

* feat: added support for `//NOINTEGRATIONS` tag

---------

Co-authored-by: Tako Schotanus <[email protected]>
  • Loading branch information
maxandersen and quintesse authored Dec 10, 2024
1 parent bb74a38 commit 1b2b928
Show file tree
Hide file tree
Showing 11 changed files with 150 additions and 42 deletions.
8 changes: 8 additions & 0 deletions itests/noints.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
///usr/bin/env jbang "$0" "$@" ; exit $?
//NOINTEGRATIONS

public class noints {
public static void main(String... args) {
System.out.println("No integrations here");
}
}
19 changes: 10 additions & 9 deletions src/main/java/dev/jbang/catalog/Alias.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class Alias extends CatalogItem {
public final Boolean nativeImage;
@SerializedName(value = "native-options")
public final List<String> nativeOptions;
public final Boolean integrations;
public final String jfr;
public final Map<String, String> debug;
public final Boolean cds;
Expand Down Expand Up @@ -87,8 +88,7 @@ public int hashCode() {

public Alias() {
this(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null,
null, null, null, null, null, null, null);
null, null, null, null, null, null, null, null, null);
}

public Alias(String scriptRef,
Expand All @@ -107,6 +107,7 @@ public Alias(String scriptRef,
List<String> compileOptions,
Boolean nativeImage,
List<String> nativeOptions,
Boolean integrations,
String jfr,
Map<String, String> debug,
Boolean cds,
Expand Down Expand Up @@ -134,6 +135,7 @@ public Alias(String scriptRef,
this.compileOptions = compileOptions;
this.nativeImage = nativeImage;
this.nativeOptions = nativeOptions;
this.integrations = integrations;
this.jfr = jfr;
this.debug = debug;
this.cds = cds;
Expand Down Expand Up @@ -226,6 +228,7 @@ private static Alias merge(Alias a1, String name, Function<String, Alias> findUn
List<String> nopts = a1.nativeOptions != null && !a1.nativeOptions.isEmpty() ? a1.nativeOptions
: a2.nativeOptions;
Boolean nimg = a1.nativeImage != null ? a1.nativeImage : a2.nativeImage;
Boolean ints = a1.integrations != null ? a1.integrations : a2.integrations;
String jfr = a1.jfr != null ? a1.jfr : a2.jfr;
Map<String, String> debug = a1.debug != null ? a1.debug : a2.debug;
Boolean cds = a1.cds != null ? a1.cds : a2.cds;
Expand All @@ -238,7 +241,7 @@ private static Alias merge(Alias a1, String name, Function<String, Alias> findUn
List<JavaAgent> jags = a1.javaAgents != null && !a1.javaAgents.isEmpty() ? a1.javaAgents : a2.javaAgents;
Catalog catalog = a2.catalog != null ? a2.catalog : a1.catalog;
return new Alias(a2.scriptRef, desc, args, jopts, srcs, ress, deps, repos, cpaths, props, javaVersion,
mainClass, moduleName, copts, nimg, nopts, jfr, debug, cds, inter, ep, ea, esa, mopts, jags,
mainClass, moduleName, copts, nimg, nopts, ints, jfr, debug, cds, inter, ep, ea, esa, mopts, jags,
catalog);
} else {
return a1;
Expand Down Expand Up @@ -283,16 +286,14 @@ private static Alias fromCatalog(String catalogName, String aliasName) {
public Alias withCatalog(Catalog catalog) {
return new Alias(scriptRef, description, arguments, runtimeOptions, sources, resources, dependencies,
repositories, classpaths, properties, javaVersion, mainClass, moduleName, compileOptions, nativeImage,
nativeOptions, jfr, debug, cds, interactive, enablePreview, enableAssertions, enableSystemAssertions,
manifestOptions,
javaAgents, catalog);
nativeOptions, integrations, jfr, debug, cds, interactive, enablePreview, enableAssertions,
enableSystemAssertions, manifestOptions, javaAgents, catalog);
}

public Alias withScriptRef(String scriptRef) {
return new Alias(scriptRef, description, arguments, runtimeOptions, sources, resources, dependencies,
repositories, classpaths, properties, javaVersion, mainClass, moduleName, compileOptions, nativeImage,
nativeOptions, jfr, debug, cds, interactive, enablePreview, enableAssertions, enableSystemAssertions,
manifestOptions,
javaAgents, catalog);
nativeOptions, integrations, jfr, debug, cds, interactive, enablePreview, enableAssertions,
enableSystemAssertions, manifestOptions, javaAgents, catalog);
}
}
8 changes: 4 additions & 4 deletions src/main/java/dev/jbang/cli/Alias.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,10 @@ public Integer doCall() {
dependencyInfoMixin.getDependencies(),
dependencyInfoMixin.getRepositories(), dependencyInfoMixin.getClasspaths(),
dependencyInfoMixin.getProperties(), buildMixin.javaVersion, buildMixin.main, buildMixin.module,
buildMixin.compileOptions, nativeMixin.nativeImage, nativeMixin.nativeOptions,
buildMixin.compileOptions, nativeMixin.nativeImage, nativeMixin.nativeOptions, buildMixin.integrations,
runMixin.flightRecorderString, runMixin.debugString, runMixin.cds, runMixin.interactive,
enablePreviewRequested,
runMixin.enableAssertions, runMixin.enableSystemAssertions, buildMixin.manifestOptions,
createJavaAgents(), null);
enablePreviewRequested, runMixin.enableAssertions, runMixin.enableSystemAssertions,
buildMixin.manifestOptions, createJavaAgents(), null);
Path catFile = getCatalog(false);
if (catFile == null) {
catFile = Catalog.getCatalogFile(null);
Expand Down Expand Up @@ -149,6 +148,7 @@ ProjectBuilder createProjectBuilder() {
.compileOptions(buildMixin.compileOptions)
.nativeImage(nativeMixin.nativeImage)
.nativeOptions(nativeMixin.nativeOptions)
.integrations(buildMixin.integrations)
.enablePreview(enablePreviewRequested);
Path cat = getCatalog(false);
if (cat != null) {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/dev/jbang/cli/BaseBuildCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ protected ProjectBuilder createBaseProjectBuilder() {
.manifestOptions(buildMixin.manifestOptions)
.nativeImage(nativeMixin.nativeImage)
.nativeOptions(nativeMixin.nativeOptions)
.integrations(buildMixin.integrations)
.enablePreview(enablePreviewRequested);

// NB: Do not put `.mainClass(buildMixin.main)` here
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/dev/jbang/cli/BuildMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.Map;

import picocli.CommandLine;
import picocli.CommandLine.Option;

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

@Option(names = {
"--integrations" }, description = "Enable integration execution (default: true)", negatable = true)
public Boolean integrations;

public List<String> opts() {
List<String> opts = new ArrayList<>();
if (javaVersion != null) {
Expand All @@ -47,6 +52,11 @@ public List<String> opts() {
opts.add("--module");
opts.add(module);
}
if (Boolean.TRUE.equals(integrations)) {
opts.add("--integrations");
} else if (Boolean.FALSE.equals(integrations)) {
opts.add("--no-integrations");
}
if (compileOptions != null) {
for (String c : compileOptions) {
opts.add("-C");
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/dev/jbang/source/AppBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ public CmdGeneratorBuilder build() throws IOException {
// do the actual building
try {
getCompileBuildStep().build();
integrationResult = getIntegrationBuildStep().build();
if (!project.disableIntegrations()) {
integrationResult = getIntegrationBuildStep().build();
}
getJarBuildStep().build();
} finally {
if (!keepClasses()) {
Expand Down
17 changes: 13 additions & 4 deletions src/main/java/dev/jbang/source/Project.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public class Project {
private String mainClass;
private String moduleName;
private boolean nativeImage;
private boolean integrations = true;
private boolean enablePreviewRequested;

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

public boolean enablePreview() {
return enablePreviewRequested || (mainSource != null && mainSource.enablePreview());
}

public enum BuildFile {
jbang("build.jbang");

Expand Down Expand Up @@ -197,6 +194,10 @@ public void setMainClass(String mainClass) {
this.mainClass = mainClass;
}

public boolean enablePreview() {
return enablePreviewRequested || (mainSource != null && mainSource.enablePreview());
}

public void setEnablePreviewRequested(boolean enablePreview) {
this.enablePreviewRequested = enablePreview;
}
Expand All @@ -220,6 +221,14 @@ public void setNativeImage(boolean isNative) {
this.nativeImage = isNative;
}

public boolean disableIntegrations() {
return !integrations || (mainSource != null && mainSource.disableIntegrations());
}

public void setIntegrations(boolean integrations) {
this.integrations = integrations;
}

public boolean enableCDS() {
return mainSource != null && mainSource.enableCDS();
}
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/dev/jbang/source/ProjectBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public class ProjectBuilder {
private Map<String, String> manifestOptions = new HashMap<>();
private File catalogFile;
private Boolean nativeImage;
private Boolean integrations;
private String javaVersion;
private Boolean enablePreview;

Expand Down Expand Up @@ -172,6 +173,11 @@ public ProjectBuilder nativeImage(Boolean nativeImage) {
return this;
}

public ProjectBuilder integrations(Boolean integrations) {
this.integrations = integrations;
return this;
}

public ProjectBuilder enablePreview(Boolean enablePreviewRequested) {
this.enablePreview = enablePreviewRequested;
return this;
Expand Down Expand Up @@ -429,6 +435,9 @@ private Project updateProject(Project prj) {
if (nativeImage != null) {
prj.setNativeImage(nativeImage);
}
if (integrations != null) {
prj.setIntegrations(integrations);
}
if (enablePreview != null) {
prj.setEnablePreviewRequested(enablePreview);
}
Expand Down Expand Up @@ -595,6 +604,9 @@ private void updateFromAlias(Alias alias) {
if (nativeOptions.isEmpty()) {
nativeOptions(alias.nativeOptions);
}
if (integrations == null) {
integrations(alias.integrations);
}
if (manifestOptions.isEmpty()) {
manifestOptions(alias.manifestOptions);
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/dev/jbang/source/Source.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,10 @@ public boolean enablePreview() {
return !tagReader.collectRawOptions("PREVIEW").isEmpty();
}

public boolean disableIntegrations() {
return !tagReader.collectRawOptions("NOINTEGRATIONS").isEmpty();
}

// Used only by tests
static Source forResource(String resource, Function<String, String> replaceProperties) {
return forResource(ResourceResolver.forResources(), resource, replaceProperties);
Expand Down
3 changes: 1 addition & 2 deletions src/test/java/dev/jbang/cli/TestRun.java
Original file line number Diff line number Diff line change
Expand Up @@ -2574,8 +2574,7 @@ void testAliasArguments() throws IOException {
File f = examplesTestFolder.resolve("echo.java").toFile();
List<String> args = Arrays.asList("foo", "bar");
Alias alias = new Alias(f.toString(), null, args, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null,
null, null, null, null, null, null, null, null);
null, null, null, null, null, null, null, null, null, null, null, null, null, null);
CatalogUtil.addNearestAlias("echo", alias);

CommandLine.ParseResult pr = JBang .getCommandLine()
Expand Down
Loading

0 comments on commit 1b2b928

Please sign in to comment.