Repository: PyGithub/PyGithub

Issue:
Artifact support ?
Hello,

Is there any support for artifacts? Meaning request `/repos/{owner}/{repo}/actions/artifacts` . I could not find anything and I would like to rewrite an existing script which purges artifacts using module `requests` into one using module `github`.



Discussion:

Resolving patch:
diff --git a/github/Artifact.py b/github/Artifact.py
new file mode 100644
--- /dev/null
+++ b/github/Artifact.py
@@ -0,0 +1,178 @@
+############################ Copyrights and license ############################
+#                                                                              #
+# Copyright 2022 Aleksei Fedotov <aleksei@fedotov.email>                       #
+#                                                                              #
+# This file is part of PyGithub.                                               #
+# http://pygithub.readthedocs.io/                                              #
+#                                                                              #
+# PyGithub is free software: you can redistribute it and/or modify it under    #
+# the terms of the GNU Lesser General Public License as published by the Free  #
+# Software Foundation, either version 3 of the License, or (at your option)    #
+# any later version.                                                           #
+#                                                                              #
+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY  #
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS    #
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
+# details.                                                                     #
+#                                                                              #
+# You should have received a copy of the GNU Lesser General Public License     #
+# along with PyGithub. If not, see <http://www.gnu.org/licenses/>.             #
+#                                                                              #
+################################################################################
+
+import github.GithubObject
+import github.WorkflowRun
+
+
+class Artifact(github.GithubObject.NonCompletableGithubObject):
+    """
+    This class represents an Artifact of Github Run
+    """
+
+    def __repr__(self):
+        return self.get__repr__({"name": self._name.value, "id": self._id.value})
+
+    @property
+    def archive_download_url(self):
+        """
+        :type: string
+        """
+        return self._archive_download_url.value
+
+    @property
+    def created_at(self):
+        """
+        :type: datetime.datetime
+        """
+        return self._created_at.value
+
+    @property
+    def expired(self):
+        """
+        :type: bool
+        """
+        return self._expired.value
+
+    @property
+    def expires_at(self):
+        """
+        :type: datetime.datetime
+        """
+        return self._expires_at.value
+
+    @property
+    def head_sha(self):
+        """
+        :type: string
+        """
+        return self._head_sha.value
+
+    @property
+    def id(self):
+        """
+        :type: string
+        """
+        return self._id.value
+
+    @property
+    def name(self):
+        """
+        :type: string
+        """
+        return self._name.value
+
+    @property
+    def node_id(self):
+        """
+        :type: string
+        """
+        return self._node_id.value
+
+    @property
+    def size_in_bytes(self):
+        """
+        :type: integer
+        """
+        return self._size_in_bytes.value
+
+    @property
+    def updated_at(self):
+        """
+        :type: datetime.datetime
+        """
+        return self._updated_at.value
+
+    @property
+    def url(self):
+        """
+        :type: string
+        """
+        return self._url.value
+
+    @property
+    def workflow_run(self):
+        """
+        :type: :class:``
+        """
+        return self._workflow_run.value
+
+    def delete(self) -> bool:
+        """
+        :calls: `DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id} <https://docs.github.com/en/rest/actions/artifacts#delete-an-artifact>`_
+        :rtype: bool
+        """
+        status, headers, data = self._requester.requestBlob("DELETE", self.url)
+        return status == 204
+
+    def _initAttributes(self):
+        self._archive_download_url = github.GithubObject.NotSet
+        self._created_at = github.GithubObject.NotSet
+        self._expired = github.GithubObject.NotSet
+        self._expires_at = github.GithubObject.NotSet
+        self._head_sha = github.GithubObject.NotSet
+        self._id = github.GithubObject.NotSet
+        self._name = github.GithubObject.NotSet
+        self._node_id = github.GithubObject.NotSet
+        self._size_in_bytes = github.GithubObject.NotSet
+        self._updated_at = github.GithubObject.NotSet
+        self._url = github.GithubObject.NotSet
+        self._workflow_run = github.GithubObject.NotSet
+
+    def _useAttributes(self, attributes):
+        if "archive_download_url" in attributes:  # pragma no branch
+            self._archive_download_url = self._makeStringAttribute(
+                attributes["archive_download_url"]
+            )
+        if "created_at" in attributes:  # pragma no branch
+            assert attributes["created_at"] is None or isinstance(
+                attributes["created_at"], (str,)
+            ), attributes["created_at"]
+            self._created_at = self._makeDatetimeAttribute(attributes["created_at"])
+        if "expired" in attributes:  # pragma no branch
+            self._expired = self._makeBoolAttribute(attributes["expired"])
+        if "expires_at" in attributes:  # pragma no branch
+            assert attributes["expires_at"] is None or isinstance(
+                attributes["expires_at"], (str,)
+            ), attributes["expires_at"]
+            self._expires_at = self._makeDatetimeAttribute(attributes["expires_at"])
+        if "head_sha" in attributes:  # pragma no branch
+            self._head_sha = self._makeStringAttribute(attributes["head_sha"])
+        if "id" in attributes:  # pragma no branch
+            self._id = self._makeIntAttribute(attributes["id"])
+        if "name" in attributes:  # pragma no branch
+            self._name = self._makeStringAttribute(attributes["name"])
+        if "node_id" in attributes:  # pragma no branch
+            self._node_id = self._makeStringAttribute(attributes["node_id"])
+        if "size_in_bytes" in attributes:  # pragma no branch
+            self._size_in_bytes = self._makeIntAttribute(attributes["size_in_bytes"])
+        if "updated_at" in attributes:  # pragma no branch
+            assert attributes["updated_at"] is None or isinstance(
+                attributes["updated_at"], (str,)
+            ), attributes["updated_at"]
+            self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"])
+        if "url" in attributes:  # pragma no branch
+            self._url = self._makeStringAttribute(attributes["url"])
+        if "workflow_run" in attributes:  # pragma no branch
+            self._workflow_run = self._makeClassAttribute(
+                github.WorkflowRun.WorkflowRun, attributes["workflow_run"]
+            )
diff --git a/github/Repository.py b/github/Repository.py
--- a/github/Repository.py
+++ b/github/Repository.py
@@ -65,6 +65,7 @@
 # Copyright 2018 Yves Zumbach <yzumbach@andrew.cmu.edu>                        #
 # Copyright 2018 Leying Chen <leyingc@andrew.cmu.edu>                          #
 # Copyright 2020 Pascal Hofmann <mail@pascalhofmann.de>                        #
+# Copyright 2022 Aleksei Fedotov <aleksei@fedotov.email>                       #
 #                                                                              #
 # This file is part of PyGithub.                                               #
 # http://pygithub.readthedocs.io/                                              #
@@ -91,6 +92,7 @@
 
 from deprecated import deprecated
 
+import github.Artifact
 import github.Branch
 import github.CheckRun
 import github.CheckSuite
@@ -3703,6 +3705,33 @@ def get_check_run(self, check_run_id):
         )
         return github.CheckRun.CheckRun(self._requester, headers, data, completed=True)
 
+    def get_artifacts(self):
+        """
+        :calls: `GET /repos/{owner}/{repo}/actions/artifacts <https://docs.github.com/en/rest/actions/artifacts#list-artifacts-for-a-repository>`_
+        :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Artifact.Artifact`
+        """
+
+        return github.PaginatedList.PaginatedList(
+            github.Artifact.Artifact,
+            self._requester,
+            f"{self.url}/actions/artifacts",
+            None,
+            list_item="artifacts",
+        )
+
+    def get_artifact(self, artifact_id):
+        """
+        :calls: `GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id} <https://docs.github.com/en/rest/actions/artifacts#get-an-artifact>`_
+        :param artifact_id: int
+        :rtype: :class:`github.Artifact.Artifact`
+        """
+        assert isinstance(artifact_id, int), artifact_id
+        headers, data = self._requester.requestJsonAndCheck(
+            "GET", f"{self.url}/actions/artifacts/{artifact_id}"
+        )
+
+        return github.Artifact.Artifact(self._requester, headers, data, completed=True)
+
     def _initAttributes(self):
         self._allow_merge_commit = github.GithubObject.NotSet
         self._allow_rebase_merge = github.GithubObject.NotSet
diff --git a/github/WorkflowRun.py b/github/WorkflowRun.py
--- a/github/WorkflowRun.py
+++ b/github/WorkflowRun.py
@@ -1,6 +1,7 @@
 ############################ Copyrights and license ############################
 #                                                                              #
 # Copyright 2020 Steve Kowalik <steven@wedontsleep.org>                        #
+# Copyright 2022 Aleksei Fedotov <aleksei@fedotov.email>                       #
 #                                                                              #
 # This file is part of PyGithub.                                               #
 # http://pygithub.readthedocs.io/                                              #
@@ -22,6 +23,7 @@
 
 from collections import namedtuple
 
+import github.Artifact
 import github.GithubObject
 import github.PullRequest
 
@@ -170,6 +172,15 @@ def artifacts_url(self):
         self._completeIfNotSet(self._artifacts_url)
         return self._artifacts_url.value
 
+    def get_artifacts(self):
+        return github.PaginatedList.PaginatedList(
+            github.Artifact.Artifact,
+            self._requester,
+            self._artifacts_url.value,
+            None,
+            list_item="artifacts",
+        )
+
     @property
     def cancel_url(self):
         """


Test patch:
diff --git a/tests/Artifact.py b/tests/Artifact.py
new file mode 100644
--- /dev/null
+++ b/tests/Artifact.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+
+import github
+
+from . import Framework
+
+
+class Artifact(Framework.TestCase):
+    def setUp(self):
+        super().setUp()
+        self.repo = self.g.get_repo("github/vscode-codeql")
+
+    def testGetArtifactsFromWorkflow(self):
+        artifact = self.repo.get_workflow_run(160995070).get_artifacts()[0]
+
+        self.assertEqual(artifact.name, "vscode-codeql-extension")
+        self.assertTrue(artifact.expired)
+        self.assertEqual(
+            repr(artifact), 'Artifact(name="vscode-codeql-extension", id=10495898)'
+        )
+
+    def testGetSingleArtifactFromRepo(self):
+        artifact = self.repo.get_artifact(378970214)
+
+        self.assertEqual(artifact.name, "vscode-codeql-extension")
+        self.assertFalse(artifact.expired)
+        self.assertEqual(
+            repr(artifact), 'Artifact(name="vscode-codeql-extension", id=378970214)'
+        )
+
+    def testGetArtifactsFromRepo(self):
+        artifact_id = 378970214
+        artifacts = self.repo.get_artifacts()
+        for item in artifacts:
+            if item.id == artifact_id:
+                artifact = item
+                break
+        else:
+            assert False, f"No artifact {artifact_id} is found"
+
+        self.assertEqual(
+            repr(artifact),
+            f'Artifact(name="vscode-codeql-extension", id={artifact_id})',
+        )
+
+    def testGetNonexistentArtifact(self):
+        artifact_id = 396724437
+        repo_name = "lexa/PyGithub"
+        repo = self.g.get_repo(repo_name)
+        with self.assertRaises(github.GithubException):
+            repo.get_artifact(artifact_id)
+
+    def testDelete(self):
+        artifact_id = 396724439
+        repo_name = "lexa/PyGithub"
+        repo = self.g.get_repo(repo_name)
+        artifact = repo.get_artifact(artifact_id)
+        self.assertTrue(artifact.delete())
+        with self.assertRaises(github.GithubException):
+            repo.get_artifact(artifact_id)
diff --git a/tests/ReplayData/Artifact.setUp.txt b/tests/ReplayData/Artifact.setUp.txt
new file mode 100644
--- /dev/null
+++ b/tests/ReplayData/Artifact.setUp.txt
@@ -0,0 +1,11 @@
+https
+GET
+api.github.com
+None
+/repos/github/vscode-codeql
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:34 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b8996d1d847bfa31020b23f12f995dc133b73619849c219cd1868e168b90f6fa"'), ('Last-Modified', 'Sat, 24 Sep 2022 16:33:41 GMT'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '45'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '15'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB34:5240:1F7B70F:1FF54F1:63343096')]
+{"id":211169016,"node_id":"MDEwOlJlcG9zaXRvcnkyMTExNjkwMTY=","name":"vscode-codeql","full_name":"github/vscode-codeql","private":false,"owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/github/vscode-codeql","description":"An extension for Visual Studio Code that adds rich language support for CodeQL","fork":false,"url":"https://api.github.com/repos/github/vscode-codeql","forks_url":"https://api.github.com/repos/github/vscode-codeql/forks","keys_url":"https://api.github.com/repos/github/vscode-codeql/keys{/key_id}","collaborators_url":"https://api.github.com/repos/github/vscode-codeql/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/github/vscode-codeql/teams","hooks_url":"https://api.github.com/repos/github/vscode-codeql/hooks","issue_events_url":"https://api.github.com/repos/github/vscode-codeql/issues/events{/number}","events_url":"https://api.github.com/repos/github/vscode-codeql/events","assignees_url":"https://api.github.com/repos/github/vscode-codeql/assignees{/user}","branches_url":"https://api.github.com/repos/github/vscode-codeql/branches{/branch}","tags_url":"https://api.github.com/repos/github/vscode-codeql/tags","blobs_url":"https://api.github.com/repos/github/vscode-codeql/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/github/vscode-codeql/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/github/vscode-codeql/git/refs{/sha}","trees_url":"https://api.github.com/repos/github/vscode-codeql/git/trees{/sha}","statuses_url":"https://api.github.com/repos/github/vscode-codeql/statuses/{sha}","languages_url":"https://api.github.com/repos/github/vscode-codeql/languages","stargazers_url":"https://api.github.com/repos/github/vscode-codeql/stargazers","contributors_url":"https://api.github.com/repos/github/vscode-codeql/contributors","subscribers_url":"https://api.github.com/repos/github/vscode-codeql/subscribers","subscription_url":"https://api.github.com/repos/github/vscode-codeql/subscription","commits_url":"https://api.github.com/repos/github/vscode-codeql/commits{/sha}","git_commits_url":"https://api.github.com/repos/github/vscode-codeql/git/commits{/sha}","comments_url":"https://api.github.com/repos/github/vscode-codeql/comments{/number}","issue_comment_url":"https://api.github.com/repos/github/vscode-codeql/issues/comments{/number}","contents_url":"https://api.github.com/repos/github/vscode-codeql/contents/{+path}","compare_url":"https://api.github.com/repos/github/vscode-codeql/compare/{base}...{head}","merges_url":"https://api.github.com/repos/github/vscode-codeql/merges","archive_url":"https://api.github.com/repos/github/vscode-codeql/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/github/vscode-codeql/downloads","issues_url":"https://api.github.com/repos/github/vscode-codeql/issues{/number}","pulls_url":"https://api.github.com/repos/github/vscode-codeql/pulls{/number}","milestones_url":"https://api.github.com/repos/github/vscode-codeql/milestones{/number}","notifications_url":"https://api.github.com/repos/github/vscode-codeql/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/github/vscode-codeql/labels{/name}","releases_url":"https://api.github.com/repos/github/vscode-codeql/releases{/id}","deployments_url":"https://api.github.com/repos/github/vscode-codeql/deployments","created_at":"2019-09-26T19:44:53Z","updated_at":"2022-09-24T16:33:41Z","pushed_at":"2022-09-28T11:20:36Z","git_url":"git://github.com/github/vscode-codeql.git","ssh_url":"git@github.com:github/vscode-codeql.git","clone_url":"https://github.com/github/vscode-codeql.git","svn_url":"https://github.com/github/vscode-codeql","homepage":"","size":9461,"stargazers_count":311,"watchers_count":311,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":165,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":138,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["codeql","vscode","vscode-extension","works-with-codespaces"],"visibility":"public","forks":165,"open_issues":138,"watchers":311,"default_branch":"main","temp_clone_token":null,"organization":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"network_count":165,"subscribers_count":28}
+
diff --git a/tests/ReplayData/Artifact.testDelete.txt b/tests/ReplayData/Artifact.testDelete.txt
new file mode 100644
--- /dev/null
+++ b/tests/ReplayData/Artifact.testDelete.txt
@@ -0,0 +1,44 @@
+https
+GET
+api.github.com
+None
+/repos/lexa/PyGithub
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:25 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"fa17a5276e7acf7935e265c35562e198168eba7e364cec522ed3c943db34b9ab"'), ('Last-Modified', 'Tue, 27 Sep 2022 16:35:24 GMT'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4986'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '14'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D144:88EA:13115A0:1360F01:6347F4B5')]
+{"id":542181388,"node_id":"R_kgDOIFEIDA","name":"PyGithub","full_name":"lexa/PyGithub","private":false,"owner":{"login":"lexa","id":80391,"node_id":"MDQ6VXNlcjgwMzkx","avatar_url":"https://avatars.githubusercontent.com/u/80391?v=4","gravatar_id":"","url":"https://api.github.com/users/lexa","html_url":"https://github.com/lexa","followers_url":"https://api.github.com/users/lexa/followers","following_url":"https://api.github.com/users/lexa/following{/other_user}","gists_url":"https://api.github.com/users/lexa/gists{/gist_id}","starred_url":"https://api.github.com/users/lexa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lexa/subscriptions","organizations_url":"https://api.github.com/users/lexa/orgs","repos_url":"https://api.github.com/users/lexa/repos","events_url":"https://api.github.com/users/lexa/events{/privacy}","received_events_url":"https://api.github.com/users/lexa/received_events","type":"User","site_admin":false},"html_url":"https://github.com/lexa/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/lexa/PyGithub","forks_url":"https://api.github.com/repos/lexa/PyGithub/forks","keys_url":"https://api.github.com/repos/lexa/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lexa/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lexa/PyGithub/teams","hooks_url":"https://api.github.com/repos/lexa/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/lexa/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/lexa/PyGithub/events","assignees_url":"https://api.github.com/repos/lexa/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/lexa/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/lexa/PyGithub/tags","blobs_url":"https://api.github.com/repos/lexa/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lexa/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lexa/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/lexa/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lexa/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/lexa/PyGithub/languages","stargazers_url":"https://api.github.com/repos/lexa/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/lexa/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/lexa/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/lexa/PyGithub/subscription","commits_url":"https://api.github.com/repos/lexa/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/lexa/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/lexa/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/lexa/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/lexa/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/lexa/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lexa/PyGithub/merges","archive_url":"https://api.github.com/repos/lexa/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lexa/PyGithub/downloads","issues_url":"https://api.github.com/repos/lexa/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/lexa/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/lexa/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/lexa/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lexa/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/lexa/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/lexa/PyGithub/deployments","created_at":"2022-09-27T16:22:55Z","updated_at":"2022-09-27T16:35:24Z","pushed_at":"2022-10-13T10:44:09Z","git_url":"git://github.com/lexa/PyGithub.git","ssh_url":"git@github.com:lexa/PyGithub.git","clone_url":"https://github.com/lexa/PyGithub.git","svn_url":"https://github.com/lexa/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":11667,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":1,"watchers":0,"default_branch":"master","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"allow_auto_merge":false,"delete_branch_on_merge":false,"allow_update_branch":false,"use_squash_pr_title_as_default":false,"squash_merge_commit_message":"COMMIT_MESSAGES","squash_merge_commit_title":"COMMIT_OR_PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","parent":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"source":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"network_count":1533,"subscribers_count":0}
+
+https
+GET
+api.github.com
+None
+/repos/lexa/PyGithub/actions/artifacts/396724439
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:25 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"eb922edbfb3be37adfad91d445b790d560458056f413c992245fab18f82ff90f"'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '15'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D14E:9294:41910F2:427C643:6347F4B5')]
+{"id":396724439,"node_id":"MDg6QXJ0aWZhY3QzOTY3MjQ0Mzk=","name":"test-artifact","size_in_bytes":0,"url":"https://api.github.com/repos/lexa/PyGithub/actions/artifacts/396724439","archive_download_url":"https://api.github.com/repos/lexa/PyGithub/actions/artifacts/396724439/zip","expired":false,"created_at":"2022-10-13T10:44:34Z","updated_at":"2022-10-13T10:44:36Z","expires_at":"2023-01-11T10:44:23Z","workflow_run":{"id":3241693286,"repository_id":542181388,"head_repository_id":542181388,"head_branch":"generate-artifact","head_sha":"64ac5680db075fc4cb6404fa49ccbd349a5c2d02"}}
+
+https
+DELETE
+api.github.com
+None
+/repos/lexa/PyGithub/actions/artifacts/396724439
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+204
+[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:26 GMT'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4984'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '16'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('X-GitHub-Request-Id', 'D15A:2275:3BBD835:3CA61EF:6347F4B5')]
+
+
+https
+GET
+api.github.com
+None
+/repos/lexa/PyGithub/actions/artifacts/396724439
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+404
+[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:26 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4983'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '17'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D168:1AFB:3CAF4A2:3D97D08:6347F4B6')]
+{"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/actions#get-an-artifact"}
+
diff --git a/tests/ReplayData/Artifact.testGetArtifactsFromRepo.txt b/tests/ReplayData/Artifact.testGetArtifactsFromRepo.txt
new file mode 100644
--- /dev/null
+++ b/tests/ReplayData/Artifact.testGetArtifactsFromRepo.txt
@@ -0,0 +1,11 @@
+https
+GET
+api.github.com
+None
+/repos/github/vscode-codeql/actions/artifacts
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:32 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"fc70d5ff8044f680191934066321f0416508888f32bbc22bd5d35732150314db"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/211169016/actions/artifacts?page=2>; rel="next", <https://api.github.com/repositories/211169016/actions/artifacts?page=156>; rel="last"'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '49'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '11'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB0C:45A2:1FA6467:2021BC5:63343094')]
+{"total_count":4665,"artifacts":[{"id":379052698,"node_id":"MDg6QXJ0aWZhY3QzNzkwNTI2OTg=","name":"vscode-codeql-extension","size_in_bytes":16531611,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379052698","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379052698/zip","expired":false,"created_at":"2022-09-28T11:03:05Z","updated_at":"2022-09-28T11:03:07Z","expires_at":"2022-12-27T10:50:40Z","workflow_run":{"id":3142894849,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"e4de8c6b9b9eeb1b3db3be2f6938f0b54ebefb45"}},{"id":379039916,"node_id":"MDg6QXJ0aWZhY3QzNzkwMzk5MTY=","name":"vscode-codeql-extension","size_in_bytes":16531613,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379039916","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379039916/zip","expired":false,"created_at":"2022-09-28T10:50:45Z","updated_at":"2022-09-28T10:50:46Z","expires_at":"2022-12-27T10:36:55Z","workflow_run":{"id":3142811811,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"e4de8c6b9b9eeb1b3db3be2f6938f0b54ebefb45"}},{"id":379034077,"node_id":"MDg6QXJ0aWZhY3QzNzkwMzQwNzc=","name":"vscode-codeql-extension","size_in_bytes":16531613,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379034077","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379034077/zip","expired":false,"created_at":"2022-09-28T10:44:50Z","updated_at":"2022-09-28T10:44:51Z","expires_at":"2022-12-27T10:32:15Z","workflow_run":{"id":3142785077,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"74d1747f0648d732d27ca691ac8fdb2bc31393a9"}},{"id":378970214,"node_id":"MDg6QXJ0aWZhY3QzNzg5NzAyMTQ=","name":"vscode-codeql-extension","size_in_bytes":16528288,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214/zip","expired":false,"created_at":"2022-09-28T09:47:51Z","updated_at":"2022-09-28T09:47:52Z","expires_at":"2022-12-27T09:36:05Z","workflow_run":{"id":3142419796,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/refactor-raw-results-table","head_sha":"e3e2fcc3498ab7d945a9e58f7c1458171ab0a5a7"}},{"id":378965760,"node_id":"MDg6QXJ0aWZhY3QzNzg5NjU3NjA=","name":"vscode-codeql-extension","size_in_bytes":16531377,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378965760","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378965760/zip","expired":false,"created_at":"2022-09-28T09:44:05Z","updated_at":"2022-09-28T09:44:07Z","expires_at":"2022-12-27T09:36:35Z","workflow_run":{"id":3142423725,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"c96a388ca2247e91234ed80b5741ad051f7080be"}},{"id":378928202,"node_id":"MDg6QXJ0aWZhY3QzNzg5MjgyMDI=","name":"vscode-codeql-extension","size_in_bytes":16531345,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378928202","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378928202/zip","expired":false,"created_at":"2022-09-28T09:12:15Z","updated_at":"2022-09-28T09:12:17Z","expires_at":"2022-12-27T09:04:05Z","workflow_run":{"id":3142191438,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"1d6563a2d365e0b437c15c98d2d031b7a9895a1a"}},{"id":377794425,"node_id":"MDg6QXJ0aWZhY3QzNzc3OTQ0MjU=","name":"vscode-codeql-extension","size_in_bytes":16534523,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794425","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794425/zip","expired":false,"created_at":"2022-09-27T13:36:06Z","updated_at":"2022-09-27T13:36:07Z","expires_at":"2022-12-26T13:24:50Z","workflow_run":{"id":3135951730,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/scanned-repos-tab","head_sha":"f8cc3aec3201310fa0d0d7e4b68353ac21532d04"}},{"id":377794243,"node_id":"MDg6QXJ0aWZhY3QzNzc3OTQyNDM=","name":"vscode-codeql-extension","size_in_bytes":16528691,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794243","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794243/zip","expired":false,"created_at":"2022-09-27T13:35:54Z","updated_at":"2022-09-27T13:35:55Z","expires_at":"2022-12-26T13:23:38Z","workflow_run":{"id":3135944649,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"110d930b68ced05bf4d1cdc210a0aa4553eb1d8f"}},{"id":377768671,"node_id":"MDg6QXJ0aWZhY3QzNzc3Njg2NzE=","name":"vscode-codeql-extension","size_in_bytes":16534523,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377768671","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377768671/zip","expired":false,"created_at":"2022-09-27T13:16:02Z","updated_at":"2022-09-27T13:16:03Z","expires_at":"2022-12-26T13:04:14Z","workflow_run":{"id":3135820032,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/scanned-repos-tab","head_sha":"f8cc3aec3201310fa0d0d7e4b68353ac21532d04"}},{"id":377703600,"node_id":"MDg6QXJ0aWZhY3QzNzc3MDM2MDA=","name":"vscode-codeql-extension","size_in_bytes":16528687,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377703600","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377703600/zip","expired":false,"created_at":"2022-09-27T12:21:39Z","updated_at":"2022-09-27T12:21:41Z","expires_at":"2022-12-26T12:06:29Z","workflow_run":{"id":3135445831,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/outcome-panel","head_sha":"f408418f23713f44a42d88911d4ceb88ad9f8abb"}},{"id":377541670,"node_id":"MDg6QXJ0aWZhY3QzNzc1NDE2NzA=","name":"vscode-codeql-extension","size_in_bytes":16524162,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377541670","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377541670/zip","expired":false,"created_at":"2022-09-27T09:52:29Z","updated_at":"2022-09-27T09:52:30Z","expires_at":"2022-12-26T09:39:31Z","workflow_run":{"id":3134528732,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"0b638b6ae16284b25749e4a9039519f083e61110"}},{"id":377522495,"node_id":"MDg6QXJ0aWZhY3QzNzc1MjI0OTU=","name":"vscode-codeql-extension","size_in_bytes":16524160,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377522495","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377522495/zip","expired":false,"created_at":"2022-09-27T09:34:10Z","updated_at":"2022-09-27T09:34:11Z","expires_at":"2022-12-26T09:21:11Z","workflow_run":{"id":3134413579,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"robertbrignull/submit-variant-analysis","head_sha":"ce7c7119c75e1b566393b2383f02b15eaa41c10f"}},{"id":376974726,"node_id":"MDg6QXJ0aWZhY3QzNzY5NzQ3MjY=","name":"vscode-codeql-extension","size_in_bytes":16528812,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376974726","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376974726/zip","expired":false,"created_at":"2022-09-26T22:18:01Z","updated_at":"2022-09-26T22:18:03Z","expires_at":"2022-12-25T22:08:56Z","workflow_run":{"id":3114754624,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"aeisenberg/new-qs","head_sha":"46ce536b8ebc9eea9ad147ac7036afa2c07bdb02"}},{"id":376774851,"node_id":"MDg6QXJ0aWZhY3QzNzY3NzQ4NTE=","name":"vscode-codeql-extension","size_in_bytes":16522621,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376774851","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376774851/zip","expired":false,"created_at":"2022-09-26T19:01:27Z","updated_at":"2022-09-26T19:01:28Z","expires_at":"2022-12-25T13:03:21Z","workflow_run":{"id":3127948741,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"0a5c272b1727c81be9d0d2f5cb6bd9137669b224"}},{"id":376495451,"node_id":"MDg6QXJ0aWZhY3QzNzY0OTU0NTE=","name":"vscode-codeql-extension","size_in_bytes":16524028,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376495451","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376495451/zip","expired":false,"created_at":"2022-09-26T15:07:10Z","updated_at":"2022-09-26T15:07:11Z","expires_at":"2022-12-25T14:52:55Z","workflow_run":{"id":3128619297,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"robertbrignull/submit-variant-analysis","head_sha":"5dce5e83b057305ad99304b553d97c2badf78865"}},{"id":376469189,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODk=","name":"result-index","size_in_bytes":2970,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469189","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469189/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:57Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469187,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODc=","name":"63537249","size_in_bytes":203508,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469187","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469187/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:00Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469186,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODY=","name":"3955647","size_in_bytes":136661,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469186","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469186/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:27Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469184,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODQ=","name":"24560307","size_in_bytes":4584337,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469184","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469184/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:14Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469182,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODI=","name":"24195339","size_in_bytes":6442460,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469182","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469182/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:15Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469180,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODA=","name":"237159","size_in_bytes":77295,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469180","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469180/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:47:56Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469177,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzc=","name":"2126244","size_in_bytes":68695,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469177","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469177/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:00Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469175,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzU=","name":"167174","size_in_bytes":107629,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469175","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469175/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:06Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469173,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzM=","name":"15062869","size_in_bytes":554768,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469173","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469173/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:47:59Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469171,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzE=","name":"11730342","size_in_bytes":157074,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469171","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469171/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:03Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469168,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNjg=","name":"10270250","size_in_bytes":1048754,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469168","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469168/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:21Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456189,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODk=","name":"result-index","size_in_bytes":2970,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456189","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456189/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:40:26Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456188,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODg=","name":"63537249","size_in_bytes":203508,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456188","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456188/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:39:40Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456186,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODY=","name":"3955647","size_in_bytes":136661,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456186","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456186/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:39:41Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456184,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODQ=","name":"24560307","size_in_bytes":4584337,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456184","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456184/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:39:46Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}}]}
+
diff --git a/tests/ReplayData/Artifact.testGetArtifactsFromWorkflow.txt b/tests/ReplayData/Artifact.testGetArtifactsFromWorkflow.txt
new file mode 100644
--- /dev/null
+++ b/tests/ReplayData/Artifact.testGetArtifactsFromWorkflow.txt
@@ -0,0 +1,22 @@
+https
+GET
+api.github.com
+None
+/repos/github/vscode-codeql/actions/runs/160995070
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:33 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"4e62f3e45aa64c41f5d8dda4bf9c8e155c592b4f9d70cedf888671f278775a36"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '47'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '13'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB22:78D3:20371B2:20B2648:63343095')]
+{"id":160995070,"name":"Release","node_id":"MDExOldvcmtmbG93UnVuMTYwOTk1MDcw","head_branch":"v1.3.1","head_sha":"c4353981fa5a3565d075d187276eebd92b2a20fc","path":".github/workflows/release.yml","display_title":"Release","run_number":47,"event":"push","status":"completed","conclusion":"success","workflow_id":247289,"check_suite_id":887193234,"check_suite_node_id":"MDEwOkNoZWNrU3VpdGU4ODcxOTMyMzQ=","url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070","html_url":"https://github.com/github/vscode-codeql/actions/runs/160995070","pull_requests":[],"created_at":"2020-07-07T18:34:48Z","updated_at":"2020-07-07T18:36:58Z","actor":{"login":"jcreedcmu","id":1500822,"node_id":"MDQ6VXNlcjE1MDA4MjI=","avatar_url":"https://avatars.githubusercontent.com/u/1500822?v=4","gravatar_id":"","url":"https://api.github.com/users/jcreedcmu","html_url":"https://github.com/jcreedcmu","followers_url":"https://api.github.com/users/jcreedcmu/followers","following_url":"https://api.github.com/users/jcreedcmu/following{/other_user}","gists_url":"https://api.github.com/users/jcreedcmu/gists{/gist_id}","starred_url":"https://api.github.com/users/jcreedcmu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcreedcmu/subscriptions","organizations_url":"https://api.github.com/users/jcreedcmu/orgs","repos_url":"https://api.github.com/users/jcreedcmu/repos","events_url":"https://api.github.com/users/jcreedcmu/events{/privacy}","received_events_url":"https://api.github.com/users/jcreedcmu/received_events","type":"User","site_admin":false},"run_attempt":1,"referenced_workflows":[],"run_started_at":"2020-07-07T18:34:48Z","jobs_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/jobs","logs_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/logs","check_suite_url":"https://api.github.com/repos/github/vscode-codeql/check-suites/887193234","artifacts_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/artifacts","cancel_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/cancel","rerun_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/rerun","previous_attempt_url":null,"workflow_url":"https://api.github.com/repos/github/vscode-codeql/actions/workflows/247289","head_commit":{"id":"c4353981fa5a3565d075d187276eebd92b2a20fc","tree_id":"b5561db1b83aa7f5bd0e5126b375caaf79cc16fb","message":"update CHANGELOG for release","timestamp":"2020-07-07T18:28:53Z","author":{"name":"Jason Reed","email":"jcreedcmu@github.com"},"committer":{"name":"Jason Reed","email":"jcreedcmu@github.com"}},"repository":{"id":211169016,"node_id":"MDEwOlJlcG9zaXRvcnkyMTExNjkwMTY=","name":"vscode-codeql","full_name":"github/vscode-codeql","private":false,"owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/github/vscode-codeql","description":"An extension for Visual Studio Code that adds rich language support for CodeQL","fork":false,"url":"https://api.github.com/repos/github/vscode-codeql","forks_url":"https://api.github.com/repos/github/vscode-codeql/forks","keys_url":"https://api.github.com/repos/github/vscode-codeql/keys{/key_id}","collaborators_url":"https://api.github.com/repos/github/vscode-codeql/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/github/vscode-codeql/teams","hooks_url":"https://api.github.com/repos/github/vscode-codeql/hooks","issue_events_url":"https://api.github.com/repos/github/vscode-codeql/issues/events{/number}","events_url":"https://api.github.com/repos/github/vscode-codeql/events","assignees_url":"https://api.github.com/repos/github/vscode-codeql/assignees{/user}","branches_url":"https://api.github.com/repos/github/vscode-codeql/branches{/branch}","tags_url":"https://api.github.com/repos/github/vscode-codeql/tags","blobs_url":"https://api.github.com/repos/github/vscode-codeql/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/github/vscode-codeql/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/github/vscode-codeql/git/refs{/sha}","trees_url":"https://api.github.com/repos/github/vscode-codeql/git/trees{/sha}","statuses_url":"https://api.github.com/repos/github/vscode-codeql/statuses/{sha}","languages_url":"https://api.github.com/repos/github/vscode-codeql/languages","stargazers_url":"https://api.github.com/repos/github/vscode-codeql/stargazers","contributors_url":"https://api.github.com/repos/github/vscode-codeql/contributors","subscribers_url":"https://api.github.com/repos/github/vscode-codeql/subscribers","subscription_url":"https://api.github.com/repos/github/vscode-codeql/subscription","commits_url":"https://api.github.com/repos/github/vscode-codeql/commits{/sha}","git_commits_url":"https://api.github.com/repos/github/vscode-codeql/git/commits{/sha}","comments_url":"https://api.github.com/repos/github/vscode-codeql/comments{/number}","issue_comment_url":"https://api.github.com/repos/github/vscode-codeql/issues/comments{/number}","contents_url":"https://api.github.com/repos/github/vscode-codeql/contents/{+path}","compare_url":"https://api.github.com/repos/github/vscode-codeql/compare/{base}...{head}","merges_url":"https://api.github.com/repos/github/vscode-codeql/merges","archive_url":"https://api.github.com/repos/github/vscode-codeql/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/github/vscode-codeql/downloads","issues_url":"https://api.github.com/repos/github/vscode-codeql/issues{/number}","pulls_url":"https://api.github.com/repos/github/vscode-codeql/pulls{/number}","milestones_url":"https://api.github.com/repos/github/vscode-codeql/milestones{/number}","notifications_url":"https://api.github.com/repos/github/vscode-codeql/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/github/vscode-codeql/labels{/name}","releases_url":"https://api.github.com/repos/github/vscode-codeql/releases{/id}","deployments_url":"https://api.github.com/repos/github/vscode-codeql/deployments"},"head_repository":{"id":211169016,"node_id":"MDEwOlJlcG9zaXRvcnkyMTExNjkwMTY=","name":"vscode-codeql","full_name":"github/vscode-codeql","private":false,"owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/github/vscode-codeql","description":"An extension for Visual Studio Code that adds rich language support for CodeQL","fork":false,"url":"https://api.github.com/repos/github/vscode-codeql","forks_url":"https://api.github.com/repos/github/vscode-codeql/forks","keys_url":"https://api.github.com/repos/github/vscode-codeql/keys{/key_id}","collaborators_url":"https://api.github.com/repos/github/vscode-codeql/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/github/vscode-codeql/teams","hooks_url":"https://api.github.com/repos/github/vscode-codeql/hooks","issue_events_url":"https://api.github.com/repos/github/vscode-codeql/issues/events{/number}","events_url":"https://api.github.com/repos/github/vscode-codeql/events","assignees_url":"https://api.github.com/repos/github/vscode-codeql/assignees{/user}","branches_url":"https://api.github.com/repos/github/vscode-codeql/branches{/branch}","tags_url":"https://api.github.com/repos/github/vscode-codeql/tags","blobs_url":"https://api.github.com/repos/github/vscode-codeql/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/github/vscode-codeql/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/github/vscode-codeql/git/refs{/sha}","trees_url":"https://api.github.com/repos/github/vscode-codeql/git/trees{/sha}","statuses_url":"https://api.github.com/repos/github/vscode-codeql/statuses/{sha}","languages_url":"https://api.github.com/repos/github/vscode-codeql/languages","stargazers_url":"https://api.github.com/repos/github/vscode-codeql/stargazers","contributors_url":"https://api.github.com/repos/github/vscode-codeql/contributors","subscribers_url":"https://api.github.com/repos/github/vscode-codeql/subscribers","subscription_url":"https://api.github.com/repos/github/vscode-codeql/subscription","commits_url":"https://api.github.com/repos/github/vscode-codeql/commits{/sha}","git_commits_url":"https://api.github.com/repos/github/vscode-codeql/git/commits{/sha}","comments_url":"https://api.github.com/repos/github/vscode-codeql/comments{/number}","issue_comment_url":"https://api.github.com/repos/github/vscode-codeql/issues/comments{/number}","contents_url":"https://api.github.com/repos/github/vscode-codeql/contents/{+path}","compare_url":"https://api.github.com/repos/github/vscode-codeql/compare/{base}...{head}","merges_url":"https://api.github.com/repos/github/vscode-codeql/merges","archive_url":"https://api.github.com/repos/github/vscode-codeql/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/github/vscode-codeql/downloads","issues_url":"https://api.github.com/repos/github/vscode-codeql/issues{/number}","pulls_url":"https://api.github.com/repos/github/vscode-codeql/pulls{/number}","milestones_url":"https://api.github.com/repos/github/vscode-codeql/milestones{/number}","notifications_url":"https://api.github.com/repos/github/vscode-codeql/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/github/vscode-codeql/labels{/name}","releases_url":"https://api.github.com/repos/github/vscode-codeql/releases{/id}","deployments_url":"https://api.github.com/repos/github/vscode-codeql/deployments"}}
+
+https
+GET
+api.github.com
+None
+/repos/github/vscode-codeql/actions/runs/160995070/artifacts
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:33 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"384dd95df518dd09f3403cdb0efea6f07b615808530fa59263a9f3f6a39e0436"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '46'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '14'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB2A:11933:1E407FD:1EBB285:63343095')]
+{"total_count":1,"artifacts":[{"id":10495898,"node_id":"MDg6QXJ0aWZhY3QxMDQ5NTg5OA==","name":"vscode-codeql-extension","size_in_bytes":5555905,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/10495898","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/10495898/zip","expired":true,"created_at":"2020-07-07T18:36:58Z","updated_at":"2020-07-07T18:36:58Z","expires_at":"2020-10-05T18:36:58Z","workflow_run":{"id":160995070,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"v1.3.1","head_sha":"c4353981fa5a3565d075d187276eebd92b2a20fc"}}]}
+
diff --git a/tests/ReplayData/Artifact.testGetNonexistentArtifact.txt b/tests/ReplayData/Artifact.testGetNonexistentArtifact.txt
new file mode 100644
--- /dev/null
+++ b/tests/ReplayData/Artifact.testGetNonexistentArtifact.txt
@@ -0,0 +1,22 @@
+https
+GET
+api.github.com
+None
+/repos/lexa/PyGithub
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:04:26 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"fa17a5276e7acf7935e265c35562e198168eba7e364cec522ed3c943db34b9ab"'), ('Last-Modified', 'Tue, 27 Sep 2022 16:35:24 GMT'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'BDAE:668A:3A452DF:3B2C773:6347F0BA')]
+{"id":542181388,"node_id":"R_kgDOIFEIDA","name":"PyGithub","full_name":"lexa/PyGithub","private":false,"owner":{"login":"lexa","id":80391,"node_id":"MDQ6VXNlcjgwMzkx","avatar_url":"https://avatars.githubusercontent.com/u/80391?v=4","gravatar_id":"","url":"https://api.github.com/users/lexa","html_url":"https://github.com/lexa","followers_url":"https://api.github.com/users/lexa/followers","following_url":"https://api.github.com/users/lexa/following{/other_user}","gists_url":"https://api.github.com/users/lexa/gists{/gist_id}","starred_url":"https://api.github.com/users/lexa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lexa/subscriptions","organizations_url":"https://api.github.com/users/lexa/orgs","repos_url":"https://api.github.com/users/lexa/repos","events_url":"https://api.github.com/users/lexa/events{/privacy}","received_events_url":"https://api.github.com/users/lexa/received_events","type":"User","site_admin":false},"html_url":"https://github.com/lexa/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/lexa/PyGithub","forks_url":"https://api.github.com/repos/lexa/PyGithub/forks","keys_url":"https://api.github.com/repos/lexa/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lexa/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lexa/PyGithub/teams","hooks_url":"https://api.github.com/repos/lexa/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/lexa/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/lexa/PyGithub/events","assignees_url":"https://api.github.com/repos/lexa/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/lexa/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/lexa/PyGithub/tags","blobs_url":"https://api.github.com/repos/lexa/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lexa/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lexa/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/lexa/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lexa/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/lexa/PyGithub/languages","stargazers_url":"https://api.github.com/repos/lexa/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/lexa/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/lexa/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/lexa/PyGithub/subscription","commits_url":"https://api.github.com/repos/lexa/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/lexa/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/lexa/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/lexa/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/lexa/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/lexa/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lexa/PyGithub/merges","archive_url":"https://api.github.com/repos/lexa/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lexa/PyGithub/downloads","issues_url":"https://api.github.com/repos/lexa/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/lexa/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/lexa/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/lexa/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lexa/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/lexa/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/lexa/PyGithub/deployments","created_at":"2022-09-27T16:22:55Z","updated_at":"2022-09-27T16:35:24Z","pushed_at":"2022-10-13T10:44:09Z","git_url":"git://github.com/lexa/PyGithub.git","ssh_url":"git@github.com:lexa/PyGithub.git","clone_url":"https://github.com/lexa/PyGithub.git","svn_url":"https://github.com/lexa/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":11667,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":1,"watchers":0,"default_branch":"master","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"allow_auto_merge":false,"delete_branch_on_merge":false,"allow_update_branch":false,"use_squash_pr_title_as_default":false,"squash_merge_commit_message":"COMMIT_MESSAGES","squash_merge_commit_title":"COMMIT_OR_PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","parent":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"source":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"network_count":1533,"subscribers_count":0}
+
+https
+GET
+api.github.com
+None
+/repos/lexa/PyGithub/actions/artifacts/396724437
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+404
+[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:04:27 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '3'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'BDBA:9294:4077852:415F362:6347F0BB')]
+{"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/actions#get-an-artifact"}
+
diff --git a/tests/ReplayData/Artifact.testGetSingleArtifactFromRepo.txt b/tests/ReplayData/Artifact.testGetSingleArtifactFromRepo.txt
new file mode 100644
--- /dev/null
+++ b/tests/ReplayData/Artifact.testGetSingleArtifactFromRepo.txt
@@ -0,0 +1,11 @@
+https
+GET
+api.github.com
+None
+/repos/github/vscode-codeql/actions/artifacts/378970214
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:34 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"1ce0fc2843af81fc42d4196f2c6f764261d3f2fb3ad2e8252e12328e3d172e83"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '44'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '16'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB42:A24F:196DD8:19DBE1:63343096')]
+{"id":378970214,"node_id":"MDg6QXJ0aWZhY3QzNzg5NzAyMTQ=","name":"vscode-codeql-extension","size_in_bytes":16528288,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214/zip","expired":false,"created_at":"2022-09-28T09:47:51Z","updated_at":"2022-09-28T09:47:52Z","expires_at":"2022-12-27T09:36:05Z","workflow_run":{"id":3142419796,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/refactor-raw-results-table","head_sha":"e3e2fcc3498ab7d945a9e58f7c1458171ab0a5a7"}}
+