mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-10-12 17:51:11 -04:00
This commit replicates the CI/CD behavior we currently have on GitHub
by making the following changes:
- Jobs that used Actions were replaced with in-repo scripts. This
removes the dependency on GitHub and makes the overall pipeline more
forge-agnostic.
- rectalogic/notify-irc replaced with ./scripts/irc_notify.py
- pkgcore/pkgcheck-action replaced with ./scripts/pkgcheck.sh
- Actions that used `gh` (the GitHub CLI) were replaced with in-repo
scripts that perform the same action but with the Forgejo API.
- ./scripts/last_status.py to get the last status of a completed job
(e.g. succeeded, failed, canceled)
- ./scripts/last_successful_commit.py to get the last commit that had
a successful job
- Forgejo-specific changes
- Variables renamed from "github" to "forgejo" where appropriate
(though Forgejo lets you get away with keeping them as "github" to
make migration easier)
- Use ./.forgejo/ instead of ./.github/ -- this will simultaneously
keep the GitHub actions intact while also disabling the GitHub
actions from running in Forgejo
- Codeberg-specific changes
- Use codeberg-tiny-lazy shared runner for {duplicates,emails}.yml
- Use codeberg-medium-lazy shared runner for pkgcheck.yml
Signed-off-by: Dustin Smith <d.usty360@gmail.com>
Part-of: https://codeberg.org/gentoo/guru/pulls/30
Merges: https://codeberg.org/gentoo/guru/pulls/30
Signed-off-by: Thomas Bracht Laumann Jespersen <laumann@gentoo.org>
41 lines
1.2 KiB
Python
Executable File
41 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Similar to last_status.py, this is just a script to replace the `gh`
|
|
# cli behavior with the forgejo/codeberg equivalent. Gets the last
|
|
# commit that had a successful run for the given job.
|
|
|
|
import http.client
|
|
import json
|
|
import os
|
|
|
|
host = "codeberg.org"
|
|
owner = os.getenv("REPO_OWNER")
|
|
name = os.getenv("REPO_NAME")
|
|
workflow = os.getenv("REPO_WORKFLOW")
|
|
path = (
|
|
f"/api/v1/repos/{owner}/{name}/actions/runs/?workflow_id={workflow}"
|
|
f"&status=success&page=1&limit=1"
|
|
)
|
|
|
|
def main():
|
|
conn = http.client.HTTPSConnection(host)
|
|
conn.request("GET", path)
|
|
response = conn.getresponse()
|
|
if response.status != 200:
|
|
print(f"Didn't get 200 OK! Got {response.status} instead.")
|
|
print(
|
|
"The response body may be helpful: "
|
|
f"{response.read().decode('utf-8')}"
|
|
)
|
|
exit(1)
|
|
j = json.loads(response.read())
|
|
|
|
# If run has literally never succeeded before, assume failure
|
|
if j["total_count"] == 0:
|
|
print("none") # this'll cause VALID=false later?
|
|
else:
|
|
# The first workflow run should be the most recent one
|
|
print(j["workflow_runs"][0]["commit_sha"])
|
|
|
|
main()
|