Search in sources :

Example 1 with ParsedPath

use of com.microfocus.octane.gitlab.helpers.ParsedPath in project octane-gitlab-service by MicroFocus.

the class GitlabServices method createStructure.

PipelineNode createStructure(String buildId) {
    ParsedPath project = new ParsedPath(buildId, gitLabApi, PathType.MULTI_BRUNCH);
    // add a webhook to new Octane pipeline (gitlab project) in Octane
    try {
        if (project.isMultiBranch()) {
            addWebHookToProject(project.getFullPathOfProject(), true);
            return dtoFactory.newDTO(PipelineNode.class).setJobCiId(project.getJobCiId(true)).setMultiBranchType(MultiBranchType.MULTI_BRANCH_PARENT).setName(project.getNameWithNameSpaceForDisplayName()).setParameters(getParameters(project));
        }
        project = new ParsedPath(buildId, gitLabApi, PathType.PIPELINE);
        addWebHookToProject(project.getId(), true);
        return dtoFactory.newDTO(PipelineNode.class).setJobCiId(project.getJobCiId(false)).setName(project.getNameWithNameSpaceForDisplayName()).setParameters(getParameters(project));
    } catch (GitLabApiException e) {
        log.error("unable to update webhook when create a pipeline in Octane for project:" + project.getDisplayName(), e);
        return null;
    }
}
Also used : ParsedPath(com.microfocus.octane.gitlab.helpers.ParsedPath) GitLabApiException(org.gitlab4j.api.GitLabApiException) PipelineNode(com.hp.octane.integrations.dto.pipelines.PipelineNode)

Example 2 with ParsedPath

use of com.microfocus.octane.gitlab.helpers.ParsedPath in project octane-gitlab-service by MicroFocus.

the class GitlabServices method getJobList.

CIJobsList getJobList() {
    CIJobsList ciJobsList = dtoFactory.newDTO(CIJobsList.class);
    List<PipelineNode> list = new ArrayList<>();
    String projectNames = "";
    try {
        ProjectFilter filter = new ProjectFilter();
        filter.withMinAccessLevel(AccessLevel.MAINTAINER);
        List<Project> projectsFilters = gitLabApi.getProjectApi().getProjects(filter);
        log.info("There are only " + projectsFilters.size() + " projects with access level => MAINTAINER for the integrated user");
        for (Project project : projectsFilters) {
            try {
                ParsedPath parseProject = new ParsedPath(project, gitLabApi);
                PipelineNode buildConf;
                if (parseProject.isMultiBranch()) {
                    buildConf = dtoFactory.newDTO(PipelineNode.class).setJobCiId(parseProject.getJobCiId(true)).setName(project.getNameWithNamespace()).setMultiBranchType(MultiBranchType.MULTI_BRANCH_PARENT);
                } else {
                    buildConf = dtoFactory.newDTO(PipelineNode.class).setJobCiId(parseProject.getJobCiId(false)).setName(project.getNameWithNamespace());
                }
                projectNames = projectNames + buildConf.getName() + ",";
                list.add(buildConf);
            } catch (Exception e) {
                log.warn("Failed to add some tags to the job list", e);
            }
        }
    } catch (Exception e) {
        log.warn("Failed to add some jobs to the job list", e);
    }
    log.info("getJobList results:" + projectNames);
    ciJobsList.setJobs(list.toArray(new PipelineNode[list.size()]));
    return ciJobsList;
}
Also used : CIJobsList(com.hp.octane.integrations.dto.general.CIJobsList) Project(org.gitlab4j.api.models.Project) ParsedPath(com.microfocus.octane.gitlab.helpers.ParsedPath) ProjectFilter(org.gitlab4j.api.models.ProjectFilter) ArrayList(java.util.ArrayList) PipelineNode(com.hp.octane.integrations.dto.pipelines.PipelineNode) MalformedURLException(java.net.MalformedURLException) GitLabApiException(org.gitlab4j.api.GitLabApiException)

Example 3 with ParsedPath

use of com.microfocus.octane.gitlab.helpers.ParsedPath in project octane-gitlab-service by MicroFocus.

the class EventListener method handleEvent.

private Response handleEvent(JSONObject event) {
    log.traceEntry();
    try {
        if (isMergeRequestEvent(event)) {
            return handleMergeRequestEvent(event);
        }
        CIEventType eventType = getEventType(event);
        if (eventType == CIEventType.UNDEFINED || eventType == CIEventType.QUEUED)
            return Response.ok().build();
        List<CIEvent> eventList = getCIEvents(event);
        eventList.forEach(ciEvent -> {
            if (ciEvent.getResult() == null) {
                ciEvent.setResult(CIBuildResult.UNAVAILABLE);
            }
            try {
                log.trace(new ObjectMapper().writeValueAsString(ciEvent));
            } catch (Exception e) {
                log.debug("Failed to trace an incoming event", e);
            }
            if (eventType == CIEventType.FINISHED || eventType == CIEventType.STARTED) {
                ParsedPath parsedPath = null;
                if (ciEvent.getProject().endsWith("/build")) {
                    parsedPath = new ParsedPath(ciEvent.getProject().substring(0, ciEvent.getProject().length() - 6), gitLabApi, PathType.PROJECT);
                    if (parsedPath.isMultiBranch()) {
                        ciEvent.setSkipValidation(true);
                    }
                }
                if (ciEvent.getProject().contains(ParsedPath.PIPELINE_JOB_CI_ID_PREFIX)) {
                    parsedPath = new ParsedPath(ciEvent.getProject(), gitLabApi, PathType.PIPELINE);
                    if (parsedPath.isMultiBranch()) {
                        String projectDisplayName = parsedPath.getNameWithNameSpaceForDisplayName() != null ? parsedPath.getNameWithNameSpaceForDisplayName() : parsedPath.getFullPathOfProjectWithBranch();
                        ciEvent.setProjectDisplayName(projectDisplayName + "/" + parsedPath.getCurrentBranch());
                        ciEvent.setParentCiId(parsedPath.getJobCiId(true)).setMultiBranchType(MultiBranchType.MULTI_BRANCH_CHILD).setSkipValidation(true);
                    }
                }
                if (isPipelineEvent(event)) {
                    List<CIParameter> parametersList = new ArrayList<>();
                    JSONArray variablesList = VariablesHelper.getVariablesListFromPipelineEvent(event);
                    // check if this parameter is in job level:
                    List<Variable> allVariables = VariablesHelper.getVariables(parsedPath, gitLabApi, applicationSettings.getConfig());
                    variablesList.forEach(var -> {
                        parametersList.add(VariablesHelper.convertVariableToParameter(var));
                    });
                    if (parametersList.size() > 0) {
                        ciEvent.setParameters(parametersList);
                    }
                }
            }
            OctaneSDK.getClients().forEach(client -> client.getEventsService().publishEvent(ciEvent));
        });
        if (eventType == CIEventType.FINISHED) {
            Integer projectId = isPipelineEvent(event) ? event.getJSONObject("project").getInt("id") : event.getInt("project_id");
            if (!isPipelineEvent(event)) {
                Project project = gitLabApi.getProjectApi().getProject(projectId);
                Integer jobId = getEventTargetObjectId(event);
                Job job = gitLabApi.getJobApi().getJob(projectId, jobId);
                if (job.getArtifactsFile() != null) {
                    sendCodeCoverage(projectId, project, job);
                    GherkinTestResultsProvider gherkinTestResultsProvider = GherkinTestResultsProvider.getInstance(applicationSettings);
                    boolean isGherkinTestsExist = gherkinTestResultsProvider.createTestList(project, job, gitLabApi.getJobApi().downloadArtifactsFile(projectId, job.getId()));
                    // looking for Regular tests
                    if (!isGherkinTestsExist) {
                        JunitTestResultsProvider testResultsProduce = JunitTestResultsProvider.getInstance(applicationSettings);
                        boolean testResultsExist = testResultsProduce.createTestList(project, job, gitLabApi.getJobApi().downloadArtifactsFile(projectId, job.getId()));
                        if (!testResultsExist) {
                            String warning = String.format("No test results found by using the %s pattern", applicationSettings.getConfig().getGitlabTestResultsFilePattern());
                            log.warn(warning);
                            return Response.ok().entity(warning).build();
                        }
                    }
                }
            }
        }
    } catch (Exception e) {
        log.warn("An error occurred while handling GitLab event", e);
    }
    log.traceExit();
    return Response.ok().build();
}
Also used : CIEvent(com.hp.octane.integrations.dto.events.CIEvent) ParsedPath(com.microfocus.octane.gitlab.helpers.ParsedPath) GherkinTestResultsProvider(com.microfocus.octane.gitlab.testresults.GherkinTestResultsProvider) JSONArray(org.json.JSONArray) GitLabApiException(org.gitlab4j.api.GitLabApiException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) JunitTestResultsProvider(com.microfocus.octane.gitlab.testresults.JunitTestResultsProvider) CIEventType(com.hp.octane.integrations.dto.events.CIEventType) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) CIParameter(com.hp.octane.integrations.dto.parameters.CIParameter)

Aggregations

ParsedPath (com.microfocus.octane.gitlab.helpers.ParsedPath)3 GitLabApiException (org.gitlab4j.api.GitLabApiException)3 PipelineNode (com.hp.octane.integrations.dto.pipelines.PipelineNode)2 MalformedURLException (java.net.MalformedURLException)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 CIEvent (com.hp.octane.integrations.dto.events.CIEvent)1 CIEventType (com.hp.octane.integrations.dto.events.CIEventType)1 CIJobsList (com.hp.octane.integrations.dto.general.CIJobsList)1 CIParameter (com.hp.octane.integrations.dto.parameters.CIParameter)1 GherkinTestResultsProvider (com.microfocus.octane.gitlab.testresults.GherkinTestResultsProvider)1 JunitTestResultsProvider (com.microfocus.octane.gitlab.testresults.JunitTestResultsProvider)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Project (org.gitlab4j.api.models.Project)1 ProjectFilter (org.gitlab4j.api.models.ProjectFilter)1 JSONArray (org.json.JSONArray)1