diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,19 @@
+## 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_
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,8 +1,10 @@
 GitHub
 ------
 
+[![Hackage version](https://img.shields.io/hackage/v/github.svg?label=Hackage&color=informational)](http://hackage.haskell.org/package/github)
+[![github on Stackage Nightly](https://stackage.org/package/github/badge/nightly)](https://stackage.org/nightly/package/github)
+[![Stackage LTS version](https://www.stackage.org/package/github/badge/lts?label=Stackage)](https://www.stackage.org/package/github)
 [![Haskell-CI](https://github.com/haskell-github/github/actions/workflows/haskell-ci.yml/badge.svg)](https://github.com/haskell-github/github/actions/workflows/haskell-ci.yml)
-[![Hackage](https://img.shields.io/hackage/v/github.svg)][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
 ===========
diff --git a/fixtures/actions/artifact.json b/fixtures/actions/artifact.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/artifact.json
@@ -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"
+  }
+}
diff --git a/fixtures/actions/artifacts-list.json b/fixtures/actions/artifacts-list.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/artifacts-list.json
@@ -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"
+      }
+    }
+  ]
+}
diff --git a/fixtures/actions/cache-list.json b/fixtures/actions/cache-list.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/cache-list.json
@@ -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
+    }
+  ]
+}
diff --git a/fixtures/actions/org-cache-usage.json b/fixtures/actions/org-cache-usage.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/org-cache-usage.json
@@ -0,0 +1,4 @@
+{
+  "total_active_caches_size_in_bytes": 26586,
+  "total_active_caches_count": 1
+}
diff --git a/fixtures/actions/org-public-key.json b/fixtures/actions/org-public-key.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/org-public-key.json
@@ -0,0 +1,4 @@
+{
+  "key_id": "568250167242549743",
+  "key": "KHVvOxB765kjkShEgUu27QCzl5XxKz/L20V+KRsWf0w="
+}
diff --git a/fixtures/actions/org-secrets-list.json b/fixtures/actions/org-secrets-list.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/org-secrets-list.json
@@ -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"
+    }
+  ]
+}
diff --git a/fixtures/actions/repo-cache-usage.json b/fixtures/actions/repo-cache-usage.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/repo-cache-usage.json
@@ -0,0 +1,5 @@
+{
+  "full_name": "python/cpython",
+  "active_caches_size_in_bytes": 55000268087,
+  "active_caches_count": 171
+}
diff --git a/fixtures/actions/selected-repositories-for-secret.json b/fixtures/actions/selected-repositories-for-secret.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/selected-repositories-for-secret.json
@@ -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"
+    }
+  ]
+}
diff --git a/fixtures/actions/workflow-job.json b/fixtures/actions/workflow-job.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/workflow-job.json
@@ -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"
+}
diff --git a/fixtures/actions/workflow-list.json b/fixtures/actions/workflow-list.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/workflow-list.json
@@ -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"
+    }
+  ]
+}
diff --git a/fixtures/actions/workflow-runs-list.json b/fixtures/actions/workflow-runs-list.json
new file mode 100644
--- /dev/null
+++ b/fixtures/actions/workflow-runs-list.json
@@ -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"
+      }
+    }
+  ]
+}
diff --git a/github.cabal b/github.cabal
--- a/github.cabal
+++ b/github.cabal
@@ -1,6 +1,6 @@
-cabal-version:      >=1.10
+cabal-version:      2.4
 name:               github
-version:            0.28.0.1
+version:            0.29
 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,8 +30,9 @@
   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.6.2
+  GHC == 9.4.5
+  GHC == 9.2.8
   GHC == 9.0.2
   GHC == 8.10.7
   GHC == 8.8.4
@@ -42,14 +43,16 @@
   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"
@@ -70,6 +73,7 @@
     DataKinds
     DeriveDataTypeable
     DeriveGeneric
+    LambdaCase
     OverloadedStrings
     ScopedTypeVariables
     TypeOperators
@@ -87,6 +91,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
@@ -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
@@ -163,7 +180,8 @@
     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
   build-depends:
@@ -180,7 +198,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
+    , base-compat           >=0.11.1     && <0.14
     , base16-bytestring     >=0.1.1.6    && <1.1
     , binary-instances      >=1          && <1.1
     , cryptohash-sha1       >=0.11.100.1 && <0.12
@@ -217,9 +235,15 @@
   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 +266,7 @@
     , bytestring
     , file-embed
     , github
-    , hspec                 >=2.6.1 && <2.11
+    , hspec                 >=2.6.1 && <2.12
     , tagged
     , text
     , unordered-containers
diff --git a/spec/GitHub/Actions/ArtifactsSpec.hs b/spec/GitHub/Actions/ArtifactsSpec.hs
new file mode 100644
--- /dev/null
+++ b/spec/GitHub/Actions/ArtifactsSpec.hs
@@ -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")
diff --git a/spec/GitHub/Actions/CacheSpec.hs b/spec/GitHub/Actions/CacheSpec.hs
new file mode 100644
--- /dev/null
+++ b/spec/GitHub/Actions/CacheSpec.hs
@@ -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")
diff --git a/spec/GitHub/Actions/SecretsSpec.hs b/spec/GitHub/Actions/SecretsSpec.hs
new file mode 100644
--- /dev/null
+++ b/spec/GitHub/Actions/SecretsSpec.hs
@@ -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")
diff --git a/spec/GitHub/Actions/WorkflowJobSpec.hs b/spec/GitHub/Actions/WorkflowJobSpec.hs
new file mode 100644
--- /dev/null
+++ b/spec/GitHub/Actions/WorkflowJobSpec.hs
@@ -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")
diff --git a/spec/GitHub/Actions/WorkflowRunsSpec.hs b/spec/GitHub/Actions/WorkflowRunsSpec.hs
new file mode 100644
--- /dev/null
+++ b/spec/GitHub/Actions/WorkflowRunsSpec.hs
@@ -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")
diff --git a/spec/GitHub/Actions/WorkflowSpec.hs b/spec/GitHub/Actions/WorkflowSpec.hs
new file mode 100644
--- /dev/null
+++ b/spec/GitHub/Actions/WorkflowSpec.hs
@@ -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")
diff --git a/src/GitHub.hs b/src/GitHub.hs
--- a/src/GitHub.hs
+++ b/src/GitHub.hs
@@ -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/>
@@ -413,6 +409,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 +486,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
diff --git a/src/GitHub/Auth.hs b/src/GitHub/Auth.hs
--- a/src/GitHub/Auth.hs
+++ b/src/GitHub/Auth.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Auth (
     Auth (..),
     AuthMethod,
diff --git a/src/GitHub/Data.hs b/src/GitHub/Data.hs
--- a/src/GitHub/Data.hs
+++ b/src/GitHub/Data.hs
@@ -1,10 +1,8 @@
 {-# 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 +32,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,
@@ -67,6 +72,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
diff --git a/src/GitHub/Data/Actions/Artifacts.hs b/src/GitHub/Data/Actions/Artifacts.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Data/Actions/Artifacts.hs
@@ -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, Typeable, 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, Typeable, 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"
diff --git a/src/GitHub/Data/Actions/Cache.hs b/src/GitHub/Data/Actions/Cache.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Data/Actions/Cache.hs
@@ -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, Typeable, Eq, Ord, Generic)
+
+data RepositoryCacheUsage = RepositoryCacheUsage
+    { repositoryCacheUsageFullName                :: !Text
+    , repositoryCacheUsageActiveCachesSizeInBytes :: !Int
+    , repositoryCacheUsageActiveCachesCount       :: !Int
+    }
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+data OrganizationCacheUsage = OrganizationCacheUsage
+    { organizationCacheUsageTotalActiveCachesSizeInBytes :: !Int
+    , organizationCacheUsageTotalActiveCachesCount       :: !Int
+    }
+  deriving (Show, Data, Typeable, 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"
diff --git a/src/GitHub/Data/Actions/Common.hs b/src/GitHub/Data/Actions/Common.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Data/Actions/Common.hs
@@ -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, Typeable, 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
diff --git a/src/GitHub/Data/Actions/Secrets.hs b/src/GitHub/Data/Actions/Secrets.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Data/Actions/Secrets.hs
@@ -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, Typeable, Eq, Ord, Generic)
+
+data PublicKey = PublicKey
+    { publicKeyId :: !Text
+    , publicKeyKey :: !Text
+    }
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+data SetSecret = SetSecret
+    { setSecretPublicKeyId :: !Text
+    , setSecretEncryptedValue :: !Text
+    , setSecretVisibility :: !Text
+    , setSecretSelectedRepositoryIds :: !(Maybe [Id Repo])
+    }
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+data SetRepoSecret = SetRepoSecret
+    { setRepoSecretPublicKeyId :: !Text
+    , setRepoSecretEncryptedValue :: !Text
+    }
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+data SelectedRepo = SelectedRepo
+    { selectedRepoRepoId :: !(Id Repo)
+    , selectedRepoRepoName :: !(Name Repo)
+    }
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+data SetSelectedRepositories = SetSelectedRepositories
+    { setSelectedRepositoriesRepositoryIds :: ![Id Repo]
+    }
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+data RepoSecret = RepoSecret
+    { repoSecretName :: !(Name RepoSecret)
+    , repoSecretCreatedAt :: !UTCTime
+    , repoSecretUpdatedAt :: !UTCTime
+    }
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+-- TODO move somewhere else?
+data Environment = Environment
+  deriving (Show, Data, Typeable, 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"
diff --git a/src/GitHub/Data/Actions/WorkflowJobs.hs b/src/GitHub/Data/Actions/WorkflowJobs.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Data/Actions/WorkflowJobs.hs
@@ -0,0 +1,98 @@
+{-# 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, Typeable, 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, Typeable, 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
+    , jobSteps           :: !(Vector JobStep)
+    , jobRunCheckUrl     :: !URL
+    , jobLabels          :: !(Vector Text)
+    , jobRunnerId        :: !Integer
+    , jobRunnerName      :: !Text
+    , jobRunnerGroupId   :: !Integer
+    , jobRunnerGroupName :: !Text
+    }
+  deriving (Show, Data, Typeable, 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 .: "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"
diff --git a/src/GitHub/Data/Actions/WorkflowRuns.hs b/src/GitHub/Data/Actions/WorkflowRuns.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Data/Actions/WorkflowRuns.hs
@@ -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, Typeable, Eq, Ord, Generic)
+
+data RunAttempt = RunAttempt
+  deriving (Show, Data, Typeable, Eq, Ord, Generic)
+
+data ReviewHistory  = ReviewHistory
+    { reviewHistoryState :: !Text
+    , reviewHistoryComment :: !Text
+    , reviewHistoryUser :: !SimpleUser
+
+    }
+  deriving (Show, Data, Typeable, 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"
diff --git a/src/GitHub/Data/Actions/Workflows.hs b/src/GitHub/Data/Actions/Workflows.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Data/Actions/Workflows.hs
@@ -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, Typeable, Eq, Ord, Generic)
+
+data CreateWorkflowDispatchEvent a = CreateWorkflowDispatchEvent
+    { createWorkflowDispatchEventRef    :: !Text
+    , createWorkflowDispatchEventInputs :: !a
+    }
+  deriving (Show, Generic)
+
+instance (NFData a) => NFData (CreateWorkflowDispatchEvent a) where rnf = genericRnf
+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 ]
diff --git a/src/GitHub/Data/Activities.hs b/src/GitHub/Data/Activities.hs
--- a/src/GitHub/Data/Activities.hs
+++ b/src/GitHub/Data/Activities.hs
@@ -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)
@@ -107,4 +102,3 @@
         <*> o .: "updated_at"
         <*> o .: "last_read_at"
         <*> o .: "url"
-
diff --git a/src/GitHub/Data/Comments.hs b/src/GitHub/Data/Comments.hs
--- a/src/GitHub/Data/Comments.hs
+++ b/src/GitHub/Data/Comments.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Comments where
 
 import GitHub.Data.Definitions
diff --git a/src/GitHub/Data/Content.hs b/src/GitHub/Data/Content.hs
--- a/src/GitHub/Data/Content.hs
+++ b/src/GitHub/Data/Content.hs
@@ -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
diff --git a/src/GitHub/Data/Definitions.hs b/src/GitHub/Data/Definitions.hs
--- a/src/GitHub/Data/Definitions.hs
+++ b/src/GitHub/Data/Definitions.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Definitions where
 
 import GitHub.Internal.Prelude
diff --git a/src/GitHub/Data/Email.hs b/src/GitHub/Data/Email.hs
--- a/src/GitHub/Data/Email.hs
+++ b/src/GitHub/Data/Email.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Email where
 
 import GitHub.Internal.Prelude
diff --git a/src/GitHub/Data/Enterprise.hs b/src/GitHub/Data/Enterprise.hs
--- a/src/GitHub/Data/Enterprise.hs
+++ b/src/GitHub/Data/Enterprise.hs
@@ -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,
diff --git a/src/GitHub/Data/Enterprise/Organizations.hs b/src/GitHub/Data/Enterprise/Organizations.hs
--- a/src/GitHub/Data/Enterprise/Organizations.hs
+++ b/src/GitHub/Data/Enterprise/Organizations.hs
@@ -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
diff --git a/src/GitHub/Data/Events.hs b/src/GitHub/Data/Events.hs
--- a/src/GitHub/Data/Events.hs
+++ b/src/GitHub/Data/Events.hs
@@ -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,6 +9,7 @@
 -- /TODO:/
 --
 -- * missing repo, org, payload, id
+--
 data Event = Event
     -- { eventId        :: !(Id Event) -- id can be encoded as string.
     { eventActor     :: !SimpleUser
diff --git a/src/GitHub/Data/Gists.hs b/src/GitHub/Data/Gists.hs
--- a/src/GitHub/Data/Gists.hs
+++ b/src/GitHub/Data/Gists.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Gists where
 
 import GitHub.Data.Definitions
diff --git a/src/GitHub/Data/GitData.hs b/src/GitHub/Data/GitData.hs
--- a/src/GitHub/Data/GitData.hs
+++ b/src/GitHub/Data/GitData.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.GitData where
 
 import GitHub.Data.Definitions
diff --git a/src/GitHub/Data/Id.hs b/src/GitHub/Data/Id.hs
--- a/src/GitHub/Data/Id.hs
+++ b/src/GitHub/Data/Id.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Id (
     Id(..),
     mkId,
diff --git a/src/GitHub/Data/Invitation.hs b/src/GitHub/Data/Invitation.hs
--- a/src/GitHub/Data/Invitation.hs
+++ b/src/GitHub/Data/Invitation.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Invitation where
 
 import GitHub.Data.Definitions
diff --git a/src/GitHub/Data/Issues.hs b/src/GitHub/Data/Issues.hs
--- a/src/GitHub/Data/Issues.hs
+++ b/src/GitHub/Data/Issues.hs
@@ -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,6 +31,7 @@
     , issueId          :: !(Id Issue)
     , issueComments    :: !Int
     , issueMilestone   :: !(Maybe Milestone)
+    , issueStateReason :: !(Maybe IssueStateReason)
     }
   deriving (Show, Data, Typeable, Eq, Ord, Generic)
 
@@ -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
diff --git a/src/GitHub/Data/Milestone.hs b/src/GitHub/Data/Milestone.hs
--- a/src/GitHub/Data/Milestone.hs
+++ b/src/GitHub/Data/Milestone.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Milestone where
 
 import GitHub.Data.Definitions
diff --git a/src/GitHub/Data/Name.hs b/src/GitHub/Data/Name.hs
--- a/src/GitHub/Data/Name.hs
+++ b/src/GitHub/Data/Name.hs
@@ -1,9 +1,4 @@
 {-# LANGUAGE CPP #-}
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.Name (
     Name(..),
     mkName,
diff --git a/src/GitHub/Data/Options.hs b/src/GitHub/Data/Options.hs
--- a/src/GitHub/Data/Options.hs
+++ b/src/GitHub/Data/Options.hs
@@ -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,
@@ -94,6 +119,30 @@
 instance NFData IssueState where rnf = genericRnf
 instance Binary IssueState
 
+-- | 'GitHub.Data.Issues.Issue' state reason
+data IssueStateReason
+    = StateReasonCompleted
+    | StateReasonNotPlanned
+    | StateReasonReopened
+  deriving
+    (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)
+
+instance ToJSON IssueStateReason where
+    toJSON = String . \case
+      StateReasonCompleted  -> "completed"
+      StateReasonNotPlanned -> "not_planned"
+      StateReasonReopened   -> "reopened"
+
+instance FromJSON IssueStateReason where
+    parseJSON = withText "IssueStateReason" $ \t -> case T.toLower t of
+        "completed"   -> pure StateReasonCompleted
+        "not_planned" -> pure StateReasonNotPlanned
+        "reopened"    -> pure StateReasonReopened
+        _ -> fail $ "Unknown IssueStateReason: " <> T.unpack t
+
+instance NFData IssueStateReason where rnf = genericRnf
+instance Binary IssueStateReason
+
 -- | 'GitHub.Data.PullRequests.PullRequest' mergeable_state
 data MergeableState
     = StateUnknown
@@ -184,6 +233,18 @@
   deriving
     (Eq, Ord, Show, Generic, Typeable, Data)
 
+-- Actions cache
+
+data SortCache
+    = SortCacheCreatedAt
+    | SortCacheLastAccessedAt
+    | SortCacheSizeInBytes
+  deriving
+    (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data)
+
+instance NFData SortCache where rnf = genericRnf
+instance Binary SortCache
+
 -------------------------------------------------------------------------------
 -- Classes
 -------------------------------------------------------------------------------
@@ -640,3 +701,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, Typeable, 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, Typeable, 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, Typeable, 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 }
diff --git a/src/GitHub/Data/PullRequests.hs b/src/GitHub/Data/PullRequests.hs
--- a/src/GitHub/Data/PullRequests.hs
+++ b/src/GitHub/Data/PullRequests.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.PullRequests (
     SimplePullRequest(..),
     PullRequest(..),
diff --git a/src/GitHub/Data/RateLimit.hs b/src/GitHub/Data/RateLimit.hs
--- a/src/GitHub/Data/RateLimit.hs
+++ b/src/GitHub/Data/RateLimit.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.RateLimit where
 
 import GitHub.Internal.Prelude
diff --git a/src/GitHub/Data/Repos.hs b/src/GitHub/Data/Repos.hs
--- a/src/GitHub/Data/Repos.hs
+++ b/src/GitHub/Data/Repos.hs
@@ -1,14 +1,12 @@
 {-# 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
diff --git a/src/GitHub/Data/Request.hs b/src/GitHub/Data/Request.hs
--- a/src/GitHub/Data/Request.hs
+++ b/src/GitHub/Data/Request.hs
@@ -3,11 +3,7 @@
 {-# LANGUAGE GADTs              #-}
 {-# LANGUAGE KindSignatures     #-}
 {-# LANGUAGE StandaloneDeriving #-}
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
+
 module GitHub.Data.Request (
     -- * Request
     Request,
diff --git a/src/GitHub/Data/Search.hs b/src/GitHub/Data/Search.hs
--- a/src/GitHub/Data/Search.hs
+++ b/src/GitHub/Data/Search.hs
@@ -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)
diff --git a/src/GitHub/Data/Teams.hs b/src/GitHub/Data/Teams.hs
--- a/src/GitHub/Data/Teams.hs
+++ b/src/GitHub/Data/Teams.hs
@@ -2,11 +2,7 @@
 {-# 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
diff --git a/src/GitHub/Data/URL.hs b/src/GitHub/Data/URL.hs
--- a/src/GitHub/Data/URL.hs
+++ b/src/GitHub/Data/URL.hs
@@ -1,8 +1,3 @@
------------------------------------------------------------------------------
--- |
--- License     :  BSD-3-Clause
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
 module GitHub.Data.URL (
     URL(..),
     getUrl,
diff --git a/src/GitHub/Data/Webhooks.hs b/src/GitHub/Data/Webhooks.hs
--- a/src/GitHub/Data/Webhooks.hs
+++ b/src/GitHub/Data/Webhooks.hs
@@ -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)
diff --git a/src/GitHub/Data/Webhooks/Validate.hs b/src/GitHub/Data/Webhooks/Validate.hs
--- a/src/GitHub/Data/Webhooks/Validate.hs
+++ b/src/GitHub/Data/Webhooks/Validate.hs
@@ -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
diff --git a/src/GitHub/Endpoints/Actions/Artifacts.hs b/src/GitHub/Endpoints/Actions/Artifacts.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Endpoints/Actions/Artifacts.hs
@@ -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"]
+    []
diff --git a/src/GitHub/Endpoints/Actions/Cache.hs b/src/GitHub/Endpoints/Actions/Cache.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Endpoints/Actions/Cache.hs
@@ -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]
diff --git a/src/GitHub/Endpoints/Actions/Secrets.hs b/src/GitHub/Endpoints/Actions/Secrets.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Endpoints/Actions/Secrets.hs
@@ -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]
diff --git a/src/GitHub/Endpoints/Actions/WorkflowJobs.hs b/src/GitHub/Endpoints/Actions/WorkflowJobs.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Endpoints/Actions/WorkflowJobs.hs
@@ -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"] []
diff --git a/src/GitHub/Endpoints/Actions/WorkflowRuns.hs b/src/GitHub/Endpoints/Actions/WorkflowRuns.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Endpoints/Actions/WorkflowRuns.hs
@@ -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)
diff --git a/src/GitHub/Endpoints/Actions/Workflows.hs b/src/GitHub/Endpoints/Actions/Workflows.hs
new file mode 100644
--- /dev/null
+++ b/src/GitHub/Endpoints/Actions/Workflows.hs
@@ -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
diff --git a/src/GitHub/Endpoints/Activity/Events.hs b/src/GitHub/Endpoints/Activity/Events.hs
--- a/src/GitHub/Endpoints/Activity/Events.hs
+++ b/src/GitHub/Endpoints/Activity/Events.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Activity/Notifications.hs b/src/GitHub/Endpoints/Activity/Notifications.hs
--- a/src/GitHub/Endpoints/Activity/Notifications.hs
+++ b/src/GitHub/Endpoints/Activity/Notifications.hs
@@ -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/>.
 
diff --git a/src/GitHub/Endpoints/Activity/Starring.hs b/src/GitHub/Endpoints/Activity/Starring.hs
--- a/src/GitHub/Endpoints/Activity/Starring.hs
+++ b/src/GitHub/Endpoints/Activity/Starring.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Activity/Watching.hs b/src/GitHub/Endpoints/Activity/Watching.hs
--- a/src/GitHub/Endpoints/Activity/Watching.hs
+++ b/src/GitHub/Endpoints/Activity/Watching.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Enterprise/Organizations.hs b/src/GitHub/Endpoints/Enterprise/Organizations.hs
--- a/src/GitHub/Endpoints/Enterprise/Organizations.hs
+++ b/src/GitHub/Endpoints/Enterprise/Organizations.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Gists.hs b/src/GitHub/Endpoints/Gists.hs
--- a/src/GitHub/Endpoints/Gists.hs
+++ b/src/GitHub/Endpoints/Gists.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Gists/Comments.hs b/src/GitHub/Endpoints/Gists/Comments.hs
--- a/src/GitHub/Endpoints/Gists/Comments.hs
+++ b/src/GitHub/Endpoints/Gists/Comments.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/GitData/Blobs.hs b/src/GitHub/Endpoints/GitData/Blobs.hs
--- a/src/GitHub/Endpoints/GitData/Blobs.hs
+++ b/src/GitHub/Endpoints/GitData/Blobs.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/GitData/Commits.hs b/src/GitHub/Endpoints/GitData/Commits.hs
--- a/src/GitHub/Endpoints/GitData/Commits.hs
+++ b/src/GitHub/Endpoints/GitData/Commits.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/GitData/References.hs b/src/GitHub/Endpoints/GitData/References.hs
--- a/src/GitHub/Endpoints/GitData/References.hs
+++ b/src/GitHub/Endpoints/GitData/References.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/GitData/Trees.hs b/src/GitHub/Endpoints/GitData/Trees.hs
--- a/src/GitHub/Endpoints/GitData/Trees.hs
+++ b/src/GitHub/Endpoints/GitData/Trees.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Issues.hs b/src/GitHub/Endpoints/Issues.hs
--- a/src/GitHub/Endpoints/Issues.hs
+++ b/src/GitHub/Endpoints/Issues.hs
@@ -1,10 +1,8 @@
 {-# 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,
diff --git a/src/GitHub/Endpoints/Issues/Comments.hs b/src/GitHub/Endpoints/Issues/Comments.hs
--- a/src/GitHub/Endpoints/Issues/Comments.hs
+++ b/src/GitHub/Endpoints/Issues/Comments.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Issues/Events.hs b/src/GitHub/Endpoints/Issues/Events.hs
--- a/src/GitHub/Endpoints/Issues/Events.hs
+++ b/src/GitHub/Endpoints/Issues/Events.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Issues/Labels.hs b/src/GitHub/Endpoints/Issues/Labels.hs
--- a/src/GitHub/Endpoints/Issues/Labels.hs
+++ b/src/GitHub/Endpoints/Issues/Labels.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Issues/Milestones.hs b/src/GitHub/Endpoints/Issues/Milestones.hs
--- a/src/GitHub/Endpoints/Issues/Milestones.hs
+++ b/src/GitHub/Endpoints/Issues/Milestones.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Organizations.hs b/src/GitHub/Endpoints/Organizations.hs
--- a/src/GitHub/Endpoints/Organizations.hs
+++ b/src/GitHub/Endpoints/Organizations.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Organizations/Members.hs b/src/GitHub/Endpoints/Organizations/Members.hs
--- a/src/GitHub/Endpoints/Organizations/Members.hs
+++ b/src/GitHub/Endpoints/Organizations/Members.hs
@@ -1,10 +1,7 @@
------------------------------------------------------------------------------
 -- |
--- 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,
diff --git a/src/GitHub/Endpoints/Organizations/OutsideCollaborators.hs b/src/GitHub/Endpoints/Organizations/OutsideCollaborators.hs
--- a/src/GitHub/Endpoints/Organizations/OutsideCollaborators.hs
+++ b/src/GitHub/Endpoints/Organizations/OutsideCollaborators.hs
@@ -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
diff --git a/src/GitHub/Endpoints/Organizations/Teams.hs b/src/GitHub/Endpoints/Organizations/Teams.hs
--- a/src/GitHub/Endpoints/Organizations/Teams.hs
+++ b/src/GitHub/Endpoints/Organizations/Teams.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/PullRequests.hs b/src/GitHub/Endpoints/PullRequests.hs
--- a/src/GitHub/Endpoints/PullRequests.hs
+++ b/src/GitHub/Endpoints/PullRequests.hs
@@ -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 []
-
diff --git a/src/GitHub/Endpoints/PullRequests/Comments.hs b/src/GitHub/Endpoints/PullRequests/Comments.hs
--- a/src/GitHub/Endpoints/PullRequests/Comments.hs
+++ b/src/GitHub/Endpoints/PullRequests/Comments.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/PullRequests/Reviews.hs b/src/GitHub/Endpoints/PullRequests/Reviews.hs
--- a/src/GitHub/Endpoints/PullRequests/Reviews.hs
+++ b/src/GitHub/Endpoints/PullRequests/Reviews.hs
@@ -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
diff --git a/src/GitHub/Endpoints/RateLimit.hs b/src/GitHub/Endpoints/RateLimit.hs
--- a/src/GitHub/Endpoints/RateLimit.hs
+++ b/src/GitHub/Endpoints/RateLimit.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Repos.hs b/src/GitHub/Endpoints/Repos.hs
--- a/src/GitHub/Endpoints/Repos.hs
+++ b/src/GitHub/Endpoints/Repos.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Repos/Collaborators.hs b/src/GitHub/Endpoints/Repos/Collaborators.hs
--- a/src/GitHub/Endpoints/Repos/Collaborators.hs
+++ b/src/GitHub/Endpoints/Repos/Collaborators.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Repos/Comments.hs b/src/GitHub/Endpoints/Repos/Comments.hs
--- a/src/GitHub/Endpoints/Repos/Comments.hs
+++ b/src/GitHub/Endpoints/Repos/Comments.hs
@@ -1,11 +1,9 @@
 {-# 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,
diff --git a/src/GitHub/Endpoints/Repos/Commits.hs b/src/GitHub/Endpoints/Repos/Commits.hs
--- a/src/GitHub/Endpoints/Repos/Commits.hs
+++ b/src/GitHub/Endpoints/Repos/Commits.hs
@@ -1,11 +1,9 @@
 {-# 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,
diff --git a/src/GitHub/Endpoints/Repos/Contents.hs b/src/GitHub/Endpoints/Repos/Contents.hs
--- a/src/GitHub/Endpoints/Repos/Contents.hs
+++ b/src/GitHub/Endpoints/Repos/Contents.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Repos/Forks.hs b/src/GitHub/Endpoints/Repos/Forks.hs
--- a/src/GitHub/Endpoints/Repos/Forks.hs
+++ b/src/GitHub/Endpoints/Repos/Forks.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Repos/Invitations.hs b/src/GitHub/Endpoints/Repos/Invitations.hs
--- a/src/GitHub/Endpoints/Repos/Invitations.hs
+++ b/src/GitHub/Endpoints/Repos/Invitations.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Repos/Statuses.hs b/src/GitHub/Endpoints/Repos/Statuses.hs
--- a/src/GitHub/Endpoints/Repos/Statuses.hs
+++ b/src/GitHub/Endpoints/Repos/Statuses.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Repos/Webhooks.hs b/src/GitHub/Endpoints/Repos/Webhooks.hs
--- a/src/GitHub/Endpoints/Repos/Webhooks.hs
+++ b/src/GitHub/Endpoints/Repos/Webhooks.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Search.hs b/src/GitHub/Endpoints/Search.hs
--- a/src/GitHub/Endpoints/Search.hs
+++ b/src/GitHub/Endpoints/Search.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Users.hs b/src/GitHub/Endpoints/Users.hs
--- a/src/GitHub/Endpoints/Users.hs
+++ b/src/GitHub/Endpoints/Users.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Users/Emails.hs b/src/GitHub/Endpoints/Users/Emails.hs
--- a/src/GitHub/Endpoints/Users/Emails.hs
+++ b/src/GitHub/Endpoints/Users/Emails.hs
@@ -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,
diff --git a/src/GitHub/Endpoints/Users/Followers.hs b/src/GitHub/Endpoints/Users/Followers.hs
--- a/src/GitHub/Endpoints/Users/Followers.hs
+++ b/src/GitHub/Endpoints/Users/Followers.hs
@@ -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,
diff --git a/src/GitHub/Enterprise.hs b/src/GitHub/Enterprise.hs
--- a/src/GitHub/Enterprise.hs
+++ b/src/GitHub/Enterprise.hs
@@ -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/>
diff --git a/src/GitHub/Internal/Prelude.hs b/src/GitHub/Internal/Prelude.hs
--- a/src/GitHub/Internal/Prelude.hs
+++ b/src/GitHub/Internal/Prelude.hs
@@ -1,61 +1,32 @@
 {-# 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 Control.DeepSeq.Generics as X (genericRnf)
+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, Typeable)
+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.Compat         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 ((<&>))
diff --git a/src/GitHub/Request.hs b/src/GitHub/Request.hs
--- a/src/GitHub/Request.hs
+++ b/src/GitHub/Request.hs
@@ -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,
