From ff66a969804454f03e3ab86384b945e80dfb06b8 Mon Sep 17 00:00:00 2001 From: renaud gaudin Date: Mon, 11 Jan 2021 11:46:10 +0000 Subject: [PATCH] Fixed #465: trigger docker publish on release This triggers a `workflow_dispatch` event on the `docker.yml` workflow or the matching repository for both `zim-tools` and `kiwix-tools` targets that supports it. --- .github/scripts/build_release_nightly.py | 3 ++ .github/scripts/common.py | 46 ++++++++++++++++++++++++ .github/workflows/releaseNigthly.yml | 1 + 3 files changed, 50 insertions(+) diff --git a/.github/scripts/build_release_nightly.py b/.github/scripts/build_release_nightly.py index a35565b..b7cce37 100755 --- a/.github/scripts/build_release_nightly.py +++ b/.github/scripts/build_release_nightly.py @@ -14,6 +14,7 @@ from common import ( update_flathub_git, upload_archive, fix_macos_rpath, + trigger_docker_publish, BASE_DIR, TMP_DIR, HOME, @@ -75,6 +76,8 @@ for target in TARGETS: archive = make_archive(target, make_release=RELEASE) if archive: upload_archive(archive, target, make_release=RELEASE) + if RELEASE and target in ("zim-tools", "kiwix-tools"): + trigger_docker_publish(target) # We have few more things to do for release: if RELEASE: diff --git a/.github/scripts/common.py b/.github/scripts/common.py index 38129d5..f8307d7 100644 --- a/.github/scripts/common.py +++ b/.github/scripts/common.py @@ -8,6 +8,8 @@ import subprocess import re import shutil +import requests + from kiwixbuild.versions import ( main_project_versions, release_versions, @@ -391,3 +393,47 @@ def fix_macos_rpath(project): command = ["install_name_tool", "-id", lib.name, str(lib)] print_message("call {}", " ".join(command)) subprocess.check_call(command, env=os.environ) + + +def trigger_workflow(repo, workflow="docker.yml", ref="master", inputs=None): + """triggers a `workflow_dispatch` event to the specified workflow on its repo + + repo: {user}/{repo} format + workflow: workflow ID or workflow file name + ref: branch or tag name + inputs: dict of inputs to pass to the workflow""" + print_message( + "triggering workflow `{workflow}` on {repo}@{ref} " + "with inputs={inputs}", workflow=workflow, repo=repo, ref=ref, inputs=inputs) + + url = "{base_url}/repos/{repo}/actions/workflows/{workflow}/dispatches".format( + base_url=os.getenv("GITHUB_API_URL", "https://api.github.com"), + repo=repo, workflow=workflow) + + resp = requests.post(url, headers={ + "Content-Type": "application/json", + "Authorization": "token {token}".format( + token=os.getenv('GITHUB_PAT', '')), + "Accept": "application/vnd.github.v3+json", + }, json={"ref": ref, "inputs": inputs}, timeout=5) + if resp.status_code != 204: + raise ValueError("Unexpected HTTP {code}: {reason}".format( + code=resp.status_code, reason=resp.reason)) + + +def trigger_docker_publish(target): + if target not in ("zim-tools", "kiwix-tools"): + return + + version = get_postfix(target) + repo = { + "zim-tools": "openzim/zim-tools", + "kiwix-tools": "kiwix/kiwix-tools"}.get(target) + + try: + trigger_workflow(repo, workflow="docker.yml", ref="master", + inputs={"version": version}) + print_message("triggered docker workflow on {repo}", repo=repo) + except Exception as exc: + print_message("Error triggering workflow: {exc}", exc=exc) + raise exc diff --git a/.github/workflows/releaseNigthly.yml b/.github/workflows/releaseNigthly.yml index 0a882d5..59194f6 100644 --- a/.github/workflows/releaseNigthly.yml +++ b/.github/workflows/releaseNigthly.yml @@ -113,6 +113,7 @@ jobs: PLATFORM_TARGET: ${{matrix.target}} BINTRAY_USER: kiwix BINTRAY_PASS: ${{secrets.bintray_pass}} + GITHUB_PAT: ${{secrets.GHCR_TOKEN}} - name: Upload failure logs if: failure() run: $HOME/kiwix-build/.github/scripts/upload_failure_logs.sh