From f3cbf4f75f866cf5aa705d1d031c29a27634ffed Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Tue, 4 Aug 2026 14:02:41 +0200 Subject: [PATCH] Harden module package publication --- .gitea/workflows/module-package-release.yml | 25 ++++----------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/.gitea/workflows/module-package-release.yml b/.gitea/workflows/module-package-release.yml index 3365ff2..69dca09 100644 --- a/.gitea/workflows/module-package-release.yml +++ b/.gitea/workflows/module-package-release.yml @@ -14,6 +14,8 @@ on: jobs: publish-packages: runs-on: ubuntu-latest + env: + GITEA_REPOSITORY: ${{ gitea.repository }} steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: @@ -29,7 +31,6 @@ jobs: env: REQUESTED_TAG: ${{ inputs.release_tag }} TRIGGER_TAG: ${{ gitea.ref_name }} - GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | set -euo pipefail tag="${REQUESTED_TAG:-$TRIGGER_TAG}" @@ -43,24 +44,6 @@ jobs: echo "Release tag is not contained in main" >&2 exit 1 } - python - "$tag" <<'PY' - import fnmatch - import json - import os - import sys - import urllib.request - - tag = sys.argv[1] - repository = os.environ["GITEA_REPOSITORY"] - request = urllib.request.Request( - f"{os.environ['GITEA_API_URL']}/repos/{repository}/tag_protections", - headers={"Authorization": f"token {os.environ['GITEA_TOKEN']}"}, - ) - with urllib.request.urlopen(request, timeout=30) as response: - protections = json.load(response) - if not any(fnmatch.fnmatchcase(tag, item.get("name_pattern", "")) for item in protections): - raise SystemExit(f"Release tag {tag!r} is not covered by repository tag protection") - PY git checkout --detach "$tag" printf 'RELEASE_TAG=%s\n' "$tag" >> "$GITEA_ENV" printf 'SOURCE_DATE_EPOCH=%s\n' "$(git show -s --format=%ct HEAD)" >> "$GITEA_ENV" @@ -130,7 +113,7 @@ jobs: const escapedRepository = repository.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); const gitTag = specifier.match( new RegExp( - `^git\\+(?:ssh://git@|https://)git\\.add-ideas\\.de/GovOPlaN/${escapedRepository}\\.git#v([0-9]+\\.[0-9]+\\.[0-9]+)$`, + `^git\\+(?:ssh://git@|https://)git\\.add-ideas\\.de/(?:GovOPlaN|add-ideas)/${escapedRepository}\\.git#v([0-9]+\\.[0-9]+\\.[0-9]+)$`, ), ); if (gitTag) { @@ -203,7 +186,7 @@ jobs: '@govoplan:registry=https://git.add-ideas.de/api/packages/GovOPlaN/npm/' \ "//git.add-ideas.de/api/packages/GovOPlaN/npm/:_authToken=$PACKAGE_TOKEN" \ > "$npmrc" - NPM_CONFIG_USERCONFIG="$npmrc" npm publish "${webui_packages[0]}" \ + NPM_CONFIG_USERCONFIG="$npmrc" npm publish "./${webui_packages[0]}" \ --ignore-scripts --access public \ --registry https://git.add-ideas.de/api/packages/GovOPlaN/npm/ fi