Skip to content

Commit 85b16e4

Browse files
committed
Add cancel support
1 parent 622be10 commit 85b16e4

File tree

5 files changed

+54
-22
lines changed

5 files changed

+54
-22
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.redhat.hacbs.cli.driver;
2+
3+
import jakarta.enterprise.context.control.ActivateRequestContext;
4+
import jakarta.inject.Inject;
5+
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
import com.redhat.hacbs.driver.Driver;
10+
import com.redhat.hacbs.driver.dto.CancelRequest;
11+
12+
import picocli.CommandLine;
13+
14+
@CommandLine.Command(name = "cancel-pipeline", mixinStandardHelpOptions = true, description = "Creates a pipeline")
15+
public class CancelPipeline implements Runnable {
16+
17+
private static final Logger logger = LoggerFactory.getLogger(CancelPipeline.class);
18+
19+
@Inject
20+
Driver driver;
21+
22+
@CommandLine.Option(names = "-n", description = "Namespace", defaultValue = "pnc-devel-tenant")
23+
String namespace;
24+
25+
@CommandLine.Option(names = "-p", description = "Pipeline name")
26+
String pipeline;
27+
28+
@ActivateRequestContext // https://github.com/quarkusio/quarkus/issues/8758
29+
@Override
30+
public void run() {
31+
var cancel = CancelRequest.builder()
32+
.namespace(namespace)
33+
.pipelineId(pipeline)
34+
.build();
35+
36+
driver.cancel(cancel);
37+
}
38+
}

java-components/cli/src/main/java/com/redhat/hacbs/cli/driver/Pipeline.java renamed to java-components/cli/src/main/java/com/redhat/hacbs/cli/driver/CreatePipeline.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
import picocli.CommandLine;
1414

15-
@CommandLine.Command(name = "pipeline", mixinStandardHelpOptions = true, description = "Creates a pipeline")
16-
public class Pipeline extends Base implements Runnable {
15+
@CommandLine.Command(name = "create-pipeline", mixinStandardHelpOptions = true, description = "Creates a pipeline")
16+
public class CreatePipeline extends Base implements Runnable {
1717

18-
private static final Logger logger = LoggerFactory.getLogger(Pipeline.class);
18+
private static final Logger logger = LoggerFactory.getLogger(CreatePipeline.class);
1919

2020
@Inject
2121
Driver driver;

java-components/cli/src/main/java/com/redhat/hacbs/cli/driver/DriverCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
import picocli.CommandLine;
44

55
@CommandLine.Command(name = "driver", subcommands = {
6-
Fabric8.class, Pipeline.class }, mixinStandardHelpOptions = true)
6+
Fabric8.class, CreatePipeline.class, CancelPipeline.class }, mixinStandardHelpOptions = true)
77
public class DriverCommand {
88
}

java-components/driver/src/main/java/com/redhat/hacbs/driver/Driver.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import static org.apache.commons.lang3.StringUtils.isEmpty;
44

55
import java.io.IOException;
6-
import java.nio.file.Path;
76
import java.util.ArrayList;
87
import java.util.HashMap;
98
import java.util.List;
109
import java.util.Map;
11-
import java.util.Optional;
1210

1311
import jakarta.enterprise.context.RequestScoped;
1412
import jakarta.inject.Inject;
@@ -96,7 +94,7 @@ public BuildResponse create(BuildRequest buildRequest) {
9694
// Various ways to create the initial PipelineRun object. We can use an objectmapper,
9795
// client.getKubernetesSerialization() or the load calls on the Fabric8 objects.
9896
pipelineRun = tc.v1().pipelineRuns()
99-
.load(IOUtils.resourceToURL("pipeline.yaml", Thread.currentThread().getContextClassLoader())).item();
97+
.load(IOUtils.resourceToURL("pipeline.yaml", Thread.currentThread().getContextClassLoader())).item();
10098
} catch (IOException e) {
10199
throw new RuntimeException(e);
102100
}
@@ -126,23 +124,21 @@ public void cancel(CancelRequest request) {
126124
var tc = client.adapt(TektonClient.class);
127125
var pipeline = tc.v1beta1().pipelineRuns().inNamespace(request.namespace()).withName(request.pipelineId()).get();
128126

129-
logger.info("Retrieved pipeline {}", pipeline);
127+
logger.info("Retrieved pipeline {}", pipeline.getMetadata().getName());
130128

131129
List<Condition> conditions = new ArrayList<>();
132130
// https://tekton.dev/docs/pipelines/pipelineruns/#monitoring-execution-status
133131
Condition cancelCondition = new Condition();
134132
cancelCondition.setType("Succeeded");
135133
cancelCondition.setStatus("False");
134+
// https://github.com/tektoncd/community/blob/main/teps/0058-graceful-pipeline-run-termination.md
136135
cancelCondition.setReason("CancelledRunFinally");
137136
cancelCondition.setMessage("The PipelineRun was cancelled");
138137
conditions.add(cancelCondition);
139138

140139
pipeline.getStatus().setConditions(conditions);
141140

142141
tc.v1beta1().pipelineRuns().inNamespace(request.namespace()).resource(pipeline).updateStatus();
143-
// https://tekton.dev/docs/pipelines/pipelineruns/#gracefully-cancelling-a-pipelinerun
144-
// tc.v1beta1().pipelineRuns().updateStatus().inNamespace(request.namespace()).withName(request.pipelineId()).patch()
145-
// .edit(p -> p.edit().editOrNewSpec().withStatus("CancelledRunFinally").endSpec().build());
146142
}
147143

148144
/**

java-components/driver/src/main/java/com/redhat/hacbs/driver/endpoints/Public.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import jakarta.ws.rs.Consumes;
2323
import jakarta.ws.rs.GET;
2424
import jakarta.ws.rs.POST;
25+
import jakarta.ws.rs.PUT;
2526
import jakarta.ws.rs.Path;
2627
import jakarta.ws.rs.Produces;
2728
import jakarta.ws.rs.core.MediaType;
@@ -33,6 +34,7 @@
3334
import com.redhat.hacbs.driver.Driver;
3435
import com.redhat.hacbs.driver.dto.BuildRequest;
3536
import com.redhat.hacbs.driver.dto.BuildResponse;
37+
import com.redhat.hacbs.driver.dto.CancelRequest;
3638
import com.redhat.hacbs.driver.util.Info;
3739

3840
import io.smallrye.common.annotation.RunOnVirtualThread;
@@ -66,17 +68,13 @@ public BuildResponse build(BuildRequest buildRequest) {
6668
return result;
6769
}
6870

69-
// TODO: Is delete possible in konflux?
70-
//
71-
// /**
72-
// * Cancel the build execution.
73-
// */
74-
// @PUT
75-
// @Path("/cancel")
76-
// public CompletionStage<Response> cancel(BuildCancelRequest buildCancelRequest) {
77-
// logger.info("Requested cancel: {}", buildCancelRequest.getBuildExecutionId());
78-
// return driver.cancel(buildCancelRequest).thenApply((r) -> Response.status(r.getCode()).build());
79-
// }
71+
@PUT
72+
@Path("/cancel")
73+
@RunOnVirtualThread
74+
public void cancel(CancelRequest cancelRequest) {
75+
logger.info("Requested cancel: {}", cancelRequest.pipelineId());
76+
driver.cancel(cancelRequest);
77+
}
8078

8179
@Path("/version")
8280
@GET

0 commit comments

Comments
 (0)