Skip to content

Commit

Permalink
Cloud Assets build docker command
Browse files Browse the repository at this point in the history
  • Loading branch information
jhorvath committed Aug 7, 2024
1 parent 03aa32d commit 4bbcd0b
Show file tree
Hide file tree
Showing 24 changed files with 542 additions and 17 deletions.
44 changes: 44 additions & 0 deletions enterprise/cloud.oracle/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,50 @@
<specification-version>1.57</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.maven</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.165</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.maven.embedder</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.77</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.openide.execution</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>9.29</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.gradle</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.42</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.libs.javax.inject</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.61</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.project.dependency</code-name-base>
<build-prerequisite/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,15 @@ public Collection<OCIItem> getItems() {
public Collection<OCIItem> getAssignedItems() {
return Collections.unmodifiableCollection(items);
}

public <T extends OCIItem> T getItem(Class<T> clazz) {
for (OCIItem item : items) {
if (item.getClass().equals(clazz)) {
return (T) item;
}
}
return null;
}

public boolean setReferenceName(OCIItem item, String refName) {
Parameters.notNull("refName", refName); //NOI18N
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.cloud.oracle.assets;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Logger;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.modules.cloud.oracle.developer.ContainerRepositoryItem;
import org.netbeans.modules.cloud.oracle.developer.ContainerRepositoryNode;
import org.netbeans.modules.cloud.oracle.steps.ProjectStep;
import org.netbeans.modules.gradle.api.execute.RunConfig;
import org.netbeans.modules.gradle.api.execute.RunUtils;
import org.netbeans.modules.maven.api.NbMavenProject;
import org.netbeans.spi.lsp.CommandProvider;
import org.netbeans.spi.project.SubprojectProvider;
import org.openide.execution.ExecutorTask;
import org.openide.filesystems.FileUtil;
import org.openide.nodes.Node;
import org.openide.util.Exceptions;
import org.openide.util.Lookup;
import org.openide.util.RequestProcessor;
import org.openide.util.lookup.ServiceProvider;

/**
*
* @author Jan Horvath
*/
@ServiceProvider(service = CommandProvider.class)
public class ImageBuilderCommand implements CommandProvider {

private static final Logger LOG = Logger.getLogger(ImageBuilderCommand.class.getName());

private static final String COMMAND_BUILD_PUSH_IMAGE = "nbls.cloud.assets.buildPushImage"; //NOI18N

private static final RequestProcessor RP = new RequestProcessor("PoliciesCommand"); //NOI18N

private static final Set COMMANDS = new HashSet<>(Arrays.asList(
COMMAND_BUILD_PUSH_IMAGE
));

@Override
public Set<String> getCommands() {
return Collections.unmodifiableSet(COMMANDS);
}

@Override
public CompletableFuture<Object> runCommand(String command, List<Object> arguments) {
CompletableFuture result = new CompletableFuture();
Steps.getDefault()
.executeMultistep(new ProjectStep(), Lookup.EMPTY)
.thenAccept(values -> {
try {
Project project = values.getValueForStep(ProjectStep.class);
ProjectManager.Result r = ProjectManager.getDefault().isProject2(project.getProjectDirectory());

ContainerRepositoryItem repository = CloudAssets.getDefault().getItem(ContainerRepositoryItem.class);
if (repository == null) {
result.cancel(true);
return;
}
Project ociProject = null;
SubprojectProvider subprojectProvider = project.getLookup().lookup(SubprojectProvider.class);
if (subprojectProvider != null) {
Set<? extends Project> subprojects = subprojectProvider.getSubprojects();
for (Project subproject : subprojects) {
if ("oci".equals(subproject.getProjectDirectory().getName())) {
ociProject = subproject;
break;
}
}
}
if (r != null && "org-netbeans-modules-gradle".equals(r.getProjectType())) { //NOI18N
Path tempFile = Files.createTempFile("init", ".gradle");

String init = "allprojects {\n" +
" afterEvaluate {\n" +
" tasks.matching { it.name == 'dockerBuild' }.configureEach {\n" +
" images = [\"" + repository.getUrl() + ":$project.version\"]\n" +
" }\n" +
" }\n" +
"}";

Files.write(tempFile, init.getBytes(StandardCharsets.UTF_8));
RunConfig runConfig = RunUtils.createRunConfig(
project,
"",
"Build container image",
Collections.emptySet(),
"--init-script", tempFile.toAbsolutePath().toString(), "dockerBuild", "dockerPush"
);
ExecutorTask task = RunUtils.executeGradle(runConfig, "");
task.waitFinished();
refresh();
result.complete(null);
}
if (r != null && "org-netbeans-modules-maven".equals(r.getProjectType())) { //NOI18N
NbMavenProject nbMavenProject;
final boolean isGdk;
if (ociProject != null) {
nbMavenProject = ociProject.getLookup().lookup(NbMavenProject.class);
isGdk = true;
} else {
nbMavenProject = project.getLookup().lookup(NbMavenProject.class);
isGdk = false;
}
nbMavenProject.getFreshProject().thenAccept(mvnProject -> {
List<String> goals;
String version = mvnProject.getVersion();
if (isGdk) {
goals = List.of("compile", "deploy", "-pl", "oci", "-Dpackaging=docker", "-Djib.to.image=" + repository.getUrl()+ ":" + version);
} else {
goals = List.of("compile", "deploy", "-Dpackaging=docker", "-Djib.to.image=" + repository.getUrl()+ ":" + version);
}
org.netbeans.modules.maven.api.execute.RunConfig runConfig = org.netbeans.modules.maven.api.execute.RunUtils.createRunConfig(
FileUtil.toFile(project.getProjectDirectory()),
project,
"Build container image",
goals
);
ExecutorTask task = org.netbeans.modules.maven.api.execute.RunUtils.executeMaven(runConfig);
task.waitFinished();
refresh();
result.complete(null);
});
}
} catch (IOException ex) {
result.completeExceptionally(ex);
Exceptions.printStackTrace(ex);
}

});
return result;
}

private void refresh() {
for (Node child : RootNode.instance().getChildren().getNodes()) {
if (child instanceof ContainerRepositoryNode) {
((ContainerRepositoryNode) child).refresh();
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,15 @@
* @author Jan Horvath
*/
public class RootNode {

private static Node instance = null;

static Node instance() {
return new AbstractNode(
static synchronized Node instance() {
if (instance == null) {
instance = new AbstractNode(
Children.create(new AssetsChildren(OCIManager.getDefault().getActiveSession()), true));
}
return instance;
}

static class AssetsChildren extends ChildFactory<OCIItem> implements ChangeListener {
Expand Down
1 change: 0 additions & 1 deletion enterprise/websvc.restlib/external/binaries-list
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ B8A1142E04838FE54194049C6E7A18DAE8F9B960 jakarta.servlet:jakarta.servlet-api:4.0
114BD7AFB4A1BD9993527F52A08A252B5D2ACAC5 org.glassfish.hk2:hk2-api:2.6.1
9DEDF9D2022E38EC0743ED44C1AC94AD6149ACDD org.glassfish.hk2:hk2-locator:2.6.1
396513AA96C1D5A10AA4F75C4DCBF259A698D62D org.glassfish.hk2:hk2-utils:2.6.1
8096EBF722902E75FBD4F532A751E514F02E1EB7 org.glassfish.hk2.external:jakarta.inject:2.6.1
B2EB0A83BCBB44CC5D25F8B18F23BE116313A638 org.glassfish.hk2.external:aopalliance-repackaged:2.6.1
DE3B21279DF7E755E38275137539BE5E2C80DD58 org.glassfish.hk2:osgi-resource-locator:1.0.3
EA92BE0DD34D0B298930A7514E715783F4EABA97 org.glassfish.jersey.core:jersey-client:2.35
Expand Down
2 changes: 1 addition & 1 deletion enterprise/websvc.restlib/external/hk2-2.6.1-license.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Version: 2.6.1
Description: A light-weight and dynamic dependency injection framework
License: EPL-v20
Origin: https://github.com/eclipse-ee4j/glassfish-hk2
Files: hk2-api-2.6.1.jar, hk2-locator-2.6.1.jar, hk2-utils-2.6.1.jar, aopalliance-repackaged-2.6.1.jar, jakarta.inject-2.6.1.jar, osgi-resource-locator-1.0.3.jar
Files: hk2-api-2.6.1.jar, hk2-locator-2.6.1.jar, hk2-utils-2.6.1.jar, aopalliance-repackaged-2.6.1.jar, osgi-resource-locator-1.0.3.jar

Eclipse Public License - v 2.0
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
Expand Down
2 changes: 0 additions & 2 deletions enterprise/websvc.restlib/nbproject/project.properties
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ jnlp.indirect.jars=\
modules/ext/jersey2/hk2-api-2.6.1.jar,\
modules/ext/jersey2/hk2-locator-2.6.1.jar,\
modules/ext/jersey2/hk2-utils-2.6.1.jar,\
modules/ext/jersey2/jakarta.inject-2.6.1.jar,\
modules/ext/jersey2/osgi.core-8.0.0.jar,\
modules/ext/jersey2/osgi-resource-locator-1.0.3.jar

Expand Down Expand Up @@ -71,7 +70,6 @@ release.external/aopalliance-repackaged-2.6.1.jar=modules/ext/jersey2/aopallianc
release.external/hk2-api-2.6.1.jar=modules/ext/jersey2/hk2-api-2.6.1.jar
release.external/hk2-locator-2.6.1.jar=modules/ext/jersey2/hk2-locator-2.6.1.jar
release.external/hk2-utils-2.6.1.jar=modules/ext/jersey2/hk2-utils-2.6.1.jar
release.external/jakarta.inject-2.6.1.jar=modules/ext/jersey2/jakarta.inject-2.6.1.jar
release.external/osgi.core-8.0.0.jar=modules/ext/jersey2/osgi.core-8.0.0.jar
release.external/osgi-resource-locator-1.0.3.jar=modules/ext/jersey2/osgi-resource-locator-1.0.3.jar

Expand Down
15 changes: 10 additions & 5 deletions enterprise/websvc.restlib/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,21 @@
<specification-version>1.3</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.libs.javax.inject</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.61</specification-version>
</run-dependency>
</dependency>
</module-dependencies>
<public-packages>
<package>jakarta.annotation</package>
<package>jakarta.annotation.security</package>
<package>jakarta.annotation.sql</package>
<package>javax.inject</package>
<!--<package>javax.inject</package>-->
<package>javax.persistence</package>
<package>javax.persistence.criteria</package>
<package>javax.persistence.metamodel</package>
Expand Down Expand Up @@ -222,10 +231,6 @@
<runtime-relative-path>ext/jersey2/jakarta.validation-api-2.0.2.jar</runtime-relative-path>
<binary-origin>external/jakarta.validation-api-2.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jersey2/jakarta.inject-2.6.1.jar</runtime-relative-path>
<binary-origin>external/jakarta.inject-2.6.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jersey2/hk2-utils-2.6.1.jar</runtime-relative-path>
<binary-origin>external/hk2-utils-2.6.1.jar</binary-origin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
<resource>jar:nbinst://org.netbeans.modules.websvc.restlib/modules/ext/jersey2/hk2-api-2.6.1.jar!/</resource>
<resource>jar:nbinst://org.netbeans.modules.websvc.restlib/modules/ext/jersey2/hk2-locator-2.6.1.jar!/</resource>
<resource>jar:nbinst://org.netbeans.modules.websvc.restlib/modules/ext/jersey2/hk2-utils-2.6.1.jar!/</resource>
<resource>jar:nbinst://org.netbeans.modules.websvc.restlib/modules/ext/jersey2/jakarta.inject-2.6.1.jar!/</resource>
<resource>jar:nbinst://org.netbeans.libs.javax.inject/modules/ext/jersey2/jakarta.inject-2.6.1.jar!/</resource>
<resource>jar:nbinst://org.netbeans.modules.websvc.restlib/modules/ext/jersey2/aopalliance-repackaged-2.6.1.jar!/</resource>
<resource>jar:nbinst://org.netbeans.modules.websvc.restlib/modules/ext/jersey2/osgi.core-8.0.0.jar!/</resource>
<resource>jar:nbinst://org.netbeans.modules.websvc.restlib/modules/ext/jersey2/osgi-resource-locator-1.0.3.jar!/</resource>
Expand Down
10 changes: 10 additions & 0 deletions java/java.lsp.server/vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,11 @@
"title": "Refresh Oracle Cloud Assets",
"icon": "$(refresh)"
},
{
"command": "nbls.project.buildPushImage",
"title": "Build and Push container image",
"icon": "$(live-share)"
},
{
"command": "cloud.assets.policy.create",
"title": "Create OCI Policies",
Expand Down Expand Up @@ -1055,6 +1060,11 @@
"when": "viewItem =~ /publicIp:.*/ && viewItem =~ /imageUrl:.*/",
"group": "inline@10"
},
{
"command": "nbls.project.buildPushImage",
"when": "viewItem =~ /class:oracle.developer.ContainerRepositoryItem/",
"group": "inline@9"
},
{
"command": "nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddRepository",
"when": "viewItem =~ /class:oracle.devops.DevopsProjectItem/",
Expand Down
4 changes: 4 additions & 0 deletions java/java.lsp.server/vscode/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ function wrapCommandWithProgress(lsCommand : string, title : string, log? : vsco
return window.withProgress({ location: ProgressLocation.Window }, p => {
return new Promise(async (resolve, reject) => {
let c : LanguageClient = await client;
await vscode.commands.executeCommand('workbench.action.files.saveAll');
const commands = await vscode.commands.getCommands();
if (commands.includes(lsCommand)) {
p.report({ message: title });
Expand Down Expand Up @@ -616,6 +617,9 @@ export function activate(context: ExtensionContext): VSNetBeansAPI {
context.subscriptions.push(commands.registerCommand(COMMAND_PREFIX + '.project.clean', (args) => {
wrapProjectActionWithProgress('clean', undefined, 'Cleaning...', log, true, args);
}));
context.subscriptions.push(commands.registerCommand(COMMAND_PREFIX + '.project.buildPushImage', () => {
wrapCommandWithProgress(COMMAND_PREFIX + '.cloud.assets.buildPushImage', 'Building and pushing container image', log, true);
}));
context.subscriptions.push(commands.registerCommand(COMMAND_PREFIX + '.open.type', () => {
wrapCommandWithProgress(COMMAND_PREFIX + '.quick.open', 'Opening type...', log, true).then(() => {
commands.executeCommand('workbench.action.focusActiveEditorGroup');
Expand Down
Loading

0 comments on commit 4bbcd0b

Please sign in to comment.