Files
computer-playbook/scripts/github/sync/main_from_repository.sh
T
kevinveenbirkenbachandClaude Opus 5.5 7e3a53a6c1 fix(ci): set the main sync push header without a URL-shaped config key
test_urls_reachable read http.https://github.com/.extraheader as a link and failed with HTTP 404. The header is set through GIT_CONFIG_* for the one git push only, which talks to github.com alone, so the unscoped http.extraheader reaches the same requests.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-28 15:07:20 +01:00

35 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Env:
# GITHUB_REPOSITORY - owner/repo of the running job, whose main is overwritten
# CI_SYNC_MAIN_TOKEN - fine-grained token for GITHUB_REPOSITORY only, with Contents and Workflows write
# CI_SYNC_MAIN_SOURCE_REPOSITORY, CI_SYNC_MAIN_SOURCE_REPOSITORY_IS_SET,
# CI_SYNC_MAIN_SOURCE_REPOSITORY_DEFAULT - the source of main, see scripts/meta/resolve/baseline_remote.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
: "${GITHUB_REPOSITORY:?Missing GITHUB_REPOSITORY}"
source_remote="$(bash "${REPO_ROOT}/scripts/meta/resolve/baseline_remote.sh")"
if [[ "${source_remote}" == "origin" ]]; then
echo "Main sync skipped: no source repository other than ${GITHUB_REPOSITORY} is configured."
exit 0
fi
if [[ -z "${CI_SYNC_MAIN_TOKEN:-}" ]]; then
echo "ERROR: secret CI_SYNC_MAIN_TOKEN is not set, so ${GITHUB_REPOSITORY}:main cannot be synced from ${source_remote}." >&2
echo "Create it as described in docs/contributing/tools/github/actions/secrets.md, or disable the sync through the repository variable CI_SYNC_MAIN_SOURCE_REPOSITORY." >&2
exit 1
fi
echo "Syncing ${GITHUB_REPOSITORY}:main from ${source_remote}."
git fetch "${source_remote}" main:refs/remotes/main-sync-source/main --force
auth="$(printf 'x-access-token:%s' "${CI_SYNC_MAIN_TOKEN}" | base64 -w0)"
GIT_CONFIG_COUNT=1 \
GIT_CONFIG_KEY_0="http.extraheader" \
GIT_CONFIG_VALUE_0="AUTHORIZATION: basic ${auth}" \
git push "https://github.com/${GITHUB_REPOSITORY}.git" refs/remotes/main-sync-source/main:refs/heads/main --force