Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion src/main/java/org/kohsuke/github/GHWorkflowRun.java
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,8 @@ public String toString() {
private String artifactsUrl;
private String cancelUrl;
private String checkSuiteUrl;

private String conclusion;

private String displayTitle;
private String event;

Expand Down Expand Up @@ -308,6 +308,16 @@ public <T> T downloadLogs(InputStreamFunction<T> streamFunction) throws IOExcept
return root().createRequest().method("GET").withUrlPath(getApiRoute(), "logs").fetchStream(streamFunction);
}

/**
* Force-cancel the workflow run.
*
* @throws IOException
* the io exception
*/
public void forceCancel() throws IOException {
root().createRequest().method("POST").withUrlPath(getApiRoute(), "force-cancel").send();
}

/**
* The actor which triggered the initial run.
*
Expand Down
40 changes: 40 additions & 0 deletions src/test/java/org/kohsuke/github/GHWorkflowRunTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,46 @@ public void testDelete() throws IOException {
}
}

/**
* Test force cancel a run.
*
* @throws IOException
* Signals that an I/O exception has occurred.
*/
@Test
public void testForceCancel() throws IOException {
GHWorkflow workflow = repo.getWorkflow(SLOW_WORKFLOW_PATH);

long latestPreexistingWorkflowRunId = getLatestPreexistingWorkflowRunId();

workflow.dispatch(MAIN_BRANCH);

// now that we have triggered the workflow run, we will wait until it's in progress and then force cancel it
await((nonRecordingRepo) -> getWorkflowRun(nonRecordingRepo,
SLOW_WORKFLOW_NAME,
MAIN_BRANCH,
Status.IN_PROGRESS,
latestPreexistingWorkflowRunId).isPresent());

GHWorkflowRun workflowRun = getWorkflowRun(SLOW_WORKFLOW_NAME,
MAIN_BRANCH,
Status.IN_PROGRESS,
latestPreexistingWorkflowRunId)
.orElseThrow(() -> new IllegalStateException("We must have a valid workflow run starting from here"));

assertThat(workflowRun.getId(), notNullValue());

workflowRun.forceCancel();
long cancelledWorkflowRunId = workflowRun.getId();

// let's wait until it's completed
await((nonRecordingRepo) -> getWorkflowRunStatus(nonRecordingRepo, cancelledWorkflowRunId) == Status.COMPLETED);

// let's check that it has been properly cancelled
workflowRun = repo.getWorkflowRun(cancelledWorkflowRunId);
assertThat(workflowRun.getConclusion(), equalTo(Conclusion.CANCELLED));
}

/**
* Test jobs.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"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,
"name": "Guillaume Smet",
"company": "Red Hat",
"blog": "https://www.redhat.com/",
"location": "Lyon, France",
"email": "guillaume.smet@gmail.com",
"hireable": null,
"bio": "Happy camper at Red Hat, working on Quarkus and the Hibernate portfolio.",
"twitter_username": "gsmet_",
"public_repos": 102,
"public_gists": 14,
"followers": 127,
"following": 3,
"created_at": "2011-12-22T11:03:22Z",
"updated_at": "2021-03-23T17:35:45Z",
"private_gists": 14,
"total_private_repos": 4,
"owned_private_repos": 1,
"disk_usage": 68258,
"collaborators": 1,
"two_factor_authentication": true,
"plan": {
"name": "free",
"space": 976562499,
"collaborators": 0,
"private_repos": 10000
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
{
"id": 348674220,
"node_id": "MDEwOlJlcG9zaXRvcnkzNDg2NzQyMjA=",
"name": "GHWorkflowRunTest",
"full_name": "hub4j-test-org/GHWorkflowRunTest",
"private": false,
"owner": {
"login": "hub4j-test-org",
"id": 7544739,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=",
"avatar_url": "https://avatars.githubusercontent.com/u/7544739?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/hub4j-test-org",
"html_url": "https://github.com/hub4j-test-org",
"followers_url": "https://api.github.com/users/hub4j-test-org/followers",
"following_url": "https://api.github.com/users/hub4j-test-org/following{/other_user}",
"gists_url": "https://api.github.com/users/hub4j-test-org/gists{/gist_id}",
"starred_url": "https://api.github.com/users/hub4j-test-org/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/hub4j-test-org/subscriptions",
"organizations_url": "https://api.github.com/users/hub4j-test-org/orgs",
"repos_url": "https://api.github.com/users/hub4j-test-org/repos",
"events_url": "https://api.github.com/users/hub4j-test-org/events{/privacy}",
"received_events_url": "https://api.github.com/users/hub4j-test-org/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/hub4j-test-org/GHWorkflowRunTest",
"description": "Repository used by GHWorkflowRunTest",
"fork": false,
"url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest",
"forks_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/forks",
"keys_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/teams",
"hooks_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/hooks",
"issue_events_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/issues/events{/number}",
"events_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/events",
"assignees_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/assignees{/user}",
"branches_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/branches{/branch}",
"tags_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/tags",
"blobs_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/statuses/{sha}",
"languages_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/languages",
"stargazers_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/stargazers",
"contributors_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/contributors",
"subscribers_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/subscribers",
"subscription_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/subscription",
"commits_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/contents/{+path}",
"compare_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/merges",
"archive_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/downloads",
"issues_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/issues{/number}",
"pulls_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/pulls{/number}",
"milestones_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/milestones{/number}",
"notifications_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/labels{/name}",
"releases_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/releases{/id}",
"deployments_url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/deployments",
"created_at": "2021-03-17T10:50:49Z",
"updated_at": "2021-03-17T10:56:17Z",
"pushed_at": "2021-03-22T17:53:57Z",
"git_url": "git://github.com/hub4j-test-org/GHWorkflowRunTest.git",
"ssh_url": "git@github.com:hub4j-test-org/GHWorkflowRunTest.git",
"clone_url": "https://github.com/hub4j-test-org/GHWorkflowRunTest.git",
"svn_url": "https://github.com/hub4j-test-org/GHWorkflowRunTest",
"homepage": null,
"size": 3,
"stargazers_count": 0,
"watchers_count": 0,
"language": null,
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 7,
"license": null,
"forks": 0,
"open_issues": 7,
"watchers": 0,
"default_branch": "main",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"temp_clone_token": "",
"allow_squash_merge": true,
"allow_merge_commit": true,
"allow_rebase_merge": true,
"delete_branch_on_merge": false,
"organization": {
"login": "hub4j-test-org",
"id": 7544739,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=",
"avatar_url": "https://avatars.githubusercontent.com/u/7544739?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/hub4j-test-org",
"html_url": "https://github.com/hub4j-test-org",
"followers_url": "https://api.github.com/users/hub4j-test-org/followers",
"following_url": "https://api.github.com/users/hub4j-test-org/following{/other_user}",
"gists_url": "https://api.github.com/users/hub4j-test-org/gists{/gist_id}",
"starred_url": "https://api.github.com/users/hub4j-test-org/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/hub4j-test-org/subscriptions",
"organizations_url": "https://api.github.com/users/hub4j-test-org/orgs",
"repos_url": "https://api.github.com/users/hub4j-test-org/repos",
"events_url": "https://api.github.com/users/hub4j-test-org/events{/privacy}",
"received_events_url": "https://api.github.com/users/hub4j-test-org/received_events",
"type": "Organization",
"site_admin": false
},
"network_count": 0,
"subscribers_count": 9
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"id": 6820849,
"node_id": "MDg6V29ya2Zsb3c2ODIwODQ5",
"name": "Slow workflow",
"path": ".github/workflows/slow-workflow.yml",
"state": "active",
"created_at": "2021-03-17T11:55:06.000+01:00",
"updated_at": "2021-03-17T11:55:06.000+01:00",
"url": "https://api.github.com/repos/hub4j-test-org/GHWorkflowRunTest/actions/workflows/6820849",
"html_url": "https://github.com/hub4j-test-org/GHWorkflowRunTest/blob/main/.github/workflows/slow-workflow.yml",
"badge_url": "https://github.com/hub4j-test-org/GHWorkflowRunTest/workflows/Slow%20workflow/badge.svg"
}
Loading
Loading