diff --git a/src/main/java/org/gitlab4j/api/GroupApi.java b/src/main/java/org/gitlab4j/api/GroupApi.java index 3404e888..0ec9798c 100644 --- a/src/main/java/org/gitlab4j/api/GroupApi.java +++ b/src/main/java/org/gitlab4j/api/GroupApi.java @@ -16,25 +16,8 @@ import javax.ws.rs.core.Response; import org.gitlab4j.api.GitLabApi.ApiVersion; -import org.gitlab4j.api.models.AccessLevel; -import org.gitlab4j.api.models.AccessRequest; -import org.gitlab4j.api.models.AuditEvent; -import org.gitlab4j.api.models.Badge; -import org.gitlab4j.api.models.CustomAttribute; -import org.gitlab4j.api.models.Group; -import org.gitlab4j.api.models.GroupAccessToken; -import org.gitlab4j.api.models.GroupFilter; -import org.gitlab4j.api.models.GroupParams; -import org.gitlab4j.api.models.GroupProjectsFilter; +import org.gitlab4j.api.models.*; import org.gitlab4j.api.models.ImpersonationToken.Scope; -import org.gitlab4j.api.models.Iteration; -import org.gitlab4j.api.models.IterationFilter; -import org.gitlab4j.api.models.LdapGroupLink; -import org.gitlab4j.api.models.Member; -import org.gitlab4j.api.models.Project; -import org.gitlab4j.api.models.SamlGroupLink; -import org.gitlab4j.api.models.Variable; -import org.gitlab4j.api.models.Visibility; import org.gitlab4j.api.utils.ISO8601; /** @@ -2440,4 +2423,19 @@ public GroupAccessToken rotateGroupAccessToken(Object groupIdOrPath, Long tokenI public void revokeGroupAccessToken(Object groupIdOrPath, Long tokenId) throws GitLabApiException { delete(Response.Status.NO_CONTENT, null, "groups", getGroupIdOrPath(groupIdOrPath), "access_tokens", tokenId); } + + /** + * Add a group hook + * + *
GitLab Endpoint: POST /groups/:id/hooks
+ *
+ * @param groupIdOrPath the group in the form of an Long(ID), String(path), or Group instance
+ * @param webHookParams webhook creation options
+ * @throws GitLabApiException if any exception occurs
+ */
+ public Webhook addWebhook(Object groupIdOrPath, WebHookParams webHookParams) throws GitLabApiException {
+ Response response = post(
+ Response.Status.CREATED, webHookParams.getForm(), "groups", getGroupIdOrPath(groupIdOrPath), "hooks");
+ return (response.readEntity(Webhook.class));
+ }
}
diff --git a/src/main/java/org/gitlab4j/api/models/WebHookParams.java b/src/main/java/org/gitlab4j/api/models/WebHookParams.java
new file mode 100644
index 00000000..e35033d7
--- /dev/null
+++ b/src/main/java/org/gitlab4j/api/models/WebHookParams.java
@@ -0,0 +1,183 @@
+package org.gitlab4j.api.models;
+
+import java.io.Serializable;
+
+import org.gitlab4j.api.GitLabApiForm;
+
+public class WebHookParams implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private String url;
+ private String name;
+ private String description;
+ private Boolean pushEvents;
+ private String pushEventsBranchFilter;
+ private String branchFilterStrategy;
+ private Boolean issuesEvents;
+ private Boolean confidentialIssuesEvents;
+ private Boolean mergeRequestsEvents;
+ private Boolean tagPushEvents;
+ private Boolean noteEvents;
+ private Boolean confidentialNoteEvents;
+ private Boolean jobEvents;
+ private Boolean pipelineEvents;
+ private Boolean wikiPageEvents;
+ private Boolean deploymentEvents;
+ private Boolean featureFlagEvents;
+ private Boolean releasesEvents;
+ private Boolean subgroupEvents;
+ private Boolean memberEvents;
+ private Boolean enableSslVerification;
+ private String token;
+ private Boolean resourceAccessTokenEvents;
+ private String customWebhookTemplate;
+
+ public GitLabApiForm getForm() {
+
+ return new GitLabApiForm()
+ .withParam("url", url, true)
+ .withParam("name", name)
+ .withParam("description", description)
+ .withParam("push_events", pushEvents)
+ .withParam("push_events_branch_filter", pushEventsBranchFilter)
+ .withParam("branch_filter_strategy", branchFilterStrategy)
+ .withParam("issues_events", issuesEvents)
+ .withParam("confidential_issues_events", confidentialIssuesEvents)
+ .withParam("merge_requests_events", mergeRequestsEvents)
+ .withParam("tag_push_events", tagPushEvents)
+ .withParam("note_events", noteEvents)
+ .withParam("confidential_note_events", confidentialNoteEvents)
+ .withParam("job_events", jobEvents)
+ .withParam("pipeline_events", pipelineEvents)
+ .withParam("wiki_page_events", wikiPageEvents)
+ .withParam("deployment_events", deploymentEvents)
+ .withParam("feature_flag_events", featureFlagEvents)
+ .withParam("releases_events", releasesEvents)
+ .withParam("subgroup_events", subgroupEvents)
+ .withParam("member_events", memberEvents)
+ .withParam("enable_ssl_verification", enableSslVerification)
+ .withParam("token", token)
+ .withParam("resource_access_token_events", resourceAccessTokenEvents)
+ .withParam("custom_webhook_template", customWebhookTemplate);
+ }
+
+ public WebHookParams setBranchFilterStrategy(String branchFilterStrategy) {
+ this.branchFilterStrategy = branchFilterStrategy;
+ return this;
+ }
+
+ public WebHookParams setUrl(String url) {
+ this.url = url;
+ return this;
+ }
+
+ public WebHookParams setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public WebHookParams setDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public WebHookParams setPushEvents(Boolean pushEvents) {
+ this.pushEvents = pushEvents;
+ return this;
+ }
+
+ public WebHookParams setPushEventsBranchFilter(String pushEventsBranchFilter) {
+ this.pushEventsBranchFilter = pushEventsBranchFilter;
+ return this;
+ }
+
+ public WebHookParams setIssuesEvents(Boolean issuesEvents) {
+ this.issuesEvents = issuesEvents;
+ return this;
+ }
+
+ public WebHookParams setConfidentialIssuesEvents(Boolean confidentialIssuesEvents) {
+ this.confidentialIssuesEvents = confidentialIssuesEvents;
+ return this;
+ }
+
+ public WebHookParams setMergeRequestsEvents(Boolean mergeRequestsEvents) {
+ this.mergeRequestsEvents = mergeRequestsEvents;
+ return this;
+ }
+
+ public WebHookParams setTagPushEvents(Boolean tagPushEvents) {
+ this.tagPushEvents = tagPushEvents;
+ return this;
+ }
+
+ public WebHookParams setNoteEvents(Boolean noteEvents) {
+ this.noteEvents = noteEvents;
+ return this;
+ }
+
+ public WebHookParams setConfidentialNoteEvents(Boolean confidentialNoteEvents) {
+ this.confidentialNoteEvents = confidentialNoteEvents;
+ return this;
+ }
+
+ public WebHookParams setJobEvents(Boolean jobEvents) {
+ this.jobEvents = jobEvents;
+ return this;
+ }
+
+ public WebHookParams setPipelineEvents(Boolean pipelineEvents) {
+ this.pipelineEvents = pipelineEvents;
+ return this;
+ }
+
+ public WebHookParams setWikiPageEvents(Boolean wikiPageEvents) {
+ this.wikiPageEvents = wikiPageEvents;
+ return this;
+ }
+
+ public WebHookParams setDeploymentEvents(Boolean deploymentEvents) {
+ this.deploymentEvents = deploymentEvents;
+ return this;
+ }
+
+ public WebHookParams setFeatureFlagEvents(Boolean featureFlagEvents) {
+ this.featureFlagEvents = featureFlagEvents;
+ return this;
+ }
+
+ public WebHookParams setReleasesEvents(Boolean releasesEvents) {
+ this.releasesEvents = releasesEvents;
+ return this;
+ }
+
+ public WebHookParams setSubgroupEvents(Boolean subgroupEvents) {
+ this.subgroupEvents = subgroupEvents;
+ return this;
+ }
+
+ public WebHookParams setMemberEvents(Boolean memberEvents) {
+ this.memberEvents = memberEvents;
+ return this;
+ }
+
+ public WebHookParams setEnableSslVerification(Boolean enableSslVerification) {
+ this.enableSslVerification = enableSslVerification;
+ return this;
+ }
+
+ public WebHookParams setToken(String token) {
+ this.token = token;
+ return this;
+ }
+
+ public WebHookParams setResourceAccessTokenEvents(Boolean resourceAccessTokenEvents) {
+ this.resourceAccessTokenEvents = resourceAccessTokenEvents;
+ return this;
+ }
+
+ public WebHookParams setCustomWebhookTemplate(String customWebhookTemplate) {
+ this.customWebhookTemplate = customWebhookTemplate;
+ return this;
+ }
+}
diff --git a/src/main/java/org/gitlab4j/api/models/Webhook.java b/src/main/java/org/gitlab4j/api/models/Webhook.java
new file mode 100644
index 00000000..4fdb2b95
--- /dev/null
+++ b/src/main/java/org/gitlab4j/api/models/Webhook.java
@@ -0,0 +1,252 @@
+package org.gitlab4j.api.models;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class Webhook implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Long id;
+ private String url;
+ private String name;
+ private String description;
+ private Long groupId;
+ private Boolean pushEvents;
+ private String pushEventsBranchFilter;
+ private String branchFilterStrategy;
+ private Boolean issuesEvents;
+ private Boolean confidentialIssuesEvents;
+ private Boolean mergeRequestsEvents;
+ private Boolean tagPushEvents;
+ private Boolean noteEvents;
+ private Boolean confidentialNoteEvents;
+ private Boolean jobEvents;
+ private Boolean pipelineEvents;
+ private Boolean wikiPageEvents;
+ private Boolean deploymentEvents;
+ private Boolean featureFlagEvents;
+ private Boolean releasesEvents;
+ private Boolean subgroupEvents;
+ private Boolean memberEvents;
+ private Boolean enableSslVerification;
+ private Boolean repositoryUpdateEvents;
+ private Date createdAt;
+ private Boolean resourceAccessTokenEvents;
+ private String customWebhookTemplate;
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Long getGroupId() {
+ return groupId;
+ }
+
+ public void setGroupId(Long groupId) {
+ this.groupId = groupId;
+ }
+
+ public Boolean getPushEvents() {
+ return pushEvents;
+ }
+
+ public void setPushEvents(Boolean pushEvents) {
+ this.pushEvents = pushEvents;
+ }
+
+ public String getPushEventsBranchFilter() {
+ return pushEventsBranchFilter;
+ }
+
+ public void setPushEventsBranchFilter(String pushEventsBranchFilter) {
+ this.pushEventsBranchFilter = pushEventsBranchFilter;
+ }
+
+ public String getBranchFilterStrategy() {
+ return branchFilterStrategy;
+ }
+
+ public void setBranchFilterStrategy(String branchFilterStrategy) {
+ this.branchFilterStrategy = branchFilterStrategy;
+ }
+
+ public Boolean getIssuesEvents() {
+ return issuesEvents;
+ }
+
+ public void setIssuesEvents(Boolean issuesEvents) {
+ this.issuesEvents = issuesEvents;
+ }
+
+ public Boolean getConfidentialIssuesEvents() {
+ return confidentialIssuesEvents;
+ }
+
+ public void setConfidentialIssuesEvents(Boolean confidentialIssuesEvents) {
+ this.confidentialIssuesEvents = confidentialIssuesEvents;
+ }
+
+ public Boolean getMergeRequestsEvents() {
+ return mergeRequestsEvents;
+ }
+
+ public void setMergeRequestsEvents(Boolean mergeRequestsEvents) {
+ this.mergeRequestsEvents = mergeRequestsEvents;
+ }
+
+ public Boolean getTagPushEvents() {
+ return tagPushEvents;
+ }
+
+ public void setTagPushEvents(Boolean tagPushEvents) {
+ this.tagPushEvents = tagPushEvents;
+ }
+
+ public Boolean getNoteEvents() {
+ return noteEvents;
+ }
+
+ public void setNoteEvents(Boolean noteEvents) {
+ this.noteEvents = noteEvents;
+ }
+
+ public Boolean getConfidentialNoteEvents() {
+ return confidentialNoteEvents;
+ }
+
+ public void setConfidentialNoteEvents(Boolean confidentialNoteEvents) {
+ this.confidentialNoteEvents = confidentialNoteEvents;
+ }
+
+ public Boolean getJobEvents() {
+ return jobEvents;
+ }
+
+ public void setJobEvents(Boolean jobEvents) {
+ this.jobEvents = jobEvents;
+ }
+
+ public Boolean getPipelineEvents() {
+ return pipelineEvents;
+ }
+
+ public void setPipelineEvents(Boolean pipelineEvents) {
+ this.pipelineEvents = pipelineEvents;
+ }
+
+ public Boolean getWikiPageEvents() {
+ return wikiPageEvents;
+ }
+
+ public void setWikiPageEvents(Boolean wikiPageEvents) {
+ this.wikiPageEvents = wikiPageEvents;
+ }
+
+ public Boolean getDeploymentEvents() {
+ return deploymentEvents;
+ }
+
+ public void setDeploymentEvents(Boolean deploymentEvents) {
+ this.deploymentEvents = deploymentEvents;
+ }
+
+ public Boolean getFeatureFlagEvents() {
+ return featureFlagEvents;
+ }
+
+ public void setFeatureFlagEvents(Boolean featureFlagEvents) {
+ this.featureFlagEvents = featureFlagEvents;
+ }
+
+ public Boolean getReleasesEvents() {
+ return releasesEvents;
+ }
+
+ public void setReleasesEvents(Boolean releasesEvents) {
+ this.releasesEvents = releasesEvents;
+ }
+
+ public Boolean getSubgroupEvents() {
+ return subgroupEvents;
+ }
+
+ public void setSubgroupEvents(Boolean subgroupEvents) {
+ this.subgroupEvents = subgroupEvents;
+ }
+
+ public Boolean getMemberEvents() {
+ return memberEvents;
+ }
+
+ public void setMemberEvents(Boolean memberEvents) {
+ this.memberEvents = memberEvents;
+ }
+
+ public Boolean getEnableSslVerification() {
+ return enableSslVerification;
+ }
+
+ public void setEnableSslVerification(Boolean enableSslVerification) {
+ this.enableSslVerification = enableSslVerification;
+ }
+
+ public Boolean getRepositoryUpdateEvents() {
+ return repositoryUpdateEvents;
+ }
+
+ public void setRepositoryUpdateEvents(Boolean repositoryUpdateEvents) {
+ this.repositoryUpdateEvents = repositoryUpdateEvents;
+ }
+
+ public Date getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(Date createdAt) {
+ this.createdAt = createdAt;
+ }
+
+ public Boolean getResourceAccessTokenEvents() {
+ return resourceAccessTokenEvents;
+ }
+
+ public void setResourceAccessTokenEvents(Boolean resourceAccessTokenEvents) {
+ this.resourceAccessTokenEvents = resourceAccessTokenEvents;
+ }
+
+ public String getCustomWebhookTemplate() {
+ return customWebhookTemplate;
+ }
+
+ public void setCustomWebhookTemplate(String customWebhookTemplate) {
+ this.customWebhookTemplate = customWebhookTemplate;
+ }
+}
diff --git a/src/test/java/org/gitlab4j/api/TestGroupApi.java b/src/test/java/org/gitlab4j/api/TestGroupApi.java
index c4e236dc..d2955609 100644
--- a/src/test/java/org/gitlab4j/api/TestGroupApi.java
+++ b/src/test/java/org/gitlab4j/api/TestGroupApi.java
@@ -25,6 +25,8 @@
import org.gitlab4j.api.models.GroupParams;
import org.gitlab4j.api.models.Member;
import org.gitlab4j.api.models.User;
+import org.gitlab4j.api.models.WebHookParams;
+import org.gitlab4j.api.models.Webhook;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
@@ -358,4 +360,41 @@ public void updateGroup() throws GitLabApiException {
assertEquals(testGroup.getId(), optional.get().getId());
assertEquals(description, optional.get().getDescription());
}
+
+ @Test
+ public void addGroupHook() throws GitLabApiException {
+ // Given
+ WebHookParams webHookParams = new WebHookParams();
+ webHookParams
+ .setUrl("")
+ .setName("My Webhook")
+ .setDescription("")
+ .setBranchFilterStrategy("")
+ .setConfidentialIssuesEvents(true)
+ .setIssuesEvents(true)
+ .setConfidentialNoteEvents(true)
+ .setEnableSslVerification(true)
+ .setFeatureFlagEvents(true)
+ .setPushEvents(true)
+ .setJobEvents(true)
+ .setToken("token")
+ .setSubgroupEvents(true)
+ .setWikiPageEvents(true)
+ .setTagPushEvents(true)
+ .setReleasesEvents(true)
+ .setMemberEvents(true)
+ .setResourceAccessTokenEvents(true)
+ .setDeploymentEvents(true)
+ .setPipelineEvents(true)
+ .setNoteEvents(true)
+ .setMergeRequestsEvents(true)
+ .setPushEventsBranchFilter("wildcard")
+ .setCustomWebhookTemplate("{\"event\":\"{{object_kind}}\"}");
+
+ // When
+ Webhook createdWebhook = gitLabApi.getGroupApi().addWebhook(testGroup.getId(), webHookParams);
+
+ // Then
+ assertEquals("My Webhook", createdWebhook.getName());
+ }
}