Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 17 additions & 16 deletions SharedProcessors/GitLabReleasesInfoProvider.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#!/usr/local/autopkg/python
# -*- coding: utf-8 -*-
#
# Copyright 2024 Nathan Felton (n8felton)
#
Expand Down Expand Up @@ -65,10 +64,10 @@ class GitLabReleasesInfoProvider(Processor):
"PRIVATE_TOKEN": {
"required": False,
"description": (
"GitLab personal, group, or project access token."
"MUST have the `api` scope granted."
"Optionally set a environment variable, but is required in one or the "
"other."
"GitLab personal, group, or project access token. "
"MUST have the `api` scope granted. "
"Optional for public repositories, required for private repositories. "
"Can be set as an environment variable or input variable."
),
},
}
Expand Down Expand Up @@ -97,15 +96,15 @@ def gitlab_api_get(self, endpoint):
GITLAB_HOSTNAME = self.env.get("GITLAB_HOSTNAME")
GITLAB_API_BASE_URL = f"https://{GITLAB_HOSTNAME}/api/v4"
PRIVATE_TOKEN = self.env.get("PRIVATE_TOKEN")
if not PRIVATE_TOKEN:
raise ProcessorError(
f"PRIVATE_TOKEN is not set as environment or input variable."
)

headers = {
"PRIVATE-TOKEN": PRIVATE_TOKEN,
"User-Agent": f"AutoPkg/{get_autopkg_version()}",
}

# Only add PRIVATE-TOKEN header if token is provided
if PRIVATE_TOKEN:
headers["PRIVATE-TOKEN"] = PRIVATE_TOKEN

url = f"{GITLAB_API_BASE_URL}{endpoint}"
req = Request(url, headers=headers)
with urlopen(req, context=self.ssl_context_certifi()) as response:
Expand All @@ -118,8 +117,8 @@ def get_releases(self, latest=False):
releases_endpoint = f"/projects/{project_id}/releases"
if latest:
releases_endpoint += "/permalink/latest"
releases = self.gitlab_api_get(releases_endpoint)
releases = [json.loads(releases)]
_releases = self.gitlab_api_get(releases_endpoint)
releases = json.loads(_releases)
self.output(pformat(releases), 3)
return releases

Expand All @@ -139,9 +138,12 @@ def get_release_link(self, releases, regex=None):
except re.error as e:
raise ProcessorError(f"Invalid regex: {regex} ({e})")

raise ProcessorError(f"No release asset found matching regex: {regex}")

def main(self):
PRIVATE_TOKEN = os.getenv("PRIVATE_TOKEN") or self.env.get("PRIVATE_TOKEN")
self.env["PRIVATE_TOKEN"] = PRIVATE_TOKEN
if PRIVATE_TOKEN:
self.env["PRIVATE_TOKEN"] = PRIVATE_TOKEN
releases = self.get_releases(latest=self.env.get("latest"))
release, link = self.get_release_link(
releases, regex=self.env.get("link_regex")
Expand All @@ -158,6 +160,5 @@ def main(self):


if __name__ == "__main__":
with open("/tmp/autopkg.plist", "r") as input:
PROCESSOR = GitLabReleasesInfoProvider(infile=input)
PROCESSOR.execute_shell()
PROCESSOR = GitLabReleasesInfoProvider()
PROCESSOR.execute_shell()