using System; using System.Reactive; using System.Reactive.Threading.Tasks; using Octokit.Reactive.Internal; namespace Octokit.Reactive { /// /// A client for GitHub's Actions Workflow runs API. /// /// /// See the Actions Workflow runs API documentation for more information. /// public class ObservableActionsWorkflowRunsClient : IObservableActionsWorkflowRunsClient { readonly IActionsWorkflowRunsClient _client; readonly IConnection _connection; /// /// Instantiate a new GitHub Actions Workflows runs API client. /// /// A GitHub client. public ObservableActionsWorkflowRunsClient(IGitHubClient client) { Ensure.ArgumentNotNull(client, nameof(client)); _client = client.Actions.Workflows.Runs; _connection = client.Connection; } /// /// Lists all workflow runs for a repository. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-repository /// /// The owner of the repository. /// The name of the repository. public IObservable List(string owner, string name) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.List(owner, name).ToObservable(); } /// /// Lists all workflow runs for a repository. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-repository /// /// The owner of the repository. /// The name of the repository. /// Details to filter the request, such as by check suite Id. public IObservable List(string owner, string name, WorkflowRunsRequest workflowRunsRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(workflowRunsRequest, nameof(workflowRunsRequest)); return _client.List(owner, name, workflowRunsRequest).ToObservable(); } /// /// Lists all workflow runs for a repository. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-repository /// /// The owner of the repository. /// The name of the repository. /// Details to filter the request, such as by check suite Id. /// Options to change the API response. public IObservable List(string owner, string name, WorkflowRunsRequest workflowRunsRequest, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(workflowRunsRequest, nameof(workflowRunsRequest)); Ensure.ArgumentNotNull(options, nameof(options)); return _client.List(owner, name, workflowRunsRequest, options).ToObservable(); } /// /// Gets a specific workflow run in a repository. Anyone with read access to the repository can use this endpoint. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#get-a-workflow-run /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable Get(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.Get(owner, name, runId).ToObservable(); } /// /// Deletes a specific workflow run. Anyone with write access to the repository can use this endpoint. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#delete-a-workflow-run /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable Delete(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.Delete(owner, name, runId).ToObservable(); } /// /// Get the review history for a workflow run. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#get-the-review-history-for-a-workflow-run /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable GetReviewHistory(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _connection.GetAndFlattenAllPages(ApiUrls.ActionsWorkflowRunApprovals(owner, name, runId)); } /// /// Approves a workflow run for a pull request from a public fork of a first time contributor. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#approve-a-workflow-run-for-a-fork-pull-request /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable Approve(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.Approve(owner, name, runId).ToObservable(); } /// /// Gets a specific workflow run attempt. Anyone with read access to the repository can use this endpoint. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#get-a-workflow-run-attempt /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. /// The attempt number of the workflow run. public IObservable GetAttempt(string owner, string name, long runId, long attemptNumber) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.GetAttempt(owner, name, runId, attemptNumber).ToObservable(); } /// /// Gets a byte array containing an archive of log files for a specific workflow run attempt. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#download-workflow-run-attempt-logs /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. /// The attempt number of the workflow run. public IObservable GetAttemptLogs(string owner, string name, long runId, long attemptNumber) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.GetAttemptLogs(owner, name, runId, attemptNumber).ToObservable(); } /// /// Cancels a workflow run using its Id. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#cancel-a-workflow-run /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable Cancel(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.Cancel(owner, name, runId).ToObservable(); } /// /// Gets a byte array containing an archive of log files for a workflow run. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#download-workflow-run-logs /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable GetLogs(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.GetLogs(owner, name, runId).ToObservable(); } /// /// Deletes all logs for a workflow run. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#delete-workflow-run-logs /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable DeleteLogs(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.DeleteLogs(owner, name, runId).ToObservable(); } /// /// Approve or reject pending deployments that are waiting on approval by a required reviewer. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#review-pending-deployments-for-a-workflow-run /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. /// The review for the pending deployment. public IObservable ReviewPendingDeployments(string owner, string name, long runId, PendingDeploymentReview review) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(review, nameof(review)); return _client.ReviewPendingDeployments(owner, name, runId, review).ToObservable(); } /// /// Re-runs a specific workflow run in a repository. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#re-run-a-workflow /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable Rerun(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.Rerun(owner, name, runId).ToObservable(); } /// /// Re-run all of the failed jobs and their dependent jobs in a workflow run using the Id of the workflow run. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#re-run-failed-jobs-from-a-workflow-run /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable RerunFailedJobs(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.RerunFailedJobs(owner, name, runId).ToObservable(); } /// /// Gets the number of billable minutes and total run time for a specific workflow run. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#get-workflow-run-usage /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow run. public IObservable GetUsage(string owner, string name, long runId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.GetUsage(owner, name, runId).ToObservable(); } /// /// List all workflow runs for a workflow. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-workflow /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow. public IObservable ListByWorkflow(string owner, string name, long workflowId) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.ListByWorkflow(owner, name, workflowId).ToObservable(); } /// /// List all workflow runs for a workflow. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-workflow /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow. /// Details to filter the request, such as by check suite Id. public IObservable ListByWorkflow(string owner, string name, long workflowId, WorkflowRunsRequest workflowRunsRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(workflowRunsRequest, nameof(workflowRunsRequest)); return _client.ListByWorkflow(owner, name, workflowId, workflowRunsRequest).ToObservable(); } /// /// List all workflow runs for a workflow. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-workflow /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow. /// Details to filter the request, such as by check suite Id. /// Options to change the API response. public IObservable ListByWorkflow(string owner, string name, long workflowId, WorkflowRunsRequest workflowRunsRequest, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(workflowRunsRequest, nameof(workflowRunsRequest)); Ensure.ArgumentNotNull(options, nameof(options)); return _client.ListByWorkflow(owner, name, workflowId, workflowRunsRequest, options).ToObservable(); } /// /// List all workflow runs for a workflow. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-workflow /// /// The owner of the repository. /// The name of the repository. /// The Id of the workflow. public IObservable ListByWorkflow(string owner, string name, string workflowFileName) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNullOrEmptyString(workflowFileName, nameof(workflowFileName)); return _client.ListByWorkflow(owner, name, workflowFileName).ToObservable(); } /// /// List all workflow runs for a workflow. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-workflow /// /// The owner of the repository. /// The name of the repository. /// The workflow file name. /// Details to filter the request, such as by check suite Id. public IObservable ListByWorkflow(string owner, string name, string workflowFileName, WorkflowRunsRequest workflowRunsRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNullOrEmptyString(workflowFileName, nameof(workflowFileName)); Ensure.ArgumentNotNull(workflowRunsRequest, nameof(workflowRunsRequest)); return _client.ListByWorkflow(owner, name, workflowFileName, workflowRunsRequest).ToObservable(); } /// /// List all workflow runs for a workflow. /// /// /// https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-workflow /// /// The owner of the repository. /// The name of the repository. /// The workflow file name. /// Details to filter the request, such as by check suite Id. /// Options to change the API response. public IObservable ListByWorkflow(string owner, string name, string workflowFileName, WorkflowRunsRequest workflowRunsRequest, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNullOrEmptyString(workflowFileName, nameof(workflowFileName)); Ensure.ArgumentNotNull(workflowRunsRequest, nameof(workflowRunsRequest)); Ensure.ArgumentNotNull(options, nameof(options)); return _client.ListByWorkflow(owner, name, workflowFileName, workflowRunsRequest, options).ToObservable(); } } }