diff --git a/src/main/java/com/spotify/github/v3/actions/workflowruns/GetWorkflowRunQueryParams.java b/src/main/java/com/spotify/github/v3/actions/workflowruns/GetWorkflowRunQueryParams.java new file mode 100644 index 00000000..8b64c866 --- /dev/null +++ b/src/main/java/com/spotify/github/v3/actions/workflowruns/GetWorkflowRunQueryParams.java @@ -0,0 +1,42 @@ +/*- + * -\-\- + * github-api + * -- + * Copyright (C) 2016 - 2020 Spotify AB + * -- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * -/-/- + */ + +package com.spotify.github.v3.actions.workflowruns; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.spotify.github.GithubStyle; +import com.spotify.github.Parameters; +import org.immutables.value.Value; + +import java.util.Optional; + +@Value.Immutable +@GithubStyle +@JsonSerialize(as = ImmutableGetWorkflowRunQueryParams.class) +@JsonDeserialize(as = ImmutableGetWorkflowRunQueryParams.class) +public interface GetWorkflowRunQueryParams extends Parameters { + /** + * If true pull requests are omitted from the response (empty array). + * >p< + * Default: false + */ + Optional excludePullRequests(); +} diff --git a/src/main/java/com/spotify/github/v3/actions/workflowruns/ListWorkflowRunsQueryParams.java b/src/main/java/com/spotify/github/v3/actions/workflowruns/ListWorkflowRunsQueryParams.java new file mode 100644 index 00000000..190173d3 --- /dev/null +++ b/src/main/java/com/spotify/github/v3/actions/workflowruns/ListWorkflowRunsQueryParams.java @@ -0,0 +1,107 @@ +/*- + * -\-\- + * github-api + * -- + * Copyright (C) 2016 - 2020 Spotify AB + * -- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * -/-/- + */ + +package com.spotify.github.v3.actions.workflowruns; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.spotify.github.GithubStyle; +import com.spotify.github.Parameters; +import org.immutables.value.Value; + +import java.util.Optional; + +@Value.Immutable +@GithubStyle +@JsonSerialize(as = ImmutableListWorkflowRunsQueryParams.class) +@JsonDeserialize(as = ImmutableListWorkflowRunsQueryParams.class) +public interface ListWorkflowRunsQueryParams extends Parameters { + /** + * Returns someone's workflow runs. Use the login for the user who created the push associated with the check suite or workflow run. + */ + Optional actor(); + + /** + * Returns workflow runs associated with a branch. Use the name of the branch of the push. + */ + Optional branch(); + + /** + * Returns workflow run triggered by the event you specify. For example, push, pull_request or issue. For more information, see "Events that trigger workflows." + */ + Optional event(); + + /** + * Returns workflow runs with the check run status or conclusion that you specify. For example, a conclusion can be success or a status can be in_progress. Only GitHub Actions can set a status of waiting, pending, or requested. + * >p< + * Can be one of: completed, action_required, cancelled, failure, neutral, skipped, stale, success, timed_out, in_progress, queued, requested, waiting, pending + */ + Optional status(); + + /** + * The number of results per page (max 100). For more information, see "Using pagination in the REST API." + * >p< + * Default: 30 + */ + Optional perPage(); + + /** + * The page number of the results to fetch. For more information, see "Using pagination in the REST API." + * >p< + * Default: 1 + */ + Optional page(); + + /** + * Returns workflow runs created within the given date-time range. Syntax with examples: + * >p< + * <YYYY-MM-DD created:<2016-04-29 matches workflow runs that were created after April 29, 2016. + * <=YYYY-MM-DD created:<=2017-04-01 matches workflow runs that were created on or after April 1, 2017. + * >YYYY-MM-DD pushed:>2012-07-05 matches workflow runs that were pushed to before July 5, 2012. + * >=YYYY-MM-DD created:>=2012-07-04 matches workflow runs that were created on or before July 4, 2012. + * YYYY-MM-DD..YYYY-MM-DD pushed:2016-04-30..2016-07-04 matches workflow runs that were pushed to between the end of April and July of 2016. + * YYYY-MM-DD..* created:2012-04-30..* matches workflow runs created on or after April 30th, 2012 containing the word "cats." + * *..YYYY-MM-DD created:*..2012-07-04 matches workflow runs created on or before July 4th, 2012 containing the word "cats." + * >p< + * You can also add optional time information THH:MM:SS+00:00 after the date, to filter by the hour, minute, and second. That's T, followed by HH:MM:SS (hour-minutes-seconds), and a UTC offset (+00:00). + * >p< + * Query Example + * YYYY-MM-DDTHH:MM:SS+00:00 created:2017-01-01T01:00:00+07:00..2017-03-01T15:30:15+07:00 matches workflow runs created between January 1, 2017 at 1 a.m. with a UTC offset of 07:00 and March 1, 2017 at 3 p.m. with a UTC offset of 07:00. + * YYYY-MM-DDTHH:MM:SSZ created:2016-03-21T14:11:00Z..2016-04-07T20:45:00Z matches workflow runs created between March 21, 2016 at 2:11pm and April 7, 2016 at 8:45pm. + */ + Optional created(); + + /** + * If true pull requests are omitted from the response (empty array). + * >p< + * Default: false + */ + Optional excludePullRequests(); + + /** + * Returns workflow runs with the check_suite_id that you specify. + */ + Optional checkSuiteId(); + + /** + * Only returns workflow runs that are associated with the specified head_sha. + */ + Optional headSha(); +} diff --git a/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunResponse.java b/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunResponse.java new file mode 100644 index 00000000..e4e2f5ee --- /dev/null +++ b/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunResponse.java @@ -0,0 +1,240 @@ +/*- + * -\-\- + * github-api + * -- + * Copyright (C) 2016 - 2020 Spotify AB + * -- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * -/-/- + */ + +package com.spotify.github.v3.actions.workflowruns; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.spotify.github.GithubStyle; +import com.spotify.github.v3.User; +import com.spotify.github.v3.prs.PullRequestItem; +import com.spotify.github.v3.repos.PushCommit; +import org.immutables.value.Value; + +import javax.annotation.Nullable; +import java.time.ZonedDateTime; +import java.util.List; + +@Value.Immutable +@GithubStyle +@JsonDeserialize(as = ImmutableWorkflowRunResponse.class) +public interface WorkflowRunResponse { + + /** + * The ID of the Workflow Run. + * (Required) + */ + long id(); + + /** + * The name of the Workflow Run. + * Not required as per schema. + */ + @Nullable + String name(); + + /** + * GitHub api node id. See Using Global Node ids + * (Required) + */ + String nodeId(); + + /** + * The ID of the associated check suite. + * Not required as per schema. + */ + @Nullable + Long checkSuiteId(); + + /** + * The node ID of the associated check suite. + * Not required as per schema. + */ + @Nullable + String checkSuiteNodeId(); + + /** + * The branch of the head commit that points to the version of the workflow being run. + * (Required) + */ + String headBranch(); + + /** + * The SHA of the head commit that points to the version of the workflow being run. + * (Required) + */ + String headSha(); + + /** + * The full path of the workflow + * (Required) + */ + String path(); + + /** + * The auto incrementing run number for the Workflow Run. + * (Required) + */ + Integer runNumber(); + + /** + * Attempt number of the run, 1 for first attempt and higher if the workflow was re-run. + * Not required as per schema. + */ + @Nullable + Integer runAttempt(); + + /** + * The event that lead to the trigger of this Workflow Run + * (Required) + */ + String event(); + + /** + * The status of this Workflow Run. + * (Required) + */ + WorkflowRunStatus status(); + + /** + * The result of the run. + */ + @Nullable + String conclusion(); + + /** + * The ID of the parent workflow. + * (Required) + */ + Integer workflowId(); + + /** + * The URL to the Workflow Run. + * (Required) + */ + String url(); + + /** + * URL for viewing the Workflow run on a browser + * (Required) + */ + String htmlUrl(); + + /** + * When the Workflow Run was created + * (Required) + */ + ZonedDateTime createdAt(); + + /** + * When the Workflow Run was last updated + * (Required) + */ + ZonedDateTime updatedAt(); + + /** + * The start time of the latest run. Resets on re-run. + * Not required as per schema. + */ + @Nullable + ZonedDateTime runStartedAt(); + + /** + * The URL to the jobs for the Workflow Run. + * (Required) + */ + String jobsUrl(); + + /** + * The URL to download the logs for the Workflow Run. + * (Required) + */ + String logsUrl(); + + /** + * The URL to the associated check suite. + * (Required) + */ + String checkSuiteUrl(); + + /** + * The URL to the artifacts for the Workflow Run. + * (Required) + */ + String artifactsUrl(); + + /** + * The URL to cancel the Workflow Run. + * (Required) + */ + String cancelUrl(); + + /** + * The URL to rerun the Workflow Run. + * (Required) + */ + String rerunUrl(); + + /** + * The URL to the previous attempted run of this workflow, if one exists. + * Not required as per schema. + */ + @Nullable + String previousAttemptUrl(); + + /** + * The URL to the workflow. + * (Required) + */ + String workflowUrl(); + + /** + * The event-specific title associated with the run or the run-name if set, or the value of `run-name` if it is set in the workflow. + * (Required) + */ + String displayTitle(); + + /** + * Pull requests that are open with a `head_sha` or `head_branch` that matches the Workflow Run. The returned pull requests do not necessarily indicate pull requests that triggered the run. + * (Required) + */ + List pullRequests(); + + /** + * The GitHub user that triggered the initial Workflow Run. If the Workflow Run is a re-run, this value may differ from triggeringActor. Any workflow re-runs will use the privileges of actor, even if the actor initiating the re-run (triggeringActor) has different privileges. + * Not required as per schema. + */ + @Nullable + User actor(); + + /** + * The GitHub user that initiated the Workflow Run. If the Workflow Run is a re-run, this value may differ from actor. Any workflow re-runs will use the privileges of actor, even if the actor initiating the re-run (triggeringActor) has different privileges. + * Not required as per schema. + */ + @Nullable + User triggeringActor(); + + /** + * The head commit that points to the version of code the workflow being run on. + *

+ * (Required) + */ + PushCommit headCommit(); +} + diff --git a/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunStatus.java b/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunStatus.java new file mode 100644 index 00000000..99cd8e52 --- /dev/null +++ b/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunStatus.java @@ -0,0 +1,38 @@ +/*- + * -\-\- + * github-api + * -- + * Copyright (C) 2016 - 2020 Spotify AB + * -- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * -/-/- + */ + +package com.spotify.github.v3.actions.workflowruns; + +public enum WorkflowRunStatus { + completed, + action_required, + cancelled, + failure, + neutral, + skipped, + stale, + success, + timed_out, + in_progress, + queued, + requested, + waiting, + pending +} diff --git a/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunsResponseList.java b/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunsResponseList.java new file mode 100644 index 00000000..17d7ec8e --- /dev/null +++ b/src/main/java/com/spotify/github/v3/actions/workflowruns/WorkflowRunsResponseList.java @@ -0,0 +1,51 @@ +/*- + * -\-\- + * github-api + * -- + * Copyright (C) 2016 - 2020 Spotify AB + * -- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * -/-/- + */ + +package com.spotify.github.v3.actions.workflowruns; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.spotify.github.GithubStyle; +import org.immutables.value.Value; + +import java.util.List; + +/** + * The WorkflowRunsResponse list resource + * + * @see "https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-repository" + */ +@Value.Immutable +@GithubStyle +@JsonDeserialize(as = ImmutableWorkflowRunsResponseList.class) +public interface WorkflowRunsResponseList { + /** + * The count of Workflow Runs in the response + * + * @return the int + */ + int totalCount(); + + /** + * Workflow runs list. + * + * @return the list of Workflow Runs + */ + List workflowRuns(); +} diff --git a/src/main/java/com/spotify/github/v3/clients/ActionsClient.java b/src/main/java/com/spotify/github/v3/clients/ActionsClient.java index 8dc25c86..38d305b0 100644 --- a/src/main/java/com/spotify/github/v3/clients/ActionsClient.java +++ b/src/main/java/com/spotify/github/v3/clients/ActionsClient.java @@ -43,4 +43,13 @@ static ActionsClient create(final GitHubClient github, final String owner, final public WorkflowsClient createWorkflowsClient() { return WorkflowsClient.create(github, owner, repo); } + + /** + * Workflow Runs API client + * + * @return WorkflowRuns API client + */ + public WorkflowRunsClient createWorkflowRunsClient() { + return WorkflowRunsClient.create(github, owner, repo); + } } diff --git a/src/main/java/com/spotify/github/v3/clients/WorkflowRunsClient.java b/src/main/java/com/spotify/github/v3/clients/WorkflowRunsClient.java new file mode 100644 index 00000000..89e4ee56 --- /dev/null +++ b/src/main/java/com/spotify/github/v3/clients/WorkflowRunsClient.java @@ -0,0 +1,97 @@ +/*- + * -\-\- + * github-api + * -- + * Copyright (C) 2016 - 2020 Spotify AB + * -- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * -/-/- + */ + +package com.spotify.github.v3.clients; + +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableMap; +import com.spotify.github.v3.actions.workflowruns.GetWorkflowRunQueryParams; +import com.spotify.github.v3.actions.workflowruns.ListWorkflowRunsQueryParams; +import com.spotify.github.v3.actions.workflowruns.WorkflowRunResponse; +import com.spotify.github.v3.actions.workflowruns.WorkflowRunsResponseList; + +import javax.annotation.Nullable; +import javax.ws.rs.core.HttpHeaders; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + * Workflow Runs API client + */ +public class WorkflowRunsClient { + private static final String LIST_REPOSITORY_WORKFLOW_RUNS_URI = "/repos/%s/%s/actions/runs"; + private static final String LIST_WORKFLOW_RUNS_URI = "/repos/%s/%s/actions/workflows/%s/runs"; + private static final String GET_WORKFLOW_RUN_URI = "/repos/%s/%s/actions/runs/%s"; + + private final GitHubClient github; + private final String owner; + private final String repo; + + private final Map extraHeaders = + ImmutableMap.of(HttpHeaders.ACCEPT, "application/vnd.github+json"); + + public WorkflowRunsClient(final GitHubClient github, final String owner, final String repo) { + this.github = github; + this.owner = owner; + this.repo = repo; + } + + static WorkflowRunsClient create(final GitHubClient github, final String owner, final String repo) { + return new WorkflowRunsClient(github, owner, repo); + } + + /** + * List all workflow runs for a repository. + * + * @param queryParams optional parameters to add to the query. Can be null. + * @return a list of workflow runs for the repository + */ + public CompletableFuture listAllWorkflowRuns(@Nullable final ListWorkflowRunsQueryParams queryParams) { + final String serial = (queryParams == null ? "" : queryParams.serialize()); + final String path = String.format(LIST_REPOSITORY_WORKFLOW_RUNS_URI, owner, repo) + (Strings.isNullOrEmpty(serial) ? "" : "?" + serial); + return github.request(path, WorkflowRunsResponseList.class, extraHeaders); + } + + /** + * List workflow runs for the given workflow. + * + * @param workflowId the workflow id to get the workflow runs for + * @param queryParams optional parameters to add to the query. Can be null. + * @return a list of workflow runs for the given workflow + */ + public CompletableFuture listWorkflowRuns(final int workflowId, @Nullable final ListWorkflowRunsQueryParams queryParams) { + final String serial = (queryParams == null ? "" : queryParams.serialize()); + final String path = String.format(LIST_WORKFLOW_RUNS_URI, owner, repo, workflowId) + (Strings.isNullOrEmpty(serial) ? "" : "?" + serial); + + return github.request(path, WorkflowRunsResponseList.class, extraHeaders); + } + + /** + * Gets a workflow by id. + * + * @param runId the workflow run id to be retrieved + * @return a WorkflowRunResponse + */ + public CompletableFuture getWorkflowRun(final long runId, @Nullable final GetWorkflowRunQueryParams queryParams) { + final String serial = (queryParams == null ? "" : queryParams.serialize()); + final String path = String.format(GET_WORKFLOW_RUN_URI, owner, repo, runId) + (Strings.isNullOrEmpty(serial) ? "" : "?" + serial); + return github.request(path, WorkflowRunResponse.class, extraHeaders); + } +} diff --git a/src/main/java/com/spotify/github/v3/workflows/WorkflowsResponse.java b/src/main/java/com/spotify/github/v3/workflows/WorkflowsResponse.java index bf5da87e..40e83bb2 100644 --- a/src/main/java/com/spotify/github/v3/workflows/WorkflowsResponse.java +++ b/src/main/java/com/spotify/github/v3/workflows/WorkflowsResponse.java @@ -31,64 +31,73 @@ @GithubStyle @JsonDeserialize(as = ImmutableWorkflowsResponse.class) public interface WorkflowsResponse { - /** - * The Workflow ID. - * - * @return the int - */ - int id(); + /** + * The Workflow ID. + * + * @return the int + */ + int id(); - /** Node ID */ - String nodeId(); + /** + * Node ID + */ + String nodeId(); - /** Name. */ - String name(); + /** + * Name. + */ + String name(); - /** The workflow path. */ - String path(); + /** + * The workflow path. + */ + String path(); - /** Indicates the state of the workflow. */ - WorkflowsState state(); + /** + * Indicates the state of the workflow. + */ + WorkflowsState state(); - /** - * Created At - * - * @return The time when the workflow was created - */ - ZonedDateTime createdAt(); + /** + * Created At + * + * @return The time when the workflow was created + */ + ZonedDateTime createdAt(); - /** - * Updated At - * - * @return The time when the workflow was updated - */ - ZonedDateTime updatedAt(); + /** + * Updated At + * + * @return The time when the workflow was updated + */ + ZonedDateTime updatedAt(); - /** - * Deleted At - * - * @return The time when the workflow was deleted - */ - @Nullable ZonedDateTime deletedAt(); + /** + * Deleted At + * + * @return The time when the workflow was deleted + */ + @Nullable + ZonedDateTime deletedAt(); - /** - * Url string. - * - * @return the string - */ - String url(); + /** + * Url string. + * + * @return the string + */ + String url(); - /** - * Html url string. - * - * @return the string - */ - String htmlUrl(); + /** + * Html url string. + * + * @return the string + */ + String htmlUrl(); - /** - * Badge Url string. - * - * @return the string - */ - String badgeUrl(); + /** + * Badge Url string. + * + * @return the string + */ + String badgeUrl(); } diff --git a/src/test/java/com/spotify/github/v3/clients/WorkflowRunsClientTest.java b/src/test/java/com/spotify/github/v3/clients/WorkflowRunsClientTest.java new file mode 100644 index 00000000..8141d3e1 --- /dev/null +++ b/src/test/java/com/spotify/github/v3/clients/WorkflowRunsClientTest.java @@ -0,0 +1,227 @@ +/*- + * -\-\- + * github-api + * -- + * Copyright (C) 2016 - 2020 Spotify AB + * -- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * -/-/- + */ + +package com.spotify.github.v3.clients; + +import com.google.common.io.Resources; +import com.spotify.github.jackson.Json; +import com.spotify.github.v3.actions.workflowruns.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.time.ZonedDateTime; +import java.util.concurrent.CompletableFuture; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static java.util.concurrent.CompletableFuture.completedFuture; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class WorkflowRunsClientTest { + + private static final String FIXTURES_PATH = "com/spotify/github/v3/actions/workflowruns/"; + private GitHubClient github; + private WorkflowRunsClient workflowRunsClient; + private Json json; + + public static String loadResource(final String path) { + try { + return Resources.toString(Resources.getResource(path), UTF_8); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + @BeforeEach + public void setUp() { + github = mock(GitHubClient.class); + workflowRunsClient = new WorkflowRunsClient(github, "someowner", "somerepo"); + json = Json.create(); + when(github.json()).thenReturn(json); + } + + @Test + public void getWorkflowRun() throws Exception { + final WorkflowRunResponse workflowRunResponse = + json.fromJson( + loadResource(FIXTURES_PATH + "workflowruns-get-workflowrun-with-pull-requests-response.json"), WorkflowRunResponse.class); + final CompletableFuture fixtureResponse = completedFuture(workflowRunResponse); + when(github.request(any(), eq(WorkflowRunResponse.class), any())).thenReturn(fixtureResponse); + + final CompletableFuture actualResponse = + workflowRunsClient.getWorkflowRun(30433642, null); + + assertThat(actualResponse.get().id(), is(30433642L)); + assertThat(actualResponse.get().status(), is(WorkflowRunStatus.queued)); + assertThat(actualResponse.get().workflowId(), is(159038)); + + assertThat(actualResponse.get().pullRequests().size(), is(1)); + assertThat(actualResponse.get().pullRequests().get(0).id(), is(207696345)); + } + + @Test + public void getWorkflowRunFiltered() throws Exception { + ArgumentCaptor pathCaptor = ArgumentCaptor.forClass(String.class); + + final WorkflowRunResponse workflowRunResponse = + json.fromJson( + loadResource(FIXTURES_PATH + "workflowruns-get-workflowrun-response.json"), WorkflowRunResponse.class); + final CompletableFuture fixtureResponse = completedFuture(workflowRunResponse); + when(github.request(pathCaptor.capture(), eq(WorkflowRunResponse.class), any())).thenReturn(fixtureResponse); + + GetWorkflowRunQueryParams queryParams = ImmutableGetWorkflowRunQueryParams.builder() + .excludePullRequests(true) + .build(); + + final CompletableFuture actualResponse = + workflowRunsClient.getWorkflowRun(30433642L, queryParams); + + assertThat(pathCaptor.getValue(), is("/repos/someowner/somerepo/actions/runs/30433642?excludePullRequests=true")); + + assertThat(actualResponse.get().id(), is(30433642L)); + assertThat(actualResponse.get().status(), is(WorkflowRunStatus.queued)); + assertThat(actualResponse.get().workflowId(), is(159038)); + + assertThat(actualResponse.get().pullRequests().size(), is(0)); + } + + @Test + public void listAllWorkflows() throws Exception { + final WorkflowRunsResponseList workflowRunsListResponse = + json.fromJson( + loadResource(FIXTURES_PATH + "workflowruns-list-workflowruns-response.json"), WorkflowRunsResponseList.class); + final CompletableFuture fixtureResponse = completedFuture(workflowRunsListResponse); + when(github.request(any(), eq(WorkflowRunsResponseList.class), any())).thenReturn(fixtureResponse); + + final CompletableFuture actualResponse = + workflowRunsClient.listAllWorkflowRuns(null); + + assertThat(actualResponse.get().totalCount(), is(2)); + assertThat(actualResponse.get().workflowRuns().size(), is(2)); + + assertThat(actualResponse.get().workflowRuns().get(0).name(), is("Build")); + assertThat(actualResponse.get().workflowRuns().get(0).id(), is(30433643L)); + assertThat(actualResponse.get().workflowRuns().get(0).status(), is(WorkflowRunStatus.queued)); + assertThat(actualResponse.get().workflowRuns().get(0).createdAt(), is(ZonedDateTime.parse("2020-01-22T19:40:08Z"))); + assertThat(actualResponse.get().workflowRuns().get(0).displayTitle(), is("Update README.md again!!")); + + assertThat(actualResponse.get().workflowRuns().get(1).name(), is("Build")); + assertThat(actualResponse.get().workflowRuns().get(1).id(), is(30433642L)); + assertThat(actualResponse.get().workflowRuns().get(1).status(), is(WorkflowRunStatus.completed)); + assertThat(actualResponse.get().workflowRuns().get(1).createdAt(), is(ZonedDateTime.parse("2020-01-22T19:33:08Z"))); + assertThat(actualResponse.get().workflowRuns().get(1).displayTitle(), is("Update README.md")); + } + + @Test + public void listAllWorkflowsFiltered() throws Exception { + ArgumentCaptor pathCaptor = ArgumentCaptor.forClass(String.class); + + final WorkflowRunsResponseList workflowRunsListResponse = + json.fromJson( + loadResource(FIXTURES_PATH + "workflowruns-list-workflowruns-filtered-response.json"), WorkflowRunsResponseList.class); + final CompletableFuture fixtureResponse = completedFuture(workflowRunsListResponse); + when(github.request(pathCaptor.capture(), eq(WorkflowRunsResponseList.class), any())).thenReturn(fixtureResponse); + + ListWorkflowRunsQueryParams queryParams = ImmutableListWorkflowRunsQueryParams.builder() + .status(WorkflowRunStatus.completed) + .build(); + + final CompletableFuture actualResponse = + workflowRunsClient.listAllWorkflowRuns(queryParams); + + assertThat(pathCaptor.getValue(), is("/repos/someowner/somerepo/actions/runs?status=completed")); + + assertThat(actualResponse.get().totalCount(), is(1)); + assertThat(actualResponse.get().workflowRuns().size(), is(1)); + + assertThat(actualResponse.get().workflowRuns().get(0).name(), is("Build")); + assertThat(actualResponse.get().workflowRuns().get(0).id(), is(30433642L)); + assertThat(actualResponse.get().workflowRuns().get(0).status(), is(WorkflowRunStatus.completed)); + assertThat(actualResponse.get().workflowRuns().get(0).createdAt(), is(ZonedDateTime.parse("2020-01-22T19:33:08Z"))); + assertThat(actualResponse.get().workflowRuns().get(0).displayTitle(), is("Update README.md")); + } + + @Test + public void listWorkflowRuns() throws Exception { + final WorkflowRunsResponseList workflowRunsListResponse = + json.fromJson( + loadResource(FIXTURES_PATH + "workflowruns-list-workflowruns-response.json"), WorkflowRunsResponseList.class); + final CompletableFuture fixtureResponse = completedFuture(workflowRunsListResponse); + when(github.request(any(), eq(WorkflowRunsResponseList.class), any())).thenReturn(fixtureResponse); + + final CompletableFuture actualResponse = + workflowRunsClient.listWorkflowRuns(159038, null); + + assertThat(actualResponse.get().totalCount(), is(2)); + assertThat(actualResponse.get().workflowRuns().size(), is(2)); + + assertThat(actualResponse.get().workflowRuns().get(0).name(), is("Build")); + assertThat(actualResponse.get().workflowRuns().get(0).id(), is(30433643L)); + assertThat(actualResponse.get().workflowRuns().get(0).workflowId(), is(159038)); + assertThat(actualResponse.get().workflowRuns().get(0).status(), is(WorkflowRunStatus.queued)); + assertThat(actualResponse.get().workflowRuns().get(0).createdAt(), is(ZonedDateTime.parse("2020-01-22T19:40:08Z"))); + assertThat(actualResponse.get().workflowRuns().get(0).displayTitle(), is("Update README.md again!!")); + + assertThat(actualResponse.get().workflowRuns().get(1).name(), is("Build")); + assertThat(actualResponse.get().workflowRuns().get(1).id(), is(30433642L)); + assertThat(actualResponse.get().workflowRuns().get(1).workflowId(), is(159038)); + assertThat(actualResponse.get().workflowRuns().get(1).status(), is(WorkflowRunStatus.completed)); + assertThat(actualResponse.get().workflowRuns().get(1).createdAt(), is(ZonedDateTime.parse("2020-01-22T19:33:08Z"))); + assertThat(actualResponse.get().workflowRuns().get(1).displayTitle(), is("Update README.md")); + } + + + @Test + public void listWorkflowRunsFiltered() throws Exception { + ArgumentCaptor pathCaptor = ArgumentCaptor.forClass(String.class); + + final WorkflowRunsResponseList workflowRunsListResponse = + json.fromJson( + loadResource(FIXTURES_PATH + "workflowruns-list-workflowruns-filtered-response.json"), WorkflowRunsResponseList.class); + final CompletableFuture fixtureResponse = completedFuture(workflowRunsListResponse); + when(github.request(pathCaptor.capture(), eq(WorkflowRunsResponseList.class), any())).thenReturn(fixtureResponse); + + ListWorkflowRunsQueryParams params = ImmutableListWorkflowRunsQueryParams.builder() + .status(WorkflowRunStatus.completed) + .build(); + + final CompletableFuture actualResponse = + workflowRunsClient.listWorkflowRuns(159038, params); + + assertThat(pathCaptor.getValue(), is("/repos/someowner/somerepo/actions/workflows/159038/runs?status=completed")); + + assertThat(actualResponse.get().totalCount(), is(1)); + assertThat(actualResponse.get().workflowRuns().size(), is(1)); + + assertThat(actualResponse.get().workflowRuns().get(0).name(), is("Build")); + assertThat(actualResponse.get().workflowRuns().get(0).id(), is(30433642L)); + assertThat(actualResponse.get().workflowRuns().get(0).workflowId(), is(159038)); + assertThat(actualResponse.get().workflowRuns().get(0).status(), is(WorkflowRunStatus.completed)); + assertThat(actualResponse.get().workflowRuns().get(0).createdAt(), is(ZonedDateTime.parse("2020-01-22T19:33:08Z"))); + assertThat(actualResponse.get().workflowRuns().get(0).displayTitle(), is("Update README.md")); + } +} \ No newline at end of file diff --git a/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-get-workflowrun-response.json b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-get-workflowrun-response.json new file mode 100644 index 00000000..3a357bb0 --- /dev/null +++ b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-get-workflowrun-response.json @@ -0,0 +1,237 @@ +{ + "id": 30433642, + "name": "Build", + "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", + "check_suite_id": 42, + "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", + "head_branch": "main", + "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "path": ".github/workflows/build.yml@main", + "run_number": 562, + "event": "push", + "display_title": "Update README.md", + "status": "queued", + "conclusion": null, + "workflow_id": 159038, + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642", + "html_url": "https://github.com/octo-org/octo-repo/actions/runs/30433642", + "pull_requests": [], + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "run_attempt": 1, + "referenced_workflows": [ + { + "path": "octocat/Hello-World/.github/workflows/deploy.yml@main", + "sha": "86e8bc9ecf7d38b1ed2d2cfb8eb87ba9b35b01db", + "ref": "refs/heads/main" + }, + { + "path": "octo-org/octo-repo/.github/workflows/report.yml@v2", + "sha": "79e9790903e1c3373b1a3e3a941d57405478a232", + "ref": "refs/tags/v2" + }, + { + "path": "octo-org/octo-repo/.github/workflows/secure.yml@1595d4b6de6a9e9751fb270a41019ce507d4099e", + "sha": "1595d4b6de6a9e9751fb270a41019ce507d4099e" + } + ], + "run_started_at": "2020-01-22T19:33:08Z", + "triggering_actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "jobs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/jobs", + "logs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/logs", + "check_suite_url": "https://api.github.com/repos/octo-org/octo-repo/check-suites/414944374", + "artifacts_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/artifacts", + "cancel_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/cancel", + "rerun_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/rerun", + "previous_attempt_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/attempts/1", + "workflow_url": "https://api.github.com/repos/octo-org/octo-repo/actions/workflows/159038", + "head_commit": { + "id": "acb5820ced9479c074f688cc328bf03f341a511d", + "tree_id": "d23f6eedb1e1b9610bbc754ddb5197bfe7271223", + "message": "Create linter.yaml", + "timestamp": "2020-01-22T19:33:05Z", + "author": { + "name": "Octo Cat", + "email": "octocat@github.com" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com" + } + }, + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + }, + "head_repository": { + "id": 217723378, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments" + } +} \ No newline at end of file diff --git a/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-get-workflowrun-with-pull-requests-response.json b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-get-workflowrun-with-pull-requests-response.json new file mode 100644 index 00000000..2cf0edfe --- /dev/null +++ b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-get-workflowrun-with-pull-requests-response.json @@ -0,0 +1,261 @@ +{ + "id": 30433642, + "name": "Build", + "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", + "check_suite_id": 42, + "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", + "head_branch": "main", + "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "path": ".github/workflows/build.yml@main", + "run_number": 562, + "event": "push", + "display_title": "Update README.md", + "status": "queued", + "conclusion": null, + "workflow_id": 159038, + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642", + "html_url": "https://github.com/octo-org/octo-repo/actions/runs/30433642", + "pull_requests": [ + { + "url": "https://github.com/octo-org/octo-repo/pulls/198", + "id": 207696345, + "number": 234, + "head": { + "ref": "feat/some-new-feature", + "sha": "acb5820ced9479c074f688cc648bf03f341a511d", + "repo": { + "id": 217723378, + "url": "https://github.com/octo-org/octo-repo", + "name": "octo-repo" + } + }, + "base": { + "ref": "master", + "sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "repo": { + "id": 217723378, + "url": "https://github.com/octo-org/octo-repo", + "name": "octo-repo" + } + } + } + ], + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "run_attempt": 1, + "referenced_workflows": [ + { + "path": "octocat/Hello-World/.github/workflows/deploy.yml@main", + "sha": "86e8bc9ecf7d38b1ed2d2cfb8eb87ba9b35b01db", + "ref": "refs/heads/main" + }, + { + "path": "octo-org/octo-repo/.github/workflows/report.yml@v2", + "sha": "79e9790903e1c3373b1a3e3a941d57405478a232", + "ref": "refs/tags/v2" + }, + { + "path": "octo-org/octo-repo/.github/workflows/secure.yml@1595d4b6de6a9e9751fb270a41019ce507d4099e", + "sha": "1595d4b6de6a9e9751fb270a41019ce507d4099e" + } + ], + "run_started_at": "2020-01-22T19:33:08Z", + "triggering_actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "jobs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/jobs", + "logs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/logs", + "check_suite_url": "https://api.github.com/repos/octo-org/octo-repo/check-suites/414944374", + "artifacts_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/artifacts", + "cancel_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/cancel", + "rerun_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/rerun", + "previous_attempt_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/attempts/1", + "workflow_url": "https://api.github.com/repos/octo-org/octo-repo/actions/workflows/159038", + "head_commit": { + "id": "acb5820ced9479c074f688cc328bf03f341a511d", + "tree_id": "d23f6eedb1e1b9610bbc754ddb5197bfe7271223", + "message": "Create linter.yaml", + "timestamp": "2020-01-22T19:33:05Z", + "author": { + "name": "Octo Cat", + "email": "octocat@github.com" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com" + } + }, + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + }, + "head_repository": { + "id": 217723378, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments" + } +} \ No newline at end of file diff --git a/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-list-workflowruns-filtered-response.json b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-list-workflowruns-filtered-response.json new file mode 100644 index 00000000..8fe7bcea --- /dev/null +++ b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-list-workflowruns-filtered-response.json @@ -0,0 +1,225 @@ +{ + "total_count": 1, + "workflow_runs": [ + { + "id": 30433642, + "name": "Build", + "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", + "check_suite_id": 42, + "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", + "head_branch": "master", + "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "path": ".github/workflows/build.yml@main", + "run_number": 562, + "event": "push", + "display_title": "Update README.md", + "status": "completed", + "conclusion": null, + "workflow_id": 159038, + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642", + "html_url": "https://github.com/octo-org/octo-repo/actions/runs/30433642", + "pull_requests": [], + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "run_attempt": 1, + "run_started_at": "2020-01-22T19:33:08Z", + "triggering_actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "jobs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/jobs", + "logs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/logs", + "check_suite_url": "https://api.github.com/repos/octo-org/octo-repo/check-suites/414944374", + "artifacts_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/artifacts", + "cancel_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/cancel", + "rerun_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/rerun", + "workflow_url": "https://api.github.com/repos/octo-org/octo-repo/actions/workflows/159038", + "head_commit": { + "id": "acb5820ced9479c074f688cc328bf03f341a511d", + "tree_id": "d23f6eedb1e1b9610bbc754ddb5197bfe7271223", + "message": "Create linter.yaml", + "timestamp": "2020-01-22T19:33:05Z", + "author": { + "name": "Octo Cat", + "email": "octocat@github.com" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com" + } + }, + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + }, + "head_repository": { + "id": 217723378, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments" + } + } + ] +} \ No newline at end of file diff --git a/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-list-workflowruns-response.json b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-list-workflowruns-response.json new file mode 100644 index 00000000..24c5b90a --- /dev/null +++ b/src/test/resources/com/spotify/github/v3/actions/workflowruns/workflowruns-list-workflowruns-response.json @@ -0,0 +1,445 @@ +{ + "total_count": 2, + "workflow_runs": [ + { + "id": 30433643, + "name": "Build", + "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", + "check_suite_id": 42, + "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", + "head_branch": "master", + "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "path": ".github/workflows/build.yml@main", + "run_number": 563, + "event": "push", + "display_title": "Update README.md again!!", + "status": "queued", + "conclusion": null, + "workflow_id": 159038, + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433643", + "html_url": "https://github.com/octo-org/octo-repo/actions/runs/30433643", + "pull_requests": [], + "created_at": "2020-01-22T19:40:08Z", + "updated_at": "2020-01-22T19:40:08Z", + "actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "run_attempt": 1, + "run_started_at": "2020-01-22T19:40:08Z", + "triggering_actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "jobs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433643/jobs", + "logs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433643/logs", + "check_suite_url": "https://api.github.com/repos/octo-org/octo-repo/check-suites/414944374", + "artifacts_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433643/artifacts", + "cancel_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433643/cancel", + "rerun_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433643/rerun", + "workflow_url": "https://api.github.com/repos/octo-org/octo-repo/actions/workflows/159038", + "head_commit": { + "id": "acb5820ced9479c074f688cc328bf03f341a511d", + "tree_id": "d23f6eedb1e1b9610bbc754ddb5197bfe7271223", + "message": "Create linter.yaml", + "timestamp": "2020-01-22T19:40:05Z", + "author": { + "name": "Octo Cat", + "email": "octocat@github.com" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com" + } + }, + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + }, + "head_repository": { + "id": 217723378, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments" + } + }, + { + "id": 30433642, + "name": "Build", + "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", + "check_suite_id": 42, + "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", + "head_branch": "master", + "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "path": ".github/workflows/build.yml@main", + "run_number": 562, + "event": "push", + "display_title": "Update README.md", + "status": "completed", + "conclusion": null, + "workflow_id": 159038, + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642", + "html_url": "https://github.com/octo-org/octo-repo/actions/runs/30433642", + "pull_requests": [], + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "run_attempt": 1, + "run_started_at": "2020-01-22T19:33:08Z", + "triggering_actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "jobs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/jobs", + "logs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/logs", + "check_suite_url": "https://api.github.com/repos/octo-org/octo-repo/check-suites/414944374", + "artifacts_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/artifacts", + "cancel_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/cancel", + "rerun_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/rerun", + "workflow_url": "https://api.github.com/repos/octo-org/octo-repo/actions/workflows/159038", + "head_commit": { + "id": "acb5820ced9479c074f688cc328bf03f341a511d", + "tree_id": "d23f6eedb1e1b9610bbc754ddb5197bfe7271223", + "message": "Create linter.yaml", + "timestamp": "2020-01-22T19:33:05Z", + "author": { + "name": "Octo Cat", + "email": "octocat@github.com" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com" + } + }, + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + }, + "head_repository": { + "id": 217723378, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments" + } + } + ] +} \ No newline at end of file