From 37d3b6e425914bdea5bb0363f2fb14b948778f4c Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Fri, 5 Jun 2026 13:34:50 -0500 Subject: [PATCH] fix(git-tools): follow Gitea API redirects in CI wrappers --- .../framework/tools/git/ci-queue-wait.sh | 4 ++-- .../mosaic/framework/tools/git/pr-ci-wait.sh | 4 ++-- .../commands/git-wrapper-redirects.spec.ts | 22 +++++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 packages/mosaic/src/commands/git-wrapper-redirects.spec.ts diff --git a/packages/mosaic/framework/tools/git/ci-queue-wait.sh b/packages/mosaic/framework/tools/git/ci-queue-wait.sh index c75de5d..266577b 100755 --- a/packages/mosaic/framework/tools/git/ci-queue-wait.sh +++ b/packages/mosaic/framework/tools/git/ci-queue-wait.sh @@ -137,7 +137,7 @@ gitea_get_branch_head_sha() { local branch="$3" local token="$4" local url="https://${host}/api/v1/repos/${repo}/branches/${branch}" - curl -fsS -H "Authorization: token ${token}" "$url" | python3 -c ' + curl -fsSL -H "Authorization: token ${token}" "$url" | python3 -c ' import json, sys data = json.load(sys.stdin) commit = data.get("commit") or {} @@ -151,7 +151,7 @@ gitea_get_commit_status_json() { local sha="$3" local token="$4" local url="https://${host}/api/v1/repos/${repo}/commits/${sha}/status" - curl -fsS -H "Authorization: token ${token}" "$url" + curl -fsSL -H "Authorization: token ${token}" "$url" } while [[ $# -gt 0 ]]; do diff --git a/packages/mosaic/framework/tools/git/pr-ci-wait.sh b/packages/mosaic/framework/tools/git/pr-ci-wait.sh index 4844a21..c8e4753 100755 --- a/packages/mosaic/framework/tools/git/pr-ci-wait.sh +++ b/packages/mosaic/framework/tools/git/pr-ci-wait.sh @@ -110,7 +110,7 @@ gitea_get_pr_head_sha() { local repo="$2" local token="$3" local url="https://${host}/api/v1/repos/${repo}/pulls/${PR_NUMBER}" - curl -fsS -H "Authorization: token ${token}" "$url" | python3 -c ' + curl -fsSL -H "Authorization: token ${token}" "$url" | python3 -c ' import json, sys data = json.load(sys.stdin) print((data.get("head") or {}).get("sha", "")) @@ -123,7 +123,7 @@ gitea_get_commit_status_json() { local token="$3" local sha="$4" local url="https://${host}/api/v1/repos/${repo}/commits/${sha}/status" - curl -fsS -H "Authorization: token ${token}" "$url" + curl -fsSL -H "Authorization: token ${token}" "$url" } while [[ $# -gt 0 ]]; do diff --git a/packages/mosaic/src/commands/git-wrapper-redirects.spec.ts b/packages/mosaic/src/commands/git-wrapper-redirects.spec.ts new file mode 100644 index 0000000..84f60ff --- /dev/null +++ b/packages/mosaic/src/commands/git-wrapper-redirects.spec.ts @@ -0,0 +1,22 @@ +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { describe, expect, it } from 'vitest'; + +const packageRoot = join(import.meta.dirname, '..', '..'); +const gitToolsDir = join(packageRoot, 'framework', 'tools', 'git'); + +function readGitTool(scriptName: string): string { + return readFileSync(join(gitToolsDir, scriptName), 'utf-8'); +} + +describe('Gitea git wrapper API calls', () => { + it.each(['ci-queue-wait.sh', 'pr-ci-wait.sh'])( + '%s follows Gitea API redirects before parsing JSON', + (scriptName) => { + const script = readGitTool(scriptName); + + expect(script).not.toContain('curl -fsS -H "Authorization: token'); + expect(script).toContain('curl -fsSL -H "Authorization: token'); + }, + ); +});