Skip to content

Commit

Permalink
fix: token for CircleCI artifacts (#1001)
Browse files Browse the repository at this point in the history
Although the endpoints to list workflow jobs and artifacts used to be
accessible to anyone, now there is a 401 response code.

Previously we worked around this by changing the API version back to
v1.1, but now it's happening again for both versions. This apparently
happens often.
https://discuss.circleci.com/t/api-token-needed-to-fetch-artifacts/50881/3
So, it makes sense to just use a token. I've configured this in CircleCI
already.

(Another PR will be coming soon for the comment responder to fetch the
artifacts.)
  • Loading branch information
aliciaaevans authored Jun 18, 2024
1 parent 4ca1505 commit a5882cc
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions bioconda_utils/artifacts.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,16 @@ def parse_azure_build_id(url: str) -> str:

def get_circleci_artifacts(check_run, platform):
circleci_workflow_id = json.loads(check_run.external_id)["workflow-id"]
# Must use a Personal token for API v2
token = os.environ.get("CIRCLECI_TOKEN")
if not token:
logger.critical("CIRCLECI_TOKEN required to download CircleCI artifacts list.")
exit(1)
headers = {"Circle-Token": token}

# Use API v2 because v1.1 does not have a workflow endpoint
url_wf = f"https://circleci.com/api/v2/workflow/{circleci_workflow_id}/job"
res_wf = requests.get(url_wf)
res_wf = requests.get(url_wf, headers=headers)
json_wf = json.loads(res_wf.text)

if len(json_wf["items"]) == 0:
Expand All @@ -207,15 +214,14 @@ def get_circleci_artifacts(check_run, platform):
for job in json_wf["items"]:
if job["name"].startswith(f"build_and_test-{platform}"):
circleci_job_num = job["job_number"]
# Use API v1.1 because v2 requires authentication
url = f"https://circleci.com/api/v1.1/project/gh/bioconda/bioconda-recipes/{circleci_job_num}/artifacts"
res = requests.get(url)
url = f"https://circleci.com/api/v2/project/gh/bioconda/bioconda-recipes/{circleci_job_num}/artifacts"
res = requests.get(url, headers=headers)
res.raise_for_status()
json_job = json.loads(res.text)
if len(json_job) == 0:
if len(json_job["items"]) == 0:
raise ValueError("No artifacts found!")
else:
for artifact in json_job:
for artifact in json_job["items"]:
artifact_url = artifact["url"]
if artifact_url.endswith((".html", ".json", ".json.bz2", ".json.zst")):
continue
Expand Down

0 comments on commit a5882cc

Please sign in to comment.