Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
佳 邓
Gitlab4j Api
Commits
a7991ddc
Unverified
Commit
a7991ddc
authored
Nov 15, 2021
by
Gautier de Saint Martin Lacaze
Committed by
GitHub
Nov 15, 2021
Browse files
Merge pull request #765 from tubbynl/feature/webhook-releases-and-deployments
Webhook support for Release and Deployment events
parents
de4e5aa2
e388f9ae
Changes
9
Hide whitespace changes
Inline
Side-by-side
src/main/java/org/gitlab4j/api/ProjectApi.java
View file @
a7991ddc
...
@@ -2080,6 +2080,7 @@ public class ProjectApi extends AbstractApi implements Constants {
...
@@ -2080,6 +2080,7 @@ public class ProjectApi extends AbstractApi implements Constants {
.
withParam
(
"repository_update_events"
,
enabledHooks
.
getRepositoryUpdateEvents
(),
false
)
.
withParam
(
"repository_update_events"
,
enabledHooks
.
getRepositoryUpdateEvents
(),
false
)
.
withParam
(
"deployment_events"
,
enabledHooks
.
getDeploymentEvents
(),
false
)
.
withParam
(
"deployment_events"
,
enabledHooks
.
getDeploymentEvents
(),
false
)
.
withParam
(
"releases_events"
,
enabledHooks
.
getReleasesEvents
(),
false
)
.
withParam
(
"releases_events"
,
enabledHooks
.
getReleasesEvents
(),
false
)
.
withParam
(
"deployment_events"
,
enabledHooks
.
getDeploymentEvents
(),
false
)
.
withParam
(
"token"
,
secretToken
,
false
);
.
withParam
(
"token"
,
secretToken
,
false
);
Response
response
=
post
(
Response
.
Status
.
CREATED
,
formData
,
"projects"
,
getProjectIdOrPath
(
projectIdOrPath
),
"hooks"
);
Response
response
=
post
(
Response
.
Status
.
CREATED
,
formData
,
"projects"
,
getProjectIdOrPath
(
projectIdOrPath
),
"hooks"
);
return
(
response
.
readEntity
(
ProjectHook
.
class
));
return
(
response
.
readEntity
(
ProjectHook
.
class
));
...
@@ -2151,14 +2152,20 @@ public class ProjectApi extends AbstractApi implements Constants {
...
@@ -2151,14 +2152,20 @@ public class ProjectApi extends AbstractApi implements Constants {
GitLabApiForm
formData
=
new
GitLabApiForm
()
GitLabApiForm
formData
=
new
GitLabApiForm
()
.
withParam
(
"url"
,
hook
.
getUrl
(),
true
)
.
withParam
(
"url"
,
hook
.
getUrl
(),
true
)
.
withParam
(
"push_events"
,
hook
.
getPushEvents
(),
false
)
.
withParam
(
"push_events"
,
hook
.
getPushEvents
(),
false
)
.
withParam
(
"push_events_branch_filter"
,
hook
.
getPushEventsBranchFilter
(),
false
)
.
withParam
(
"issues_events"
,
hook
.
getIssuesEvents
(),
false
)
.
withParam
(
"issues_events"
,
hook
.
getIssuesEvents
(),
false
)
.
withParam
(
"confidential_issues_events"
,
hook
.
getConfidentialIssuesEvents
(),
false
)
.
withParam
(
"merge_requests_events"
,
hook
.
getMergeRequestsEvents
(),
false
)
.
withParam
(
"merge_requests_events"
,
hook
.
getMergeRequestsEvents
(),
false
)
.
withParam
(
"tag_push_events"
,
hook
.
getTagPushEvents
(),
false
)
.
withParam
(
"tag_push_events"
,
hook
.
getTagPushEvents
(),
false
)
.
withParam
(
"note_events"
,
hook
.
getNoteEvents
(),
false
)
.
withParam
(
"note_events"
,
hook
.
getNoteEvents
(),
false
)
.
withParam
(
"confidential_note_events"
,
hook
.
getConfidentialNoteEvents
(),
false
)
.
withParam
(
"job_events"
,
hook
.
getJobEvents
(),
false
)
.
withParam
(
"job_events"
,
hook
.
getJobEvents
(),
false
)
.
withParam
(
"pipeline_events"
,
hook
.
getPipelineEvents
(),
false
)
.
withParam
(
"pipeline_events"
,
hook
.
getPipelineEvents
(),
false
)
.
withParam
(
"wiki_page_events"
,
hook
.
getWikiPageEvents
(),
false
)
.
withParam
(
"wiki_page_events"
,
hook
.
getWikiPageEvents
(),
false
)
.
withParam
(
"enable_ssl_verification"
,
hook
.
getEnableSslVerification
(),
false
)
.
withParam
(
"enable_ssl_verification"
,
hook
.
getEnableSslVerification
(),
false
)
.
withParam
(
"repository_update_events"
,
hook
.
getRepositoryUpdateEvents
(),
false
)
.
withParam
(
"releases_events"
,
hook
.
getReleasesEvents
(),
false
)
.
withParam
(
"deployment_events"
,
hook
.
getDeploymentEvents
(),
false
)
.
withParam
(
"token"
,
hook
.
getToken
(),
false
);
.
withParam
(
"token"
,
hook
.
getToken
(),
false
);
Response
response
=
put
(
Response
.
Status
.
OK
,
formData
.
asMap
(),
"projects"
,
hook
.
getProjectId
(),
"hooks"
,
hook
.
getId
());
Response
response
=
put
(
Response
.
Status
.
OK
,
formData
.
asMap
(),
"projects"
,
hook
.
getProjectId
(),
"hooks"
,
hook
.
getId
());
...
...
src/main/java/org/gitlab4j/api/webhook/DeploymentEvent.java
0 → 100644
View file @
a7991ddc
package
org.gitlab4j.api.webhook
;
import
org.gitlab4j.api.models.User
;
import
org.gitlab4j.api.utils.JacksonJson
;
public
class
DeploymentEvent
extends
AbstractEvent
{
public
static
final
String
X_GITLAB_EVENT
=
"Deployment Hook"
;
public
static
final
String
OBJECT_KIND
=
"deployment"
;
private
String
status
;
private
String
statusChangedAt
;
private
Integer
deployableId
;
private
String
deployableUrl
;
private
String
environment
;
private
EventProject
project
;
private
String
shortSha
;
private
User
user
;
private
String
userUrl
;
private
String
commitUrl
;
private
String
commitTitle
;
public
String
getObjectKind
()
{
return
(
OBJECT_KIND
);
}
public
void
setObjectKind
(
String
objectKind
)
{
if
(!
OBJECT_KIND
.
equals
(
objectKind
))
throw
new
RuntimeException
(
"Invalid object_kind ("
+
objectKind
+
"), must be '"
+
OBJECT_KIND
+
"'"
);
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
public
String
getStatusChangedAt
()
{
return
statusChangedAt
;
}
public
void
setStatusChangedAt
(
String
statusChangedAt
)
{
this
.
statusChangedAt
=
statusChangedAt
;
}
public
Integer
getDeployableId
()
{
return
deployableId
;
}
public
void
setDeployableId
(
Integer
deployableId
)
{
this
.
deployableId
=
deployableId
;
}
public
String
getDeployableUrl
()
{
return
deployableUrl
;
}
public
void
setDeployableUrl
(
String
deployableUrl
)
{
this
.
deployableUrl
=
deployableUrl
;
}
public
String
getEnvironment
()
{
return
environment
;
}
public
void
setEnvironment
(
String
environment
)
{
this
.
environment
=
environment
;
}
public
EventProject
getProject
()
{
return
project
;
}
public
void
setProject
(
EventProject
project
)
{
this
.
project
=
project
;
}
public
String
getShortSha
()
{
return
shortSha
;
}
public
void
setShortSha
(
String
shortSha
)
{
this
.
shortSha
=
shortSha
;
}
public
User
getUser
()
{
return
user
;
}
public
void
setUser
(
User
user
)
{
this
.
user
=
user
;
}
public
String
getUserUrl
()
{
return
userUrl
;
}
public
void
setUserUrl
(
String
userUrl
)
{
this
.
userUrl
=
userUrl
;
}
public
String
getCommitUrl
()
{
return
commitUrl
;
}
public
void
setCommitUrl
(
String
commitUrl
)
{
this
.
commitUrl
=
commitUrl
;
}
public
String
getCommitTitle
()
{
return
commitTitle
;
}
public
void
setCommitTitle
(
String
commitTitle
)
{
this
.
commitTitle
=
commitTitle
;
}
@Override
public
String
toString
()
{
return
(
JacksonJson
.
toJsonString
(
this
));
}
}
src/main/java/org/gitlab4j/api/webhook/Event.java
View file @
a7991ddc
...
@@ -17,7 +17,9 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
...
@@ -17,7 +17,9 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonSubTypes
.
Type
(
value
=
PipelineEvent
.
class
,
name
=
PipelineEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
PipelineEvent
.
class
,
name
=
PipelineEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
PushEvent
.
class
,
name
=
PushEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
PushEvent
.
class
,
name
=
PushEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
TagPushEvent
.
class
,
name
=
TagPushEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
TagPushEvent
.
class
,
name
=
TagPushEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
WikiPageEvent
.
class
,
name
=
WikiPageEvent
.
OBJECT_KIND
)
@JsonSubTypes
.
Type
(
value
=
WikiPageEvent
.
class
,
name
=
WikiPageEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
DeploymentEvent
.
class
,
name
=
DeploymentEvent
.
OBJECT_KIND
),
@JsonSubTypes
.
Type
(
value
=
ReleaseEvent
.
class
,
name
=
ReleaseEvent
.
OBJECT_KIND
)
})
})
public
interface
Event
{
public
interface
Event
{
String
getObjectKind
();
String
getObjectKind
();
...
...
src/main/java/org/gitlab4j/api/webhook/EventReleaseAssets.java
0 → 100644
View file @
a7991ddc
package
org.gitlab4j.api.webhook
;
import
org.gitlab4j.api.utils.JacksonJson
;
import
java.util.List
;
public
class
EventReleaseAssets
{
private
Integer
count
;
private
List
<
EventReleaseLink
>
links
;
private
List
<
EventReleaseSource
>
sources
;
public
Integer
getCount
()
{
return
count
;
}
public
void
setCount
(
Integer
count
)
{
this
.
count
=
count
;
}
public
List
<
EventReleaseLink
>
getLinks
()
{
return
links
;
}
public
void
setLinks
(
List
<
EventReleaseLink
>
links
)
{
this
.
links
=
links
;
}
public
List
<
EventReleaseSource
>
getSources
()
{
return
sources
;
}
public
void
setSources
(
List
<
EventReleaseSource
>
sources
)
{
this
.
sources
=
sources
;
}
@Override
public
String
toString
()
{
return
(
JacksonJson
.
toJsonString
(
this
));
}
}
src/main/java/org/gitlab4j/api/webhook/EventReleaseLink.java
0 → 100644
View file @
a7991ddc
package
org.gitlab4j.api.webhook
;
import
org.gitlab4j.api.utils.JacksonJson
;
public
class
EventReleaseLink
{
private
Integer
id
;
private
Boolean
external
;
private
String
linkType
;
private
String
name
;
private
String
url
;
public
Integer
getId
()
{
return
id
;
}
public
void
setId
(
final
Integer
id
)
{
this
.
id
=
id
;
}
public
Boolean
getExternal
()
{
return
external
;
}
public
void
setExternal
(
final
Boolean
external
)
{
this
.
external
=
external
;
}
public
String
getLinkType
()
{
return
linkType
;
}
public
void
setLinkType
(
final
String
linkType
)
{
this
.
linkType
=
linkType
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
final
String
name
)
{
this
.
name
=
name
;
}
public
String
getUrl
()
{
return
url
;
}
public
void
setUrl
(
final
String
url
)
{
this
.
url
=
url
;
}
@Override
public
String
toString
()
{
return
(
JacksonJson
.
toJsonString
(
this
));
}
}
src/main/java/org/gitlab4j/api/webhook/EventReleaseSource.java
0 → 100644
View file @
a7991ddc
package
org.gitlab4j.api.webhook
;
import
org.gitlab4j.api.utils.JacksonJson
;
public
class
EventReleaseSource
{
private
String
format
;
private
String
url
;
public
String
getFormat
()
{
return
format
;
}
public
void
setFormat
(
final
String
format
)
{
this
.
format
=
format
;
}
public
String
getUrl
()
{
return
url
;
}
public
void
setUrl
(
final
String
url
)
{
this
.
url
=
url
;
}
@Override
public
String
toString
()
{
return
(
JacksonJson
.
toJsonString
(
this
));
}
}
src/main/java/org/gitlab4j/api/webhook/ReleaseEvent.java
0 → 100644
View file @
a7991ddc
package
org.gitlab4j.api.webhook
;
import
org.gitlab4j.api.utils.JacksonJson
;
public
class
ReleaseEvent
extends
AbstractEvent
{
public
static
final
String
X_GITLAB_EVENT
=
"Release Hook"
;
public
static
final
String
OBJECT_KIND
=
"release"
;
private
Integer
id
;
private
String
createdAt
;
private
String
description
;
private
String
name
;
private
String
releasedAt
;
private
String
tag
;
private
EventProject
project
;
private
String
url
;
private
String
action
;
private
EventReleaseAssets
assets
;
private
EventCommit
commit
;
public
String
getObjectKind
()
{
return
(
OBJECT_KIND
);
}
public
void
setObjectKind
(
String
objectKind
)
{
if
(!
OBJECT_KIND
.
equals
(
objectKind
))
throw
new
RuntimeException
(
"Invalid object_kind ("
+
objectKind
+
"), must be '"
+
OBJECT_KIND
+
"'"
);
}
public
Integer
getId
()
{
return
id
;
}
public
void
setId
(
final
Integer
id
)
{
this
.
id
=
id
;
}
public
String
getCreatedAt
()
{
return
createdAt
;
}
public
void
setCreatedAt
(
final
String
createdAt
)
{
this
.
createdAt
=
createdAt
;
}
public
String
getDescription
()
{
return
description
;
}
public
void
setDescription
(
final
String
description
)
{
this
.
description
=
description
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
final
String
name
)
{
this
.
name
=
name
;
}
public
String
getReleasedAt
()
{
return
releasedAt
;
}
public
void
setReleasedAt
(
final
String
releasedAt
)
{
this
.
releasedAt
=
releasedAt
;
}
public
String
getTag
()
{
return
tag
;
}
public
void
setTag
(
final
String
tag
)
{
this
.
tag
=
tag
;
}
public
EventProject
getProject
()
{
return
project
;
}
public
void
setProject
(
final
EventProject
project
)
{
this
.
project
=
project
;
}
public
String
getUrl
()
{
return
url
;
}
public
void
setUrl
(
final
String
url
)
{
this
.
url
=
url
;
}
public
String
getAction
()
{
return
action
;
}
public
void
setAction
(
final
String
action
)
{
this
.
action
=
action
;
}
public
EventReleaseAssets
getAssets
()
{
return
assets
;
}
public
void
setAssets
(
final
EventReleaseAssets
assets
)
{
this
.
assets
=
assets
;
}
public
EventCommit
getCommit
()
{
return
commit
;
}
public
void
setCommit
(
final
EventCommit
commit
)
{
this
.
commit
=
commit
;
}
@Override
public
String
toString
()
{
return
(
JacksonJson
.
toJsonString
(
this
));
}
}
src/main/java/org/gitlab4j/api/webhook/WebHookListener.java
View file @
a7991ddc
...
@@ -78,4 +78,23 @@ public interface WebHookListener extends java.util.EventListener {
...
@@ -78,4 +78,23 @@ public interface WebHookListener extends java.util.EventListener {
*/
*/
default
void
onWikiPageEvent
(
WikiPageEvent
wikiEvent
)
{
default
void
onWikiPageEvent
(
WikiPageEvent
wikiEvent
)
{
}
}
/**
* This method is called when a WebHook deployment event has been received.
*
* @param deploymentEvent the DeploymentEvent instance
*/
default
void
onDeploymentEvent
(
DeploymentEvent
deploymentEvent
)
{
}
/**
* This method is called when a WebHook release event has been received.
*
* @param releaseEvent the ReleaseEvent instance
*/
default
void
onReleaseEvent
(
ReleaseEvent
releaseEvent
)
{
}
}
}
src/main/java/org/gitlab4j/api/webhook/WebHookManager.java
View file @
a7991ddc
...
@@ -36,7 +36,7 @@ public class WebHookManager implements HookManager {
...
@@ -36,7 +36,7 @@ public class WebHookManager implements HookManager {
/**
/**
* Create a HookManager to handle GitLab webhook events which will be verified
* Create a HookManager to handle GitLab webhook events which will be verified
* against the specified secretToken.
* against the specified secretToken.
*
*
* @param secretToken the secret token to verify against
* @param secretToken the secret token to verify against
*/
*/
public
WebHookManager
(
String
secretToken
)
{
public
WebHookManager
(
String
secretToken
)
{
...
@@ -64,7 +64,7 @@ public class WebHookManager implements HookManager {
...
@@ -64,7 +64,7 @@ public class WebHookManager implements HookManager {
/**
/**
* Parses and verifies an Event instance from the HTTP request and
* Parses and verifies an Event instance from the HTTP request and
* fires it off to the registered listeners.
* fires it off to the registered listeners.
*
*
* @param request the HttpServletRequest to read the Event instance from
* @param request the HttpServletRequest to read the Event instance from
* @throws GitLabApiException if the parsed event is not supported
* @throws GitLabApiException if the parsed event is not supported
*/
*/
...
@@ -106,6 +106,8 @@ public class WebHookManager implements HookManager {
...
@@ -106,6 +106,8 @@ public class WebHookManager implements HookManager {
case
PushEvent
.
X_GITLAB_EVENT
:
case
PushEvent
.
X_GITLAB_EVENT
:
case
TagPushEvent
.
X_GITLAB_EVENT
:
case
TagPushEvent
.
X_GITLAB_EVENT
:
case
WikiPageEvent
.
X_GITLAB_EVENT
:
case
WikiPageEvent
.
X_GITLAB_EVENT
:
case
DeploymentEvent
.
X_GITLAB_EVENT
:
case
ReleaseEvent
.
X_GITLAB_EVENT
:
break
;
break
;
default
:
default
:
...
@@ -154,7 +156,7 @@ public class WebHookManager implements HookManager {
...
@@ -154,7 +156,7 @@ public class WebHookManager implements HookManager {
/**
/**
* Verifies the provided Event and fires it off to the registered listeners.
* Verifies the provided Event and fires it off to the registered listeners.
*
*
* @param event the Event instance to handle
* @param event the Event instance to handle
* @throws GitLabApiException if the event is not supported
* @throws GitLabApiException if the event is not supported
*/
*/
...
@@ -172,6 +174,8 @@ public class WebHookManager implements HookManager {
...
@@ -172,6 +174,8 @@ public class WebHookManager implements HookManager {
case
PushEvent
.
OBJECT_KIND
:
case
PushEvent
.
OBJECT_KIND
:
case
TagPushEvent
.
OBJECT_KIND
:
case
TagPushEvent
.
OBJECT_KIND
:
case
WikiPageEvent
.
OBJECT_KIND
:
case
WikiPageEvent
.
OBJECT_KIND
:
case
ReleaseEvent
.
OBJECT_KIND
:
case
DeploymentEvent
.
OBJECT_KIND
:
fireEvent
(
event
);
fireEvent
(
event
);
break
;
break
;
...
@@ -205,7 +209,7 @@ public class WebHookManager implements HookManager {
...
@@ -205,7 +209,7 @@ public class WebHookManager implements HookManager {
/**
/**
* Fire the event to the registered listeners.
* Fire the event to the registered listeners.
*
*
* @param event the Event instance to fire to the registered event listeners
* @param event the Event instance to fire to the registered event listeners
* @throws GitLabApiException if the event is not supported
* @throws GitLabApiException if the event is not supported
*/
*/
...
@@ -248,6 +252,14 @@ public class WebHookManager implements HookManager {
...
@@ -248,6 +252,14 @@ public class WebHookManager implements HookManager {
fireWikiPageEvent
((
WikiPageEvent
)
event
);
fireWikiPageEvent
((
WikiPageEvent
)
event
);
break
;
break
;
case
ReleaseEvent
.
OBJECT_KIND
:
fireReleaseEvent
((
ReleaseEvent
)
event
);
break
;
case
DeploymentEvent
.
OBJECT_KIND
:
fireDeploymentEvent
((
DeploymentEvent
)
event
);
break
;
default
:
default
:
String
message
=
"Unsupported event object_kind, object_kind="
+
event
.
getObjectKind
();
String
message
=
"Unsupported event object_kind, object_kind="
+
event
.
getObjectKind
();
LOGGER
.
warning
(
message
);
LOGGER
.
warning
(
message
);
...
@@ -308,4 +320,16 @@ public class WebHookManager implements HookManager {
...
@@ -308,4 +320,16 @@ public class WebHookManager implements HookManager {
listener
.
onWikiPageEvent
(
wikiPageEvent
);
listener
.
onWikiPageEvent
(
wikiPageEvent
);
}
}
}
}
protected
void
fireDeploymentEvent
(
DeploymentEvent
deploymentEvent
)
{
for
(
WebHookListener
listener
:
webhookListeners
)
{
listener
.
onDeploymentEvent
(
deploymentEvent
);
}
}
protected
void
fireReleaseEvent
(
ReleaseEvent
releaseEvent
)
{
for
(
WebHookListener
listener
:
webhookListeners
)
{
listener
.
onReleaseEvent
(
releaseEvent
);
}
}
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment