-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adapter code for initial implementation of Dingrogu build process usi…
…ng PNC build backend.
- Loading branch information
1 parent
d679a1a
commit 72f13d0
Showing
10 changed files
with
587 additions
and
260 deletions.
There are no files selected for viewing
14 changes: 14 additions & 0 deletions
14
api/src/main/java/org/jboss/pnc/dingrogu/api/dto/adapter/BuildDriverDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package org.jboss.pnc.dingrogu.api.dto.adapter; | ||
|
||
import lombok.Builder; | ||
import lombok.Data; | ||
import lombok.extern.jackson.Jacksonized; | ||
|
||
@Jacksonized | ||
@Data | ||
@Builder | ||
public class BuildDriverDTO { | ||
String buildDriverUrl; | ||
String buildCommand; | ||
boolean debugEnabled; | ||
} |
13 changes: 13 additions & 0 deletions
13
api/src/main/java/org/jboss/pnc/dingrogu/api/dto/adapter/EnvironmentDriverCompleteDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package org.jboss.pnc.dingrogu.api.dto.adapter; | ||
|
||
import lombok.Builder; | ||
import lombok.Data; | ||
import lombok.extern.jackson.Jacksonized; | ||
|
||
@Jacksonized | ||
@Data | ||
@Builder | ||
public class EnvironmentDriverCompleteDTO { | ||
String environmentDriverUrl; | ||
boolean debugEnabled; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
172 changes: 172 additions & 0 deletions
172
...-adapter/src/main/java/org/jboss/pnc/dingrogu/restadapter/adapter/BuildDriverAdapter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,172 @@ | ||
package org.jboss.pnc.dingrogu.restadapter.adapter; | ||
|
||
import java.net.URI; | ||
import java.net.URISyntaxException; | ||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Optional; | ||
|
||
import jakarta.enterprise.context.ApplicationScoped; | ||
import jakarta.inject.Inject; | ||
|
||
import org.eclipse.microprofile.config.inject.ConfigProperty; | ||
import org.jboss.pnc.api.builddriver.dto.BuildCancelRequest; | ||
import org.jboss.pnc.api.builddriver.dto.BuildCompleted; | ||
import org.jboss.pnc.api.builddriver.dto.BuildRequest; | ||
import org.jboss.pnc.api.builddriver.dto.BuildResponse; | ||
import org.jboss.pnc.api.dto.Request; | ||
import org.jboss.pnc.api.environmentdriver.dto.EnvironmentCreateResult; | ||
import org.jboss.pnc.api.reqour.dto.AdjustResponse; | ||
import org.jboss.pnc.dingrogu.api.client.BuildDriver; | ||
import org.jboss.pnc.dingrogu.api.client.BuildDriverProducer; | ||
import org.jboss.pnc.dingrogu.api.dto.adapter.BuildDriverDTO; | ||
import org.jboss.pnc.dingrogu.api.endpoint.AdapterEndpoint; | ||
import org.jboss.pnc.dingrogu.api.endpoint.WorkflowEndpoint; | ||
import org.jboss.pnc.dingrogu.common.TaskHelper; | ||
import org.jboss.pnc.rex.api.CallbackEndpoint; | ||
import org.jboss.pnc.rex.api.TaskEndpoint; | ||
import org.jboss.pnc.rex.dto.ServerResponseDTO; | ||
import org.jboss.pnc.rex.dto.TaskDTO; | ||
import org.jboss.pnc.rex.model.requests.StartRequest; | ||
import org.jboss.pnc.rex.model.requests.StopRequest; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
|
||
import io.quarkus.logging.Log; | ||
|
||
@ApplicationScoped | ||
public class BuildDriverAdapter implements Adapter<BuildDriverDTO> { | ||
|
||
@ConfigProperty(name = "dingrogu.url") | ||
String dingroguUrl; | ||
|
||
@Inject | ||
ObjectMapper objectMapper; | ||
|
||
@Inject | ||
CallbackEndpoint callbackEndpoint; | ||
|
||
@Inject | ||
BuildDriverProducer buildDriverProducer; | ||
|
||
@Inject | ||
ReqourAdjustAdapter reqourAdjustAdapter; | ||
|
||
@Inject | ||
EnvironmentDriverCreateAdapter environmentDriverCreateAdapter; | ||
|
||
@Inject | ||
TaskEndpoint taskEndpoint; | ||
|
||
@Override | ||
public String getAdapterName() { | ||
return "build-driver"; | ||
} | ||
|
||
@Override | ||
public Optional<Object> start(String correlationId, StartRequest startRequest) { | ||
|
||
Request callback; | ||
try { | ||
callback = new Request( | ||
Request.Method.POST, | ||
new URI(AdapterEndpoint.getCallbackAdapterEndpoint(dingroguUrl, getAdapterName(), correlationId)), | ||
TaskHelper.getHTTPHeaders(), | ||
null); | ||
} catch (URISyntaxException e) { | ||
Log.error(e); | ||
throw new RuntimeException(e); | ||
} | ||
BuildDriverDTO dto = objectMapper.convertValue(startRequest.getPayload(), BuildDriverDTO.class); | ||
|
||
Map<String, Object> pastResults = startRequest.getTaskResults(); | ||
Object envDriverCreate = pastResults.get(environmentDriverCreateAdapter.getRexTaskName(correlationId)); | ||
EnvironmentCreateResult environmentCreateResponse = objectMapper | ||
.convertValue(envDriverCreate, EnvironmentCreateResult.class); | ||
|
||
Object reqourAdjust = pastResults.get(reqourAdjustAdapter.getRexTaskName(correlationId)); | ||
AdjustResponse adjustResponse = objectMapper.convertValue(reqourAdjust, AdjustResponse.class); | ||
|
||
BuildDriver buildDriver = buildDriverProducer.getBuildDriver(dto.getBuildDriverUrl()); | ||
|
||
BuildRequest buildRequest = BuildRequest.builder() | ||
.scmUrl(adjustResponse.getInternalUrl().getReadonlyUrl()) | ||
.scmRevision(adjustResponse.getDownstreamCommit()) | ||
.scmTag(adjustResponse.getTag()) | ||
.command(dto.getBuildCommand()) | ||
.workingDirectory(environmentCreateResponse.getWorkingDirectory()) | ||
.environmentBaseUrl(environmentCreateResponse.getEnvironmentBaseUri().toString()) | ||
.debugEnabled(dto.isDebugEnabled()) | ||
.completionCallback(callback) | ||
.heartbeatConfig(null) // TODO | ||
.build(); | ||
Log.infof("Build request: %s", buildRequest); | ||
|
||
BuildResponse buildResponse = buildDriver.build(buildRequest).toCompletableFuture().join(); | ||
Log.infof("Initial build response: %s", buildResponse); | ||
return Optional.ofNullable(buildResponse); | ||
} | ||
|
||
@Override | ||
public void callback(String correlationId, Object object) { | ||
try { | ||
BuildCompleted response = objectMapper.convertValue(object, BuildCompleted.class); | ||
Log.infof("Build response: %s", response); | ||
try { | ||
if (response == null || !response.getBuildStatus().isSuccess()) { | ||
callbackEndpoint.fail(getRexTaskName(correlationId), response, null); | ||
} else { | ||
callbackEndpoint.succeed(getRexTaskName(correlationId), response, null); | ||
} | ||
} catch (Exception e) { | ||
Log.error("Error happened in callback adapter", e); | ||
} | ||
} catch (IllegalArgumentException e) { | ||
try { | ||
callbackEndpoint.fail(getRexTaskName(correlationId), object, null); | ||
} catch (Exception ex) { | ||
Log.error("Error happened in callback adapter", ex); | ||
} | ||
} | ||
} | ||
|
||
@Override | ||
public String getNotificationEndpoint(String adapterUrl) { | ||
return adapterUrl + WorkflowEndpoint.BUILD_REX_NOTIFY; | ||
} | ||
|
||
@Override | ||
public void cancel(String correlationId, StopRequest stopRequest) { | ||
|
||
// get own unique id created by build-driver sent back to rex in the start method | ||
TaskDTO ownTask = taskEndpoint.getSpecific(getRexTaskName(correlationId)); | ||
List<ServerResponseDTO> serverResponses = ownTask.getServerResponses(); | ||
|
||
if (serverResponses.isEmpty()) { | ||
throw new RuntimeException( | ||
"We didn't get any server response from " + getAdapterName() + ": " + correlationId); | ||
} | ||
|
||
ServerResponseDTO last = serverResponses.get(serverResponses.size() - 1); | ||
BuildResponse buildResponse = objectMapper.convertValue(last.getBody(), BuildResponse.class); | ||
|
||
BuildDriverDTO dto = objectMapper.convertValue(stopRequest.getPayload(), BuildDriverDTO.class); | ||
BuildDriver buildDriver = buildDriverProducer.getBuildDriver(dto.getBuildDriverUrl()); | ||
|
||
Map<String, Object> pastResults = stopRequest.getTaskResults(); | ||
Object envDriverCreate = pastResults.get(environmentDriverCreateAdapter.getRexTaskName(correlationId)); | ||
EnvironmentCreateResult environmentCreateResponse = objectMapper | ||
.convertValue(envDriverCreate, EnvironmentCreateResult.class); | ||
|
||
BuildCancelRequest buildCancelRequest = BuildCancelRequest.builder() | ||
.buildEnvironmentBaseUrl(environmentCreateResponse.getEnvironmentBaseUri().toString()) | ||
.buildExecutionId(buildResponse.getBuildExecutionId()) | ||
.build(); | ||
buildDriver.cancel(buildCancelRequest); | ||
} | ||
|
||
@Override | ||
public boolean shouldGetResultsFromDependencies() { | ||
return true; | ||
} | ||
} |
Oops, something went wrong.