Skip to content

Commit

Permalink
add pagination for artifacts retrieval
Browse files Browse the repository at this point in the history
  • Loading branch information
fabiogallotti committed Aug 4, 2024
1 parent bb6740a commit 0951563
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@
.coverage
dev-env-vars
.coverage*
.python-version
__pycache__
.vscode
21 changes: 21 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
.DEFAULT_GOAL := help
SHELL = bash


.PHONY: help
help: ## show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

.PHONY: install
install: ## install dependencies
poetry install --with dev
poetry run pre-commit install

.PHONY: lint
lint: ## lint code
poetry run ruff check --fix coverage_comment tests
poetry run ruff format coverage_comment tests

.PHONY: test
test: ## run all tests
poetry run pytest tests -vv --cov-report term-missing --cov=coverage_comment
9 changes: 8 additions & 1 deletion coverage_comment/github.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,14 @@ def download_artifact(
filename: pathlib.Path,
) -> str:
repo_path = github.repos(repository)
artifacts = repo_path.actions.runs(run_id).artifacts.get().artifacts
page = 1
artifacts = []
while True:
result = repo_path.actions.runs(run_id).artifacts.get(page=str(page))
if not result:
break
artifacts.extend(result.artifacts)
page += 1
try:
artifact = next(
iter(artifact for artifact in artifacts if artifact.name == artifact_name),
Expand Down
52 changes: 52 additions & 0 deletions tests/integration/test_github.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,48 @@ def test_download_artifact(gh, session, zip_bytes):
session.register("GET", "/repos/foo/bar/actions/runs/123/artifacts")(
json={"artifacts": artifacts}
)
session.register(
"GET",
"/repos/foo/bar/actions/runs/123/artifacts",
params={"page": "2"},
)(json={})

session.register("GET", "/repos/foo/bar/actions/artifacts/789/zip")(
content=zip_bytes(filename="foo.txt", content="bar")
)

result = github.download_artifact(
github=gh,
repository="foo/bar",
artifact_name="foo",
run_id=123,
filename=pathlib.Path("foo.txt"),
)

assert result == "bar"


def test_download_artifact_from_page_2(gh, session, zip_bytes):
artifacts_page_1 = [
{"name": "test", "id": 000},
]
artifacts_page_2 = [
{"name": "bar", "id": 456},
{"name": "foo", "id": 789},
]
session.register("GET", "/repos/foo/bar/actions/runs/123/artifacts")(
json={"artifacts": artifacts_page_1}
)
session.register(
"GET",
"/repos/foo/bar/actions/runs/123/artifacts",
params={"page": "2"},
)(json={"artifacts": artifacts_page_2})
session.register(
"GET",
"/repos/foo/bar/actions/runs/123/artifacts",
params={"page": "3"},
)(json={})

session.register("GET", "/repos/foo/bar/actions/artifacts/789/zip")(
content=zip_bytes(filename="foo.txt", content="bar")
Expand All @@ -77,6 +119,11 @@ def test_download_artifact__no_artifact(gh, session):
session.register("GET", "/repos/foo/bar/actions/runs/123/artifacts")(
json={"artifacts": artifacts}
)
session.register(
"GET",
"/repos/foo/bar/actions/runs/123/artifacts",
params={"page": "2"},
)(json={})

with pytest.raises(github.NoArtifact):
github.download_artifact(
Expand All @@ -95,6 +142,11 @@ def test_download_artifact__no_file(gh, session, zip_bytes):
session.register("GET", "/repos/foo/bar/actions/runs/123/artifacts")(
json={"artifacts": artifacts}
)
session.register(
"GET",
"/repos/foo/bar/actions/runs/123/artifacts",
params={"page": "2"},
)(json={})

session.register("GET", "/repos/foo/bar/actions/artifacts/789/zip")(
content=zip_bytes(filename="foo.txt", content="bar")
Expand Down
10 changes: 10 additions & 0 deletions tests/integration/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -812,6 +812,11 @@ def test_action__workflow_run__no_artifact(
"GET",
"/repos/py-cov-action/foobar/actions/runs/123/artifacts",
)(json={"artifacts": [{"name": "wrong_name"}]})
session.register(
"GET",
"/repos/py-cov-action/foobar/actions/runs/123/artifacts",
params={"page": "2"},
)(json={})

result = main.action(
config=workflow_run_config(),
Expand Down Expand Up @@ -853,6 +858,11 @@ def test_action__workflow_run__post_comment(
"GET",
"/repos/py-cov-action/foobar/actions/runs/123/artifacts",
)(json={"artifacts": [{"name": "python-coverage-comment-action", "id": 789}]})
session.register(
"GET",
"/repos/py-cov-action/foobar/actions/runs/123/artifacts",
params={"page": "2"},
)(json={})

session.register(
"GET",
Expand Down

0 comments on commit 0951563

Please sign in to comment.