diff --git a/src/main/java/com/redhat/labs/lodestar/models/ConfigMap.java b/src/main/java/com/redhat/labs/lodestar/models/ConfigMap.java index 3fce71a4..15134ff9 100644 --- a/src/main/java/com/redhat/labs/lodestar/models/ConfigMap.java +++ b/src/main/java/com/redhat/labs/lodestar/models/ConfigMap.java @@ -8,6 +8,9 @@ import java.nio.file.attribute.FileTime; import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -18,6 +21,7 @@ @NoArgsConstructor @AllArgsConstructor public class ConfigMap { + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigMap.class); private Path path; private String filePath; @@ -43,6 +47,7 @@ public boolean updateMountedFile() { content = Optional.of(new String(Files.readAllBytes(path), StandardCharsets.UTF_8)); return true; } catch (IOException e) { + LOGGER.error("Error updating mounted file %{} {} {} ", lastModifiedTime, path, filePath); content = Optional.empty(); } @@ -68,6 +73,7 @@ private boolean isModified() { return true; } } catch (IOException e) { + LOGGER.error("Error calculating isModified %{} {}", lastModifiedTime, path); return false; } diff --git a/src/main/java/com/redhat/labs/lodestar/models/gitlab/HookConfig.java b/src/main/java/com/redhat/labs/lodestar/models/gitlab/HookConfig.java index 4ec1ad52..c9611754 100644 --- a/src/main/java/com/redhat/labs/lodestar/models/gitlab/HookConfig.java +++ b/src/main/java/com/redhat/labs/lodestar/models/gitlab/HookConfig.java @@ -26,5 +26,11 @@ public class HookConfig { @JsonbProperty("token") private String token; + + /** + * Should the webhook be enabled after an engagement is archived + */ + @JsonbProperty("enabledAfterArchive") + private boolean enabledAfterArchive; } diff --git a/src/main/java/com/redhat/labs/lodestar/service/ConfigService.java b/src/main/java/com/redhat/labs/lodestar/service/ConfigService.java index e63d345d..f05f5177 100644 --- a/src/main/java/com/redhat/labs/lodestar/service/ConfigService.java +++ b/src/main/java/com/redhat/labs/lodestar/service/ConfigService.java @@ -122,7 +122,7 @@ void updateWebHooksInGitLab() { List projects = projectService.getProjectsByGroup(engagementRepositoryId, true); LOGGER.debug("number of projects found: {}", projects.size()); projects.stream().filter(project -> project.getName().equals(IAC)) - .filter(project -> !engagementIsArchived(project)).forEach(project -> { + .forEach(project -> { Integer projectId = project.getId(); @@ -131,9 +131,12 @@ void updateWebHooksInGitLab() { // remove existing webhooks for project hookService.deleteProjectHooks(projectId); + + boolean isArchived = isEngagementArchived(project); // create hooks from configuration - hookConfigs.stream().forEach(hookC -> { + hookConfigs.stream().filter(config -> config.isEnabledAfterArchive() || !isArchived) + .forEach(hookC -> { Hook hook = Hook.builder().projectId(projectId).pushEvents(true).url(hookC.getBaseUrl()) .token(hookC.getToken()).build(); LOGGER.debug("\tcreating webhook {}", hook.getUrl()); @@ -154,7 +157,7 @@ void updateWebHooksInGitLab() { * @param project * @return */ - boolean engagementIsArchived(Project project) { + boolean isEngagementArchived(Project project) { Optional engagement = engagementService.getEngagement(project, false, false); if (engagement.isPresent() && null != engagement.get().getArchiveDate()) { diff --git a/src/test/java/com/redhat/labs/lodestar/mocks/MockGitLabService.java b/src/test/java/com/redhat/labs/lodestar/mocks/MockGitLabService.java index 9a42a0e8..56d86c1f 100644 --- a/src/test/java/com/redhat/labs/lodestar/mocks/MockGitLabService.java +++ b/src/test/java/com/redhat/labs/lodestar/mocks/MockGitLabService.java @@ -294,7 +294,7 @@ public Response createProjectHook(Integer projectId, Hook hook) { return Response.status(Status.CREATED).build(); } - return null; + return Response.status(Status.INTERNAL_SERVER_ERROR).build(); } @Override diff --git a/src/test/java/com/redhat/labs/lodestar/model/ProjectTest.java b/src/test/java/com/redhat/labs/lodestar/model/ProjectTest.java new file mode 100644 index 00000000..a1cae3c0 --- /dev/null +++ b/src/test/java/com/redhat/labs/lodestar/model/ProjectTest.java @@ -0,0 +1,32 @@ +package com.redhat.labs.lodestar.model; + +import java.util.ArrayList; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import com.redhat.labs.lodestar.models.gitlab.Project; + +class ProjectTest { + + @Test + void testPreserve() { + + Project project = new Project(); + Assertions.assertNull(project.getTagList()); + + project.setTagList(new ArrayList<>()); + Assertions.assertEquals(0, project.getTagList().size()); + + project.preserve(); + + Assertions.assertEquals(1, project.getTagList().size()); + Assertions.assertEquals("DO_NOT_DELETE", project.getTagList().get(0)); + + //Handle 2nd call properly + project.preserve(); + + Assertions.assertEquals(1, project.getTagList().size()); + Assertions.assertEquals("DO_NOT_DELETE", project.getTagList().get(0)); + } +} diff --git a/src/test/java/com/redhat/labs/lodestar/resource/ConfigResourceTest.java b/src/test/java/com/redhat/labs/lodestar/resource/ConfigResourceTest.java index cd8a3f99..ab7b4a27 100644 --- a/src/test/java/com/redhat/labs/lodestar/resource/ConfigResourceTest.java +++ b/src/test/java/com/redhat/labs/lodestar/resource/ConfigResourceTest.java @@ -122,6 +122,7 @@ void testGetHookFileSuccess() { .body(is("\n[\n" + " {\n" + " \"baseUrl\": \"https://labs.com/webhooks/\",\n" + + " \"enabledAfterArchive\": false,\n" + " \"name\": \"labs\",\n" + " \"pushEvent\": true,\n" + " \"pushEventsBranchFilter\": \"master\",\n" + @@ -129,6 +130,7 @@ void testGetHookFileSuccess() { " },\n" + " {\n" + " \"baseUrl\": \"https://rht.com/hooks/\",\n" + + " \"enabledAfterArchive\": true,\n" + " \"name\": \"rht\",\n" + " \"pushEvent\": true,\n" + " \"pushEventsBranchFilter\": \"master\",\n" + diff --git a/src/test/resources/webhooks.yaml b/src/test/resources/webhooks.yaml index 782d725e..07be781c 100644 --- a/src/test/resources/webhooks.yaml +++ b/src/test/resources/webhooks.yaml @@ -9,3 +9,4 @@ pushEvent: true pushEventsBranchFilter: master token: def + enabledAfterArchive: true