github 0.28.0.1 → 0.30.0.2
raw patch · 111 files changed
Files
- CHANGELOG.md +52/−0
- README.md +4/−2
- fixtures/actions/artifact.json +19/−0
- fixtures/actions/artifacts-list.json +43/−0
- fixtures/actions/cache-list.json +14/−0
- fixtures/actions/org-cache-usage.json +4/−0
- fixtures/actions/org-public-key.json +4/−0
- fixtures/actions/org-secrets-list.json +18/−0
- fixtures/actions/repo-cache-usage.json +5/−0
- fixtures/actions/selected-repositories-for-secret.json +72/−0
- fixtures/actions/workflow-job.json +113/−0
- fixtures/actions/workflow-list.json +17/−0
- fixtures/actions/workflow-runs-list.json +665/−0
- github.cabal +60/−38
- spec/GitHub/Actions/ArtifactsSpec.hs +66/−0
- spec/GitHub/Actions/CacheSpec.hs +53/−0
- spec/GitHub/Actions/SecretsSpec.hs +50/−0
- spec/GitHub/Actions/WorkflowJobSpec.hs +32/−0
- spec/GitHub/Actions/WorkflowRunsSpec.hs +32/−0
- spec/GitHub/Actions/WorkflowSpec.hs +32/−0
- spec/GitHub/IssuesSpec.hs +26/−6
- spec/GitHub/ReposSpec.hs +6/−0
- src/GitHub.hs +88/−5
- src/GitHub/Auth.hs +9/−7
- src/GitHub/Data.hs +17/−5
- src/GitHub/Data/Actions/Artifacts.hs +76/−0
- src/GitHub/Data/Actions/Cache.hs +78/−0
- src/GitHub/Data/Actions/Common.hs +33/−0
- src/GitHub/Data/Actions/Secrets.hs +141/−0
- src/GitHub/Data/Actions/WorkflowJobs.hs +100/−0
- src/GitHub/Data/Actions/WorkflowRuns.hs +91/−0
- src/GitHub/Data/Actions/Workflows.hs +62/−0
- src/GitHub/Data/Activities.hs +31/−27
- src/GitHub/Data/Comments.hs +10/−15
- src/GitHub/Data/Content.hs +23/−27
- src/GitHub/Data/Definitions.hs +80/−28
- src/GitHub/Data/DeployKeys.hs +2/−2
- src/GitHub/Data/Deployments.hs +12/−12
- src/GitHub/Data/Email.hs +4/−9
- src/GitHub/Data/Enterprise.hs +1/−4
- src/GitHub/Data/Enterprise/Organizations.hs +6/−11
- src/GitHub/Data/Events.hs +3/−7
- src/GitHub/Data/Gists.hs +10/−15
- src/GitHub/Data/GitData.hs +33/−38
- src/GitHub/Data/Id.hs +1/−6
- src/GitHub/Data/Invitation.hs +6/−11
- src/GitHub/Data/Issues.hs +15/−18
- src/GitHub/Data/Milestone.hs +6/−11
- src/GitHub/Data/Name.hs +1/−11
- src/GitHub/Data/Options.hs +317/−20
- src/GitHub/Data/PublicSSHKeys.hs +3/−3
- src/GitHub/Data/PullRequests.hs +17/−22
- src/GitHub/Data/RateLimit.hs +5/−10
- src/GitHub/Data/Reactions.hs +78/−0
- src/GitHub/Data/Releases.hs +4/−4
- src/GitHub/Data/Repos.hs +24/−48
- src/GitHub/Data/Request.hs +44/−13
- src/GitHub/Data/Reviews.hs +3/−9
- src/GitHub/Data/Search.hs +4/−9
- src/GitHub/Data/Statuses.hs +7/−9
- src/GitHub/Data/Teams.hs +23/−30
- src/GitHub/Data/URL.hs +2/−7
- src/GitHub/Data/Webhooks.hs +12/−17
- src/GitHub/Data/Webhooks/Validate.hs +1/−4
- src/GitHub/Endpoints/Actions/Artifacts.hs +61/−0
- src/GitHub/Endpoints/Actions/Cache.hs +66/−0
- src/GitHub/Endpoints/Actions/Secrets.hs +221/−0
- src/GitHub/Endpoints/Actions/WorkflowJobs.hs +58/−0
- src/GitHub/Endpoints/Actions/WorkflowRuns.hs +181/−0
- src/GitHub/Endpoints/Actions/Workflows.hs +68/−0
- src/GitHub/Endpoints/Activity/Events.hs +1/−4
- src/GitHub/Endpoints/Activity/Notifications.hs +0/−4
- src/GitHub/Endpoints/Activity/Starring.hs +1/−4
- src/GitHub/Endpoints/Activity/Watching.hs +1/−4
- src/GitHub/Endpoints/Enterprise/Organizations.hs +1/−4
- src/GitHub/Endpoints/Gists.hs +1/−4
- src/GitHub/Endpoints/Gists/Comments.hs +1/−4
- src/GitHub/Endpoints/GitData/Blobs.hs +1/−4
- src/GitHub/Endpoints/GitData/Commits.hs +1/−4
- src/GitHub/Endpoints/GitData/References.hs +1/−4
- src/GitHub/Endpoints/GitData/Trees.hs +1/−4
- src/GitHub/Endpoints/Issues.hs +1/−5
- src/GitHub/Endpoints/Issues/Comments.hs +1/−4
- src/GitHub/Endpoints/Issues/Events.hs +1/−4
- src/GitHub/Endpoints/Issues/Labels.hs +1/−4
- src/GitHub/Endpoints/Issues/Milestones.hs +1/−4
- src/GitHub/Endpoints/Organizations.hs +1/−4
- src/GitHub/Endpoints/Organizations/Members.hs +9/−4
- src/GitHub/Endpoints/Organizations/OutsideCollaborators.hs +1/−4
- src/GitHub/Endpoints/Organizations/Teams.hs +1/−4
- src/GitHub/Endpoints/PullRequests.hs +1/−5
- src/GitHub/Endpoints/PullRequests/Comments.hs +1/−4
- src/GitHub/Endpoints/PullRequests/Reviews.hs +1/−4
- src/GitHub/Endpoints/RateLimit.hs +1/−4
- src/GitHub/Endpoints/Reactions.hs +60/−0
- src/GitHub/Endpoints/Repos.hs +1/−4
- src/GitHub/Endpoints/Repos/Collaborators.hs +1/−4
- src/GitHub/Endpoints/Repos/Comments.hs +1/−5
- src/GitHub/Endpoints/Repos/Commits.hs +1/−5
- src/GitHub/Endpoints/Repos/Contents.hs +1/−4
- src/GitHub/Endpoints/Repos/Forks.hs +1/−4
- src/GitHub/Endpoints/Repos/Invitations.hs +1/−4
- src/GitHub/Endpoints/Repos/Statuses.hs +1/−4
- src/GitHub/Endpoints/Repos/Webhooks.hs +1/−4
- src/GitHub/Endpoints/Search.hs +1/−4
- src/GitHub/Endpoints/Users.hs +1/−4
- src/GitHub/Endpoints/Users/Emails.hs +1/−4
- src/GitHub/Endpoints/Users/Followers.hs +1/−4
- src/GitHub/Enterprise.hs +1/−5
- src/GitHub/Internal/Prelude.hs +24/−55
- src/GitHub/Request.hs +52/−16
CHANGELOG.md view
@@ -1,3 +1,55 @@+## Changes for 0.30.0.2++_2026-03-12, Andreas Abel_++- Fixed issue [#531](https://github.com/haskell-github/github/issues/531)+ (Norfairking, PR [#532](https://github.com/haskell-github/github/pull/532)).+- Allow `http-client-tls-0.4`.++Tested with GHC 8.2 - 9.14.1.++## Changes for 0.30.0.1++_2025-08-27, Andreas Abel_++- Drop dependencies `deepseq-generics` and `transformers-compat`.+- Remove obsolete `deriving Typeable`.++Tested with GHC 8.2 - 9.14 alpha1.++## Changes for 0.30++_2025-05-09, Andreas Abel, Peace edition_++- Organization membership endpoint (Domen Kožar, PR [#487](https://github.com/haskell-github/github/pull/487)).+- Allow JWT as an authentication method (Tom Sydney Kerckhove, PR [#497](https://github.com/haskell-github/github/pull/497)).+- Support pagination (Tom McLaughlin, PR [#503](https://github.com/haskell-github/github/pull/503)).+- Initial subset of Reactions endpoints (Dan Rijks, PR [#509](https://github.com/haskell-github/github/pull/509)).+- Fix `getNotifications` (maralorn, PR [#511](https://github.com/haskell-github/github/pull/511)).+- Add missing `name` field to `WorkflowJobs` `Job` type (Hugh Davidson, PR [#518](https://github.com/haskell-github/github/pull/518)).+- Add `StateReasonDuplicate` to `IssueStateReason` (PR [#523](https://github.com/haskell-github/github/pull/523)).+- Drop support for GHC 8.0 and below.+- Drop dependency `time-compat`.++Tested with GHC 8.2 - 9.12.2.+++## Changes for 0.29++_2023-06-24, Andreas Abel, Midsommar edition_++- Support for the GitHub Actions API+ (PR [#459](https://github.com/haskell-github/github/pull/459)):+ * New endpoint modules `GitHub.EndPoints.Actions.Artifacts`, `.Cache`,+ `.Secrets`, `.Workflows`, `.WorkflowRuns`, `.WorkflowJobs`.+ * Matching data structure modules `GitHub.Data.Actions.*`.++- Add field `issueStateReason` of type `Maybe IssueStateReason` to `Issue`+ with possible values `completed`, `not_planned` and `reopened`+ (PR [#496](https://github.com/haskell-github/github/pull/496)).++Tested with GHC 7.8 - 9.6.2+ ## Changes for 0.28.0.1 _2022-07-23, Andreas Abel_
README.md view
@@ -1,8 +1,10 @@ GitHub ------ +[](http://hackage.haskell.org/package/github)+[](https://stackage.org/nightly/package/github)+[](https://www.stackage.org/package/github) [](https://github.com/haskell-github/github/actions/workflows/haskell-ci.yml)-[][hackage] The GitHub API v3 for Haskell. @@ -92,7 +94,7 @@ Available under the BSD 3-clause license. -[hackage]: http://hackage.haskell.org/package/github "Hackage"+[hackage]: https://hackage.haskell.org/package/github "Hackage" Alternative ===========
+ fixtures/actions/artifact.json view
@@ -0,0 +1,19 @@+{+ "id": 416767789,+ "node_id": "MDg6QXJ0aWZhY3Q0MTY3Njc3ODk=",+ "name": "dist-without-markdown",+ "size_in_bytes": 42718,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/artifacts/416767789",+ "archive_download_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/artifacts/416767789/zip",+ "expired": false,+ "created_at": "2022-10-29T22:18:21Z",+ "updated_at": "2022-10-29T22:18:23Z",+ "expires_at": "2023-01-27T22:18:16Z",+ "workflow_run": {+ "id": 3353148947,+ "repository_id": 559365297,+ "head_repository_id": 559365297,+ "head_branch": "main",+ "head_sha": "601593ecb1d8a57a04700fdb445a28d4186b8954"+ }+}
+ fixtures/actions/artifacts-list.json view
@@ -0,0 +1,43 @@+{+ "total_count": 23809,+ "artifacts": [+ {+ "id": 416737084,+ "node_id": "MDg6QXJ0aWZhY3Q0MTY3MzcwODQ=",+ "name": "doc-html",+ "size_in_bytes": 61667543,+ "url": "https://api.github.com/repos/python/cpython/actions/artifacts/416737084",+ "archive_download_url": "https://api.github.com/repos/python/cpython/actions/artifacts/416737084/zip",+ "expired": false,+ "created_at": "2022-10-29T20:56:24Z",+ "updated_at": "2022-10-29T20:56:25Z",+ "expires_at": "2023-01-27T20:50:21Z",+ "workflow_run": {+ "id": 3352897496,+ "repository_id": 81598961,+ "head_repository_id": 101955313,+ "head_branch": "backport-bfecff5-3.11",+ "head_sha": "692cd77975413d71ff0951072df686e6f38711c8"+ }+ },+ {+ "id": 416712612,+ "node_id": "MDg6QXJ0aWZhY3Q0MTY3MTI2MTI=",+ "name": "doc-html",+ "size_in_bytes": 61217330,+ "url": "https://api.github.com/repos/python/cpython/actions/artifacts/416712612",+ "archive_download_url": "https://api.github.com/repos/python/cpython/actions/artifacts/416712612/zip",+ "expired": false,+ "created_at": "2022-10-29T19:53:19Z",+ "updated_at": "2022-10-29T19:53:20Z",+ "expires_at": "2023-01-27T19:49:12Z",+ "workflow_run": {+ "id": 3352724493,+ "repository_id": 81598961,+ "head_repository_id": 559335486,+ "head_branch": "patch-1",+ "head_sha": "62eb88a66d1d35f7701873d8b698a2f8d7e84fa5"+ }+ }+ ]+}
+ fixtures/actions/cache-list.json view
@@ -0,0 +1,14 @@+{+ "total_count": 1,+ "actions_caches": [+ {+ "id": 1,+ "ref": "refs/heads/main",+ "key": "cache_key",+ "version": "f5f850afdadd47730296d4ffa900de95f6bbafb75dc1e8475df1fa6ae79dcece",+ "last_accessed_at": "2022-10-30T00:08:14.223333300Z",+ "created_at": "2022-10-30T00:08:14.223333300Z",+ "size_in_bytes": 26586+ }+ ]+}
+ fixtures/actions/org-cache-usage.json view
@@ -0,0 +1,4 @@+{+ "total_active_caches_size_in_bytes": 26586,+ "total_active_caches_count": 1+}
+ fixtures/actions/org-public-key.json view
@@ -0,0 +1,4 @@+{+ "key_id": "568250167242549743",+ "key": "KHVvOxB765kjkShEgUu27QCzl5XxKz/L20V+KRsWf0w="+}
+ fixtures/actions/org-secrets-list.json view
@@ -0,0 +1,18 @@+{+ "total_count": 2,+ "secrets": [+ {+ "name": "TEST_SECRET",+ "created_at": "2022-10-31T00:08:12Z",+ "updated_at": "2022-10-31T00:08:12Z",+ "visibility": "all"+ },+ {+ "name": "TEST_SELECTED",+ "created_at": "2022-10-31T00:08:43Z",+ "updated_at": "2022-10-31T00:08:43Z",+ "visibility": "selected",+ "selected_repositories_url": "https://api.github.com/orgs/kote-test-org-actions/actions/secrets/TEST_SELECTED/repositories"+ }+ ]+}
+ fixtures/actions/repo-cache-usage.json view
@@ -0,0 +1,5 @@+{+ "full_name": "python/cpython",+ "active_caches_size_in_bytes": 55000268087,+ "active_caches_count": 171+}
+ fixtures/actions/selected-repositories-for-secret.json view
@@ -0,0 +1,72 @@+{+ "total_count": 1,+ "repositories": [+ {+ "id": 559365297,+ "node_id": "R_kgDOIVc8sQ",+ "name": "actions-api",+ "full_name": "kote-test-org-actions/actions-api",+ "private": true,+ "owner": {+ "login": "kote-test-org-actions",+ "id": 116976977,+ "node_id": "O_kgDOBvjtUQ",+ "avatar_url": "https://avatars.githubusercontent.com/u/116976977?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/kote-test-org-actions",+ "html_url": "https://github.com/kote-test-org-actions",+ "followers_url": "https://api.github.com/users/kote-test-org-actions/followers",+ "following_url": "https://api.github.com/users/kote-test-org-actions/following{/other_user}",+ "gists_url": "https://api.github.com/users/kote-test-org-actions/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/kote-test-org-actions/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/kote-test-org-actions/subscriptions",+ "organizations_url": "https://api.github.com/users/kote-test-org-actions/orgs",+ "repos_url": "https://api.github.com/users/kote-test-org-actions/repos",+ "events_url": "https://api.github.com/users/kote-test-org-actions/events{/privacy}",+ "received_events_url": "https://api.github.com/users/kote-test-org-actions/received_events",+ "type": "Organization",+ "site_admin": false+ },+ "html_url": "https://github.com/kote-test-org-actions/actions-api",+ "description": null,+ "fork": false,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api",+ "forks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/forks",+ "keys_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/keys{/key_id}",+ "collaborators_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/collaborators{/collaborator}",+ "teams_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/teams",+ "hooks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/hooks",+ "issue_events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/events{/number}",+ "events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/events",+ "assignees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/assignees{/user}",+ "branches_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/branches{/branch}",+ "tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/tags",+ "blobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/blobs{/sha}",+ "git_tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/tags{/sha}",+ "git_refs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/refs{/sha}",+ "trees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/trees{/sha}",+ "statuses_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/statuses/{sha}",+ "languages_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/languages",+ "stargazers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/stargazers",+ "contributors_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contributors",+ "subscribers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscribers",+ "subscription_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscription",+ "commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/commits{/sha}",+ "git_commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/commits{/sha}",+ "comments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/comments{/number}",+ "issue_comment_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/comments{/number}",+ "contents_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contents/{+path}",+ "compare_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/compare/{base}...{head}",+ "merges_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/merges",+ "archive_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/{archive_format}{/ref}",+ "downloads_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/downloads",+ "issues_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues{/number}",+ "pulls_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/pulls{/number}",+ "milestones_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/milestones{/number}",+ "notifications_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/notifications{?since,all,participating}",+ "labels_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/labels{/name}",+ "releases_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/releases{/id}",+ "deployments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/deployments"+ }+ ]+}
+ fixtures/actions/workflow-job.json view
@@ -0,0 +1,113 @@+{+ "id": 9183275828,+ "run_id": 3353449941,+ "run_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353449941",+ "run_attempt": 1,+ "node_id": "CR_kwDOIVc8sc8AAAACI12rNA",+ "head_sha": "3156f684232a3adec5085c920d2006aca80f2798",+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/jobs/9183275828",+ "html_url": "https://github.com/kote-test-org-actions/actions-api/actions/runs/3353449941/jobs/5556228789",+ "status": "completed",+ "conclusion": "success",+ "started_at": "2022-10-30T00:09:29Z",+ "completed_at": "2022-10-30T00:09:49Z",+ "name": "check-bats-version",+ "steps": [+ {+ "name": "Set up job",+ "status": "completed",+ "conclusion": "success",+ "number": 1,+ "started_at": "2022-10-29T17:09:29.000-07:00",+ "completed_at": "2022-10-29T17:09:32.000-07:00"+ },+ {+ "name": "Run actions/checkout@v3",+ "status": "completed",+ "conclusion": "success",+ "number": 2,+ "started_at": "2022-10-29T17:09:32.000-07:00",+ "completed_at": "2022-10-29T17:09:33.000-07:00"+ },+ {+ "name": "Run actions/setup-node@v3",+ "status": "completed",+ "conclusion": "success",+ "number": 3,+ "started_at": "2022-10-29T17:09:34.000-07:00",+ "completed_at": "2022-10-29T17:09:39.000-07:00"+ },+ {+ "name": "Run npm install -g bats",+ "status": "completed",+ "conclusion": "success",+ "number": 4,+ "started_at": "2022-10-29T17:09:40.000-07:00",+ "completed_at": "2022-10-29T17:09:42.000-07:00"+ },+ {+ "name": "Run bats -v",+ "status": "completed",+ "conclusion": "success",+ "number": 5,+ "started_at": "2022-10-29T17:09:42.000-07:00",+ "completed_at": "2022-10-29T17:09:42.000-07:00"+ },+ {+ "name": "Archive Test",+ "status": "completed",+ "conclusion": "success",+ "number": 6,+ "started_at": "2022-10-29T17:09:42.000-07:00",+ "completed_at": "2022-10-29T17:09:46.000-07:00"+ },+ {+ "name": "Cache",+ "status": "completed",+ "conclusion": "success",+ "number": 7,+ "started_at": "2022-10-29T17:09:46.000-07:00",+ "completed_at": "2022-10-29T17:09:47.000-07:00"+ },+ {+ "name": "Post Cache",+ "status": "completed",+ "conclusion": "success",+ "number": 12,+ "started_at": "2022-10-29T17:09:49.000-07:00",+ "completed_at": "2022-10-29T17:09:47.000-07:00"+ },+ {+ "name": "Post Run actions/setup-node@v3",+ "status": "completed",+ "conclusion": "success",+ "number": 13,+ "started_at": "2022-10-29T17:09:49.000-07:00",+ "completed_at": "2022-10-29T17:09:49.000-07:00"+ },+ {+ "name": "Post Run actions/checkout@v3",+ "status": "completed",+ "conclusion": "success",+ "number": 14,+ "started_at": "2022-10-29T17:09:49.000-07:00",+ "completed_at": "2022-10-29T17:09:49.000-07:00"+ },+ {+ "name": "Complete job",+ "status": "completed",+ "conclusion": "success",+ "number": 15,+ "started_at": "2022-10-29T17:09:47.000-07:00",+ "completed_at": "2022-10-29T17:09:47.000-07:00"+ }+ ],+ "check_run_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/check-runs/9183275828",+ "labels": [+ "ubuntu-latest"+ ],+ "runner_id": 1,+ "runner_name": "Hosted Agent",+ "runner_group_id": 2,+ "runner_group_name": "GitHub Actions"+}
+ fixtures/actions/workflow-list.json view
@@ -0,0 +1,17 @@+{+ "total_count": 1,+ "workflows": [+ {+ "id": 39065091,+ "node_id": "W_kwDOIVc8sc4CVBYD",+ "name": "learn-github-actions",+ "path": ".github/workflows/make_artifact.yaml",+ "state": "active",+ "created_at": "2022-10-29T15:17:59.000-07:00",+ "updated_at": "2022-10-29T15:17:59.000-07:00",+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/workflows/39065091",+ "html_url": "https://github.com/kote-test-org-actions/actions-api/blob/main/.github/workflows/make_artifact.yaml",+ "badge_url": "https://github.com/kote-test-org-actions/actions-api/workflows/learn-github-actions/badge.svg"+ }+ ]+}
+ fixtures/actions/workflow-runs-list.json view
@@ -0,0 +1,665 @@+{+ "total_count": 3,+ "workflow_runs": [+ {+ "id": 3353449941,+ "name": "K0Te is learning GitHub Actions",+ "node_id": "WFR_kwLOIVc8sc7H4ZXV",+ "head_branch": "main",+ "head_sha": "3156f684232a3adec5085c920d2006aca80f2798",+ "path": ".github/workflows/make_artifact.yaml",+ "display_title": "K0Te is learning GitHub Actions",+ "run_number": 3,+ "event": "push",+ "status": "completed",+ "conclusion": "success",+ "workflow_id": 39065091,+ "check_suite_id": 9030268154,+ "check_suite_node_id": "CS_kwDOIVc8sc8AAAACGj70-g",+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353449941",+ "html_url": "https://github.com/kote-test-org-actions/actions-api/actions/runs/3353449941",+ "pull_requests": [],+ "created_at": "2022-10-30T00:09:22Z",+ "updated_at": "2022-10-30T00:09:50Z",+ "actor": {+ "login": "K0Te",+ "id": 6162155,+ "node_id": "MDQ6VXNlcjYxNjIxNTU=",+ "avatar_url": "https://avatars.githubusercontent.com/u/6162155?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/K0Te",+ "html_url": "https://github.com/K0Te",+ "followers_url": "https://api.github.com/users/K0Te/followers",+ "following_url": "https://api.github.com/users/K0Te/following{/other_user}",+ "gists_url": "https://api.github.com/users/K0Te/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/K0Te/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/K0Te/subscriptions",+ "organizations_url": "https://api.github.com/users/K0Te/orgs",+ "repos_url": "https://api.github.com/users/K0Te/repos",+ "events_url": "https://api.github.com/users/K0Te/events{/privacy}",+ "received_events_url": "https://api.github.com/users/K0Te/received_events",+ "type": "User",+ "site_admin": false+ },+ "run_attempt": 1,+ "referenced_workflows": [],+ "run_started_at": "2022-10-30T00:09:22Z",+ "triggering_actor": {+ "login": "K0Te",+ "id": 6162155,+ "node_id": "MDQ6VXNlcjYxNjIxNTU=",+ "avatar_url": "https://avatars.githubusercontent.com/u/6162155?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/K0Te",+ "html_url": "https://github.com/K0Te",+ "followers_url": "https://api.github.com/users/K0Te/followers",+ "following_url": "https://api.github.com/users/K0Te/following{/other_user}",+ "gists_url": "https://api.github.com/users/K0Te/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/K0Te/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/K0Te/subscriptions",+ "organizations_url": "https://api.github.com/users/K0Te/orgs",+ "repos_url": "https://api.github.com/users/K0Te/repos",+ "events_url": "https://api.github.com/users/K0Te/events{/privacy}",+ "received_events_url": "https://api.github.com/users/K0Te/received_events",+ "type": "User",+ "site_admin": false+ },+ "jobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353449941/jobs",+ "logs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353449941/logs",+ "check_suite_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/check-suites/9030268154",+ "artifacts_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353449941/artifacts",+ "cancel_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353449941/cancel",+ "rerun_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353449941/rerun",+ "previous_attempt_url": null,+ "workflow_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/workflows/39065091",+ "head_commit": {+ "id": "3156f684232a3adec5085c920d2006aca80f2798",+ "tree_id": "f51ba8632086ca7af92f5e58c1dc98df1c62d7ce",+ "message": "up",+ "timestamp": "2022-10-30T00:09:16Z",+ "author": {+ "name": "Oleg Nykolyn",+ "email": "juravel2@gmail.com"+ },+ "committer": {+ "name": "Oleg Nykolyn",+ "email": "juravel2@gmail.com"+ }+ },+ "repository": {+ "id": 559365297,+ "node_id": "R_kgDOIVc8sQ",+ "name": "actions-api",+ "full_name": "kote-test-org-actions/actions-api",+ "private": true,+ "owner": {+ "login": "kote-test-org-actions",+ "id": 116976977,+ "node_id": "O_kgDOBvjtUQ",+ "avatar_url": "https://avatars.githubusercontent.com/u/116976977?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/kote-test-org-actions",+ "html_url": "https://github.com/kote-test-org-actions",+ "followers_url": "https://api.github.com/users/kote-test-org-actions/followers",+ "following_url": "https://api.github.com/users/kote-test-org-actions/following{/other_user}",+ "gists_url": "https://api.github.com/users/kote-test-org-actions/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/kote-test-org-actions/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/kote-test-org-actions/subscriptions",+ "organizations_url": "https://api.github.com/users/kote-test-org-actions/orgs",+ "repos_url": "https://api.github.com/users/kote-test-org-actions/repos",+ "events_url": "https://api.github.com/users/kote-test-org-actions/events{/privacy}",+ "received_events_url": "https://api.github.com/users/kote-test-org-actions/received_events",+ "type": "Organization",+ "site_admin": false+ },+ "html_url": "https://github.com/kote-test-org-actions/actions-api",+ "description": null,+ "fork": false,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api",+ "forks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/forks",+ "keys_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/keys{/key_id}",+ "collaborators_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/collaborators{/collaborator}",+ "teams_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/teams",+ "hooks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/hooks",+ "issue_events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/events{/number}",+ "events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/events",+ "assignees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/assignees{/user}",+ "branches_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/branches{/branch}",+ "tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/tags",+ "blobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/blobs{/sha}",+ "git_tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/tags{/sha}",+ "git_refs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/refs{/sha}",+ "trees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/trees{/sha}",+ "statuses_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/statuses/{sha}",+ "languages_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/languages",+ "stargazers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/stargazers",+ "contributors_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contributors",+ "subscribers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscribers",+ "subscription_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscription",+ "commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/commits{/sha}",+ "git_commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/commits{/sha}",+ "comments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/comments{/number}",+ "issue_comment_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/comments{/number}",+ "contents_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contents/{+path}",+ "compare_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/compare/{base}...{head}",+ "merges_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/merges",+ "archive_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/{archive_format}{/ref}",+ "downloads_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/downloads",+ "issues_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues{/number}",+ "pulls_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/pulls{/number}",+ "milestones_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/milestones{/number}",+ "notifications_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/notifications{?since,all,participating}",+ "labels_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/labels{/name}",+ "releases_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/releases{/id}",+ "deployments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/deployments"+ },+ "head_repository": {+ "id": 559365297,+ "node_id": "R_kgDOIVc8sQ",+ "name": "actions-api",+ "full_name": "kote-test-org-actions/actions-api",+ "private": true,+ "owner": {+ "login": "kote-test-org-actions",+ "id": 116976977,+ "node_id": "O_kgDOBvjtUQ",+ "avatar_url": "https://avatars.githubusercontent.com/u/116976977?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/kote-test-org-actions",+ "html_url": "https://github.com/kote-test-org-actions",+ "followers_url": "https://api.github.com/users/kote-test-org-actions/followers",+ "following_url": "https://api.github.com/users/kote-test-org-actions/following{/other_user}",+ "gists_url": "https://api.github.com/users/kote-test-org-actions/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/kote-test-org-actions/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/kote-test-org-actions/subscriptions",+ "organizations_url": "https://api.github.com/users/kote-test-org-actions/orgs",+ "repos_url": "https://api.github.com/users/kote-test-org-actions/repos",+ "events_url": "https://api.github.com/users/kote-test-org-actions/events{/privacy}",+ "received_events_url": "https://api.github.com/users/kote-test-org-actions/received_events",+ "type": "Organization",+ "site_admin": false+ },+ "html_url": "https://github.com/kote-test-org-actions/actions-api",+ "description": null,+ "fork": false,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api",+ "forks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/forks",+ "keys_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/keys{/key_id}",+ "collaborators_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/collaborators{/collaborator}",+ "teams_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/teams",+ "hooks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/hooks",+ "issue_events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/events{/number}",+ "events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/events",+ "assignees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/assignees{/user}",+ "branches_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/branches{/branch}",+ "tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/tags",+ "blobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/blobs{/sha}",+ "git_tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/tags{/sha}",+ "git_refs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/refs{/sha}",+ "trees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/trees{/sha}",+ "statuses_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/statuses/{sha}",+ "languages_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/languages",+ "stargazers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/stargazers",+ "contributors_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contributors",+ "subscribers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscribers",+ "subscription_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscription",+ "commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/commits{/sha}",+ "git_commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/commits{/sha}",+ "comments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/comments{/number}",+ "issue_comment_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/comments{/number}",+ "contents_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contents/{+path}",+ "compare_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/compare/{base}...{head}",+ "merges_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/merges",+ "archive_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/{archive_format}{/ref}",+ "downloads_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/downloads",+ "issues_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues{/number}",+ "pulls_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/pulls{/number}",+ "milestones_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/milestones{/number}",+ "notifications_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/notifications{?since,all,participating}",+ "labels_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/labels{/name}",+ "releases_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/releases{/id}",+ "deployments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/deployments"+ }+ },+ {+ "id": 3353445625,+ "name": "K0Te is learning GitHub Actions",+ "node_id": "WFR_kwLOIVc8sc7H4YT5",+ "head_branch": "main",+ "head_sha": "2d2486b9aecb80bf916717f47f7c312431d3ceb6",+ "path": ".github/workflows/make_artifact.yaml",+ "display_title": "K0Te is learning GitHub Actions",+ "run_number": 2,+ "event": "push",+ "status": "completed",+ "conclusion": "success",+ "workflow_id": 39065091,+ "check_suite_id": 9030259685,+ "check_suite_node_id": "CS_kwDOIVc8sc8AAAACGj7T5Q",+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353445625",+ "html_url": "https://github.com/kote-test-org-actions/actions-api/actions/runs/3353445625",+ "pull_requests": [],+ "created_at": "2022-10-30T00:07:49Z",+ "updated_at": "2022-10-30T00:08:19Z",+ "actor": {+ "login": "K0Te",+ "id": 6162155,+ "node_id": "MDQ6VXNlcjYxNjIxNTU=",+ "avatar_url": "https://avatars.githubusercontent.com/u/6162155?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/K0Te",+ "html_url": "https://github.com/K0Te",+ "followers_url": "https://api.github.com/users/K0Te/followers",+ "following_url": "https://api.github.com/users/K0Te/following{/other_user}",+ "gists_url": "https://api.github.com/users/K0Te/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/K0Te/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/K0Te/subscriptions",+ "organizations_url": "https://api.github.com/users/K0Te/orgs",+ "repos_url": "https://api.github.com/users/K0Te/repos",+ "events_url": "https://api.github.com/users/K0Te/events{/privacy}",+ "received_events_url": "https://api.github.com/users/K0Te/received_events",+ "type": "User",+ "site_admin": false+ },+ "run_attempt": 1,+ "referenced_workflows": [],+ "run_started_at": "2022-10-30T00:07:49Z",+ "triggering_actor": {+ "login": "K0Te",+ "id": 6162155,+ "node_id": "MDQ6VXNlcjYxNjIxNTU=",+ "avatar_url": "https://avatars.githubusercontent.com/u/6162155?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/K0Te",+ "html_url": "https://github.com/K0Te",+ "followers_url": "https://api.github.com/users/K0Te/followers",+ "following_url": "https://api.github.com/users/K0Te/following{/other_user}",+ "gists_url": "https://api.github.com/users/K0Te/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/K0Te/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/K0Te/subscriptions",+ "organizations_url": "https://api.github.com/users/K0Te/orgs",+ "repos_url": "https://api.github.com/users/K0Te/repos",+ "events_url": "https://api.github.com/users/K0Te/events{/privacy}",+ "received_events_url": "https://api.github.com/users/K0Te/received_events",+ "type": "User",+ "site_admin": false+ },+ "jobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353445625/jobs",+ "logs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353445625/logs",+ "check_suite_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/check-suites/9030259685",+ "artifacts_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353445625/artifacts",+ "cancel_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353445625/cancel",+ "rerun_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353445625/rerun",+ "previous_attempt_url": null,+ "workflow_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/workflows/39065091",+ "head_commit": {+ "id": "2d2486b9aecb80bf916717f47f7c312431d3ceb6",+ "tree_id": "21d858674ab650ea734b7efbf05442a21685d121",+ "message": "up",+ "timestamp": "2022-10-30T00:07:44Z",+ "author": {+ "name": "Oleg Nykolyn",+ "email": "juravel2@gmail.com"+ },+ "committer": {+ "name": "Oleg Nykolyn",+ "email": "juravel2@gmail.com"+ }+ },+ "repository": {+ "id": 559365297,+ "node_id": "R_kgDOIVc8sQ",+ "name": "actions-api",+ "full_name": "kote-test-org-actions/actions-api",+ "private": true,+ "owner": {+ "login": "kote-test-org-actions",+ "id": 116976977,+ "node_id": "O_kgDOBvjtUQ",+ "avatar_url": "https://avatars.githubusercontent.com/u/116976977?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/kote-test-org-actions",+ "html_url": "https://github.com/kote-test-org-actions",+ "followers_url": "https://api.github.com/users/kote-test-org-actions/followers",+ "following_url": "https://api.github.com/users/kote-test-org-actions/following{/other_user}",+ "gists_url": "https://api.github.com/users/kote-test-org-actions/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/kote-test-org-actions/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/kote-test-org-actions/subscriptions",+ "organizations_url": "https://api.github.com/users/kote-test-org-actions/orgs",+ "repos_url": "https://api.github.com/users/kote-test-org-actions/repos",+ "events_url": "https://api.github.com/users/kote-test-org-actions/events{/privacy}",+ "received_events_url": "https://api.github.com/users/kote-test-org-actions/received_events",+ "type": "Organization",+ "site_admin": false+ },+ "html_url": "https://github.com/kote-test-org-actions/actions-api",+ "description": null,+ "fork": false,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api",+ "forks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/forks",+ "keys_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/keys{/key_id}",+ "collaborators_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/collaborators{/collaborator}",+ "teams_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/teams",+ "hooks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/hooks",+ "issue_events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/events{/number}",+ "events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/events",+ "assignees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/assignees{/user}",+ "branches_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/branches{/branch}",+ "tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/tags",+ "blobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/blobs{/sha}",+ "git_tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/tags{/sha}",+ "git_refs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/refs{/sha}",+ "trees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/trees{/sha}",+ "statuses_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/statuses/{sha}",+ "languages_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/languages",+ "stargazers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/stargazers",+ "contributors_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contributors",+ "subscribers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscribers",+ "subscription_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscription",+ "commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/commits{/sha}",+ "git_commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/commits{/sha}",+ "comments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/comments{/number}",+ "issue_comment_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/comments{/number}",+ "contents_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contents/{+path}",+ "compare_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/compare/{base}...{head}",+ "merges_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/merges",+ "archive_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/{archive_format}{/ref}",+ "downloads_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/downloads",+ "issues_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues{/number}",+ "pulls_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/pulls{/number}",+ "milestones_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/milestones{/number}",+ "notifications_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/notifications{?since,all,participating}",+ "labels_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/labels{/name}",+ "releases_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/releases{/id}",+ "deployments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/deployments"+ },+ "head_repository": {+ "id": 559365297,+ "node_id": "R_kgDOIVc8sQ",+ "name": "actions-api",+ "full_name": "kote-test-org-actions/actions-api",+ "private": true,+ "owner": {+ "login": "kote-test-org-actions",+ "id": 116976977,+ "node_id": "O_kgDOBvjtUQ",+ "avatar_url": "https://avatars.githubusercontent.com/u/116976977?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/kote-test-org-actions",+ "html_url": "https://github.com/kote-test-org-actions",+ "followers_url": "https://api.github.com/users/kote-test-org-actions/followers",+ "following_url": "https://api.github.com/users/kote-test-org-actions/following{/other_user}",+ "gists_url": "https://api.github.com/users/kote-test-org-actions/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/kote-test-org-actions/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/kote-test-org-actions/subscriptions",+ "organizations_url": "https://api.github.com/users/kote-test-org-actions/orgs",+ "repos_url": "https://api.github.com/users/kote-test-org-actions/repos",+ "events_url": "https://api.github.com/users/kote-test-org-actions/events{/privacy}",+ "received_events_url": "https://api.github.com/users/kote-test-org-actions/received_events",+ "type": "Organization",+ "site_admin": false+ },+ "html_url": "https://github.com/kote-test-org-actions/actions-api",+ "description": null,+ "fork": false,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api",+ "forks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/forks",+ "keys_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/keys{/key_id}",+ "collaborators_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/collaborators{/collaborator}",+ "teams_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/teams",+ "hooks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/hooks",+ "issue_events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/events{/number}",+ "events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/events",+ "assignees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/assignees{/user}",+ "branches_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/branches{/branch}",+ "tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/tags",+ "blobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/blobs{/sha}",+ "git_tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/tags{/sha}",+ "git_refs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/refs{/sha}",+ "trees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/trees{/sha}",+ "statuses_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/statuses/{sha}",+ "languages_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/languages",+ "stargazers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/stargazers",+ "contributors_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contributors",+ "subscribers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscribers",+ "subscription_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscription",+ "commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/commits{/sha}",+ "git_commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/commits{/sha}",+ "comments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/comments{/number}",+ "issue_comment_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/comments{/number}",+ "contents_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contents/{+path}",+ "compare_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/compare/{base}...{head}",+ "merges_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/merges",+ "archive_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/{archive_format}{/ref}",+ "downloads_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/downloads",+ "issues_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues{/number}",+ "pulls_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/pulls{/number}",+ "milestones_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/milestones{/number}",+ "notifications_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/notifications{?since,all,participating}",+ "labels_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/labels{/name}",+ "releases_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/releases{/id}",+ "deployments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/deployments"+ }+ },+ {+ "id": 3353148947,+ "name": "K0Te is learning GitHub Actions",+ "node_id": "WFR_kwLOIVc8sc7H3P4T",+ "head_branch": "main",+ "head_sha": "601593ecb1d8a57a04700fdb445a28d4186b8954",+ "path": ".github/workflows/make_artifact.yaml",+ "display_title": "K0Te is learning GitHub Actions",+ "run_number": 1,+ "event": "push",+ "status": "completed",+ "conclusion": "success",+ "workflow_id": 39065091,+ "check_suite_id": 9029740591,+ "check_suite_node_id": "CS_kwDOIVc8sc8AAAACGjboLw",+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353148947",+ "html_url": "https://github.com/kote-test-org-actions/actions-api/actions/runs/3353148947",+ "pull_requests": [],+ "created_at": "2022-10-29T22:18:02Z",+ "updated_at": "2022-10-29T22:18:22Z",+ "actor": {+ "login": "K0Te",+ "id": 6162155,+ "node_id": "MDQ6VXNlcjYxNjIxNTU=",+ "avatar_url": "https://avatars.githubusercontent.com/u/6162155?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/K0Te",+ "html_url": "https://github.com/K0Te",+ "followers_url": "https://api.github.com/users/K0Te/followers",+ "following_url": "https://api.github.com/users/K0Te/following{/other_user}",+ "gists_url": "https://api.github.com/users/K0Te/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/K0Te/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/K0Te/subscriptions",+ "organizations_url": "https://api.github.com/users/K0Te/orgs",+ "repos_url": "https://api.github.com/users/K0Te/repos",+ "events_url": "https://api.github.com/users/K0Te/events{/privacy}",+ "received_events_url": "https://api.github.com/users/K0Te/received_events",+ "type": "User",+ "site_admin": false+ },+ "run_attempt": 1,+ "referenced_workflows": [],+ "run_started_at": "2022-10-29T22:18:02Z",+ "triggering_actor": {+ "login": "K0Te",+ "id": 6162155,+ "node_id": "MDQ6VXNlcjYxNjIxNTU=",+ "avatar_url": "https://avatars.githubusercontent.com/u/6162155?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/K0Te",+ "html_url": "https://github.com/K0Te",+ "followers_url": "https://api.github.com/users/K0Te/followers",+ "following_url": "https://api.github.com/users/K0Te/following{/other_user}",+ "gists_url": "https://api.github.com/users/K0Te/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/K0Te/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/K0Te/subscriptions",+ "organizations_url": "https://api.github.com/users/K0Te/orgs",+ "repos_url": "https://api.github.com/users/K0Te/repos",+ "events_url": "https://api.github.com/users/K0Te/events{/privacy}",+ "received_events_url": "https://api.github.com/users/K0Te/received_events",+ "type": "User",+ "site_admin": false+ },+ "jobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353148947/jobs",+ "logs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353148947/logs",+ "check_suite_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/check-suites/9029740591",+ "artifacts_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353148947/artifacts",+ "cancel_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353148947/cancel",+ "rerun_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/runs/3353148947/rerun",+ "previous_attempt_url": null,+ "workflow_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/actions/workflows/39065091",+ "head_commit": {+ "id": "601593ecb1d8a57a04700fdb445a28d4186b8954",+ "tree_id": "7aa2d4e6f4e0ddb277fe2f35f7615651ee01c5a2",+ "message": "test",+ "timestamp": "2022-10-29T22:17:55Z",+ "author": {+ "name": "Oleg Nykolyn",+ "email": "juravel2@gmail.com"+ },+ "committer": {+ "name": "Oleg Nykolyn",+ "email": "juravel2@gmail.com"+ }+ },+ "repository": {+ "id": 559365297,+ "node_id": "R_kgDOIVc8sQ",+ "name": "actions-api",+ "full_name": "kote-test-org-actions/actions-api",+ "private": true,+ "owner": {+ "login": "kote-test-org-actions",+ "id": 116976977,+ "node_id": "O_kgDOBvjtUQ",+ "avatar_url": "https://avatars.githubusercontent.com/u/116976977?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/kote-test-org-actions",+ "html_url": "https://github.com/kote-test-org-actions",+ "followers_url": "https://api.github.com/users/kote-test-org-actions/followers",+ "following_url": "https://api.github.com/users/kote-test-org-actions/following{/other_user}",+ "gists_url": "https://api.github.com/users/kote-test-org-actions/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/kote-test-org-actions/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/kote-test-org-actions/subscriptions",+ "organizations_url": "https://api.github.com/users/kote-test-org-actions/orgs",+ "repos_url": "https://api.github.com/users/kote-test-org-actions/repos",+ "events_url": "https://api.github.com/users/kote-test-org-actions/events{/privacy}",+ "received_events_url": "https://api.github.com/users/kote-test-org-actions/received_events",+ "type": "Organization",+ "site_admin": false+ },+ "html_url": "https://github.com/kote-test-org-actions/actions-api",+ "description": null,+ "fork": false,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api",+ "forks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/forks",+ "keys_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/keys{/key_id}",+ "collaborators_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/collaborators{/collaborator}",+ "teams_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/teams",+ "hooks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/hooks",+ "issue_events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/events{/number}",+ "events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/events",+ "assignees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/assignees{/user}",+ "branches_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/branches{/branch}",+ "tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/tags",+ "blobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/blobs{/sha}",+ "git_tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/tags{/sha}",+ "git_refs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/refs{/sha}",+ "trees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/trees{/sha}",+ "statuses_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/statuses/{sha}",+ "languages_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/languages",+ "stargazers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/stargazers",+ "contributors_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contributors",+ "subscribers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscribers",+ "subscription_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscription",+ "commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/commits{/sha}",+ "git_commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/commits{/sha}",+ "comments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/comments{/number}",+ "issue_comment_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/comments{/number}",+ "contents_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contents/{+path}",+ "compare_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/compare/{base}...{head}",+ "merges_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/merges",+ "archive_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/{archive_format}{/ref}",+ "downloads_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/downloads",+ "issues_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues{/number}",+ "pulls_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/pulls{/number}",+ "milestones_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/milestones{/number}",+ "notifications_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/notifications{?since,all,participating}",+ "labels_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/labels{/name}",+ "releases_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/releases{/id}",+ "deployments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/deployments"+ },+ "head_repository": {+ "id": 559365297,+ "node_id": "R_kgDOIVc8sQ",+ "name": "actions-api",+ "full_name": "kote-test-org-actions/actions-api",+ "private": true,+ "owner": {+ "login": "kote-test-org-actions",+ "id": 116976977,+ "node_id": "O_kgDOBvjtUQ",+ "avatar_url": "https://avatars.githubusercontent.com/u/116976977?v=4",+ "gravatar_id": "",+ "url": "https://api.github.com/users/kote-test-org-actions",+ "html_url": "https://github.com/kote-test-org-actions",+ "followers_url": "https://api.github.com/users/kote-test-org-actions/followers",+ "following_url": "https://api.github.com/users/kote-test-org-actions/following{/other_user}",+ "gists_url": "https://api.github.com/users/kote-test-org-actions/gists{/gist_id}",+ "starred_url": "https://api.github.com/users/kote-test-org-actions/starred{/owner}{/repo}",+ "subscriptions_url": "https://api.github.com/users/kote-test-org-actions/subscriptions",+ "organizations_url": "https://api.github.com/users/kote-test-org-actions/orgs",+ "repos_url": "https://api.github.com/users/kote-test-org-actions/repos",+ "events_url": "https://api.github.com/users/kote-test-org-actions/events{/privacy}",+ "received_events_url": "https://api.github.com/users/kote-test-org-actions/received_events",+ "type": "Organization",+ "site_admin": false+ },+ "html_url": "https://github.com/kote-test-org-actions/actions-api",+ "description": null,+ "fork": false,+ "url": "https://api.github.com/repos/kote-test-org-actions/actions-api",+ "forks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/forks",+ "keys_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/keys{/key_id}",+ "collaborators_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/collaborators{/collaborator}",+ "teams_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/teams",+ "hooks_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/hooks",+ "issue_events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/events{/number}",+ "events_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/events",+ "assignees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/assignees{/user}",+ "branches_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/branches{/branch}",+ "tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/tags",+ "blobs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/blobs{/sha}",+ "git_tags_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/tags{/sha}",+ "git_refs_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/refs{/sha}",+ "trees_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/trees{/sha}",+ "statuses_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/statuses/{sha}",+ "languages_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/languages",+ "stargazers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/stargazers",+ "contributors_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contributors",+ "subscribers_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscribers",+ "subscription_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/subscription",+ "commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/commits{/sha}",+ "git_commits_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/git/commits{/sha}",+ "comments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/comments{/number}",+ "issue_comment_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues/comments{/number}",+ "contents_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/contents/{+path}",+ "compare_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/compare/{base}...{head}",+ "merges_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/merges",+ "archive_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/{archive_format}{/ref}",+ "downloads_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/downloads",+ "issues_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/issues{/number}",+ "pulls_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/pulls{/number}",+ "milestones_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/milestones{/number}",+ "notifications_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/notifications{?since,all,participating}",+ "labels_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/labels{/name}",+ "releases_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/releases{/id}",+ "deployments_url": "https://api.github.com/repos/kote-test-org-actions/actions-api/deployments"+ }+ }+ ]+}
github.cabal view
@@ -1,6 +1,6 @@-cabal-version: >=1.10+cabal-version: 2.4 name: github-version: 0.28.0.1+version: 0.30.0.2 synopsis: Access to the GitHub API, v3. category: Network description:@@ -20,7 +20,7 @@ . For more of an overview please see the README: <https://github.com/haskell-github/github/blob/master/README.md> -license: BSD3+license: BSD-3-Clause license-file: LICENSE author: Mike Burns, John Wiegley, Oleg Grenrus maintainer: Andreas Abel@@ -30,26 +30,30 @@ Copyright 2012-2013 Mike Burns, Copyright 2013-2015 John Wiegley, Copyright 2016-2021 Oleg Grenrus tested-with:- GHC == 9.4.1- GHC == 9.2.3+ GHC == 9.14.1+ GHC == 9.12.2+ GHC == 9.10.3+ GHC == 9.8.4+ GHC == 9.6.7+ GHC == 9.4.8+ GHC == 9.2.8 GHC == 9.0.2 GHC == 8.10.7 GHC == 8.8.4 GHC == 8.6.5 GHC == 8.4.4 GHC == 8.2.2- GHC == 8.0.2- GHC == 7.10.3- GHC == 7.8.4 -extra-source-files:+extra-doc-files: README.md CHANGELOG.md- fixtures/*.json +extra-source-files:+ fixtures/**/*.json+ source-repository head type: git- location: git://github.com/haskell-github/github.git+ location: https://github.com/haskell-github/github.git flag openssl description: "Use http-client-openssl"@@ -60,16 +64,15 @@ default-language: Haskell2010 ghc-options: -Wall- if impl(ghc >= 8.0)- ghc-options:- -Wcompat- -Wno-star-is-type- -- The star-is-type warning cannot be sensiblity addressed while supporting GHC 7.+ -Wcompat+ -Wno-star-is-type+ -- The star-is-type warning cannot be sensiblity addressed while supporting GHC 7. hs-source-dirs: src default-extensions: DataKinds DeriveDataTypeable DeriveGeneric+ LambdaCase OverloadedStrings ScopedTypeVariables TypeOperators@@ -87,6 +90,13 @@ GitHub GitHub.Auth GitHub.Data+ GitHub.Data.Actions.Common+ GitHub.Data.Actions.Artifacts+ GitHub.Data.Actions.Cache+ GitHub.Data.Actions.Secrets+ GitHub.Data.Actions.Workflows+ GitHub.Data.Actions.WorkflowJobs+ GitHub.Data.Actions.WorkflowRuns GitHub.Data.Activities GitHub.Data.Comments GitHub.Data.Content@@ -108,6 +118,7 @@ GitHub.Data.PublicSSHKeys GitHub.Data.PullRequests GitHub.Data.RateLimit+ GitHub.Data.Reactions GitHub.Data.Releases GitHub.Data.Repos GitHub.Data.Request@@ -118,6 +129,12 @@ GitHub.Data.URL GitHub.Data.Webhooks GitHub.Data.Webhooks.Validate+ GitHub.Endpoints.Actions.Artifacts+ GitHub.Endpoints.Actions.Cache+ GitHub.Endpoints.Actions.Secrets+ GitHub.Endpoints.Actions.Workflows+ GitHub.Endpoints.Actions.WorkflowJobs+ GitHub.Endpoints.Actions.WorkflowRuns GitHub.Endpoints.Activity.Events GitHub.Endpoints.Activity.Notifications GitHub.Endpoints.Activity.Starring@@ -142,6 +159,7 @@ GitHub.Endpoints.PullRequests.Comments GitHub.Endpoints.PullRequests.Reviews GitHub.Endpoints.RateLimit+ GitHub.Endpoints.Reactions GitHub.Endpoints.Repos GitHub.Endpoints.Repos.Collaborators GitHub.Endpoints.Repos.Comments@@ -163,37 +181,37 @@ GitHub.Internal.Prelude GitHub.Request - other-modules: Paths_github+ other-modules: Paths_github+ autogen-modules: Paths_github -- Packages bundles with GHC, mtl and text are also here+ -- Lower bounds at least those of https://www.stackage.org/lts-10.0 (GHC 8.2.2) build-depends:- base >=4.7 && <5- , binary >=0.7.1.0 && <0.11- , bytestring >=0.10.4.0 && <0.12- , containers >=0.5.5.1 && <0.7- , deepseq >=1.3.0.2 && <1.5- , mtl >=2.1.3.1 && <2.2 || >=2.2.1 && <2.4- , text >=1.2.0.6 && <2.1- , time-compat >=1.9.2.2 && <1.10- , transformers >=0.3.0.0 && <0.7+ base >=4.10 && <5+ , binary >=0.8.5.1 && <0.11+ , bytestring >=0.10.8.2 && <0.13+ , containers >=0.5.10.2 && <1+ , deepseq >=1.4.3.0 && <1.6+ , exceptions >=0.10.2 && <0.11+ , mtl >=2.2.1 && <2.4+ , text >=1.2.2.2 && <2.2+ , time >=1.8.0.2 && <2+ , transformers >=0.5.2.0 && <0.7 -- other packages build-depends:- aeson >=1.4.0.0 && <1.6 || >=2.0.1.0 && <2.2- , base-compat >=0.11.1 && <0.13+ aeson >=1.4.0.0 && <1.6 || >=2.0.1.0 && <2.3+ , base-compat >=0.11.1 && <1 , base16-bytestring >=0.1.1.6 && <1.1 , binary-instances >=1 && <1.1 , cryptohash-sha1 >=0.11.100.1 && <0.12- , deepseq-generics >=0.2.0.0 && <0.3- , exceptions >=0.10.2 && <0.11- , hashable >=1.2.7.0 && <1.5+ , hashable >=1.2.7.0 && <2 , http-client >=0.5.12 && <0.8 , http-link-header >=1.0.3.1 && <1.3 , http-types >=0.12.3 && <0.13 , iso8601-time >=0.1.5 && <0.2 , network-uri >=2.6.1.0 && <2.7 , tagged >=0.8.5 && <0.9- , transformers-compat >=0.6.5 && <0.8 , unordered-containers >=0.2.10.0 && <0.3 , vector >=0.12.0.1 && <0.14 @@ -205,21 +223,24 @@ else build-depends:- http-client-tls >=0.3.5.3 && <0.4+ http-client-tls >=0.3.5.3 && <0.5 , tls >=1.4.1 - if !impl(ghc >=8.0)- build-depends: semigroups >=0.18.5 && <0.20- test-suite github-test default-language: Haskell2010 type: exitcode-stdio-1.0 hs-source-dirs: spec main-is: Spec.hs ghc-options: -Wall -threaded- build-tool-depends: hspec-discover:hspec-discover >=2.7.1 && <2.11+ build-tool-depends: hspec-discover:hspec-discover >=2.7.1 && <2.12 other-extensions: TemplateHaskell other-modules:+ GitHub.Actions.ArtifactsSpec+ GitHub.Actions.CacheSpec+ GitHub.Actions.SecretsSpec+ GitHub.Actions.WorkflowJobSpec+ GitHub.Actions.WorkflowRunsSpec+ GitHub.Actions.WorkflowSpec GitHub.ActivitySpec GitHub.CommitsSpec GitHub.EventsSpec@@ -242,7 +263,8 @@ , bytestring , file-embed , github- , hspec >=2.6.1 && <2.11+ , hspec >=2.6.1 && <2.12+ , http-client , tagged , text , unordered-containers
+ spec/GitHub/Actions/ArtifactsSpec.hs view
@@ -0,0 +1,66 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+module GitHub.Actions.ArtifactsSpec where++import qualified GitHub as GH++import Prelude ()+import Prelude.Compat++import Data.Aeson (eitherDecodeStrict)+import Data.ByteString (ByteString)+import Data.Either.Compat (isRight)+import Data.FileEmbed (embedFile)+import Data.Foldable (for_)+import Data.String (fromString)+import qualified Data.Vector as V+import System.Environment (lookupEnv)+import Test.Hspec+ (Spec, describe, it, pendingWith, shouldBe, shouldSatisfy)++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++withAuth :: (GH.Auth -> IO ()) -> IO ()+withAuth action = do+ mtoken <- lookupEnv "GITHUB_TOKEN"+ case mtoken of+ Nothing -> pendingWith "no GITHUB_TOKEN"+ Just token -> action (GH.OAuth $ fromString token)++spec :: Spec+spec = do+ describe "artifactsForR" $ do+ it "works" $ withAuth $ \auth -> for_ repos $ \(owner, repo) -> do+ cs <- GH.executeRequest auth $+ GH.artifactsForR owner repo mempty GH.FetchAll+ cs `shouldSatisfy` isRight++ describe "decoding artifacts payloads" $ do+ it "decodes artifacts list payload" $ do+ GH.withTotalCountTotalCount artifactList `shouldBe` 23809+ V.length (GH.withTotalCountItems artifactList) `shouldBe` 2+ it "decodes signle artifact payload" $ do+ GH.artifactName artifact `shouldBe` "dist-without-markdown"+ GH.artifactWorkflowRunHeadSha (GH.artifactWorkflowRun artifact) `shouldBe` "601593ecb1d8a57a04700fdb445a28d4186b8954"++ where+ repos =+ [ ("thoughtbot", "paperclip")+ , ("phadej", "github")+ ]++ artifactList :: GH.WithTotalCount GH.Artifact+ artifactList =+ fromRightS (eitherDecodeStrict artifactsListPayload)++ artifact :: GH.Artifact+ artifact =+ fromRightS (eitherDecodeStrict artifactPayload)++ artifactsListPayload :: ByteString+ artifactsListPayload = $(embedFile "fixtures/actions/artifacts-list.json")++ artifactPayload :: ByteString+ artifactPayload = $(embedFile "fixtures/actions/artifact.json")
+ spec/GitHub/Actions/CacheSpec.hs view
@@ -0,0 +1,53 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+module GitHub.Actions.CacheSpec where++import qualified GitHub as GH++import Prelude ()+import Prelude.Compat++import Data.Aeson (eitherDecodeStrict)+import Data.ByteString (ByteString)+import Data.FileEmbed (embedFile)+import qualified Data.Vector as V+import Test.Hspec (Spec, describe, it, shouldBe)++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++spec :: Spec+spec = do+ describe "decoding cache payloads" $ do+ it "decodes cache list payload" $ do+ V.length (GH.withTotalCountItems cacheList) `shouldBe` 1+ it "decodes cache usage for repo" $ do+ GH.repositoryCacheUsageFullName repoCacheUsage `shouldBe` "python/cpython"+ GH.repositoryCacheUsageActiveCachesSizeInBytes repoCacheUsage `shouldBe` 55000268087+ GH.repositoryCacheUsageActiveCachesCount repoCacheUsage `shouldBe` 171+ it "decodes cache usage for org" $ do+ GH.organizationCacheUsageTotalActiveCachesSizeInBytes orgCacheUsage `shouldBe` 26586+ GH.organizationCacheUsageTotalActiveCachesCount orgCacheUsage `shouldBe` 1++ where+ cacheList :: GH.WithTotalCount GH.Cache+ cacheList =+ fromRightS (eitherDecodeStrict cacheListPayload)++ repoCacheUsage :: GH.RepositoryCacheUsage+ repoCacheUsage =+ fromRightS (eitherDecodeStrict repoCacheUsagePayload)++ orgCacheUsage :: GH.OrganizationCacheUsage+ orgCacheUsage =+ fromRightS (eitherDecodeStrict orgCacheUsagePayload)++ cacheListPayload :: ByteString+ cacheListPayload = $(embedFile "fixtures/actions/cache-list.json")++ repoCacheUsagePayload :: ByteString+ repoCacheUsagePayload = $(embedFile "fixtures/actions/repo-cache-usage.json")++ orgCacheUsagePayload :: ByteString+ orgCacheUsagePayload = $(embedFile "fixtures/actions/org-cache-usage.json")
+ spec/GitHub/Actions/SecretsSpec.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+module GitHub.Actions.SecretsSpec where++import qualified GitHub as GH++import Prelude ()+import Prelude.Compat++import Data.Aeson (eitherDecodeStrict)+import Data.ByteString (ByteString)+import Data.FileEmbed (embedFile)+import qualified Data.Vector as V+import Test.Hspec (Spec, describe, it, shouldBe)++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++spec :: Spec+spec = do+ describe "decoding secrets payloads" $ do+ it "decodes selected repo list payload" $ do+ V.length (GH.withTotalCountItems repoList) `shouldBe` 1+ it "decodes secret list payload" $ do+ V.length (GH.withTotalCountItems orgSecretList) `shouldBe` 2+ it "decodes public key payload" $ do+ GH.publicKeyId orgPublicKey `shouldBe` "568250167242549743"++ where+ repoList :: GH.WithTotalCount GH.SelectedRepo+ repoList =+ fromRightS (eitherDecodeStrict repoListPayload)++ orgSecretList:: GH.WithTotalCount GH.OrganizationSecret+ orgSecretList=+ fromRightS (eitherDecodeStrict orgSecretListPayload)++ orgPublicKey:: GH.PublicKey+ orgPublicKey=+ fromRightS (eitherDecodeStrict orgPublicKeyPayload)++ repoListPayload :: ByteString+ repoListPayload = $(embedFile "fixtures/actions/selected-repositories-for-secret.json")++ orgSecretListPayload :: ByteString+ orgSecretListPayload = $(embedFile "fixtures/actions/org-secrets-list.json")++ orgPublicKeyPayload :: ByteString+ orgPublicKeyPayload = $(embedFile "fixtures/actions/org-public-key.json")
+ spec/GitHub/Actions/WorkflowJobSpec.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+module GitHub.Actions.WorkflowJobSpec where++import qualified GitHub as GH+import GitHub.Data.Id++import Prelude ()+import Prelude.Compat++import Data.Aeson (eitherDecodeStrict)+import Data.ByteString (ByteString)+import Data.FileEmbed (embedFile)+import Test.Hspec (Spec, describe, it, shouldBe)++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++spec :: Spec+spec = do+ describe "decoding workflow jobs payloads" $ do+ it "decodes workflow job" $ do+ GH.jobId workflowJob `shouldBe` Id 9183275828++ where+ workflowJob:: GH.Job+ workflowJob=+ fromRightS (eitherDecodeStrict workflowJobPayload)++ workflowJobPayload :: ByteString+ workflowJobPayload = $(embedFile "fixtures/actions/workflow-job.json")
+ spec/GitHub/Actions/WorkflowRunsSpec.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+module GitHub.Actions.WorkflowRunsSpec where++import qualified GitHub as GH++import Prelude ()+import Prelude.Compat++import Data.Aeson (eitherDecodeStrict)+import Data.ByteString (ByteString)+import Data.FileEmbed (embedFile)+import qualified Data.Vector as V+import Test.Hspec (Spec, describe, it, shouldBe)++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++spec :: Spec+spec = do+ describe "decoding workflow runs payloads" $ do+ it "decodes workflow runs list" $ do+ V.length (GH.withTotalCountItems workflowRunsList) `shouldBe` 3++ where+ workflowRunsList:: GH.WithTotalCount GH.WorkflowRun+ workflowRunsList =+ fromRightS (eitherDecodeStrict workflowRunsPayload)++ workflowRunsPayload :: ByteString+ workflowRunsPayload = $(embedFile "fixtures/actions/workflow-runs-list.json")
+ spec/GitHub/Actions/WorkflowSpec.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+module GitHub.Actions.WorkflowSpec where++import qualified GitHub as GH++import Prelude ()+import Prelude.Compat++import Data.Aeson (eitherDecodeStrict)+import Data.ByteString (ByteString)+import Data.FileEmbed (embedFile)+import qualified Data.Vector as V+import Test.Hspec (Spec, describe, it, shouldBe)++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++spec :: Spec+spec = do+ describe "decoding workflow payloads" $ do+ it "decodes workflow list" $ do+ V.length (GH.withTotalCountItems workflowList) `shouldBe` 1++ where+ workflowList:: GH.WithTotalCount GH.Workflow+ workflowList =+ fromRightS (eitherDecodeStrict workflowPayload)++ workflowPayload :: ByteString+ workflowPayload = $(embedFile "fixtures/actions/workflow-list.json")
spec/GitHub/IssuesSpec.hs view
@@ -6,13 +6,14 @@ import Prelude () import Prelude.Compat -import Data.Either.Compat (isRight)-import Data.Foldable (for_)-import Data.String (fromString)-import System.Environment (lookupEnv)-import Test.Hspec- (Spec, describe, expectationFailure, it, pendingWith, shouldSatisfy)+import Data.Either.Compat (isRight)+import Data.Foldable (for_)+import Data.String (fromString)+import Network.HTTP.Client (newManager, responseBody)+import System.Environment (lookupEnv)+import Test.Hspec (Spec, describe, expectationFailure, it, pendingWith, shouldSatisfy) + fromRightS :: Show a => Either a b -> b fromRightS (Right b) = b fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a@@ -38,6 +39,25 @@ cms <- GitHub.executeRequest auth $ GitHub.commentsR owner repo (GitHub.issueNumber i) 1 cms `shouldSatisfy` isRight++ describe "issuesForRepoR paged" $ do+ it "works" $ withAuth $ \auth -> for_ repos $ \(owner, repo) -> do+ mgr <- newManager GitHub.tlsManagerSettings+ ret <- GitHub.executeRequestWithMgrAndRes mgr auth $+ GitHub.issuesForRepoR owner repo mempty (GitHub.FetchPage (GitHub.PageParams (Just 2) (Just 1)))++ case ret of+ Left e ->+ expectationFailure . show $ e+ Right res -> do+ let issues = responseBody res+ length issues `shouldSatisfy` (<= 2)++ for_ issues $ \i -> do+ cms <- GitHub.executeRequest auth $+ GitHub.commentsR owner repo (GitHub.issueNumber i) 1+ cms `shouldSatisfy` isRight+ describe "issueR" $ do it "fetches issue #428" $ withAuth $ \auth -> do resIss <- GitHub.executeRequest auth $
spec/GitHub/ReposSpec.hs view
@@ -1,4 +1,10 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-}++#if __GLASGOW_HASKELL__ >= 900+{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}+#endif+ module GitHub.ReposSpec where import GitHub
src/GitHub.hs view
@@ -1,8 +1,4 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- This module re-exports all request constructors and data definitions from -- this package. --@@ -16,7 +12,7 @@ -- -- The missing endpoints lists show which endpoints we know are missing, there -- might be more.---+ module GitHub ( -- * Activity -- | See <https://developer.github.com/v3/activity/>@@ -177,6 +173,7 @@ membersOfWithR, isMemberOfR, orgInvitationsR,+ orgMembershipR, -- ** Outside Collaborators -- | See <https://developer.github.com/v3/orgs/outside_collaborators/> --@@ -289,6 +286,15 @@ commitR, diffR, + -- ** Reactions+ -- | See <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28>+ issueReactionsR,+ createIssueReactionR,+ deleteIssueReactionR,+ commentReactionsR,+ createCommentReactionR,+ deleteCommentReactionR,+ -- ** Contents -- | See <https://developer.github.com/v3/repos/contents/> contentsForR,@@ -413,6 +419,76 @@ -- | See <https://developer.github.com/v3/rate_limit/> rateLimitR, + -- ** Actions - artifacts+ -- | See <https://docs.github.com/en/rest/actions/artifacts>+ artifactsForR,+ artifactR,+ deleteArtifactR,+ downloadArtifactR,+ artifactsForWorkflowRunR,++ -- ** Actions - cache+ -- | See <https://docs.github.com/en/rest/actions/cache>+ cacheUsageOrganizationR,+ cacheUsageByRepositoryR,+ cacheUsageR,+ cachesForRepoR,+ deleteCacheR,++ -- ** Actions - secrets+ -- | See <https://docs.github.com/en/rest/actions/secrets>+ organizationSecretsR,+ organizationPublicKeyR,+ organizationSecretR,+ setOrganizationSecretR,+ deleteOrganizationSecretR,+ organizationSelectedRepositoriesForSecretR,+ setOrganizationSelectedRepositoriesForSecretR,+ addOrganizationSelectedRepositoriesForSecretR,+ removeOrganizationSelectedRepositoriesForSecretR,+ repoSecretsR,+ repoPublicKeyR,+ repoSecretR,+ setRepoSecretR,+ deleteRepoSecretR,+ environmentSecretsR,+ environmentPublicKeyR,+ environmentSecretR,+ setEnvironmentSecretR,+ deleteEnvironmentSecretR,++ -- ** Actions - workflow jobs+ -- | See <https://docs.github.com/en/rest/actions/workflow-jobs>+ jobR,+ downloadJobLogsR,+ jobsForWorkflowRunAttemptR,+ jobsForWorkflowRunR,++ -- ** Actions - workflow runs+ -- | See <https://docs.github.com/en/rest/actions/workflow-runs>+ reRunJobR,+ workflowRunsR,+ workflowRunR,+ deleteWorkflowRunR,+ workflowRunReviewHistoryR,+ approveWorkflowRunR,+ workflowRunAttemptR,+ downloadWorkflowRunAttemptLogsR,+ cancelWorkflowRunR,+ downloadWorkflowRunLogsR,+ deleteWorkflowRunLogsR,+ reRunWorkflowR,+ reRunFailedJobsR,+ workflowRunsForWorkflowR,++ -- ** Actions - workflows+ -- | See <https://docs.github.com/en/rest/actions/workflows>+ repositoryWorkflowsR,+ workflowR,+ disableWorkflowR,+ triggerWorkflowR,+ enableWorkflowR,+ -- * Data definitions module GitHub.Data, -- * Request handling@@ -420,6 +496,12 @@ ) where import GitHub.Data+import GitHub.Endpoints.Actions.Artifacts+import GitHub.Endpoints.Actions.Cache+import GitHub.Endpoints.Actions.Secrets+import GitHub.Endpoints.Actions.WorkflowJobs+import GitHub.Endpoints.Actions.WorkflowRuns+import GitHub.Endpoints.Actions.Workflows import GitHub.Endpoints.Activity.Events import GitHub.Endpoints.Activity.Notifications import GitHub.Endpoints.Activity.Starring@@ -442,6 +524,7 @@ import GitHub.Endpoints.PullRequests import GitHub.Endpoints.PullRequests.Comments import GitHub.Endpoints.PullRequests.Reviews+import GitHub.Endpoints.Reactions import GitHub.Endpoints.RateLimit import GitHub.Endpoints.Repos import GitHub.Endpoints.Repos.Collaborators
src/GitHub/Auth.hs view
@@ -1,10 +1,7 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Auth ( Auth (..),+ Token,+ JWTToken, AuthMethod, endpoint, setAuthRequest@@ -14,18 +11,21 @@ import Prelude () import qualified Data.ByteString as BS+import qualified Data.Text.Encoding as TE import qualified Network.HTTP.Client as HTTP type Token = BS.ByteString+type JWTToken = Text -- | The Github auth data type data Auth = BasicAuth BS.ByteString BS.ByteString -- ^ Username and password | OAuth Token -- ^ OAuth token+ | JWT JWTToken -- ^ JWT Token | EnterpriseOAuth Text Token -- ^ Custom endpoint and OAuth token- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Auth where rnf = genericRnf+instance NFData Auth instance Binary Auth instance Hashable Auth @@ -45,10 +45,12 @@ instance AuthMethod Auth where endpoint (BasicAuth _ _) = Nothing endpoint (OAuth _) = Nothing+ endpoint (JWT _) = Nothing endpoint (EnterpriseOAuth e _) = Just e setAuthRequest (BasicAuth u p) = HTTP.applyBasicAuth u p setAuthRequest (OAuth t) = setAuthHeader $ "token " <> t+ setAuthRequest (JWT t) = setAuthHeader $ "Bearer " <> TE.encodeUtf8 t setAuthRequest (EnterpriseOAuth _ t) = setAuthHeader $ "token " <> t setAuthHeader :: BS.ByteString -> HTTP.Request -> HTTP.Request
src/GitHub/Data.hs view
@@ -1,10 +1,6 @@-{-# LANGUAGE CPP #-}------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- This module re-exports the @GitHub.Data.@ and "GitHub.Auth" submodules.+ module GitHub.Data ( -- * Tagged types -- ** Name@@ -34,6 +30,13 @@ IssueNumber (..), -- * Module re-exports module GitHub.Auth,+ module GitHub.Data.Actions.Common,+ module GitHub.Data.Actions.Artifacts,+ module GitHub.Data.Actions.Cache,+ module GitHub.Data.Actions.Secrets,+ module GitHub.Data.Actions.Workflows,+ module GitHub.Data.Actions.WorkflowJobs,+ module GitHub.Data.Actions.WorkflowRuns, module GitHub.Data.Activities, module GitHub.Data.Comments, module GitHub.Data.Content,@@ -52,6 +55,7 @@ module GitHub.Data.PullRequests, module GitHub.Data.RateLimit, module GitHub.Data.Releases,+ module GitHub.Data.Reactions, module GitHub.Data.Repos, module GitHub.Data.Request, module GitHub.Data.Reviews,@@ -67,6 +71,13 @@ import Prelude () import GitHub.Auth+import GitHub.Data.Actions.Common+import GitHub.Data.Actions.Artifacts+import GitHub.Data.Actions.Secrets+import GitHub.Data.Actions.Cache+import GitHub.Data.Actions.Workflows+import GitHub.Data.Actions.WorkflowJobs+import GitHub.Data.Actions.WorkflowRuns import GitHub.Data.Activities import GitHub.Data.Comments import GitHub.Data.Content@@ -87,6 +98,7 @@ import GitHub.Data.PullRequests import GitHub.Data.RateLimit import GitHub.Data.Releases+import GitHub.Data.Reactions import GitHub.Data.Repos import GitHub.Data.Request import GitHub.Data.Reviews
+ src/GitHub/Data/Actions/Artifacts.hs view
@@ -0,0 +1,76 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}++module GitHub.Data.Actions.Artifacts (+ Artifact(..),+ ArtifactWorkflowRun(..),+ ) where++import GitHub.Data.Id (Id)+import GitHub.Data.URL (URL)+import GitHub.Internal.Prelude+import Prelude ()++import GitHub.Data.Actions.Common (WithTotalCount (WithTotalCount))+import GitHub.Data.Actions.WorkflowRuns (WorkflowRun)+import GitHub.Data.Repos (Repo)++-------------------------------------------------------------------------------+-- Artifact+-------------------------------------------------------------------------------++data ArtifactWorkflowRun = ArtifactWorkflowRun+ { artifactWorkflowRunWorkflowRunId :: !(Id WorkflowRun)+ , artifactWorkflowRunRepositoryId :: !(Id Repo)+ , artifactWorkflowRunHeadRepositoryId :: !(Id Repo)+ , artifactWorkflowRunHeadBranch :: !Text+ , artifactWorkflowRunHeadSha :: !Text+ }+ deriving (Show, Data, Eq, Ord, Generic)++data Artifact = Artifact+ { artifactArchiveDownloadUrl :: !URL+ , artifactCreatedAt :: !UTCTime+ , artifactExpired :: !Bool+ , artifactExpiresAt :: !UTCTime+ , artifactId :: !(Id Artifact)+ , artifactName :: !Text+ , artifactNodeId :: !Text+ , artifactSizeInBytes :: !Int+ , artifactUpdatedAt :: !UTCTime+ , artifactUrl :: !URL+ , artifactWorkflowRun :: !ArtifactWorkflowRun+ }+ deriving (Show, Data, Eq, Ord, Generic)++-------------------------------------------------------------------------------+-- JSON instances+-------------------------------------------------------------------------------++instance FromJSON ArtifactWorkflowRun where+ parseJSON = withObject "ArtifactWorkflowRun" $ \o -> ArtifactWorkflowRun+ <$> o .: "id"+ <*> o .: "repository_id"+ <*> o .: "head_repository_id"+ <*> o .: "head_branch"+ <*> o .: "head_sha"++instance FromJSON Artifact where+ parseJSON = withObject "Artifact" $ \o -> Artifact+ <$> o .: "archive_download_url"+ <*> o .: "created_at"+ <*> o .: "expired"+ <*> o .: "expires_at"+ <*> o .: "id"+ <*> o .: "name"+ <*> o .: "node_id"+ <*> o .: "size_in_bytes"+ <*> o .: "updated_at"+ <*> o .: "url"+ <*> o .: "workflow_run"++instance FromJSON (WithTotalCount Artifact) where+ parseJSON = withObject "ArtifactList" $ \o -> WithTotalCount+ <$> o .: "artifacts"+ <*> o .: "total_count"
+ src/GitHub/Data/Actions/Cache.hs view
@@ -0,0 +1,78 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}++module GitHub.Data.Actions.Cache (+ Cache(..),+ RepositoryCacheUsage(..),+ OrganizationCacheUsage(..)+ ) where++import GitHub.Data.Id (Id)+import GitHub.Internal.Prelude+import Prelude ()++import GitHub.Data.Actions.Common (WithTotalCount (WithTotalCount))++-------------------------------------------------------------------------------+-- Cache+-------------------------------------------------------------------------------++data Cache = Cache+ { cacheId :: !(Id Cache)+ , cacheRef :: !Text+ , cacheKey :: !Text+ , cacheVersion :: !Text+ , cacheLastAccessedAt :: !UTCTime+ , cacheCreatedAt :: !UTCTime+ , cacheSizeInBytes :: !Int+ }+ deriving (Show, Data, Eq, Ord, Generic)++data RepositoryCacheUsage = RepositoryCacheUsage+ { repositoryCacheUsageFullName :: !Text+ , repositoryCacheUsageActiveCachesSizeInBytes :: !Int+ , repositoryCacheUsageActiveCachesCount :: !Int+ }+ deriving (Show, Data, Eq, Ord, Generic)++data OrganizationCacheUsage = OrganizationCacheUsage+ { organizationCacheUsageTotalActiveCachesSizeInBytes :: !Int+ , organizationCacheUsageTotalActiveCachesCount :: !Int+ }+ deriving (Show, Data, Eq, Ord, Generic)++-------------------------------------------------------------------------------+-- JSON instances+-------------------------------------------------------------------------------++instance FromJSON Cache where+ parseJSON = withObject "Cache" $ \o -> Cache+ <$> o .: "id"+ <*> o .: "ref"+ <*> o .: "key"+ <*> o .: "version"+ <*> o .: "last_accessed_at"+ <*> o .: "created_at"+ <*> o .: "size_in_bytes"++instance FromJSON (WithTotalCount Cache) where+ parseJSON = withObject "CacheList" $ \o -> WithTotalCount+ <$> o .: "actions_caches"+ <*> o .: "total_count"++instance FromJSON OrganizationCacheUsage where+ parseJSON = withObject "OrganizationCacheUsage" $ \o -> OrganizationCacheUsage+ <$> o .: "total_active_caches_size_in_bytes"+ <*> o .: "total_active_caches_count"++instance FromJSON RepositoryCacheUsage where+ parseJSON = withObject "RepositoryCacheUsage" $ \o -> RepositoryCacheUsage+ <$> o .: "full_name"+ <*> o .: "active_caches_size_in_bytes"+ <*> o .: "active_caches_count"++instance FromJSON (WithTotalCount RepositoryCacheUsage) where+ parseJSON = withObject "CacheUsageList" $ \o -> WithTotalCount+ <$> o .: "repository_cache_usages"+ <*> o .: "total_count"
+ src/GitHub/Data/Actions/Common.hs view
@@ -0,0 +1,33 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}++module GitHub.Data.Actions.Common (+ WithTotalCount(..),+ ) where++import GitHub.Internal.Prelude+import Prelude ()++-------------------------------------------------------------------------------+-- Common+-------------------------------------------------------------------------------++-- | A page of a paginated response.+data WithTotalCount a = WithTotalCount+ { withTotalCountItems :: !(Vector a)+ -- ^ A snippet of the answer.+ , withTotalCountTotalCount :: !Int+ -- ^ The total size of the answer.+ }+ deriving (Show, Data, Eq, Ord, Generic)++-- | Joining two pages of a paginated response.+-- The 'withTotalCountTotalCount' is assumed to be the same in both pages,+-- but this is not checked.+instance Semigroup (WithTotalCount a) where+ WithTotalCount items1 count1 <> WithTotalCount items2 _ =+ WithTotalCount (items1 <> items2) count1++instance Foldable WithTotalCount where+ foldMap f (WithTotalCount items _) = foldMap f items
+ src/GitHub/Data/Actions/Secrets.hs view
@@ -0,0 +1,141 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE RecordWildCards #-}++module GitHub.Data.Actions.Secrets (+ OrganizationSecret(..),+ PublicKey(..),+ SetSecret(..),+ SetRepoSecret(..),+ SelectedRepo(..),+ SetSelectedRepositories(..),+ RepoSecret(..),+ Environment(..),+ ) where++import GitHub.Data.Id (Id)+import GitHub.Internal.Prelude+import Prelude ()++import Data.Maybe (maybeToList)+import GitHub.Data.Actions.Common (WithTotalCount (WithTotalCount))+import GitHub.Data.Name (Name)+import GitHub.Data.Repos (Repo)++-------------------------------------------------------------------------------+-- Secret+-------------------------------------------------------------------------------++data OrganizationSecret = OrganizationSecret+ { organizationSecretName :: !(Name OrganizationSecret)+ , organizationSecretCreatedAt :: !UTCTime+ , organizationSecretUpdatedAt :: !UTCTime+ , organizationSecretVisibility :: !Text+ }+ deriving (Show, Data, Eq, Ord, Generic)++data PublicKey = PublicKey+ { publicKeyId :: !Text+ , publicKeyKey :: !Text+ }+ deriving (Show, Data, Eq, Ord, Generic)++data SetSecret = SetSecret+ { setSecretPublicKeyId :: !Text+ , setSecretEncryptedValue :: !Text+ , setSecretVisibility :: !Text+ , setSecretSelectedRepositoryIds :: !(Maybe [Id Repo])+ }+ deriving (Show, Data, Eq, Ord, Generic)++data SetRepoSecret = SetRepoSecret+ { setRepoSecretPublicKeyId :: !Text+ , setRepoSecretEncryptedValue :: !Text+ }+ deriving (Show, Data, Eq, Ord, Generic)++data SelectedRepo = SelectedRepo+ { selectedRepoRepoId :: !(Id Repo)+ , selectedRepoRepoName :: !(Name Repo)+ }+ deriving (Show, Data, Eq, Ord, Generic)++data SetSelectedRepositories = SetSelectedRepositories+ { setSelectedRepositoriesRepositoryIds :: ![Id Repo]+ }+ deriving (Show, Data, Eq, Ord, Generic)++data RepoSecret = RepoSecret+ { repoSecretName :: !(Name RepoSecret)+ , repoSecretCreatedAt :: !UTCTime+ , repoSecretUpdatedAt :: !UTCTime+ }+ deriving (Show, Data, Eq, Ord, Generic)++-- TODO move somewhere else?+data Environment = Environment+ deriving (Show, Data, Eq, Ord, Generic)++-------------------------------------------------------------------------------+-- JSON instances+-------------------------------------------------------------------------------++instance FromJSON OrganizationSecret where+ parseJSON = withObject "Secret" $ \o -> OrganizationSecret+ <$> o .: "name"+ <*> o .: "created_at"+ <*> o .: "updated_at"+ <*> o .: "visibility"++instance FromJSON (WithTotalCount OrganizationSecret) where+ parseJSON = withObject "SecretList" $ \o -> WithTotalCount+ <$> o .: "secrets"+ <*> o .: "total_count"++instance FromJSON PublicKey where+ parseJSON = withObject "PublicKey" $ \o -> PublicKey+ <$> o .: "key_id"+ <*> o .: "key"++instance FromJSON SelectedRepo where+ parseJSON = withObject "SelectedRepo" $ \o -> SelectedRepo+ <$> o .: "id"+ <*> o .: "name"++instance ToJSON SetSelectedRepositories where+ toJSON SetSelectedRepositories{..} =+ object+ [ "selected_repository_ids" .= setSelectedRepositoriesRepositoryIds+ ]++instance ToJSON SetSecret where+ toJSON SetSecret{..} =+ object $+ [ "encrypted_value" .= setSecretEncryptedValue+ , "key_id" .= setSecretPublicKeyId+ , "visibility" .= setSecretVisibility+ ] <> maybeToList (fmap ("selected_repository_ids" .=) setSecretSelectedRepositoryIds)++instance ToJSON SetRepoSecret where+ toJSON SetRepoSecret{..} =+ object+ [ "encrypted_value" .= setRepoSecretEncryptedValue+ , "key_id" .= setRepoSecretPublicKeyId+ ]++instance FromJSON (WithTotalCount SelectedRepo) where+ parseJSON = withObject "SelectedRepoList" $ \o -> WithTotalCount+ <$> o .: "repositories"+ <*> o .: "total_count"++instance FromJSON RepoSecret where+ parseJSON = withObject "RepoSecret" $ \o -> RepoSecret+ <$> o .: "name"+ <*> o .: "created_at"+ <*> o .: "updated_at"++instance FromJSON (WithTotalCount RepoSecret) where+ parseJSON = withObject "RepoSecretList" $ \o -> WithTotalCount+ <$> o .: "secrets"+ <*> o .: "total_count"
+ src/GitHub/Data/Actions/WorkflowJobs.hs view
@@ -0,0 +1,100 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}++module GitHub.Data.Actions.WorkflowJobs (+ JobStep(..),+ Job(..),+ ) where++import Prelude ()+import GitHub.Internal.Prelude+ (Applicative ((<*>)), Data, Eq, FromJSON (parseJSON), Generic, Integer,+ Ord, Show, Text, UTCTime, Vector, withObject, ($), (.:),+ (<$>))++import GitHub.Data.Id (Id)+import GitHub.Data.Name (Name)+import GitHub.Data.URL (URL)++import GitHub.Data.Actions.Common (WithTotalCount (WithTotalCount))+import GitHub.Data.Actions.WorkflowRuns (WorkflowRun)++-------------------------------------------------------------------------------+-- Workflow jobs+-------------------------------------------------------------------------------++data JobStep = JobStep+ { jobStepName :: !(Name JobStep)+ , jobStepStatus :: !Text+ , jobStepConclusion :: !Text+ , jobStepNumber :: !Integer+ , jobStepStartedAt :: !UTCTime+ , jobStepCompletedAt :: !UTCTime+ }+ deriving (Show, Data, Eq, Ord, Generic)++data Job = Job+ { jobId :: !(Id Job)+ , jobRunId :: !(Id WorkflowRun)+ , jobRunUrl :: !URL+ , jobRunAttempt :: !Integer+ , jobNodeId :: !Text+ , jobHeadSha :: !Text+ , jobUrl :: !URL+ , jobHtmlUrl :: !URL+ , jobStatus :: !Text+ , jobConclusion :: !Text+ , jobStartedAt :: !UTCTime+ , jobCompletedAt :: !UTCTime+ , jobName :: !(Name Job)+ , jobSteps :: !(Vector JobStep)+ , jobRunCheckUrl :: !URL+ , jobLabels :: !(Vector Text)+ , jobRunnerId :: !Integer+ , jobRunnerName :: !Text+ , jobRunnerGroupId :: !Integer+ , jobRunnerGroupName :: !Text+ }+ deriving (Show, Data, Eq, Ord, Generic)++-------------------------------------------------------------------------------+-- JSON instances+-------------------------------------------------------------------------------++instance FromJSON JobStep where+ parseJSON = withObject "JobStep" $ \o -> JobStep+ <$> o .: "name"+ <*> o .: "status"+ <*> o .: "conclusion"+ <*> o .: "number"+ <*> o .: "started_at"+ <*> o .: "completed_at"++instance FromJSON Job where+ parseJSON = withObject "Job" $ \o -> Job+ <$> o .: "id"+ <*> o .: "run_id"+ <*> o .: "run_url"+ <*> o .: "run_attempt"+ <*> o .: "node_id"+ <*> o .: "head_sha"+ <*> o .: "url"+ <*> o .: "html_url"+ <*> o .: "status"+ <*> o .: "conclusion"+ <*> o .: "started_at"+ <*> o .: "completed_at"+ <*> o .: "name"+ <*> o .: "steps"+ <*> o .: "check_run_url"+ <*> o .: "labels"+ <*> o .: "runner_id"+ <*> o .: "runner_name"+ <*> o .: "runner_group_id"+ <*> o .: "runner_group_name"++instance FromJSON (WithTotalCount Job) where+ parseJSON = withObject "JobList" $ \o -> WithTotalCount+ <$> o .: "jobs"+ <*> o .: "total_count"
+ src/GitHub/Data/Actions/WorkflowRuns.hs view
@@ -0,0 +1,91 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}++module GitHub.Data.Actions.WorkflowRuns (+ WorkflowRun(..),+ RunAttempt(..),+ ReviewHistory(..),+ ) where++import GitHub.Data.Actions.Common (WithTotalCount (WithTotalCount))+import GitHub.Data.Definitions+import GitHub.Data.URL (URL)+import GitHub.Internal.Prelude+import Prelude ()++import GitHub.Data.Id (Id)+import GitHub.Data.Name (Name)++-------------------------------------------------------------------------------+-- Workflow runs+-------------------------------------------------------------------------------++data WorkflowRun = WorkflowRun+ { workflowRunWorkflowRunId :: !(Id WorkflowRun)+ , workflowRunName :: !(Name WorkflowRun)+ , workflowRunHeadBranch :: !Text+ , workflowRunHeadSha :: !Text+ , workflowRunPath :: !Text+ , workflowRunDisplayTitle :: !Text+ , workflowRunRunNumber :: !Integer+ , workflowRunEvent :: !Text+ , workflowRunStatus :: !Text+ , workflowRunConclusion :: !(Maybe Text)+ , workflowRunWorkflowId :: !Integer+ , workflowRunUrl :: !URL+ , workflowRunHtmlUrl :: !URL+ , workflowRunCreatedAt :: !UTCTime+ , workflowRunUpdatedAt :: !UTCTime+ , workflowRunActor :: !SimpleUser+ , workflowRunAttempt :: !Integer+ , workflowRunStartedAt :: !UTCTime+ }+ deriving (Show, Data, Eq, Ord, Generic)++data RunAttempt = RunAttempt+ deriving (Show, Data, Eq, Ord, Generic)++data ReviewHistory = ReviewHistory+ { reviewHistoryState :: !Text+ , reviewHistoryComment :: !Text+ , reviewHistoryUser :: !SimpleUser++ }+ deriving (Show, Data, Eq, Ord, Generic)++-------------------------------------------------------------------------------+-- JSON instances+-------------------------------------------------------------------------------++instance FromJSON WorkflowRun where+ parseJSON = withObject "WorkflowRun" $ \o -> WorkflowRun+ <$> o .: "id"+ <*> o .: "name"+ <*> o .: "head_branch"+ <*> o .: "head_sha"+ <*> o .: "path"+ <*> o .: "display_title"+ <*> o .: "run_number"+ <*> o .: "event"+ <*> o .: "status"+ <*> o .: "conclusion"+ <*> o .: "workflow_id"+ <*> o .: "url"+ <*> o .: "html_url"+ <*> o .: "created_at"+ <*> o .: "updated_at"+ <*> o .: "actor"+ <*> o .: "run_attempt"+ <*> o .: "run_started_at"++instance FromJSON (WithTotalCount WorkflowRun) where+ parseJSON = withObject "WorkflowRunList" $ \o -> WithTotalCount+ <$> o .: "workflow_runs"+ <*> o .: "total_count"++instance FromJSON ReviewHistory where+ parseJSON = withObject "ReviewHistory" $ \o -> ReviewHistory+ <$> o .: "state"+ <*> o .: "comment"+ <*> o .: "user"
+ src/GitHub/Data/Actions/Workflows.hs view
@@ -0,0 +1,62 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}++module GitHub.Data.Actions.Workflows (+ Workflow(..),+ CreateWorkflowDispatchEvent(..),+ ) where++import Prelude ()+import GitHub.Internal.Prelude++import GitHub.Data.Actions.Common (WithTotalCount (WithTotalCount))+import GitHub.Data.Id (Id)+import GitHub.Data.URL (URL)++data Workflow = Workflow+ { workflowWorkflowId :: !(Id Workflow)+ , workflowName :: !Text+ , workflowPath :: !Text+ , workflowState :: !Text+ , workflowCreatedAt :: !UTCTime+ , workflowUpdatedAt :: !UTCTime+ , workflowUrl :: !URL+ , workflowHtmlUrl :: !URL+ , workflowBadgeUrl :: !URL+ }+ deriving (Show, Data, Eq, Ord, Generic)++data CreateWorkflowDispatchEvent a = CreateWorkflowDispatchEvent+ { createWorkflowDispatchEventRef :: !Text+ , createWorkflowDispatchEventInputs :: !a+ }+ deriving (Show, Generic)++instance (NFData a) => NFData (CreateWorkflowDispatchEvent a)+instance (Binary a) => Binary (CreateWorkflowDispatchEvent a)++-------------------------------------------------------------------------------+-- JSON instances+-------------------------------------------------------------------------------++instance FromJSON Workflow where+ parseJSON = withObject "Workflow" $ \o -> Workflow+ <$> o .: "id"+ <*> o .: "name"+ <*> o .: "path"+ <*> o .: "state"+ <*> o .: "created_at"+ <*> o .: "updated_at"+ <*> o .: "url"+ <*> o .: "html_url"+ <*> o .: "badge_url"++instance FromJSON (WithTotalCount Workflow) where+ parseJSON = withObject "WorkflowList" $ \o -> WithTotalCount+ <$> o .: "workflows"+ <*> o .: "total_count"++instance ToJSON a => ToJSON (CreateWorkflowDispatchEvent a) where+ toJSON (CreateWorkflowDispatchEvent ref inputs) =+ object [ "ref" .= ref, "inputs" .= inputs ]
src/GitHub/Data/Activities.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Activities where import GitHub.Data.Id (Id, mkId)@@ -18,9 +13,9 @@ { repoStarredStarredAt :: !UTCTime , repoStarredRepo :: !Repo }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RepoStarred where rnf = genericRnf+instance NFData RepoStarred instance Binary RepoStarred -- JSON Instances@@ -31,16 +26,16 @@ data Subject = Subject { subjectTitle :: !Text- , subjectURL :: !URL+ , subjectURL :: !(Maybe URL) , subjectLatestCommentURL :: !(Maybe URL) -- https://developer.github.com/v3/activity/notifications/ doesn't indicate -- what the possible values for this field are. -- TODO: Make an ADT for this. , subjectType :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Subject where rnf = genericRnf+instance NFData Subject instance Binary Subject instance FromJSON Subject where@@ -51,34 +46,44 @@ <*> o .: "type" data NotificationReason- = AssignReason+ = ApprovalRequestedReason+ | AssignReason | AuthorReason | CommentReason+ | CiActivityReason | InvitationReason | ManualReason+ | MemberFeatureRequestedReason | MentionReason | ReviewRequestedReason+ | SecurityAlertReason+ | SecurityAdvisoryCreditReason | StateChangeReason | SubscribedReason | TeamMentionReason- deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Enum, Bounded, Eq, Ord, Generic) -instance NFData NotificationReason where rnf = genericRnf+instance NFData NotificationReason instance Binary NotificationReason instance FromJSON NotificationReason where parseJSON = withText "NotificationReason" $ \t -> case T.toLower t of- "assign" -> pure AssignReason- "author" -> pure AuthorReason- "comment" -> pure CommentReason- "invitation" -> pure InvitationReason- "manual" -> pure ManualReason- "mention" -> pure MentionReason- "review_requested" -> pure ReviewRequestedReason- "state_change" -> pure StateChangeReason- "subscribed" -> pure SubscribedReason- "team_mention" -> pure TeamMentionReason- _ -> fail $ "Unknown NotificationReason " ++ show t+ "approval_requested" -> pure ApprovalRequestedReason+ "assign" -> pure AssignReason+ "author" -> pure AuthorReason+ "comment" -> pure CommentReason+ "ci_activity" -> pure CiActivityReason+ "invitation" -> pure InvitationReason+ "manual" -> pure ManualReason+ "member_feature_requested" -> pure MemberFeatureRequestedReason+ "mention" -> pure MentionReason+ "review_requested" -> pure ReviewRequestedReason+ "security_alert" -> pure SecurityAlertReason+ "security_advisory_credit" -> pure SecurityAdvisoryCreditReason+ "state_change" -> pure StateChangeReason+ "subscribed" -> pure SubscribedReason+ "team_mention" -> pure TeamMentionReason+ _ -> fail $ "Unknown NotificationReason " ++ show t data Notification = Notification -- XXX: The notification id field type IS in fact string. Not sure why gh@@ -92,9 +97,9 @@ , notificationLastReadAt :: !(Maybe UTCTime) , notificationUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Notification where rnf = genericRnf+instance NFData Notification instance Binary Notification instance FromJSON Notification where@@ -107,4 +112,3 @@ <*> o .: "updated_at" <*> o .: "last_read_at" <*> o .: "url"-
src/GitHub/Data/Comments.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Comments where import GitHub.Data.Definitions@@ -24,9 +19,9 @@ , commentUser :: !SimpleUser , commentId :: !(Id Comment) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Comment where rnf = genericRnf+instance NFData Comment instance Binary Comment instance FromJSON Comment where@@ -46,9 +41,9 @@ data NewComment = NewComment { newCommentBody :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData NewComment where rnf = genericRnf+instance NFData NewComment instance Binary NewComment instance ToJSON NewComment where@@ -57,9 +52,9 @@ data EditComment = EditComment { editCommentBody :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData EditComment where rnf = genericRnf+instance NFData EditComment instance Binary EditComment instance ToJSON EditComment where@@ -71,9 +66,9 @@ , newPullCommentPosition :: !Int , newPullCommentBody :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData NewPullComment where rnf = genericRnf+instance NFData NewPullComment instance Binary NewPullComment instance ToJSON NewPullComment where@@ -87,9 +82,9 @@ data PullCommentReply = PullCommentReply { pullCommentReplyBody :: Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData PullCommentReply where rnf = genericRnf+instance NFData PullCommentReply instance ToJSON PullCommentReply where toJSON (PullCommentReply b) =
src/GitHub/Data/Content.hs view
@@ -1,10 +1,6 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE CPP #-}--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>---+ module GitHub.Data.Content where import GitHub.Data.GitData@@ -22,9 +18,9 @@ data Content = ContentFile !ContentFileData | ContentDirectory !(Vector ContentItem)- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Content where rnf = genericRnf+instance NFData Content instance Binary Content data ContentFileData = ContentFileData {@@ -32,24 +28,24 @@ ,contentFileEncoding :: !Text ,contentFileSize :: !Int ,contentFileContent :: !Text-} deriving (Show, Data, Typeable, Eq, Ord, Generic)+} deriving (Show, Data, Eq, Ord, Generic) -instance NFData ContentFileData where rnf = genericRnf+instance NFData ContentFileData instance Binary ContentFileData -- | An item in a directory listing. data ContentItem = ContentItem { contentItemType :: !ContentItemType ,contentItemInfo :: !ContentInfo-} deriving (Show, Data, Typeable, Eq, Ord, Generic)+} deriving (Show, Data, Eq, Ord, Generic) -instance NFData ContentItem where rnf = genericRnf+instance NFData ContentItem instance Binary ContentItem data ContentItemType = ItemFile | ItemDir- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData ContentItemType where rnf = genericRnf+instance NFData ContentItemType instance Binary ContentItemType -- | Information common to both kinds of Content: files and directories.@@ -60,34 +56,34 @@ ,contentUrl :: !URL ,contentGitUrl :: !URL ,contentHtmlUrl :: !URL-} deriving (Show, Data, Typeable, Eq, Ord, Generic)+} deriving (Show, Data, Eq, Ord, Generic) -instance NFData ContentInfo where rnf = genericRnf+instance NFData ContentInfo instance Binary ContentInfo data ContentResultInfo = ContentResultInfo { contentResultInfo :: !ContentInfo , contentResultSize :: !Int- } deriving (Show, Data, Typeable, Eq, Ord, Generic)+ } deriving (Show, Data, Eq, Ord, Generic) -instance NFData ContentResultInfo where rnf = genericRnf+instance NFData ContentResultInfo instance Binary ContentResultInfo data ContentResult = ContentResult { contentResultContent :: !ContentResultInfo , contentResultCommit :: !GitCommit- } deriving (Show, Data, Typeable, Eq, Ord, Generic)+ } deriving (Show, Data, Eq, Ord, Generic) -instance NFData ContentResult where rnf = genericRnf+instance NFData ContentResult instance Binary ContentResult data Author = Author { authorName :: !Text , authorEmail :: !Text }- deriving (Eq, Ord, Show, Data, Typeable, Generic)+ deriving (Eq, Ord, Show, Data, Generic) -instance NFData Author where rnf = genericRnf+instance NFData Author instance Binary Author data CreateFile = CreateFile@@ -98,9 +94,9 @@ , createFileAuthor :: !(Maybe Author) , createFileCommitter :: !(Maybe Author) }- deriving (Eq, Ord, Show, Data, Typeable, Generic)+ deriving (Eq, Ord, Show, Data, Generic) -instance NFData CreateFile where rnf = genericRnf+instance NFData CreateFile instance Binary CreateFile data UpdateFile = UpdateFile@@ -112,9 +108,9 @@ , updateFileAuthor :: !(Maybe Author) , updateFileCommitter :: !(Maybe Author) }- deriving (Eq, Ord, Show, Data, Typeable, Generic)+ deriving (Eq, Ord, Show, Data, Generic) -instance NFData UpdateFile where rnf = genericRnf+instance NFData UpdateFile instance Binary UpdateFile data DeleteFile = DeleteFile@@ -125,9 +121,9 @@ , deleteFileAuthor :: !(Maybe Author) , deleteFileCommitter :: !(Maybe Author) }- deriving (Eq, Ord, Show, Data, Typeable, Generic)+ deriving (Eq, Ord, Show, Data, Generic) -instance NFData DeleteFile where rnf = genericRnf+instance NFData DeleteFile instance Binary DeleteFile instance FromJSON Content where
src/GitHub/Data/Definitions.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Definitions where import GitHub.Internal.Prelude@@ -27,13 +22,13 @@ | ParseError !Text -- ^ An error in the parser itself. | JsonError !Text -- ^ The JSON is malformed or unexpected. | UserError !Text -- ^ Incorrect input.- deriving (Show, Typeable)+ deriving (Show) instance E.Exception Error -- | Type of the repository owners. data OwnerType = OwnerUser | OwnerOrganization | OwnerBot- deriving (Eq, Ord, Enum, Bounded, Show, Read, Generic, Typeable, Data)+ deriving (Eq, Ord, Enum, Bounded, Show, Read, Generic, Data) instance NFData OwnerType instance Binary OwnerType@@ -44,9 +39,9 @@ , simpleUserAvatarUrl :: !URL , simpleUserUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData SimpleUser where rnf = genericRnf+instance NFData SimpleUser instance Binary SimpleUser data SimpleOrganization = SimpleOrganization@@ -55,9 +50,9 @@ , simpleOrganizationUrl :: !URL , simpleOrganizationAvatarUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData SimpleOrganization where rnf = genericRnf+instance NFData SimpleOrganization instance Binary SimpleOrganization -- | Sometimes we don't know the type of the owner, e.g. in 'Repo'@@ -68,9 +63,9 @@ , simpleOwnerAvatarUrl :: !URL , simpleOwnerType :: !OwnerType }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData SimpleOwner where rnf = genericRnf+instance NFData SimpleOwner instance Binary SimpleOwner data User = User@@ -93,9 +88,9 @@ , userUrl :: !URL , userHtmlUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData User where rnf = genericRnf+instance NFData User instance Binary User data Organization = Organization@@ -116,16 +111,16 @@ , organizationUrl :: !URL , organizationCreatedAt :: !UTCTime }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Organization where rnf = genericRnf+instance NFData Organization instance Binary Organization -- | In practice you can't have concrete values of 'Owner'. newtype Owner = Owner (Either User Organization)- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Owner where rnf = genericRnf+instance NFData Owner instance Binary Owner fromOwner :: Owner -> Either User Organization@@ -223,14 +218,14 @@ data OrgMemberFilter = OrgMemberFilter2faDisabled -- ^ Members without two-factor authentication enabled. Available for organization owners. | OrgMemberFilterAll -- ^ All members the authenticated user can see.- deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)+ deriving (Show, Eq, Ord, Enum, Bounded, Data, Generic) -- | Filter members returned by their role. data OrgMemberRole = OrgMemberRoleAll -- ^ All members of the organization, regardless of role. | OrgMemberRoleAdmin -- ^ Organization owners. | OrgMemberRoleMember -- ^ Non-owner organization members.- deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)+ deriving (Show, Eq, Ord, Enum, Bounded, Data, Generic) -- | Request query string type QueryString = [(BS.ByteString, Maybe BS.ByteString)]@@ -238,12 +233,69 @@ -- | Count of elements type Count = Int +++data MembershipRole+ = MembershipRoleMember+ | MembershipRoleAdmin+ | MembershipRoleBillingManager+ deriving+ (Eq, Ord, Show, Enum, Bounded, Generic, Data)++instance NFData MembershipRole+instance Binary MembershipRole++instance FromJSON MembershipRole where+ parseJSON = withText "MembershipRole" $ \t -> case T.toLower t of+ "member" -> pure MembershipRoleMember+ "admin" -> pure MembershipRoleAdmin+ "billing_manager" -> pure MembershipRoleBillingManager+ _ -> fail $ "Unknown MembershipRole: " <> T.unpack t++data MembershipState+ = MembershipPending+ | MembershipActive+ deriving (Show, Data, Eq, Ord, Generic)++instance NFData MembershipState+instance Binary MembershipState++instance FromJSON MembershipState where+ parseJSON = withText "MembershipState" $ \t -> case T.toLower t of+ "active" -> pure MembershipActive+ "pending" -> pure MembershipPending+ _ -> fail $ "Unknown MembershipState: " <> T.unpack t+++data Membership = Membership+ { membershipUrl :: !URL+ , membershipState :: !MembershipState+ , membershipRole :: !MembershipRole+ , membershipOrganizationUrl :: !URL+ , membershipOrganization :: !SimpleOrganization+ , membershipUser :: !SimpleUser+ }+ deriving (Show, Data, Eq, Ord, Generic)++instance NFData Membership+instance Binary Membership++instance FromJSON Membership where+ parseJSON = withObject "Membership" $ \o -> Membership+ <$> o .: "url"+ <*> o .: "state"+ <*> o .: "role"+ <*> o .: "organization_url"+ <*> o .: "organization"+ <*> o .: "user"++ ------------------------------------------------------------------------------- -- IssueNumber ------------------------------------------------------------------------------- newtype IssueNumber = IssueNumber Int- deriving (Eq, Ord, Show, Generic, Typeable, Data)+ deriving (Eq, Ord, Show, Generic, Data) unIssueNumber :: IssueNumber -> Int unIssueNumber (IssueNumber i) = i@@ -270,9 +322,9 @@ , labelName :: !(Name IssueLabel) , labelDesc :: !(Maybe Text) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData IssueLabel where rnf = genericRnf+instance NFData IssueLabel instance Binary IssueLabel instance FromJSON IssueLabel where@@ -292,9 +344,9 @@ , newLabelName :: !(Name NewIssueLabel) , newLabelDesc :: !(Maybe Text) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData NewIssueLabel where rnf = genericRnf+instance NFData NewIssueLabel instance Binary NewIssueLabel @@ -319,9 +371,9 @@ , updateLabelName :: !(Name UpdateIssueLabel) , updateLabelDesc :: !(Maybe Text) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData UpdateIssueLabel where rnf = genericRnf+instance NFData UpdateIssueLabel instance Binary UpdateIssueLabel
src/GitHub/Data/DeployKeys.hs view
@@ -19,7 +19,7 @@ , repoDeployKeyCreatedAt :: !UTCTime , repoDeployKeyReadOnly :: !Bool }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance FromJSON RepoDeployKey where parseJSON = withObject "RepoDeployKey" $ \o -> RepoDeployKey@@ -36,7 +36,7 @@ , newRepoDeployKeyTitle :: !Text , newRepoDeployKeyReadOnly :: !Bool }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance ToJSON NewRepoDeployKey where toJSON (NewRepoDeployKey key title readOnly) = object
src/GitHub/Data/Deployments.hs view
@@ -34,9 +34,9 @@ | DeploymentQueryRef !Text | DeploymentQueryTask !Text | DeploymentQueryEnvironment !Text- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData DeploymentQueryOption where rnf = genericRnf+instance NFData DeploymentQueryOption instance Binary DeploymentQueryOption renderDeploymentQueryOption :: DeploymentQueryOption -> (ByteString, ByteString)@@ -61,9 +61,9 @@ , deploymentUpdatedAt :: !UTCTime , deploymentStatusesUrl :: !URL , deploymentRepositoryUrl :: !URL- } deriving (Show, Data, Typeable, Eq, Ord, Generic)+ } deriving (Show, Data, Eq, Ord, Generic) -instance NFData a => NFData (Deployment a) where rnf = genericRnf+instance NFData a => NFData (Deployment a) instance Binary a => Binary (Deployment a) instance FromJSON a => FromJSON (Deployment a) where@@ -104,9 +104,9 @@ -- qa). Default: production , createDeploymentDescription :: !(Maybe Text) -- ^ Short description of the deployment. Default: ""- } deriving (Show, Data, Typeable, Eq, Ord, Generic)+ } deriving (Show, Data, Eq, Ord, Generic) -instance NFData a => NFData (CreateDeployment a) where rnf = genericRnf+instance NFData a => NFData (CreateDeployment a) instance Binary a => Binary (CreateDeployment a) instance ToJSON a => ToJSON (CreateDeployment a) where@@ -132,9 +132,9 @@ , deploymentStatusUpdatedAt :: !UTCTime , deploymentStatusDeploymentUrl :: !URL , deploymentStatusRepositoryUrl :: !URL- } deriving (Show, Data, Typeable, Eq, Ord, Generic)+ } deriving (Show, Data, Eq, Ord, Generic) -instance NFData DeploymentStatus where rnf = genericRnf+instance NFData DeploymentStatus instance Binary DeploymentStatus instance FromJSON DeploymentStatus where@@ -157,9 +157,9 @@ | DeploymentStatusPending | DeploymentStatusSuccess | DeploymentStatusInactive- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData DeploymentStatusState where rnf = genericRnf+instance NFData DeploymentStatusState instance Binary DeploymentStatusState instance ToJSON DeploymentStatusState where@@ -190,9 +190,9 @@ , createDeploymentStatusDescription :: !(Maybe Text) -- ^ A short description of the status. Maximum length of 140 characters. -- Default: ""- } deriving (Show, Data, Typeable, Eq, Ord, Generic)+ } deriving (Show, Data, Eq, Ord, Generic) -instance NFData CreateDeploymentStatus where rnf = genericRnf+instance NFData CreateDeploymentStatus instance Binary CreateDeploymentStatus instance ToJSON CreateDeploymentStatus where
src/GitHub/Data/Email.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Email where import GitHub.Internal.Prelude@@ -13,9 +8,9 @@ data EmailVisibility = EmailVisibilityPrivate | EmailVisibilityPublic- deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Enum, Bounded, Eq, Ord, Generic) -instance NFData EmailVisibility where rnf = genericRnf+instance NFData EmailVisibility instance Binary EmailVisibility instance FromJSON EmailVisibility where@@ -29,9 +24,9 @@ , emailVerified :: !Bool , emailPrimary :: !Bool , emailVisibility :: !(Maybe EmailVisibility)- } deriving (Show, Data, Typeable, Eq, Ord, Generic)+ } deriving (Show, Data, Eq, Ord, Generic) -instance NFData Email where rnf = genericRnf+instance NFData Email instance Binary Email instance FromJSON Email where
src/GitHub/Data/Enterprise.hs view
@@ -1,9 +1,6 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- This module re-exports the @GitHub.Data.Enterprise.@ submodules.+ module GitHub.Data.Enterprise ( -- * Module re-exports module GitHub.Data.Enterprise.Organizations,
src/GitHub/Data/Enterprise/Organizations.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Enterprise.Organizations where import GitHub.Data.Definitions@@ -16,26 +11,26 @@ , createOrganizationAdmin :: !(Name User) , createOrganizationProfileName :: !(Maybe Text) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData CreateOrganization where rnf = genericRnf+instance NFData CreateOrganization instance Binary CreateOrganization data RenameOrganization = RenameOrganization { renameOrganizationLogin :: !(Name Organization) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RenameOrganization where rnf = genericRnf+instance NFData RenameOrganization instance Binary RenameOrganization data RenameOrganizationResponse = RenameOrganizationResponse { renameOrganizationResponseMessage :: !Text , renameOrganizationResponseUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RenameOrganizationResponse where rnf = genericRnf+instance NFData RenameOrganizationResponse instance Binary RenameOrganizationResponse -- JSON Instances
src/GitHub/Data/Events.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Events where import GitHub.Data.Definitions@@ -14,15 +9,16 @@ -- /TODO:/ -- -- * missing repo, org, payload, id+-- data Event = Event -- { eventId :: !(Id Event) -- id can be encoded as string. { eventActor :: !SimpleUser , eventCreatedAt :: !UTCTime , eventPublic :: !Bool }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Event where rnf = genericRnf+instance NFData Event instance Binary Event instance FromJSON Event where
src/GitHub/Data/Gists.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Gists where import GitHub.Data.Definitions@@ -26,9 +21,9 @@ , gistId :: !(Name Gist) , gistFiles :: !(HashMap Text GistFile) , gistGitPullUrl :: !URL- } deriving (Show, Data, Typeable, Eq, Generic)+ } deriving (Show, Data, Eq, Generic) -instance NFData Gist where rnf = genericRnf+instance NFData Gist instance Binary Gist instance FromJSON Gist where@@ -54,9 +49,9 @@ , gistFileFilename :: !Text , gistFileContent :: !(Maybe Text) }- deriving (Show, Data, Typeable, Eq, Generic)+ deriving (Show, Data, Eq, Generic) -instance NFData GistFile where rnf = genericRnf+instance NFData GistFile instance Binary GistFile instance FromJSON GistFile where@@ -76,9 +71,9 @@ , gistCommentUpdatedAt :: !UTCTime , gistCommentId :: !(Id GistComment) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData GistComment where rnf = genericRnf+instance NFData GistComment instance Binary GistComment instance FromJSON GistComment where@@ -94,9 +89,9 @@ { newGistDescription :: !(Maybe Text) , newGistFiles :: !(HashMap Text NewGistFile) , newGistPublic :: !(Maybe Bool)- } deriving (Show, Data, Typeable, Eq, Generic)+ } deriving (Show, Data, Eq, Generic) -instance NFData NewGist where rnf = genericRnf+instance NFData NewGist instance Binary NewGist instance ToJSON NewGist where@@ -114,9 +109,9 @@ data NewGistFile = NewGistFile { newGistFileContent :: !Text- } deriving (Show, Data, Typeable, Eq, Generic)+ } deriving (Show, Data, Eq, Generic) -instance NFData NewGistFile where rnf = genericRnf+instance NFData NewGistFile instance Binary NewGistFile instance ToJSON NewGistFile where
src/GitHub/Data/GitData.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.GitData where import GitHub.Data.Definitions@@ -20,16 +15,16 @@ | CommitQueryAuthor !Text | CommitQuerySince !UTCTime | CommitQueryUntil !UTCTime- deriving (Show, Eq, Ord, Generic, Typeable, Data)+ deriving (Show, Eq, Ord, Generic, Data) data Stats = Stats { statsAdditions :: !Int , statsTotal :: !Int , statsDeletions :: !Int }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Stats where rnf = genericRnf+instance NFData Stats instance Binary Stats data Commit = Commit@@ -42,9 +37,9 @@ , commitFiles :: !(Vector File) , commitStats :: !(Maybe Stats) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Commit where rnf = genericRnf+instance NFData Commit instance Binary Commit data Tree = Tree@@ -52,9 +47,9 @@ , treeUrl :: !URL , treeGitTrees :: !(Vector GitTree) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Tree where rnf = genericRnf+instance NFData Tree instance Binary Tree data GitTree = GitTree@@ -66,9 +61,9 @@ , gitTreePath :: !Text , gitTreeMode :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData GitTree where rnf = genericRnf+instance NFData GitTree instance Binary GitTree data GitCommit = GitCommit@@ -80,9 +75,9 @@ , gitCommitSha :: !(Maybe (Name GitCommit)) , gitCommitParents :: !(Vector Tree) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData GitCommit where rnf = genericRnf+instance NFData GitCommit instance Binary GitCommit data Blob = Blob@@ -92,9 +87,9 @@ , blobSha :: !(Name Blob) , blobSize :: !Int }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Blob where rnf = genericRnf+instance NFData Blob instance Binary Blob data Tag = Tag@@ -103,26 +98,26 @@ , tagTarballUrl :: !URL , tagCommit :: !BranchCommit }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Tag where rnf = genericRnf+instance NFData Tag instance Binary Tag data Branch = Branch { branchName :: !Text , branchCommit :: !BranchCommit }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Branch where rnf = genericRnf+instance NFData Branch data BranchCommit = BranchCommit { branchCommitSha :: !Text , branchCommitUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData BranchCommit where rnf = genericRnf+instance NFData BranchCommit instance Binary BranchCommit data Diff = Diff@@ -139,18 +134,18 @@ , diffDiffUrl :: !URL , diffPermalinkUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Diff where rnf = genericRnf+instance NFData Diff instance Binary Diff data NewGitReference = NewGitReference { newGitReferenceRef :: !Text , newGitReferenceSha :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData NewGitReference where rnf = genericRnf+instance NFData NewGitReference instance Binary NewGitReference data GitReference = GitReference@@ -158,9 +153,9 @@ , gitReferenceUrl :: !URL , gitReferenceRef :: !(Name GitReference) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData GitReference where rnf = genericRnf+instance NFData GitReference instance Binary GitReference data GitObject = GitObject@@ -168,9 +163,9 @@ , gitObjectSha :: !Text , gitObjectUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData GitObject where rnf = genericRnf+instance NFData GitObject instance Binary GitObject data GitUser = GitUser@@ -178,9 +173,9 @@ , gitUserEmail :: !Text , gitUserDate :: !UTCTime }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData GitUser where rnf = genericRnf+instance NFData GitUser instance Binary GitUser data File = File@@ -194,9 +189,9 @@ , fileFilename :: !Text , fileDeletions :: !Int }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData File where rnf = genericRnf+instance NFData File instance Binary File -- JSON instances@@ -213,8 +208,8 @@ <*> o .: "parents" <*> o .: "url" <*> o .: "commit"- <*> o .:? "committer"- <*> o .:? "author"+ <*> (o .:? "committer" <|> pure Nothing)+ <*> (o .:? "author" <|> pure Nothing) <*> o .:? "files" .!= V.empty <*> o .:? "stats"
src/GitHub/Data/Id.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Id ( Id(..), mkId,@@ -14,7 +9,7 @@ -- | Numeric identifier. newtype Id entity = Id Int- deriving (Eq, Ord, Show, Generic, Typeable, Data)+ deriving (Eq, Ord, Show, Generic, Data) -- | Smart constructor for 'Id'. mkId :: proxy entity -> Int -> Id entity
src/GitHub/Data/Invitation.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Invitation where import GitHub.Data.Definitions@@ -24,9 +19,9 @@ , invitationCreatedAt :: !UTCTime , inviter :: !SimpleUser }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Invitation where rnf = genericRnf+instance NFData Invitation instance Binary Invitation instance FromJSON Invitation where@@ -46,9 +41,9 @@ | InvitationRoleHiringManager | InvitationRoleReinstate deriving- (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)+ (Eq, Ord, Show, Enum, Bounded, Generic, Data) -instance NFData InvitationRole where rnf = genericRnf+instance NFData InvitationRole instance Binary InvitationRole instance FromJSON InvitationRole where@@ -70,9 +65,9 @@ , repoInvitationPermission :: !Text , repoInvitationHtmlUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RepoInvitation where rnf = genericRnf+instance NFData RepoInvitation instance Binary RepoInvitation instance FromJSON RepoInvitation where
src/GitHub/Data/Issues.hs view
@@ -1,15 +1,10 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Issues where import GitHub.Data.Definitions import GitHub.Data.Id (Id) import GitHub.Data.Milestone (Milestone) import GitHub.Data.Name (Name)-import GitHub.Data.Options (IssueState)+import GitHub.Data.Options (IssueState, IssueStateReason) import GitHub.Data.PullRequests import GitHub.Data.URL (URL) import GitHub.Internal.Prelude@@ -36,10 +31,11 @@ , issueId :: !(Id Issue) , issueComments :: !Int , issueMilestone :: !(Maybe Milestone)+ , issueStateReason :: !(Maybe IssueStateReason) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Issue where rnf = genericRnf+instance NFData Issue instance Binary Issue data NewIssue = NewIssue@@ -49,9 +45,9 @@ , newIssueMilestone :: !(Maybe (Id Milestone)) , newIssueLabels :: !(Maybe (Vector (Name IssueLabel))) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData NewIssue where rnf = genericRnf+instance NFData NewIssue instance Binary NewIssue data EditIssue = EditIssue@@ -62,9 +58,9 @@ , editIssueMilestone :: !(Maybe (Id Milestone)) , editIssueLabels :: !(Maybe (Vector (Name IssueLabel))) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData EditIssue where rnf = genericRnf+instance NFData EditIssue instance Binary EditIssue data IssueComment = IssueComment@@ -76,9 +72,9 @@ , issueCommentBody :: !Text , issueCommentId :: !Int }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData IssueComment where rnf = genericRnf+instance NFData IssueComment instance Binary IssueComment -- | See <https://developer.github.com/v3/issues/events/#events-1>@@ -110,9 +106,9 @@ | MovedColumnsInProject -- ^ The issue was moved between columns in a project board. | RemovedFromProject -- ^ The issue was removed from a project board. | ConvertedNoteToIssue -- ^ The issue was created by converting a note in a project board to an issue.- deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Enum, Bounded, Eq, Ord, Generic) -instance NFData EventType where rnf = genericRnf+instance NFData EventType instance Binary EventType -- | Issue event@@ -126,9 +122,9 @@ , issueEventIssue :: !(Maybe Issue) , issueEventLabel :: !(Maybe IssueLabel) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData IssueEvent where rnf = genericRnf+instance NFData IssueEvent instance Binary IssueEvent instance FromJSON IssueEvent where@@ -203,6 +199,7 @@ <*> o .: "id" <*> o .: "comments" <*> o .:? "milestone"+ <*> o .:? "state_reason" instance ToJSON NewIssue where toJSON (NewIssue t b a m ls) = object $ filter notNull
src/GitHub/Data/Milestone.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Milestone where import GitHub.Data.Definitions@@ -23,9 +18,9 @@ , milestoneCreatedAt :: !UTCTime , milestoneState :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Milestone where rnf = genericRnf+instance NFData Milestone instance Binary Milestone instance FromJSON Milestone where@@ -47,9 +42,9 @@ , newMilestoneDescription :: !(Maybe Text) , newMilestoneDueOn :: !(Maybe UTCTime) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData NewMilestone where rnf = genericRnf+instance NFData NewMilestone instance Binary NewMilestone @@ -70,9 +65,9 @@ , updateMilestoneDescription :: !(Maybe Text) , updateMilestoneDueOn :: !(Maybe UTCTime) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData UpdateMilestone where rnf = genericRnf+instance NFData UpdateMilestone instance Binary UpdateMilestone
src/GitHub/Data/Name.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE CPP #-}--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Name ( Name(..), mkName,@@ -13,13 +7,11 @@ import Prelude () import GitHub.Internal.Prelude -#if MIN_VERSION_aeson(1,0,0) import Data.Aeson.Types (FromJSONKey (..), ToJSONKey (..), fromJSONKeyCoerce, toJSONKeyText)-#endif newtype Name entity = N Text- deriving (Eq, Ord, Show, Generic, Typeable, Data)+ deriving (Eq, Ord, Show, Generic, Data) -- | Smart constructor for 'Name' mkName :: proxy entity -> Text -> Name entity@@ -43,7 +35,6 @@ instance IsString (Name entity) where fromString = N . fromString -#if MIN_VERSION_aeson(1,0,0) -- | @since 0.15.0.0 instance ToJSONKey (Name entity) where toJSONKey = toJSONKeyText untagName@@ -51,4 +42,3 @@ -- | @since 0.15.0.0 instance FromJSONKey (Name entity) where fromJSONKey = fromJSONKeyCoerce-#endif
src/GitHub/Data/Options.hs view
@@ -1,10 +1,9 @@ {-# LANGUAGE RecordWildCards #-}------------------------------------------------------------------------------+{-# LANGUAGE LambdaCase #-}+ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- Module with modifiers for pull requests' and issues' listings.+ module GitHub.Data.Options ( -- * Common modifiers stateOpen,@@ -48,8 +47,34 @@ optionsAnyAssignee, optionsNoAssignee, optionsAssignee,+ -- * Actions artifacts+ ArtifactMod,+ artifactModToQueryString,+ optionsArtifactName,+ -- * Actions cache+ CacheMod,+ cacheModToQueryString,+ optionsRef,+ optionsNoRef,+ optionsKey,+ optionsNoKey,+ optionsDirectionAsc,+ optionsDirectionDesc,+ sortByCreatedAt,+ sortByLastAccessedAt,+ sortBySizeInBytes,+ -- * Actions workflow runs+ WorkflowRunMod,+ workflowRunModToQueryString,+ optionsWorkflowRunActor,+ optionsWorkflowRunBranch,+ optionsWorkflowRunEvent,+ optionsWorkflowRunStatus,+ optionsWorkflowRunCreated,+ optionsWorkflowRunHeadSha, -- * Data IssueState (..),+ IssueStateReason (..), MergeableState (..), -- * Internal HasState,@@ -79,7 +104,7 @@ = StateOpen | StateClosed deriving- (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)+ (Eq, Ord, Show, Enum, Bounded, Generic, Data) instance ToJSON IssueState where toJSON StateOpen = String "open"@@ -91,9 +116,36 @@ "closed" -> pure StateClosed _ -> fail $ "Unknown IssueState: " <> T.unpack t -instance NFData IssueState where rnf = genericRnf+instance NFData IssueState instance Binary IssueState +-- | 'GitHub.Data.Issues.Issue' state reason+data IssueStateReason+ = StateReasonCompleted+ | StateReasonDuplicate+ | StateReasonNotPlanned+ | StateReasonReopened+ deriving+ (Eq, Ord, Show, Enum, Bounded, Generic, Data)++instance ToJSON IssueStateReason where+ toJSON = String . \case+ StateReasonCompleted -> "completed"+ StateReasonDuplicate -> "duplicate"+ StateReasonNotPlanned -> "not_planned"+ StateReasonReopened -> "reopened"++instance FromJSON IssueStateReason where+ parseJSON = withText "IssueStateReason" $ \t -> case T.toLower t of+ "completed" -> pure StateReasonCompleted+ "duplicate" -> pure StateReasonDuplicate+ "not_planned" -> pure StateReasonNotPlanned+ "reopened" -> pure StateReasonReopened+ _ -> fail $ "Unknown IssueStateReason: " <> T.unpack t++instance NFData IssueStateReason+instance Binary IssueStateReason+ -- | 'GitHub.Data.PullRequests.PullRequest' mergeable_state data MergeableState = StateUnknown@@ -104,7 +156,7 @@ | StateBehind | StateDraft deriving- (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)+ (Eq, Ord, Show, Enum, Bounded, Generic, Data) instance ToJSON MergeableState where toJSON StateUnknown = String "unknown"@@ -126,16 +178,16 @@ "draft" -> pure StateDraft _ -> fail $ "Unknown MergeableState: " <> T.unpack t -instance NFData MergeableState where rnf = genericRnf+instance NFData MergeableState instance Binary MergeableState data SortDirection = SortAscending | SortDescending deriving- (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)+ (Eq, Ord, Show, Enum, Bounded, Generic, Data) -instance NFData SortDirection where rnf = genericRnf+instance NFData SortDirection instance Binary SortDirection -- PR@@ -146,9 +198,9 @@ | SortPRPopularity | SortPRLongRunning deriving- (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)+ (Eq, Ord, Show, Enum, Bounded, Generic, Data) -instance NFData SortPR where rnf = genericRnf+instance NFData SortPR instance Binary SortPR -- Issue@@ -159,9 +211,9 @@ | IssueFilterSubscribed | IssueFilterAll deriving- (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)+ (Eq, Ord, Show, Enum, Bounded, Generic, Data) -instance NFData IssueFilter where rnf = genericRnf+instance NFData IssueFilter instance Binary IssueFilter data SortIssue@@ -169,9 +221,9 @@ | SortIssueUpdated | SortIssueComments deriving- (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)+ (Eq, Ord, Show, Enum, Bounded, Generic, Data) -instance NFData SortIssue where rnf = genericRnf+instance NFData SortIssue instance Binary SortIssue data FilterBy a@@ -182,8 +234,20 @@ -- ^ e.g. for milestones "any" means "any milestone". -- I.e. won't show issues without mileston specified deriving- (Eq, Ord, Show, Generic, Typeable, Data)+ (Eq, Ord, Show, Generic, Data) +-- Actions cache++data SortCache+ = SortCacheCreatedAt+ | SortCacheLastAccessedAt+ | SortCacheSizeInBytes+ deriving+ (Eq, Ord, Show, Enum, Bounded, Generic, Data)++instance NFData SortCache+instance Binary SortCache+ ------------------------------------------------------------------------------- -- Classes -------------------------------------------------------------------------------@@ -270,7 +334,7 @@ , pullRequestOptionsDirection :: !SortDirection } deriving- (Eq, Ord, Show, Generic, Typeable, Data)+ (Eq, Ord, Show, Generic, Data) defaultPullRequestOptions :: PullRequestOptions defaultPullRequestOptions = PullRequestOptions@@ -365,7 +429,7 @@ , issueOptionsSince :: !(Maybe UTCTime) } deriving- (Eq, Ord, Show, Generic, Typeable, Data)+ (Eq, Ord, Show, Generic, Data) defaultIssueOptions :: IssueOptions defaultIssueOptions = IssueOptions@@ -511,7 +575,7 @@ , issueRepoOptionsSince :: !(Maybe UTCTime) -- ^ 'HasSince' } deriving- (Eq, Ord, Show, Generic, Typeable, Data)+ (Eq, Ord, Show, Generic, Data) defaultIssueRepoOptions :: IssueRepoOptions defaultIssueRepoOptions = IssueRepoOptions@@ -640,3 +704,236 @@ optionsAssignee :: Name User -> IssueRepoMod optionsAssignee u = IssueRepoMod $ \opts -> opts { issueRepoOptionsAssignee = FilterBy u }++-------------------------------------------------------------------------------+-- Actions artifacts+-------------------------------------------------------------------------------++-- | See <https://docs.github.com/en/rest/actions/artifacts#list-artifacts-for-a-repository>.+data ArtifactOptions = ArtifactOptions+ { artifactOptionsName :: !(Maybe Text)+ }+ deriving+ (Eq, Ord, Show, Generic, Data)++defaultArtifactOptions :: ArtifactOptions+defaultArtifactOptions = ArtifactOptions+ { artifactOptionsName = Nothing+ }++-- | See <https://docs.github.com/en/rest/actions/artifacts#list-artifacts-for-a-repository>.+newtype ArtifactMod = ArtifactMod (ArtifactOptions -> ArtifactOptions)++instance Semigroup ArtifactMod where+ ArtifactMod f <> ArtifactMod g = ArtifactMod (g . f)++instance Monoid ArtifactMod where+ mempty = ArtifactMod id+ mappend = (<>)++-- | Filters artifacts by exact match on their name field.+optionsArtifactName :: Text -> ArtifactMod+optionsArtifactName n = ArtifactMod $ \opts ->+ opts { artifactOptionsName = Just n }++toArtifactOptions :: ArtifactMod -> ArtifactOptions+toArtifactOptions (ArtifactMod f) = f defaultArtifactOptions++artifactModToQueryString :: ArtifactMod -> QueryString+artifactModToQueryString = artifactOptionsToQueryString . toArtifactOptions++artifactOptionsToQueryString :: ArtifactOptions -> QueryString+artifactOptionsToQueryString (ArtifactOptions name) =+ catMaybes+ [ mk "name" <$> name'+ ]+ where+ mk k v = (k, Just v)+ name' = fmap TE.encodeUtf8 name++-------------------------------------------------------------------------------+-- Actions cache+-------------------------------------------------------------------------------++-- | See <https://docs.github.com/en/rest/actions/cache#list-github-actions-caches-for-a-repository>.+data CacheOptions = CacheOptions+ { cacheOptionsRef :: !(Maybe Text)+ , cacheOptionsKey :: !(Maybe Text)+ , cacheOptionsSort :: !(Maybe SortCache)+ , cacheOptionsDirection :: !(Maybe SortDirection)+ }+ deriving+ (Eq, Ord, Show, Generic, Data)++defaultCacheOptions :: CacheOptions+defaultCacheOptions = CacheOptions+ { cacheOptionsRef = Nothing+ , cacheOptionsKey = Nothing+ , cacheOptionsSort = Nothing+ , cacheOptionsDirection = Nothing+ }++-- | See <https://docs.github.com/en/rest/actions/cache#list-github-actions-caches-for-a-repository>.+newtype CacheMod = CacheMod (CacheOptions -> CacheOptions)++instance Semigroup CacheMod where+ CacheMod f <> CacheMod g = CacheMod (g . f)++instance Monoid CacheMod where+ mempty = CacheMod id+ mappend = (<>)++toCacheOptions :: CacheMod -> CacheOptions+toCacheOptions (CacheMod f) = f defaultCacheOptions++cacheModToQueryString :: CacheMod -> QueryString+cacheModToQueryString = cacheOptionsToQueryString . toCacheOptions++cacheOptionsToQueryString :: CacheOptions -> QueryString+cacheOptionsToQueryString (CacheOptions ref key sort dir) =+ catMaybes+ [ mk "ref" <$> ref'+ , mk "key" <$> key'+ , mk "sort" <$> sort'+ , mk "directions" <$> direction'+ ]+ where+ mk k v = (k, Just v)+ sort' = sort <&> \case+ SortCacheCreatedAt -> "created_at"+ SortCacheLastAccessedAt -> "last_accessed_at"+ SortCacheSizeInBytes -> "size_in_bytes"+ direction' = dir <&> \case+ SortDescending -> "desc"+ SortAscending -> "asc"+ ref' = fmap TE.encodeUtf8 ref+ key' = fmap TE.encodeUtf8 key++-------------------------------------------------------------------------------+-- Cache modifiers+-------------------------------------------------------------------------------++optionsRef :: Text -> CacheMod+optionsRef x = CacheMod $ \opts ->+ opts { cacheOptionsRef = Just x }++optionsNoRef :: CacheMod+optionsNoRef = CacheMod $ \opts ->+ opts { cacheOptionsRef = Nothing }++optionsKey :: Text -> CacheMod+optionsKey x = CacheMod $ \opts ->+ opts { cacheOptionsKey = Just x }++optionsNoKey :: CacheMod+optionsNoKey = CacheMod $ \opts ->+ opts { cacheOptionsKey = Nothing }++optionsDirectionAsc :: CacheMod+optionsDirectionAsc = CacheMod $ \opts ->+ opts { cacheOptionsDirection = Just SortAscending }++optionsDirectionDesc :: CacheMod+optionsDirectionDesc = CacheMod $ \opts ->+ opts { cacheOptionsDirection = Just SortDescending }++sortByCreatedAt :: CacheMod+sortByCreatedAt = CacheMod $ \opts ->+ opts { cacheOptionsSort = Just SortCacheCreatedAt }++sortByLastAccessedAt :: CacheMod+sortByLastAccessedAt = CacheMod $ \opts ->+ opts { cacheOptionsSort = Just SortCacheLastAccessedAt }++sortBySizeInBytes :: CacheMod+sortBySizeInBytes = CacheMod $ \opts ->+ opts { cacheOptionsSort = Just SortCacheSizeInBytes }++-------------------------------------------------------------------------------+-- Actions workflow runs+-------------------------------------------------------------------------------++-- | See <https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-repository>.+data WorkflowRunOptions = WorkflowRunOptions+ { workflowRunOptionsActor :: !(Maybe Text)+ , workflowRunOptionsBranch :: !(Maybe Text)+ , workflowRunOptionsEvent :: !(Maybe Text)+ , workflowRunOptionsStatus :: !(Maybe Text)+ , workflowRunOptionsCreated :: !(Maybe Text)+ , workflowRunOptionsHeadSha :: !(Maybe Text)+ }+ deriving+ (Eq, Ord, Show, Generic, Data)++defaultWorkflowRunOptions :: WorkflowRunOptions+defaultWorkflowRunOptions = WorkflowRunOptions+ { workflowRunOptionsActor = Nothing+ , workflowRunOptionsBranch = Nothing+ , workflowRunOptionsEvent = Nothing+ , workflowRunOptionsStatus = Nothing+ , workflowRunOptionsCreated = Nothing+ , workflowRunOptionsHeadSha = Nothing+ }++-- | See <https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-repository>.+newtype WorkflowRunMod = WorkflowRunMod (WorkflowRunOptions -> WorkflowRunOptions)++instance Semigroup WorkflowRunMod where+ WorkflowRunMod f <> WorkflowRunMod g = WorkflowRunMod (g . f)++instance Monoid WorkflowRunMod where+ mempty = WorkflowRunMod id+ mappend = (<>)++toWorkflowRunOptions :: WorkflowRunMod -> WorkflowRunOptions+toWorkflowRunOptions (WorkflowRunMod f) = f defaultWorkflowRunOptions++workflowRunModToQueryString :: WorkflowRunMod -> QueryString+workflowRunModToQueryString = workflowRunOptionsToQueryString . toWorkflowRunOptions++workflowRunOptionsToQueryString :: WorkflowRunOptions -> QueryString+workflowRunOptionsToQueryString (WorkflowRunOptions actor branch event status created headSha) =+ catMaybes+ [ mk "actor" <$> actor'+ , mk "branch" <$> branch'+ , mk "event" <$> event'+ , mk "status" <$> status'+ , mk "created" <$> created'+ , mk "head_sha" <$> headSha'+ ]+ where+ mk k v = (k, Just v)+ actor' = fmap TE.encodeUtf8 actor+ branch' = fmap TE.encodeUtf8 branch+ event' = fmap TE.encodeUtf8 event+ status' = fmap TE.encodeUtf8 status+ created' = fmap TE.encodeUtf8 created+ headSha' = fmap TE.encodeUtf8 headSha++-------------------------------------------------------------------------------+-- Workflow run modifiers+-------------------------------------------------------------------------------++optionsWorkflowRunActor :: Text -> WorkflowRunMod+optionsWorkflowRunActor x = WorkflowRunMod $ \opts ->+ opts { workflowRunOptionsActor = Just x }++optionsWorkflowRunBranch :: Text -> WorkflowRunMod+optionsWorkflowRunBranch x = WorkflowRunMod $ \opts ->+ opts { workflowRunOptionsBranch = Just x }++optionsWorkflowRunEvent :: Text -> WorkflowRunMod+optionsWorkflowRunEvent x = WorkflowRunMod $ \opts ->+ opts { workflowRunOptionsEvent = Just x }++optionsWorkflowRunStatus :: Text -> WorkflowRunMod+optionsWorkflowRunStatus x = WorkflowRunMod $ \opts ->+ opts { workflowRunOptionsStatus = Just x }++optionsWorkflowRunCreated :: Text -> WorkflowRunMod+optionsWorkflowRunCreated x = WorkflowRunMod $ \opts ->+ opts { workflowRunOptionsCreated = Just x }++optionsWorkflowRunHeadSha :: Text -> WorkflowRunMod+optionsWorkflowRunHeadSha x = WorkflowRunMod $ \opts ->+ opts { workflowRunOptionsHeadSha = Just x }
src/GitHub/Data/PublicSSHKeys.hs view
@@ -14,7 +14,7 @@ { basicPublicSSHKeyId :: !(Id PublicSSHKey) , basicPublicSSHKeyKey :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance FromJSON PublicSSHKeyBasic where parseJSON = withObject "PublicSSHKeyBasic" $ \o -> PublicSSHKeyBasic@@ -30,7 +30,7 @@ , publicSSHKeyCreatedAt :: !(Maybe UTCTime) , publicSSHKeyReadOnly :: !Bool }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance FromJSON PublicSSHKey where parseJSON = withObject "PublicSSHKey" $ \o -> PublicSSHKey@@ -46,7 +46,7 @@ { newPublicSSHKeyKey :: !Text , newPublicSSHKeyTitle :: !Text }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance ToJSON NewPublicSSHKey where toJSON (NewPublicSSHKey key title) = object
src/GitHub/Data/PullRequests.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.PullRequests ( SimplePullRequest(..), PullRequest(..),@@ -48,9 +43,9 @@ , simplePullRequestTitle :: !Text , simplePullRequestId :: !(Id PullRequest) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData SimplePullRequest where rnf = genericRnf+instance NFData SimplePullRequest instance Binary SimplePullRequest data PullRequest = PullRequest@@ -86,9 +81,9 @@ , pullRequestMergeable :: !(Maybe Bool) , pullRequestMergeableState :: !MergeableState }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData PullRequest where rnf = genericRnf+instance NFData PullRequest instance Binary PullRequest data EditPullRequest = EditPullRequest@@ -101,7 +96,7 @@ } deriving (Show, Generic) -instance NFData EditPullRequest where rnf = genericRnf+instance NFData EditPullRequest instance Binary EditPullRequest data CreatePullRequest@@ -118,7 +113,7 @@ } deriving (Show, Generic) -instance NFData CreatePullRequest where rnf = genericRnf+instance NFData CreatePullRequest instance Binary CreatePullRequest data PullRequestLinks = PullRequestLinks@@ -127,9 +122,9 @@ , pullRequestLinksHtml :: !URL , pullRequestLinksSelf :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData PullRequestLinks where rnf = genericRnf+instance NFData PullRequestLinks instance Binary PullRequestLinks data PullRequestCommit = PullRequestCommit@@ -139,9 +134,9 @@ , pullRequestCommitUser :: !SimpleUser , pullRequestCommitRepo :: !(Maybe Repo) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData PullRequestCommit where rnf = genericRnf+instance NFData PullRequestCommit instance Binary PullRequestCommit data PullRequestEvent = PullRequestEvent@@ -151,9 +146,9 @@ , pullRequestRepository :: !Repo , pullRequestSender :: !SimpleUser }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData PullRequestEvent where rnf = genericRnf+instance NFData PullRequestEvent instance Binary PullRequestEvent data PullRequestEventType@@ -168,9 +163,9 @@ | PullRequestReviewRequested | PullRequestReviewRequestRemoved | PullRequestEdited- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData PullRequestEventType where rnf = genericRnf+instance NFData PullRequestEventType instance Binary PullRequestEventType data PullRequestReference = PullRequestReference@@ -178,9 +173,9 @@ , pullRequestReferencePatchUrl :: !(Maybe URL) , pullRequestReferenceDiffUrl :: !(Maybe URL) }- deriving (Eq, Ord, Show, Generic, Typeable, Data)+ deriving (Eq, Ord, Show, Generic, Data) -instance NFData PullRequestReference where rnf = genericRnf+instance NFData PullRequestReference instance Binary PullRequestReference @@ -321,4 +316,4 @@ = MergeSuccessful | MergeCannotPerform | MergeConflict- deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic, Typeable)+ deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic)
src/GitHub/Data/RateLimit.hs view
@@ -1,14 +1,9 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.RateLimit where import GitHub.Internal.Prelude import Prelude () -import Data.Time.Clock.System.Compat (SystemTime (..))+import Data.Time.Clock.System (SystemTime (..)) import qualified Data.ByteString.Char8 as BS8 import qualified Network.HTTP.Client as HTTP@@ -18,9 +13,9 @@ , limitsRemaining :: !Int , limitsReset :: !SystemTime }- deriving (Show, {- Data, -} Typeable, Eq, Ord, Generic)+ deriving (Show, Eq, Ord, Generic) -instance NFData Limits where rnf = genericRnf+instance NFData Limits instance Binary Limits instance FromJSON Limits where@@ -34,9 +29,9 @@ , rateLimitSearch :: Limits , rateLimitGraphQL :: Limits }- deriving (Show, {- Data, -} Typeable, Eq, Ord, Generic)+ deriving (Show, Eq, Ord, Generic) -instance NFData RateLimit where rnf = genericRnf+instance NFData RateLimit instance Binary RateLimit instance FromJSON RateLimit where
+ src/GitHub/Data/Reactions.hs view
@@ -0,0 +1,78 @@+{-# LANGUAGE InstanceSigs #-}+module GitHub.Data.Reactions where++import qualified Data.Text as T+import GitHub.Data.Id (Id)+import GitHub.Data.Definitions (SimpleUser)+import GitHub.Internal.Prelude+import Prelude ()++data Reaction = Reaction+ { reactionId :: Id Reaction+ , reactionUser :: !(Maybe SimpleUser)+ , reactionContent :: !ReactionContent+ , reactionCreatedAt :: !UTCTime+ }+ deriving (Show, Data, Eq, Ord, Generic)++instance NFData Reaction+instance Binary Reaction++data NewReaction = NewReaction+ { newReactionContent :: !ReactionContent+ }+ deriving (Show, Data, Eq, Ord, Generic)++instance NFData NewReaction+instance Binary NewReaction++-- |+-- <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#about-reactions>+data ReactionContent+ = PlusOne+ | MinusOne+ | Laugh+ | Confused+ | Heart+ | Hooray+ | Rocket+ | Eyes+ deriving (Show, Data, Eq, Ord, Enum, Bounded, Generic)++instance NFData ReactionContent+instance Binary ReactionContent++-- JSON instances++instance FromJSON Reaction where+ parseJSON = withObject "Reaction" $ \o ->+ Reaction+ <$> o .: "id"+ <*> o .:? "user"+ <*> o .: "content"+ <*> o .: "created_at"++instance ToJSON NewReaction where+ toJSON (NewReaction content) = object ["content" .= content]++instance FromJSON ReactionContent where+ parseJSON = withText "ReactionContent" $ \case+ "+1" -> pure PlusOne+ "-1" -> pure MinusOne+ "laugh" -> pure Laugh+ "confused" -> pure Confused+ "heart" -> pure Heart+ "hooray" -> pure Hooray+ "rocket" -> pure Rocket+ "eyes" -> pure Eyes+ t -> fail $ "Unknown ReactionContent: " <> T.unpack t++instance ToJSON ReactionContent where+ toJSON PlusOne = String "+1"+ toJSON MinusOne = String "-1"+ toJSON Laugh = String "laugh"+ toJSON Confused = String "confused"+ toJSON Heart = String "heart"+ toJSON Hooray = String "hooray"+ toJSON Rocket = String "rocket"+ toJSON Eyes = String "eyes"
src/GitHub/Data/Releases.hs view
@@ -25,7 +25,7 @@ , releaseAuthor :: !SimpleUser , releaseAssets :: !(Vector ReleaseAsset) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance FromJSON Release where parseJSON = withObject "Event" $ \o -> Release@@ -47,7 +47,7 @@ <*> o .: "author" <*> o .: "assets" -instance NFData Release where rnf = genericRnf+instance NFData Release instance Binary Release data ReleaseAsset = ReleaseAsset@@ -64,7 +64,7 @@ , releaseAssetUpdatedAt :: !UTCTime , releaseAssetUploader :: !SimpleUser }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance FromJSON ReleaseAsset where parseJSON = withObject "Event" $ \o -> ReleaseAsset@@ -81,5 +81,5 @@ <*> o .: "updated_at" <*> o .: "uploader" -instance NFData ReleaseAsset where rnf = genericRnf+instance NFData ReleaseAsset instance Binary ReleaseAsset
src/GitHub/Data/Repos.hs view
@@ -1,14 +1,10 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}-#define UNSAFE 1------------------------------------------------------------------------------+ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- This module also exports -- @'FromJSON' a => 'FromJSON' ('HM.HashMap' 'Language' a)@ -- orphan-ish instance for @aeson < 1@+ module GitHub.Data.Repos where import GitHub.Data.Definitions@@ -21,13 +17,7 @@ import qualified Data.HashMap.Strict as HM import qualified Data.Text as T-#if MIN_VERSION_aeson(1,0,0) import Data.Aeson.Types (FromJSONKey (..), fromJSONKeyCoerce)-#else-#ifdef UNSAFE-import Unsafe.Coerce (unsafeCoerce)-#endif-#endif data Repo = Repo { repoId :: !(Id Repo)@@ -63,9 +53,9 @@ , repoUpdatedAt :: !(Maybe UTCTime) , repoPermissions :: !(Maybe RepoPermissions) -- ^ Repository permissions as they relate to the authenticated user. }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Repo where rnf = genericRnf+instance NFData Repo instance Binary Repo data CodeSearchRepo = CodeSearchRepo@@ -98,9 +88,9 @@ , codeSearchRepoUpdatedAt :: !(Maybe UTCTime) , codeSearchRepoPermissions :: !(Maybe RepoPermissions) -- ^ Repository permissions as they relate to the authenticated user. }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData CodeSearchRepo where rnf = genericRnf+instance NFData CodeSearchRepo instance Binary CodeSearchRepo -- | Repository permissions, as they relate to the authenticated user.@@ -111,18 +101,18 @@ , repoPermissionPush :: !Bool , repoPermissionPull :: !Bool }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RepoPermissions where rnf = genericRnf+instance NFData RepoPermissions instance Binary RepoPermissions data RepoRef = RepoRef { repoRefOwner :: !SimpleOwner , repoRefRepo :: !(Name Repo) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RepoRef where rnf = genericRnf+instance NFData RepoRef instance Binary RepoRef data NewRepo = NewRepo@@ -139,9 +129,9 @@ , newRepoAllowSquashMerge :: !(Maybe Bool) , newRepoAllowMergeCommit :: !(Maybe Bool) , newRepoAllowRebaseMerge :: !(Maybe Bool)- } deriving (Eq, Ord, Show, Data, Typeable, Generic)+ } deriving (Eq, Ord, Show, Data, Generic) -instance NFData NewRepo where rnf = genericRnf+instance NFData NewRepo instance Binary NewRepo newRepo :: Name Repo -> NewRepo@@ -161,9 +151,9 @@ , editAllowRebaseMerge :: !(Maybe Bool) , editArchived :: !(Maybe Bool) }- deriving (Eq, Ord, Show, Data, Typeable, Generic)+ deriving (Eq, Ord, Show, Data, Generic) -instance NFData EditRepo where rnf = genericRnf+instance NFData EditRepo instance Binary EditRepo -- | Filter the list of the user's repos using any of these constructors.@@ -173,19 +163,19 @@ | RepoPublicityPublic -- ^ Only public repos. | RepoPublicityPrivate -- ^ Only private repos. | RepoPublicityMember -- ^ Only repos to which the user is a member but not an owner.- deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)+ deriving (Show, Eq, Ord, Enum, Bounded, Data, Generic) -- | The value is the number of bytes of code written in that language. type Languages = HM.HashMap Language Int -- | A programming language. newtype Language = Language Text- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) getLanguage :: Language -> Text getLanguage (Language l) = l -instance NFData Language where rnf = genericRnf+instance NFData Language instance Binary Language instance Hashable Language where hashWithSalt salt (Language l) = hashWithSalt salt l@@ -198,9 +188,9 @@ = KnownContributor !Int !URL !(Name User) !URL !(Id User) !Text -- | An unknown Github user with their number of contributions and recorded name. | AnonymousContributor !Int !Text- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Contributor where rnf = genericRnf+instance NFData Contributor instance Binary Contributor contributorToSimpleUser :: Contributor -> Maybe SimpleUser@@ -215,18 +205,18 @@ | CollaboratorPermissionWrite | CollaboratorPermissionRead | CollaboratorPermissionNone- deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Enum, Bounded, Eq, Ord, Generic) -instance NFData CollaboratorPermission where rnf = genericRnf+instance NFData CollaboratorPermission instance Binary CollaboratorPermission -- | A collaborator and its permission on a repository. -- See <https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level> data CollaboratorWithPermission = CollaboratorWithPermission SimpleUser CollaboratorPermission- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData CollaboratorWithPermission where rnf = genericRnf+instance NFData CollaboratorWithPermission instance Binary CollaboratorWithPermission -- JSON instances@@ -385,27 +375,13 @@ instance ToJSON Language where toJSON = toJSON . getLanguage -#if MIN_VERSION_aeson(1,0,0) instance FromJSONKey Language where fromJSONKey = fromJSONKeyCoerce-#else-instance FromJSON a => FromJSON (HM.HashMap Language a) where- parseJSON = fmap mapKeyLanguage . parseJSON- where- mapKeyLanguage :: HM.HashMap Text a -> HM.HashMap Language a-#ifdef UNSAFE- mapKeyLanguage = unsafeCoerce-#else- mapKeyLanguage = mapKey Language- mapKey :: (Eq k2, Hashable k2) => (k1 -> k2) -> HM.HashMap k1 a -> HM.HashMap k2 a- mapKey f = HM.fromList . map (first f) . HM.toList-#endif-#endif data ArchiveFormat = ArchiveFormatTarball -- ^ ".tar.gz" format | ArchiveFormatZipball -- ^ ".zip" format- deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)+ deriving (Show, Eq, Ord, Enum, Bounded, Data, Generic) instance IsPathPart ArchiveFormat where toPathPart af = case af of
src/GitHub/Data/Request.hs view
@@ -1,13 +1,8 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE StandaloneDeriving #-}--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>---+ module GitHub.Data.Request ( -- * Request Request,@@ -19,6 +14,8 @@ CommandMethod(..), toMethod, FetchCount(..),+ PageParams(..),+ PageLinks(..), MediaType (..), Paths, IsPathPart(..),@@ -34,6 +31,7 @@ import qualified Data.ByteString.Lazy as LBS import qualified Data.Text as T import qualified Network.HTTP.Types.Method as Method+import Network.URI (URI) ------------------------------------------------------------------------------ -- Path parts@@ -63,7 +61,7 @@ | Patch | Put | Delete- deriving (Eq, Ord, Read, Show, Enum, Bounded, Typeable, Data, Generic)+ deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Generic) instance Hashable CommandMethod @@ -79,8 +77,11 @@ -- | 'PagedQuery' returns just some results, using this data we can specify how -- many pages we want to fetch.-data FetchCount = FetchAtLeast !Word | FetchAll- deriving (Eq, Ord, Read, Show, Generic, Typeable)+data FetchCount =+ FetchAtLeast !Word+ | FetchAll+ | FetchPage PageParams+ deriving (Eq, Ord, Read, Show, Generic) -- | This instance is there mostly for 'fromInteger'.@@ -99,9 +100,40 @@ instance Hashable FetchCount instance Binary FetchCount-instance NFData FetchCount where rnf = genericRnf+instance NFData FetchCount -------------------------------------------------------------------------------+-- PageParams+-------------------------------------------------------------------------------++-- | Params for specifying the precise page and items per page.+data PageParams = PageParams {+ pageParamsPerPage :: Maybe Int+ , pageParamsPage :: Maybe Int+ }+ deriving (Eq, Ord, Read, Show, Generic)++instance Hashable PageParams+instance Binary PageParams+instance NFData PageParams++-------------------------------------------------------------------------------+-- PageLinks+-------------------------------------------------------------------------------++-- | 'PagedQuery' returns just some results, using this data we can specify how+-- many pages we want to fetch.+data PageLinks = PageLinks {+ pageLinksPrev :: Maybe URI+ , pageLinksNext :: Maybe URI+ , pageLinksLast :: Maybe URI+ , pageLinksFirst :: Maybe URI+ }+ deriving (Eq, Ord, Show, Generic)++instance NFData PageLinks++------------------------------------------------------------------------------- -- MediaType ------------------------------------------------------------------------------- @@ -116,7 +148,7 @@ | MtStatus -- ^ Parse status | MtUnit -- ^ Always succeeds | MtPreview a -- ^ Some other (preview) type; this is an extension point.- deriving (Eq, Ord, Read, Show, Typeable, Data, Generic)+ deriving (Eq, Ord, Read, Show, Data, Generic) ------------------------------------------------------------------------------ -- RW@@ -128,7 +160,7 @@ = RO -- ^ /Read-only/, doesn't necessarily requires authentication | RA -- ^ /Read authenticated/ | RW -- ^ /Read-write/, requires authentication- deriving (Eq, Ord, Read, Show, Enum, Bounded, Typeable, Data, Generic)+ deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Generic) {- data SRO (rw :: RW) where@@ -162,7 +194,6 @@ -> Paths -- ^ path -> LBS.ByteString -- ^ body -> GenRequest mt 'RW a- deriving (Typeable) -- | Most requests ask for @JSON@. type Request = GenRequest 'MtJSON
src/GitHub/Data/Reviews.hs view
@@ -16,9 +16,7 @@ | ReviewStateChangesRequested deriving (Show, Enum, Bounded, Eq, Ord, Generic) -instance NFData ReviewState where- rnf = genericRnf-+instance NFData ReviewState instance Binary ReviewState instance FromJSON ReviewState where@@ -41,9 +39,7 @@ , reviewId :: !(Id Review) } deriving (Show, Generic) -instance NFData Review where- rnf = genericRnf-+instance NFData Review instance Binary Review instance FromJSON Review where@@ -74,9 +70,7 @@ , reviewCommentPullRequestUrl :: !URL } deriving (Show, Generic) -instance NFData ReviewComment where- rnf = genericRnf-+instance NFData ReviewComment instance Binary ReviewComment instance FromJSON ReviewComment where
src/GitHub/Data/Search.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Search where import GitHub.Data.Repos (CodeSearchRepo)@@ -16,11 +11,11 @@ { searchResultTotalCount :: !Int , searchResultResults :: !entities }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) type SearchResult entity = SearchResult' (V.Vector entity) -instance NFData entities => NFData (SearchResult' entities) where rnf = genericRnf+instance NFData entities => NFData (SearchResult' entities) instance Binary entities => Binary (SearchResult' entities) instance (Monoid entities, FromJSON entities) => FromJSON (SearchResult' entities) where@@ -43,9 +38,9 @@ , codeHtmlUrl :: !URL , codeRepo :: !CodeSearchRepo }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Code where rnf = genericRnf+instance NFData Code instance Binary Code instance FromJSON Code where
src/GitHub/Data/Statuses.hs view
@@ -1,7 +1,5 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}+ module GitHub.Data.Statuses where import GitHub.Data.Definitions@@ -21,9 +19,9 @@ | StatusSuccess | StatusError | StatusFailure- deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Enum, Bounded, Eq, Ord, Generic) -instance NFData StatusState where rnf = genericRnf+instance NFData StatusState instance Binary StatusState instance FromJSON StatusState where@@ -52,7 +50,7 @@ , statusContext :: !(Maybe Text) , statusCreator :: !(Maybe SimpleUser) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance FromJSON Status where parseJSON = withObject "Status" $ \o -> Status@@ -73,9 +71,9 @@ , newStatusDescription :: !(Maybe Text) , newStatusContext :: !(Maybe Text) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData NewStatus where rnf = genericRnf+instance NFData NewStatus instance Binary NewStatus instance ToJSON NewStatus where@@ -99,7 +97,7 @@ , combinedStatusCommitUrl :: !URL , combinedStatusUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance FromJSON CombinedStatus where parseJSON = withObject "CombinedStatus" $ \o -> CombinedStatus
src/GitHub/Data/Teams.hs view
@@ -1,12 +1,5 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>---+ module GitHub.Data.Teams where import GitHub.Data.Definitions@@ -22,26 +15,26 @@ data Privacy = PrivacyClosed | PrivacySecret- deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Enum, Bounded, Eq, Ord, Generic) -instance NFData Privacy where rnf = genericRnf+instance NFData Privacy instance Binary Privacy data Permission = PermissionPull | PermissionPush | PermissionAdmin- deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Enum, Bounded, Eq, Ord, Generic) -instance NFData Permission where rnf = genericRnf+instance NFData Permission instance Binary Permission data AddTeamRepoPermission = AddTeamRepoPermission { addTeamRepoPermission :: !Permission }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData AddTeamRepoPermission where rnf = genericRnf+instance NFData AddTeamRepoPermission instance Binary AddTeamRepoPermission data SimpleTeam = SimpleTeam@@ -55,9 +48,9 @@ , simpleTeamMembersUrl :: !URL , simpleTeamRepositoriesUrl :: !URL }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData SimpleTeam where rnf = genericRnf+instance NFData SimpleTeam instance Binary SimpleTeam data Team = Team@@ -74,9 +67,9 @@ , teamReposCount :: !Int , teamOrganization :: !SimpleOrganization }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData Team where rnf = genericRnf+instance NFData Team instance Binary Team data CreateTeam = CreateTeam@@ -86,9 +79,9 @@ , createTeamPrivacy :: !Privacy , createTeamPermission :: !Permission }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData CreateTeam where rnf = genericRnf+instance NFData CreateTeam instance Binary CreateTeam data EditTeam = EditTeam@@ -97,15 +90,15 @@ , editTeamPrivacy :: !(Maybe Privacy) , editTeamPermission :: !(Maybe Permission) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData EditTeam where rnf = genericRnf+instance NFData EditTeam instance Binary EditTeam data Role = RoleMaintainer | RoleMember- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) instance NFData Role instance Binary Role@@ -113,9 +106,9 @@ data ReqState = StatePending | StateActive- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData ReqState where rnf = genericRnf+instance NFData ReqState instance Binary ReqState data TeamMembership = TeamMembership@@ -123,16 +116,16 @@ , teamMembershipRole :: !Role , teamMembershipReqState :: !ReqState }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData TeamMembership where rnf = genericRnf+instance NFData TeamMembership instance Binary TeamMembership data CreateTeamMembership = CreateTeamMembership { createTeamMembershipRole :: !Role-} deriving (Show, Data, Typeable, Eq, Ord, Generic)+} deriving (Show, Data, Eq, Ord, Generic) -instance NFData CreateTeamMembership where rnf = genericRnf+instance NFData CreateTeamMembership instance Binary CreateTeamMembership -- JSON Instances@@ -258,4 +251,4 @@ = TeamMemberRoleAll -- ^ all members of the team. | TeamMemberRoleMaintainer -- ^ team maintainers | TeamMemberRoleMember -- ^ normal members of the team.- deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)+ deriving (Show, Eq, Ord, Enum, Bounded, Data, Generic)
src/GitHub/Data/URL.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.URL ( URL(..), getUrl,@@ -15,12 +10,12 @@ -- -- /N.B./ syntactical validity is not verified. newtype URL = URL Text- deriving (Eq, Ord, Show, Generic, Typeable, Data)+ deriving (Eq, Ord, Show, Generic, Data) getUrl :: URL -> Text getUrl (URL url) = url -instance NFData URL where rnf = genericRnf+instance NFData URL instance Binary URL instance ToJSON URL where
src/GitHub/Data/Webhooks.hs view
@@ -1,8 +1,3 @@--------------------------------------------------------------------------------- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- module GitHub.Data.Webhooks where import GitHub.Data.Id (Id)@@ -25,9 +20,9 @@ , repoWebhookUpdatedAt :: !UTCTime , repoWebhookCreatedAt :: !UTCTime }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RepoWebhook where rnf = genericRnf+instance NFData RepoWebhook instance Binary RepoWebhook -- | See <https://developer.github.com/webhooks/#events>.@@ -90,9 +85,9 @@ | WebhookWatchEvent | WebhookWorkflowDispatch | WebhookWorkflowRun- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RepoWebhookEvent where rnf = genericRnf+instance NFData RepoWebhookEvent instance Binary RepoWebhookEvent data RepoWebhookResponse = RepoWebhookResponse@@ -100,9 +95,9 @@ , repoWebhookResponseStatus :: !(Maybe Text) , repoWebhookResponseMessage :: !(Maybe Text) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData RepoWebhookResponse where rnf = genericRnf+instance NFData RepoWebhookResponse instance Binary RepoWebhookResponse data PingEvent = PingEvent@@ -110,9 +105,9 @@ , pingEventHook :: !RepoWebhook , pingEventHookId :: !(Id RepoWebhook) }- deriving (Show, Data, Typeable, Eq, Ord, Generic)+ deriving (Show, Data, Eq, Ord, Generic) -instance NFData PingEvent where rnf = genericRnf+instance NFData PingEvent instance Binary PingEvent data NewRepoWebhook = NewRepoWebhook@@ -121,9 +116,9 @@ , newRepoWebhookEvents :: !(Maybe (Vector RepoWebhookEvent)) , newRepoWebhookActive :: !(Maybe Bool) }- deriving (Eq, Ord, Show, Typeable, Data, Generic)+ deriving (Eq, Ord, Show, Data, Generic) -instance NFData NewRepoWebhook where rnf = genericRnf+instance NFData NewRepoWebhook instance Binary NewRepoWebhook data EditRepoWebhook = EditRepoWebhook@@ -133,9 +128,9 @@ , editRepoWebhookRemoveEvents :: !(Maybe (Vector RepoWebhookEvent)) , editRepoWebhookActive :: !(Maybe Bool) }- deriving (Eq, Ord, Show, Typeable, Data, Generic)+ deriving (Eq, Ord, Show, Data, Generic) -instance NFData EditRepoWebhook where rnf = genericRnf+instance NFData EditRepoWebhook instance Binary EditRepoWebhook -- JSON instances
src/GitHub/Data/Webhooks/Validate.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- Verification of incomming webhook payloads, as described at -- <https://developer.github.com/webhooks/securing/>+ module GitHub.Data.Webhooks.Validate ( isValidPayload ) where
+ src/GitHub/Endpoints/Actions/Artifacts.hs view
@@ -0,0 +1,61 @@+-- |+-- The actions API as documented at+-- <https://docs.github.com/en/rest/reference/actions>.++module GitHub.Endpoints.Actions.Artifacts (+ artifactsForR,+ artifactR,+ deleteArtifactR,+ downloadArtifactR,+ artifactsForWorkflowRunR,+ module GitHub.Data+ ) where++import GitHub.Data+import GitHub.Internal.Prelude+import Network.URI (URI)+import Prelude ()++-- | List artifacts for repository.+-- See <https://docs.github.com/en/rest/reference/actions#list-artifacts-for-a-repository>+artifactsForR+ :: Name Owner+ -> Name Repo+ -> ArtifactMod+ -> FetchCount+ -> Request 'RA (WithTotalCount Artifact)+artifactsForR user repo opts = PagedQuery+ ["repos", toPathPart user, toPathPart repo, "actions", "artifacts"]+ (artifactModToQueryString opts)++-- | Get an artifact.+-- See <https://docs.github.com/en/rest/reference/actions#get-an-artifact>+artifactR :: Name Owner -> Name Repo -> Id Artifact -> Request 'RA Artifact+artifactR user repo artid =+ query ["repos", toPathPart user, toPathPart repo, "actions", "artifacts", toPathPart artid] []++-- | Delete an artifact.+-- See <https://docs.github.com/en/rest/reference/actions#delete-an-artifact>+deleteArtifactR :: Name Owner -> Name Repo -> Id Comment -> GenRequest 'MtUnit 'RW ()+deleteArtifactR user repo artid =+ Command Delete parts mempty+ where+ parts = ["repos", toPathPart user, toPathPart repo, "actions", "artifacts", toPathPart artid]++-- | Download an artifact.+-- See <https://docs.github.com/en/rest/reference/actions#download-an-artifact>+downloadArtifactR :: Name Owner -> Name Repo -> Id Artifact -> GenRequest 'MtRedirect 'RW URI+downloadArtifactR user repo artid =+ Query ["repos", toPathPart user, toPathPart repo, "actions", "artifacts", toPathPart artid, "zip"] []++-- | List artifacts for a workflow run.+-- See <https://docs.github.com/en/rest/reference/actions#list-workflow-run-artifacts>+artifactsForWorkflowRunR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> FetchCount+ -> Request 'RA (WithTotalCount Artifact)+artifactsForWorkflowRunR user repo runid = PagedQuery+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart runid, "artifacts"]+ []
+ src/GitHub/Endpoints/Actions/Cache.hs view
@@ -0,0 +1,66 @@+-- |+-- The actions API as documented at+-- <https://docs.github.com/en/rest/reference/actions>.++module GitHub.Endpoints.Actions.Cache (+ cacheUsageOrganizationR,+ cacheUsageByRepositoryR,+ cacheUsageR,+ cachesForRepoR,+ deleteCacheR,+ module GitHub.Data+ ) where++import GitHub.Data+import GitHub.Internal.Prelude+import Prelude ()++-- | Get Actions cache usage for the organization.+-- See <https://docs.github.com/en/rest/actions/cache#get-github-actions-cache-usage-for-an-organization>+cacheUsageOrganizationR+ :: Name Organization+ -> GenRequest 'MtJSON 'RA OrganizationCacheUsage+cacheUsageOrganizationR org =+ Query ["orgs", toPathPart org, "actions", "cache", "usage"] []++-- | List repositories with GitHub Actions cache usage for an organization.+-- See <https://docs.github.com/en/rest/actions/cache#list-repositories-with-github-actions-cache-usage-for-an-organization>+cacheUsageByRepositoryR+ :: Name Organization+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount RepositoryCacheUsage)+cacheUsageByRepositoryR org =+ PagedQuery ["orgs", toPathPart org, "actions", "cache", "usage-by-repository"] []++-- | Get GitHub Actions cache usage for a repository.+-- See <https://docs.github.com/en/rest/actions/cache#get-github-actions-cache-usage-for-a-repository>+cacheUsageR+ :: Name Owner+ -> Name Repo+ -> Request k RepositoryCacheUsage+cacheUsageR user repo =+ Query ["repos", toPathPart user, toPathPart repo, "actions", "cache", "usage"] []++-- | List the GitHub Actions caches for a repository.+-- See <https://docs.github.com/en/rest/actions/cache#list-github-actions-caches-for-a-repository>+cachesForRepoR+ :: Name Owner+ -> Name Repo+ -> CacheMod+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount Cache)+cachesForRepoR user repo opts = PagedQuery+ ["repos", toPathPart user, toPathPart repo, "actions", "caches"]+ (cacheModToQueryString opts)++-- | Delete GitHub Actions cache for a repository.+-- See <https://docs.github.com/en/rest/actions/cache#delete-a-github-actions-cache-for-a-repository-using-a-cache-id>+deleteCacheR+ :: Name Owner+ -> Name Repo+ -> Id Cache+ -> GenRequest 'MtUnit 'RW ()+deleteCacheR user repo cacheid =+ Command Delete parts mempty+ where+ parts = ["repos", toPathPart user, toPathPart repo, "actions", "caches", toPathPart cacheid]
+ src/GitHub/Endpoints/Actions/Secrets.hs view
@@ -0,0 +1,221 @@+-- |+-- The actions API as documented at+-- <https://docs.github.com/en/rest/reference/actions>.++module GitHub.Endpoints.Actions.Secrets (+ organizationSecretsR,+ organizationPublicKeyR,+ organizationSecretR,+ setOrganizationSecretR,+ deleteOrganizationSecretR,+ organizationSelectedRepositoriesForSecretR,+ setOrganizationSelectedRepositoriesForSecretR,+ addOrganizationSelectedRepositoriesForSecretR,+ removeOrganizationSelectedRepositoriesForSecretR,+ repoSecretsR,+ repoPublicKeyR,+ repoSecretR,+ setRepoSecretR,+ deleteRepoSecretR,+ environmentSecretsR,+ environmentPublicKeyR,+ environmentSecretR,+ setEnvironmentSecretR,+ deleteEnvironmentSecretR,+ module GitHub.Data+ ) where++import GitHub.Data+import GitHub.Internal.Prelude+import Prelude ()++-- | List organization secrets.+-- See <https://docs.github.com/en/rest/actions/secrets#list-organization-secrets>+organizationSecretsR+ :: Name Organization+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount OrganizationSecret)+organizationSecretsR org =+ PagedQuery ["orgs", toPathPart org, "actions", "secrets"] []++-- | List organization secrets.+-- See <https://docs.github.com/en/rest/actions/secrets#get-an-organization-public-key>+organizationPublicKeyR+ :: Name Organization+ -> GenRequest 'MtJSON 'RA PublicKey+organizationPublicKeyR org =+ Query ["orgs", toPathPart org, "actions", "secrets", "public-key"] []++-- | Get an organization secret.+-- See <https://docs.github.com/en/rest/actions/secrets#get-an-organization-secret>+organizationSecretR+ :: Name Organization+ -> Name OrganizationSecret+ -> GenRequest 'MtJSON 'RA OrganizationSecret+organizationSecretR org name =+ Query ["orgs", toPathPart org, "actions", "secrets", toPathPart name] []++-- | Create or update an organization secret.+-- See <https://docs.github.com/en/rest/actions/secrets#create-or-update-an-organization-secret>+setOrganizationSecretR+ :: Name Organization+ -> Name OrganizationSecret+ -> SetSecret+ -> GenRequest 'MtUnit 'RW ()+setOrganizationSecretR org name =+ Command Put ["orgs", toPathPart org, "actions", "secrets", toPathPart name] . encode++-- | Delete an organization secret.+-- See <https://docs.github.com/en/rest/actions/secrets#delete-an-organization-secret>+deleteOrganizationSecretR+ :: Name Organization+ -> Name OrganizationSecret+ -> GenRequest 'MtUnit 'RW ()+deleteOrganizationSecretR org name =+ Command Delete parts mempty+ where+ parts = ["orgs", toPathPart org, "actions", "secrets", toPathPart name]++-- | Get selected repositories for an organization secret.+-- See <https://docs.github.com/en/rest/actions/secrets#list-selected-repositories-for-an-organization-secret>+organizationSelectedRepositoriesForSecretR+ :: Name Organization+ -> Name OrganizationSecret+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount SelectedRepo)+organizationSelectedRepositoriesForSecretR org name =+ PagedQuery ["orgs", toPathPart org, "actions", "secrets", toPathPart name, "repositories"] []++-- | Set selected repositories for an organization secret.+-- See <https://docs.github.com/en/rest/actions/secrets#set-selected-repositories-for-an-organization-secret>+setOrganizationSelectedRepositoriesForSecretR+ :: Name Organization+ -> Name OrganizationSecret+ -> SetSelectedRepositories+ -> GenRequest 'MtUnit 'RW ()+setOrganizationSelectedRepositoriesForSecretR org name =+ Command Put ["orgs", toPathPart org, "actions", "secrets", toPathPart name, "repositories"] . encode++-- | Add selected repository to an organization secret.+-- See <https://docs.github.com/en/rest/actions/secrets#add-selected-repository-to-an-organization-secret>+addOrganizationSelectedRepositoriesForSecretR+ :: Name Organization+ -> Name OrganizationSecret+ -> Id Repo+ -> GenRequest 'MtUnit 'RW ()+addOrganizationSelectedRepositoriesForSecretR org name repo =+ Command Put ["orgs", toPathPart org, "actions", "secrets", toPathPart name, "repositories", toPathPart repo] mempty++-- | Remove selected repository from an organization secret.+-- See <https://docs.github.com/en/rest/actions/secrets#remove-selected-repository-from-an-organization-secret>+removeOrganizationSelectedRepositoriesForSecretR+ :: Name Organization+ -> Name OrganizationSecret+ -> Id Repo+ -> GenRequest 'MtUnit 'RW ()+removeOrganizationSelectedRepositoriesForSecretR org name repo =+ Command Delete ["orgs", toPathPart org, "actions", "secrets", toPathPart name, "repositories", toPathPart repo] mempty++-- | List repository secrets.+-- See <https://docs.github.com/en/rest/actions/secrets#list-repository-secrets>+repoSecretsR+ :: Name Owner+ -> Name Repo+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount RepoSecret)+repoSecretsR user repo =+ PagedQuery ["repos", toPathPart user, toPathPart repo, "actions", "secrets"] []++-- | Get a repository public key.+-- See <https://docs.github.com/en/rest/actions/secrets#get-a-repository-public-key>+repoPublicKeyR+ :: Name Owner+ -> Name Organization+ -> GenRequest 'MtJSON 'RA PublicKey+repoPublicKeyR user org =+ Query ["repos", toPathPart user, toPathPart org, "actions", "secrets", "public-key"] []++-- | Get a repository secret.+-- See <https://docs.github.com/en/rest/actions/secrets#get-a-repository-secret>+repoSecretR+ :: Name Owner+ -> Name Organization+ -> Name RepoSecret+ -> GenRequest 'MtJSON 'RA RepoSecret+repoSecretR user org name =+ Query ["repos", toPathPart user, toPathPart org, "actions", "secrets", toPathPart name] []++-- | Create or update a repository secret.+-- See <https://docs.github.com/en/rest/actions/secrets#create-or-update-a-repository-secret>+setRepoSecretR+ :: Name Owner+ -> Name Organization+ -> Name RepoSecret+ -> SetRepoSecret+ -> GenRequest 'MtUnit 'RW ()+setRepoSecretR user org name =+ Command Put ["repos", toPathPart user, toPathPart org, "actions", "secrets", toPathPart name] . encode++-- | Delete a repository secret.+-- See <https://docs.github.com/en/rest/actions/secrets#delete-a-repository-secret>+deleteRepoSecretR+ :: Name Owner+ -> Name Organization+ -> Name RepoSecret+ -> GenRequest 'MtUnit 'RW ()+deleteRepoSecretR user org name =+ Command Delete parts mempty+ where+ parts = ["repos", toPathPart user, toPathPart org, "actions", "secrets", toPathPart name]++-- | List environment secrets.+-- See <https://docs.github.com/en/rest/actions/secrets#list-environment-secrets>+environmentSecretsR+ :: Id Repo+ -> Name Environment+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount RepoSecret)+environmentSecretsR repo env =+ PagedQuery ["repositories", toPathPart repo, "environments", toPathPart env, "secrets"] []++-- | Get an environment public key.+-- See <https://docs.github.com/en/rest/actions/secrets#get-an-environment-public-key>+environmentPublicKeyR+ :: Id Repo+ -> Name Environment+ -> GenRequest 'MtJSON 'RA PublicKey+environmentPublicKeyR repo env =+ Query ["repositories", toPathPart repo, "environments", toPathPart env, "secrets", "public-key"] []++-- | Get an environment secret+-- See <https://docs.github.com/en/rest/actions/secrets#get-an-environment-secret>+environmentSecretR+ :: Id Repo+ -> Name Environment+ -> Name RepoSecret+ -> GenRequest 'MtJSON 'RA RepoSecret+environmentSecretR repo env name =+ Query ["repositories", toPathPart repo, "environments", toPathPart env, "secrets", toPathPart name] []++-- | Create or update an environment secret.+-- See <https://docs.github.com/en/rest/actions/secrets#create-or-update-an-environment-secret>+setEnvironmentSecretR+ :: Id Repo+ -> Name Environment+ -> Name RepoSecret+ -> SetRepoSecret+ -> GenRequest 'MtUnit 'RW ()+setEnvironmentSecretR repo env name =+ Command Put ["repositories", toPathPart repo, "environments", toPathPart env, "secrets", toPathPart name] . encode++-- | Delete an environment secret.+-- See <https://docs.github.com/en/rest/actions/secrets#delete-an-environment-secret>+deleteEnvironmentSecretR+ :: Id Repo+ -> Name Environment+ -> Name RepoSecret+ -> GenRequest 'MtUnit 'RW ()+deleteEnvironmentSecretR repo env name =+ Command Delete parts mempty+ where+ parts = ["repositories", toPathPart repo, "environments", toPathPart env, "secrets", toPathPart name]
+ src/GitHub/Endpoints/Actions/WorkflowJobs.hs view
@@ -0,0 +1,58 @@+-- |+-- The actions API as documented at+-- <https://docs.github.com/en/rest/reference/actions>.++module GitHub.Endpoints.Actions.WorkflowJobs (+ jobR,+ downloadJobLogsR,+ jobsForWorkflowRunAttemptR,+ jobsForWorkflowRunR,+ module GitHub.Data+ ) where++import GitHub.Data+import Network.URI (URI)+import Prelude ()++-- | Get a job for a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-jobs#get-a-job-for-a-workflow-run>+jobR+ :: Name Owner+ -> Name Repo+ -> Id Job+ -> Request 'RA Job+jobR owner repo job =+ Query ["repos", toPathPart owner, toPathPart repo, "actions", "jobs", toPathPart job] []++-- | Download job logs for a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-jobs#download-job-logs-for-a-workflow-run>+downloadJobLogsR+ :: Name Owner+ -> Name Repo+ -> Id Job+ -> GenRequest 'MtRedirect 'RO URI+downloadJobLogsR owner repo job =+ Query ["repos", toPathPart owner, toPathPart repo, "actions", "jobs", toPathPart job, "logs"] []++-- | List jobs for a workflow run attempt.+-- See <https://docs.github.com/en/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run-attempt>+jobsForWorkflowRunAttemptR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> Id RunAttempt+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount Job)+jobsForWorkflowRunAttemptR owner repo run attempt =+ PagedQuery ["repos", toPathPart owner, toPathPart repo, "actions", "runs", toPathPart run, "attempts", toPathPart attempt, "jobs"] []++-- | List jobs for a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run>+jobsForWorkflowRunR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount Job)+jobsForWorkflowRunR owner repo run =+ PagedQuery ["repos", toPathPart owner, toPathPart repo, "actions", "runs", toPathPart run, "jobs"] []
+ src/GitHub/Endpoints/Actions/WorkflowRuns.hs view
@@ -0,0 +1,181 @@+module GitHub.Endpoints.Actions.WorkflowRuns (+ reRunJobR,+ workflowRunsR,+ workflowRunR,+ deleteWorkflowRunR,+ workflowRunReviewHistoryR,+ approveWorkflowRunR,+ workflowRunAttemptR,+ downloadWorkflowRunAttemptLogsR,+ cancelWorkflowRunR,+ downloadWorkflowRunLogsR,+ deleteWorkflowRunLogsR,+ reRunWorkflowR,+ reRunFailedJobsR,+ workflowRunsForWorkflowR,+ module GitHub.Data+ ) where++import GitHub.Data+import GitHub.Internal.Prelude+import Network.URI (URI)+import Prelude ()++-- | Re-run a job from a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#re-run-a-job-from-a-workflow-run>+reRunJobR+ :: Name Owner+ -> Name Repo+ -> Id Job+ -> GenRequest 'MtUnit 'RW ()+reRunJobR user repo job = Command Post+ ["repos", toPathPart user, toPathPart repo, "actions", "jobs", toPathPart job, "rerun"]+ mempty++-- | List workflow runs for a repository.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-repository>+workflowRunsR+ :: Name Owner+ -> Name Repo+ -> WorkflowRunMod+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount WorkflowRun)+workflowRunsR user repo runMod = PagedQuery+ ["repos", toPathPart user, toPathPart repo, "actions", "runs"]+ (workflowRunModToQueryString runMod)++-- | Get a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run>+workflowRunR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtJSON 'RA WorkflowRun+workflowRunR user repo run = Query+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run]+ []++-- | Delete a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#delete-a-workflow-run>+deleteWorkflowRunR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtUnit 'RW ()+deleteWorkflowRunR user repo run = Command Delete+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run]+ mempty++-- | Get the review history for a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#get-the-review-history-for-a-workflow-run>+workflowRunReviewHistoryR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtJSON 'RA (Vector ReviewHistory)+workflowRunReviewHistoryR user repo run = Query+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "approvals"]+ []++-- | Approve a workflow run for a fork pull request.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#approve-a-workflow-run-for-a-fork-pull-request>+approveWorkflowRunR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtUnit 'RW ()+approveWorkflowRunR user repo run = Command Post+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "approve"]+ mempty++-- | Get a workflow run attempt.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run-attempt>+workflowRunAttemptR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> Id RunAttempt+ -> GenRequest 'MtJSON 'RA WorkflowRun+workflowRunAttemptR user repo run attempt = Query+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "attempts", toPathPart attempt]+ []++-- | Download workflow run attempt logs.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#download-workflow-run-attempt-logs>+downloadWorkflowRunAttemptLogsR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> Id RunAttempt+ -> GenRequest 'MtRedirect 'RO URI+downloadWorkflowRunAttemptLogsR user repo run attempt = Query+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "attempts", toPathPart attempt, "logs"]+ []++-- | Cancel a workflow run.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#cancel-a-workflow-run>+cancelWorkflowRunR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtUnit 'RW ()+cancelWorkflowRunR user repo run = Command Post+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "cancel"]+ mempty++-- | Download workflow run logs.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#download-workflow-run-logs>+downloadWorkflowRunLogsR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtRedirect 'RA URI+downloadWorkflowRunLogsR user repo run = Query+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "logs"]+ []++-- | Delete workflow run logs.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#delete-workflow-run-logs>+deleteWorkflowRunLogsR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtUnit 'RW ()+deleteWorkflowRunLogsR user repo run = Command Delete+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "logs"]+ mempty++-- | Re-run a workflow.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#re-run-a-workflow>+reRunWorkflowR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtUnit 'RW ()+reRunWorkflowR user repo run = Command Post+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "rerun"]+ mempty++-- | Re-run failed jobs from a workflow run.+-- See <https://docs.github.com/en/rest/actions/re-run-failed-jobs-from-a-workflow-run>+reRunFailedJobsR+ :: Name Owner+ -> Name Repo+ -> Id WorkflowRun+ -> GenRequest 'MtUnit 'RW ()+reRunFailedJobsR user repo run = Command Post+ ["repos", toPathPart user, toPathPart repo, "actions", "runs", toPathPart run, "rerun-failed-jobs"]+ mempty++-- | List workflow runs for a workflow.+-- See <https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-workflow>+workflowRunsForWorkflowR+ :: (IsPathPart idOrName) => Name Owner+ -> Name Repo+ -> idOrName+ -> WorkflowRunMod+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount WorkflowRun)+workflowRunsForWorkflowR user repo idOrName runMod = PagedQuery+ ["repos", toPathPart user, toPathPart repo, "actions", "workflows", toPathPart idOrName, "runs"]+ (workflowRunModToQueryString runMod)
+ src/GitHub/Endpoints/Actions/Workflows.hs view
@@ -0,0 +1,68 @@+module GitHub.Endpoints.Actions.Workflows (+ repositoryWorkflowsR,+ workflowR,+ disableWorkflowR,+ triggerWorkflowR,+ enableWorkflowR,+ module GitHub.Data+ ) where++import GitHub.Data+import GitHub.Internal.Prelude+import Prelude ()++-- | List repository workflows.+-- See <https://docs.github.com/en/rest/actions/workflows#list-repository-workflows>+repositoryWorkflowsR+ :: Name Owner+ -> Name Repo+ -> FetchCount+ -> GenRequest 'MtJSON 'RA (WithTotalCount Workflow)+repositoryWorkflowsR user repo = PagedQuery+ ["repos", toPathPart user, toPathPart repo, "actions", "workflows"]+ []++-- | Get a workflow.+-- See <https://docs.github.com/en/rest/actions/workflows#get-a-workflow>+workflowR+ :: (IsPathPart idOrName) => Name Owner+ -> Name Repo+ -> idOrName+ -> GenRequest 'MtJSON 'RA Workflow+workflowR user repo idOrName = Query+ ["repos", toPathPart user, toPathPart repo, "actions", "workflows", toPathPart idOrName]+ []++-- | Disable a workflow.+-- See <https://docs.github.com/en/rest/actions/workflows#disable-a-workflow>+disableWorkflowR+ :: (IsPathPart idOrName) => Name Owner+ -> Name Repo+ -> idOrName+ -> GenRequest 'MtUnit 'RW ()+disableWorkflowR user repo idOrName = Command Put+ ["repos", toPathPart user, toPathPart repo, "actions", "workflows", toPathPart idOrName, "disable"]+ mempty++-- | Create a workflow dispatch event.+-- See <https://docs.github.com/en/rest/actions/workflows#create-a-workflow-dispatch-event>+triggerWorkflowR+ :: (ToJSON a, IsPathPart idOrName) => Name Owner+ -> Name Repo+ -> idOrName+ -> CreateWorkflowDispatchEvent a+ -> GenRequest 'MtUnit 'RW ()+triggerWorkflowR user repo idOrName = Command Post+ ["repos", toPathPart user, toPathPart repo, "actions", "workflows", toPathPart idOrName, "dispatches"]+ . encode++-- | Enable a workflow.+-- See <https://docs.github.com/en/rest/actions/workflows#enable-a-workflow>+enableWorkflowR+ :: (IsPathPart idOrName) => Name Owner+ -> Name Repo+ -> idOrName+ -> GenRequest 'MtUnit 'RW ()+enableWorkflowR user repo idOrName = Command Put+ ["repos", toPathPart user, toPathPart repo, "actions", "workflows", toPathPart idOrName, "enable"]+ mempty
src/GitHub/Endpoints/Activity/Events.hs view
@@ -1,9 +1,6 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The events API as described on <https://developer.github.com/v3/activity/events/>.+ module GitHub.Endpoints.Activity.Events ( -- * Events repositoryEventsR,
src/GitHub/Endpoints/Activity/Notifications.hs view
@@ -1,8 +1,4 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo watching API as described on -- <https://developer.github.com/v3/activity/notifications/>.
src/GitHub/Endpoints/Activity/Starring.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo starring API as described on -- <https://developer.github.com/v3/activity/starring/>.+ module GitHub.Endpoints.Activity.Starring ( stargazersForR, reposStarredByR,
src/GitHub/Endpoints/Activity/Watching.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo watching API as described on -- <https://developer.github.com/v3/activity/watching/>.+ module GitHub.Endpoints.Activity.Watching ( watchersForR, reposWatchedByR,
src/GitHub/Endpoints/Enterprise/Organizations.hs view
@@ -1,9 +1,6 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The GitHub Enterprise orgs API as described on <https://developer.github.com/enterprise/v3/enterprise-admin/orgs/>.+ module GitHub.Endpoints.Enterprise.Organizations ( createOrganizationR, renameOrganizationR,
src/GitHub/Endpoints/Gists.hs view
@@ -1,9 +1,6 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The gists API as described at <http://developer.github.com/v3/gists/>.+ module GitHub.Endpoints.Gists ( gistsR, gistR,
src/GitHub/Endpoints/Gists/Comments.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The loving comments people have left on Gists, described on -- <http://developer.github.com/v3/gists/comments/>.+ module GitHub.Endpoints.Gists.Comments ( commentsOnR, gistCommentR,
src/GitHub/Endpoints/GitData/Blobs.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The API for dealing with git blobs from Github repos, as described in -- <http://developer.github.com/v3/git/blobs/>.+ module GitHub.Endpoints.GitData.Blobs ( blobR, module GitHub.Data,
src/GitHub/Endpoints/GitData/Commits.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The API for underlying git commits of a Github repo, as described on -- <http://developer.github.com/v3/git/commits/>.+ module GitHub.Endpoints.GitData.Commits ( gitCommitR, module GitHub.Data,
src/GitHub/Endpoints/GitData/References.hs view
@@ -1,11 +1,8 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The underlying git references on a Github repo, exposed for the world to -- see. The git internals documentation will also prove handy for understanding -- these. API documentation at <http://developer.github.com/v3/git/refs/>.+ module GitHub.Endpoints.GitData.References ( referenceR, referencesR,
src/GitHub/Endpoints/GitData/Trees.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The underlying tree of SHA1s and files that make up a git repo. The API is -- described on <http://developer.github.com/v3/git/trees/>.+ module GitHub.Endpoints.GitData.Trees ( treeR, nestedTreeR,
src/GitHub/Endpoints/Issues.hs view
@@ -1,10 +1,6 @@-{-# LANGUAGE CPP #-}------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The issues API as described on <http://developer.github.com/v3/issues/>.+ module GitHub.Endpoints.Issues ( currentUserIssuesR, organizationIssuesR,
src/GitHub/Endpoints/Issues/Comments.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Github issue comments API from -- <http://developer.github.com/v3/issues/comments/>.+ module GitHub.Endpoints.Issues.Comments ( commentR, commentsR,
src/GitHub/Endpoints/Issues/Events.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Github issue events API, which is described on -- <http://developer.github.com/v3/issues/events/>+ module GitHub.Endpoints.Issues.Events ( eventsForIssueR, eventsForRepoR,
src/GitHub/Endpoints/Issues/Labels.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The API for dealing with labels on Github issues as described on -- <http://developer.github.com/v3/issues/labels/>.+ module GitHub.Endpoints.Issues.Labels ( labelsOnRepoR, labelR,
src/GitHub/Endpoints/Issues/Milestones.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The milestones API as described on -- <http://developer.github.com/v3/issues/milestones/>.+ module GitHub.Endpoints.Issues.Milestones ( milestonesR, milestoneR,
src/GitHub/Endpoints/Organizations.hs view
@@ -1,9 +1,6 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The orgs API as described on <http://developer.github.com/v3/orgs/>.+ module GitHub.Endpoints.Organizations ( publicOrganizationsForR, publicOrganizationR,
src/GitHub/Endpoints/Organizations/Members.hs view
@@ -1,15 +1,13 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The organization members API as described on -- <http://developer.github.com/v3/orgs/members/>.+ module GitHub.Endpoints.Organizations.Members ( membersOfR, membersOfWithR, isMemberOfR, orgInvitationsR,+ orgMembershipR, module GitHub.Data, ) where @@ -51,3 +49,10 @@ -- See <https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations> orgInvitationsR :: Name Organization -> FetchCount -> Request 'RA (Vector Invitation) orgInvitationsR org = pagedQuery ["orgs", toPathPart org, "invitations"] []++-- | Get user membership information in an organization+--+-- See <https://docs.github.com/en/rest/orgs/members#get-organization-membership-for-a-user>+orgMembershipR :: Name User -> Name Organization -> Request 'RA Membership+orgMembershipR user org =+ Query [ "orgs", toPathPart org, "memberships", toPathPart user ] []
src/GitHub/Endpoints/Organizations/OutsideCollaborators.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The organization members API as described on -- <https://developer.github.com/v3/orgs/outside_collaborators/>.+ module GitHub.Endpoints.Organizations.OutsideCollaborators ( outsideCollaboratorsR, ) where
src/GitHub/Endpoints/Organizations/Teams.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Owner teams API as described on -- <http://developer.github.com/v3/orgs/teams/>.+ module GitHub.Endpoints.Organizations.Teams ( teamsOfR, teamInfoForR,
src/GitHub/Endpoints/PullRequests.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The pull requests API as documented at -- <http://developer.github.com/v3/pulls/>.+ module GitHub.Endpoints.PullRequests ( pullRequestsForR, pullRequestR,@@ -102,4 +99,3 @@ buildCommitMessageMap :: Maybe Text -> Value buildCommitMessageMap (Just msg) = object ["commit_message" .= msg ] buildCommitMessageMap Nothing = object []-
src/GitHub/Endpoints/PullRequests/Comments.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The pull request review comments API as described at -- <http://developer.github.com/v3/pulls/comments/>.+ module GitHub.Endpoints.PullRequests.Comments ( pullRequestCommentsR, pullRequestCommentR,
src/GitHub/Endpoints/PullRequests/Reviews.hs view
@@ -1,9 +1,6 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The reviews API as described on <http://developer.github.com/v3/pulls/reviews/>.+ module GitHub.Endpoints.PullRequests.Reviews ( pullRequestReviewsR , pullRequestReviewR
src/GitHub/Endpoints/RateLimit.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Github RateLimit API, as described at -- <http://developer.github.com/v3/rate_limit/>.+ module GitHub.Endpoints.RateLimit ( rateLimitR, module GitHub.Data,
+ src/GitHub/Endpoints/Reactions.hs view
@@ -0,0 +1,60 @@+-- |+-- The Reactions API as described at+-- <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28>.+module GitHub.Endpoints.Reactions (+ issueReactionsR,+ createIssueReactionR,+ deleteIssueReactionR,+ commentReactionsR,+ createCommentReactionR,+ deleteCommentReactionR,+ module GitHub.Data,+) where++import GitHub.Data+import GitHub.Internal.Prelude+import Prelude ()++-- | List reactions for an issue.+-- See <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#list-reactions-for-an-issue>+issueReactionsR :: Name Owner -> Name Repo -> Id Issue -> FetchCount -> Request k (Vector Reaction)+issueReactionsR owner repo iid =+ pagedQuery ["repos", toPathPart owner, toPathPart repo, "issues", toPathPart iid, "reactions"] []++-- | Create reaction for an issue comment.+-- See <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#create-reaction-for-an-issue>+createIssueReactionR :: Name Owner -> Name Repo -> Id Issue -> ReactionContent -> Request 'RW Reaction+createIssueReactionR owner repo iid content =+ command Post parts (encode $ NewReaction content)+ where+ parts = ["repos", toPathPart owner, toPathPart repo, "issues", toPathPart iid, "reactions"]++-- | Delete an issue comment reaction.+-- See <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#delete-an-issue-reaction>+deleteIssueReactionR :: Name Owner -> Name Repo -> Id Issue -> Id Reaction -> GenRequest 'MtUnit 'RW ()+deleteIssueReactionR owner repo iid rid =+ Command Delete parts mempty+ where+ parts = ["repos", toPathPart owner, toPathPart repo, "issues", toPathPart iid, "reactions", toPathPart rid]++-- | List reactions for an issue comment.+-- See <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#list-reactions-for-an-issue-comment>+commentReactionsR :: Name Owner -> Name Repo -> Id Comment -> FetchCount -> Request k (Vector Reaction)+commentReactionsR owner repo cid =+ pagedQuery ["repos", toPathPart owner, toPathPart repo, "issues", "comments", toPathPart cid, "reactions"] []++-- | Create reaction for an issue comment.+-- See https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#create-reaction-for-an-issue-comment+createCommentReactionR :: Name Owner -> Name Repo -> Id Comment -> ReactionContent -> Request 'RW Reaction+createCommentReactionR owner repo cid content =+ command Post parts (encode $ NewReaction content)+ where+ parts = ["repos", toPathPart owner, toPathPart repo, "issues", "comments", toPathPart cid, "reactions"]++-- | Delete an issue comment reaction.+-- See <https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#delete-an-issue-comment-reaction>+deleteCommentReactionR :: Name Owner -> Name Repo -> Id Comment -> Id Reaction -> GenRequest 'MtUnit 'RW ()+deleteCommentReactionR owner repo cid rid =+ Command Delete parts mempty+ where+ parts = ["repos", toPathPart owner, toPathPart repo, "issues", "comments", toPathPart cid, "reactions", toPathPart rid]
src/GitHub/Endpoints/Repos.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Github Repos API, as documented at -- <http://developer.github.com/v3/repos/>+ module GitHub.Endpoints.Repos ( -- * Querying repositories currentUserReposR,
src/GitHub/Endpoints/Repos/Collaborators.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo collaborators API as described on -- <http://developer.github.com/v3/repos/collaborators/>.+ module GitHub.Endpoints.Repos.Collaborators ( collaboratorsOnR, collaboratorPermissionOnR,
src/GitHub/Endpoints/Repos/Comments.hs view
@@ -1,11 +1,7 @@-{-# LANGUAGE CPP #-}------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo commits API as described on -- <http://developer.github.com/v3/repos/comments/>.+ module GitHub.Endpoints.Repos.Comments ( commentsForR, commitCommentsForR,
src/GitHub/Endpoints/Repos/Commits.hs view
@@ -1,11 +1,7 @@-{-# LANGUAGE CPP #-}------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo commits API as described on -- <http://developer.github.com/v3/repos/commits/>.+ module GitHub.Endpoints.Repos.Commits ( CommitQueryOption(..), commitsForR,
src/GitHub/Endpoints/Repos/Contents.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Github Repo Contents API, as documented at -- <https://developer.github.com/v3/repos/contents/>+ module GitHub.Endpoints.Repos.Contents ( -- * Querying contents contentsForR,
src/GitHub/Endpoints/Repos/Forks.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- Hot forking action, as described at -- <http://developer.github.com/v3/repos/forks/>.+ module GitHub.Endpoints.Repos.Forks ( forksForR, module GitHub.Data,
src/GitHub/Endpoints/Repos/Invitations.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo invitations API as described on -- <https://developer.github.com/v3/repos/invitations/>.+ module GitHub.Endpoints.Repos.Invitations ( listInvitationsOnR, listInvitationsForR,
src/GitHub/Endpoints/Repos/Statuses.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The repo statuses API as described on -- <https://developer.github.com/v3/repos/statuses/>.+ module GitHub.Endpoints.Repos.Statuses ( createStatusR, statusesForR,
src/GitHub/Endpoints/Repos/Webhooks.hs view
@@ -1,11 +1,8 @@- ----------------------------------------------------------------------------- -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The webhooks API, as described at -- <https://developer.github.com/v3/repos/hooks/> -- <https://developer.github.com/webhooks>+ module GitHub.Endpoints.Repos.Webhooks ( -- * Querying repositories webhooksForR,
src/GitHub/Endpoints/Search.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Github Search API, as described at -- <http://developer.github.com/v3/search/>.+ module GitHub.Endpoints.Search( searchReposR, searchCodeR,
src/GitHub/Endpoints/Users.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The Github Users API, as described at -- <http://developer.github.com/v3/users/>.+ module GitHub.Endpoints.Users ( userInfoForR, ownerInfoForR,
src/GitHub/Endpoints/Users/Emails.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The user emails API as described on -- <http://developer.github.com/v3/users/emails/>.+ module GitHub.Endpoints.Users.Emails ( currentUserEmailsR, currentUserPublicEmailsR,
src/GitHub/Endpoints/Users/Followers.hs view
@@ -1,10 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- The user followers API as described on -- <http://developer.github.com/v3/users/followers/>.+ module GitHub.Endpoints.Users.Followers ( usersFollowingR, usersFollowedByR,
src/GitHub/Enterprise.hs view
@@ -1,11 +1,7 @@------------------------------------------------------------------------------ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- This module re-exports all request constructors and data definitions for -- working with GitHub Enterprise.---+ module GitHub.Enterprise ( -- * Enterprise Admin -- | See <https://developer.github.com/enterprise/v3/enterprise-admin/>
src/GitHub/Internal/Prelude.hs view
@@ -1,61 +1,30 @@ {-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE CPP #-}------------------------------------------------------------------------------+ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- This module may change between minor releases. Do not rely on its contents.-module GitHub.Internal.Prelude (- module Prelude.Compat,- -- * Commonly used types- UTCTime,- HashMap,- Text, pack, unpack,- Vector,- -- * Commonly used typeclasses- Binary,- Data, Typeable,- Generic,- Hashable(..),- IsString(..),- NFData(..), genericRnf,- Semigroup(..),- -- * Aeson- FromJSON(..), ToJSON(..), Value(..), Object,- emptyObject,- encode,- withText, withObject, (.:), (.:?), (.!=), (.=), object, typeMismatch,- -- * Control.Applicative- (<|>),- -- * Data.Maybe- catMaybes,- -- * Data.List- intercalate, toList,- -- * Data.Time.ISO8601- formatISO8601,- ) where -import Control.Applicative ((<|>))-import Control.DeepSeq (NFData (..))-import Control.DeepSeq.Generics (genericRnf)-import Data.Aeson+module GitHub.Internal.Prelude ( module X ) where++import Control.Applicative as X ((<|>))+import Control.DeepSeq as X (NFData (..))+import Data.Aeson as X (FromJSON (..), Object, ToJSON (..), Value (..), encode, object, withObject, withText, (.!=), (.:), (.:?), (.=))-import Data.Aeson.Types (emptyObject, typeMismatch)-import Data.Binary (Binary)-import Data.Binary.Instances ()-import Data.Data (Data, Typeable)-import Data.Foldable (toList)-import Data.Hashable (Hashable (..))-import Data.HashMap.Strict (HashMap)-import Data.List (intercalate)-import Data.Maybe (catMaybes)-import Data.Semigroup (Semigroup (..))-import Data.String (IsString (..))-import Data.Text (Text, pack, unpack)-import Data.Time.Compat (UTCTime)-import Data.Time.ISO8601 (formatISO8601)-import Data.Vector (Vector)-import GHC.Generics (Generic)-import Prelude.Compat+import Data.Aeson.Types as X (emptyObject, typeMismatch)+import Data.Binary as X (Binary)+import Data.Binary.Instances as X ()+import Data.Data as X (Data)+import Data.Foldable as X (toList)+import Data.Hashable as X (Hashable (..))+import Data.HashMap.Strict as X (HashMap)+import Data.List as X (intercalate)+import Data.Maybe as X (catMaybes)+import Data.Semigroup as X (Semigroup (..))+import Data.String as X (IsString (..))+import Data.Text as X (Text, pack, unpack)+import Data.Time as X (UTCTime)+import Data.Time.ISO8601 as X (formatISO8601)+import Data.Vector as X (Vector)+import GHC.Generics as X (Generic)+import Prelude.Compat as X+import Data.Functor.Compat as X ((<&>))
src/GitHub/Request.hs view
@@ -6,11 +6,8 @@ {-# LANGUAGE KindSignatures #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE UndecidableInstances #-}------------------------------------------------------------------------------+ -- |--- License : BSD-3-Clause--- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>--- -- This module provides data types and helper methods, which makes possible -- to build alternative API request intepreters in addition to provided -- 'IO' functions.@@ -30,6 +27,7 @@ -- > -- | Lift request into Monad -- > githubRequest :: GH.Request 'False a -> GithubMonad a -- > githubRequest = singleton+ module GitHub.Request ( -- * A convenient execution of requests github,@@ -56,6 +54,7 @@ ParseResponse (..), makeHttpRequest, parseStatus,+ parsePageLinks, StatusMap, getNextUrl, performPagedRequest,@@ -81,6 +80,7 @@ import Control.Monad.Trans.Except (ExceptT (..), runExceptT) import Data.Aeson (eitherDecode) import Data.List (find)+import Data.Maybe (fromMaybe) import Data.Tagged (Tagged (..)) import Data.Version (showVersion) @@ -89,13 +89,14 @@ httpLbs, method, newManager, redirectCount, requestBody, requestHeaders, setQueryString, setRequestIgnoreStatus) import Network.HTTP.Link.Parser (parseLinkHeaderBS)-import Network.HTTP.Link.Types (LinkParam (..), href, linkParams)+import Network.HTTP.Link.Types (Link(..), LinkParam (..), href, linkParams) import Network.HTTP.Types (Method, RequestHeaders, Status (..)) import Network.URI (URI, escapeURIString, isUnescapedInURIComponent, parseURIReference, relativeTo) import qualified Data.ByteString as BS+import Data.ByteString.Builder (intDec, toLazyByteString) import qualified Data.ByteString.Lazy as LBS import qualified Data.Text as T import qualified Data.Text.Encoding as TE@@ -201,11 +202,6 @@ manager <- newManager tlsManagerSettings executeRequestWithMgr manager auth req -lessFetchCount :: Int -> FetchCount -> Bool-lessFetchCount _ FetchAll = True-lessFetchCount i (FetchAtLeast j) = i < fromIntegral j-- -- | Like 'executeRequest' but with provided 'Manager'. executeRequestWithMgr :: (AuthMethod am, ParseResponse mt a)@@ -237,10 +233,13 @@ res <- httpLbs' httpReq (<$ res) <$> unTagged (parseResponse httpReq res :: Tagged mt (ExceptT Error IO b)) - performHttpReq httpReq (PagedQuery _ _ l) =- unTagged (performPagedRequest httpLbs' predicate httpReq :: Tagged mt (ExceptT Error IO (HTTP.Response b)))- where- predicate v = lessFetchCount (length v) l+ performHttpReq httpReq (PagedQuery _ _ (FetchPage _)) = do+ (res, _pageLinks) <- unTagged (performPerPageRequest httpLbs' httpReq :: Tagged mt (ExceptT Error IO (HTTP.Response b, PageLinks)))+ return res+ performHttpReq httpReq (PagedQuery _ _ FetchAll) =+ unTagged (performPagedRequest httpLbs' (const True) httpReq :: Tagged mt (ExceptT Error IO (HTTP.Response b)))+ performHttpReq httpReq (PagedQuery _ _ (FetchAtLeast j)) =+ unTagged (performPagedRequest httpLbs' (\v -> length v < fromIntegral j) httpReq :: Tagged mt (ExceptT Error IO (HTTP.Response b))) performHttpReq httpReq (Command _ _ _) = do res <- httpLbs' httpReq@@ -458,7 +457,7 @@ $ setReqHeaders . unTagged (modifyRequest :: Tagged mt (HTTP.Request -> HTTP.Request)) . maybe id setAuthRequest auth- . setQueryString qs+ . setQueryString (qs <> extraQueryItems) $ req PagedQuery paths qs _ -> do req <- parseUrl' $ url paths@@ -466,7 +465,7 @@ $ setReqHeaders . unTagged (modifyRequest :: Tagged mt (HTTP.Request -> HTTP.Request)) . maybe id setAuthRequest auth- . setQueryString qs+ . setQueryString (qs <> extraQueryItems) $ req Command m paths body -> do req <- parseUrl' $ url paths@@ -498,6 +497,14 @@ setBody :: LBS.ByteString -> HTTP.Request -> HTTP.Request setBody body req = req { requestBody = RequestBodyLBS body } + extraQueryItems :: [(BS.ByteString, Maybe BS.ByteString)]+ extraQueryItems = case r of+ PagedQuery _ _ (FetchPage pp) -> catMaybes [+ (\page -> ("page", Just (LBS.toStrict $ toLazyByteString $ intDec page))) <$> pageParamsPage pp+ , (\perPage -> ("per_page", Just (LBS.toStrict $ toLazyByteString $ intDec perPage))) <$> pageParamsPerPage pp+ ]+ _ -> []+ -- | Query @Link@ header with @rel=next@ from the request headers. getNextUrl :: HTTP.Response a -> Maybe URI getNextUrl req = do@@ -543,6 +550,35 @@ m <- unTagged (parseResponse req' res' :: Tagged mt (m a)) go (acc <> m) res' req' (_, _) -> return (acc <$ res)++-- | Helper for requesting a single page, as specified by 'PageParams'.+--+-- This parses and returns the 'PageLinks' alongside the HTTP response.+performPerPageRequest+ :: forall a m mt. (ParseResponse mt a, MonadCatch m, MonadError Error m)+ => (HTTP.Request -> m (HTTP.Response LBS.ByteString)) -- ^ `httpLbs` analogue+ -> HTTP.Request -- ^ initial request+ -> Tagged mt (m (HTTP.Response a, PageLinks))+performPerPageRequest httpLbs' initReq = Tagged $ do+ res <- httpLbs' initReq+ m <- unTagged (parseResponse initReq res :: Tagged mt (m a))+ return (m <$ res, parsePageLinks res)++-- | Parse the 'PageLinks' from an HTTP response, where the information is+-- encoded in the Link header.+parsePageLinks :: HTTP.Response a -> PageLinks+parsePageLinks res = PageLinks {+ pageLinksPrev = linkToUri <$> find (elem (Rel, "prev") . linkParams) links+ , pageLinksNext = linkToUri <$> find (elem (Rel, "next") . linkParams) links+ , pageLinksLast = linkToUri <$> find (elem (Rel, "last") . linkParams) links+ , pageLinksFirst = linkToUri <$> find (elem (Rel, "first") . linkParams) links+ }+ where+ links :: [Link URI]+ links = fromMaybe [] (lookup "Link" (responseHeaders res) >>= parseLinkHeaderBS)++ linkToUri :: Link URI -> URI+ linkToUri (Link uri _) = uri ------------------------------------------------------------------------------- -- Internal