Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for workflow_job event payload #1462

Merged
merged 1 commit into from Jun 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/main/java/org/kohsuke/github/GHEventPayload.java
Expand Up @@ -1506,6 +1506,43 @@ void lateBind() {
}
}

/**
* A workflow job has been queued, is in progress, or has been completed.
*
* @see <a href=
* "https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#workflow_job">
* workflow job event</a>
* @see <a href="https://docs.github.com/en/rest/reference/actions#workflow-jobs">Actions Workflow Jobs</a>
*/
public static class WorkflowJob extends GHEventPayload {

private GHWorkflowJob workflowJob;

/**
* Gets the workflow job.
*
* @return the workflow job
*/
@SuppressFBWarnings(value = { "EI_EXPOSE_REP" }, justification = "Expected")
public GHWorkflowJob getWorkflowJob() {
return workflowJob;
}

@Override
void lateBind() {
if (workflowJob == null) {
throw new IllegalStateException(
"Expected workflow_job payload, but got something else. Maybe we've got another type of event?");
}
super.lateBind();
GHRepository repository = getRepository();
if (repository == null) {
throw new IllegalStateException("Repository must not be null");
}
workflowJob.wrapUp(repository);
}
}

/**
* A label was created, edited or deleted.
*
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/org/kohsuke/github/GHWorkflowJob.java
Expand Up @@ -35,6 +35,7 @@ public class GHWorkflowJob extends GHObject {
private String conclusion;

private long runId;
private int runAttempt;

private String htmlUrl;
private String checkRunUrl;
Expand Down Expand Up @@ -108,6 +109,15 @@ public long getRunId() {
return runId;
}

/**
* Attempt number of the associated workflow run, 1 for first attempt and higher if the workflow was re-run.
*
* @return attempt number
*/
public int getRunAttempt() {
return runAttempt;
}

@Override
public URL getHtmlUrl() {
return GitHubClient.parseURL(htmlUrl);
Expand Down
48 changes: 46 additions & 2 deletions src/test/java/org/kohsuke/github/GHEventPayloadTest.java
Expand Up @@ -11,7 +11,18 @@
import java.util.List;
import java.util.TimeZone;

import static org.hamcrest.Matchers.*;
import static org.hamcrest.Matchers.aMapWithSize;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.hasToString;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.lessThanOrEqualTo;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.Matchers.sameInstance;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertThrows;

public class GHEventPayloadTest extends AbstractGitHubWireMockTest {
Expand Down Expand Up @@ -876,7 +887,6 @@ public void workflow_run_pull_request() throws Exception {
GHPullRequest pullRequest = pullRequests.get(0);
assertThat(pullRequest.getId(), is(599098265L));
assertThat(pullRequest.getRepository(), sameInstance(workflowRunPayload.getRepository()));

}

@Test
Expand All @@ -892,6 +902,40 @@ public void workflow_run_other_repository() throws Exception {
assertThat(workflowRunPayload.getWorkflow().getRepository(), sameInstance(workflowRunPayload.getRepository()));
}

@Test
public void workflow_job() throws Exception {
final GHEventPayload.WorkflowJob workflowJobPayload = GitHub.offline()
.parseEventPayload(payload.asReader(), GHEventPayload.WorkflowJob.class);

assertThat(workflowJobPayload.getAction(), is("completed"));
assertThat(workflowJobPayload.getRepository().getFullName(), is("gsmet/quarkus-bot-java-playground"));
assertThat(workflowJobPayload.getSender().getLogin(), is("gsmet"));

GHWorkflowJob workflowJob = workflowJobPayload.getWorkflowJob();
assertThat(workflowJob.getId(), is(6653410527L));
assertThat(workflowJob.getRunId(), is(2408553341L));
assertThat(workflowJob.getRunAttempt(), is(1));
assertThat(workflowJob.getUrl().toString(),
is("https://api.github.com/repos/gsmet/quarkus-bot-java-playground/actions/jobs/6653410527"));
assertThat(workflowJob.getHtmlUrl().toString(),
is("https://github.com/gsmet/quarkus-bot-java-playground/runs/6653410527?check_suite_focus=true"));
assertThat(workflowJob.getNodeId(), is("CR_kwDOEq3cwc8AAAABjJL83w"));
assertThat(workflowJob.getHeadSha(), is("5dd2dadfbdc2a722c08a8ad42ae4e26e3e731042"));
assertThat(workflowJob.getStatus(), is(GHWorkflowRun.Status.COMPLETED));
assertThat(workflowJob.getConclusion(), is(GHWorkflowRun.Conclusion.FAILURE));
assertThat(workflowJob.getStartedAt().getTime(), is(1653908125000L));
assertThat(workflowJob.getCompletedAt().getTime(), is(1653908157000L));
assertThat(workflowJob.getName(), is("JVM Tests - JDK JDK16"));
assertThat(workflowJob.getSteps(),
contains(hasProperty("name", is("Set up job")),
hasProperty("name", is("Run actions/checkout@v2")),
hasProperty("name", is("Build with Maven")),
hasProperty("name", is("Post Run actions/checkout@v2")),
hasProperty("name", is("Complete job"))));
assertThat(workflowJob.getCheckRunUrl().toString(),
is("https://api.github.com/repos/gsmet/quarkus-bot-java-playground/check-runs/6653410527"));
}

@Test
public void label_created() throws Exception {
final GHEventPayload.Label labelPayload = GitHub.offline()
Expand Down
@@ -0,0 +1,190 @@
{
"action": "completed",
"workflow_job": {
"id": 6653410527,
"run_id": 2408553341,
"run_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/actions/runs/2408553341",
"run_attempt": 1,
"node_id": "CR_kwDOEq3cwc8AAAABjJL83w",
"head_sha": "5dd2dadfbdc2a722c08a8ad42ae4e26e3e731042",
"url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/actions/jobs/6653410527",
"html_url": "https://github.com/gsmet/quarkus-bot-java-playground/runs/6653410527?check_suite_focus=true",
"status": "completed",
"conclusion": "failure",
"started_at": "2022-05-30T10:55:25Z",
"completed_at": "2022-05-30T10:55:57Z",
"name": "JVM Tests - JDK JDK16",
"steps": [
{
"name": "Set up job",
"status": "completed",
"conclusion": "success",
"number": 1,
"started_at": "2022-05-30T10:55:25.000Z",
"completed_at": "2022-05-30T10:55:27.000Z"
},
{
"name": "Run actions/checkout@v2",
"status": "completed",
"conclusion": "success",
"number": 2,
"started_at": "2022-05-30T10:55:27.000Z",
"completed_at": "2022-05-30T10:55:27.000Z"
},
{
"name": "Build with Maven",
"status": "completed",
"conclusion": "failure",
"number": 4,
"started_at": "2022-05-30T10:55:35.000Z",
"completed_at": "2022-05-30T10:55:55.000Z"
},
{
"name": "Post Run actions/checkout@v2",
"status": "completed",
"conclusion": "success",
"number": 10,
"started_at": "2022-05-30T10:55:55.000Z",
"completed_at": "2022-05-30T10:55:56.000Z"
},
{
"name": "Complete job",
"status": "completed",
"conclusion": "success",
"number": 11,
"started_at": "2022-05-30T10:55:56.000Z",
"completed_at": "2022-05-30T10:55:56.000Z"
}
],
"check_run_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/check-runs/6653410527",
"labels": [
"ubuntu-latest"
],
"runner_id": 10,
"runner_name": "GitHub Actions 10",
"runner_group_id": 2,
"runner_group_name": "GitHub Actions"
},
"repository": {
"id": 313384129,
"node_id": "MDEwOlJlcG9zaXRvcnkzMTMzODQxMjk=",
"name": "quarkus-bot-java-playground",
"full_name": "gsmet/quarkus-bot-java-playground",
"private": false,
"owner": {
"login": "gsmet",
"id": 1279749,
"node_id": "MDQ6VXNlcjEyNzk3NDk=",
"avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/gsmet",
"html_url": "https://github.com/gsmet",
"followers_url": "https://api.github.com/users/gsmet/followers",
"following_url": "https://api.github.com/users/gsmet/following{/other_user}",
"gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
"starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
"organizations_url": "https://api.github.com/users/gsmet/orgs",
"repos_url": "https://api.github.com/users/gsmet/repos",
"events_url": "https://api.github.com/users/gsmet/events{/privacy}",
"received_events_url": "https://api.github.com/users/gsmet/received_events",
"type": "User",
"site_admin": false
},
"html_url": "https://github.com/gsmet/quarkus-bot-java-playground",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground",
"forks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/forks",
"keys_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/teams",
"hooks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/hooks",
"issue_events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/events{/number}",
"events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/events",
"assignees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/assignees{/user}",
"branches_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/branches{/branch}",
"tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/tags",
"blobs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/statuses/{sha}",
"languages_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/languages",
"stargazers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/stargazers",
"contributors_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contributors",
"subscribers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscribers",
"subscription_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscription",
"commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contents/{+path}",
"compare_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/merges",
"archive_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/downloads",
"issues_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues{/number}",
"pulls_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/pulls{/number}",
"milestones_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/milestones{/number}",
"notifications_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/labels{/name}",
"releases_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/releases{/id}",
"deployments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/deployments",
"created_at": "2020-11-16T17:55:53Z",
"updated_at": "2021-12-22T17:20:52Z",
"pushed_at": "2022-05-30T10:55:11Z",
"git_url": "git://github.com/gsmet/quarkus-bot-java-playground.git",
"ssh_url": "git@github.com:gsmet/quarkus-bot-java-playground.git",
"clone_url": "https://github.com/gsmet/quarkus-bot-java-playground.git",
"svn_url": "https://github.com/gsmet/quarkus-bot-java-playground",
"homepage": null,
"size": 88,
"stargazers_count": 0,
"watchers_count": 0,
"language": "Java",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 2,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 36,
"license": null,
"allow_forking": true,
"is_template": false,
"topics": [],
"visibility": "public",
"forks": 2,
"open_issues": 36,
"watchers": 0,
"default_branch": "main"
},
"sender": {
"login": "gsmet",
"id": 1279749,
"node_id": "MDQ6VXNlcjEyNzk3NDk=",
"avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/gsmet",
"html_url": "https://github.com/gsmet",
"followers_url": "https://api.github.com/users/gsmet/followers",
"following_url": "https://api.github.com/users/gsmet/following{/other_user}",
"gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
"starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
"organizations_url": "https://api.github.com/users/gsmet/orgs",
"repos_url": "https://api.github.com/users/gsmet/repos",
"events_url": "https://api.github.com/users/gsmet/events{/privacy}",
"received_events_url": "https://api.github.com/users/gsmet/received_events",
"type": "User",
"site_admin": false
},
"installation": {
"id": 13005535,
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMwMDU1MzU="
}
}