xargs split paths on whitespace, so sed failed on files like
'..._Removed MediaType Enum.cs' (exit 123). Pass the file list
NUL-separated and only rewrite files containing {{BUILD_VAR_.
A repo without any placeholder no longer fails on grep's exit 1.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
59 lines
2.5 KiB
YAML
59 lines
2.5 KiB
YAML
name: Replace Build Placeholders
|
|
description: >
|
|
Ersetzt {{BUILD_VAR_*}}-Platzhalter in allen Textdateien durch Gitea-Actions-Build-Infos
|
|
(Commit, Branch, Run-Metadaten, …). Sprachunabhängig (reiner Text-Replace,
|
|
kein Build-Tool-Bezug), kein Input nötig.
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
SHA_SHORT="${GITHUB_SHA:0:7}"
|
|
BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
|
|
|
|
# Same label as the docker-build image tag: pr-<n> for PRs, else ref name with / -> -
|
|
REF="${GITHUB_REF:-}"
|
|
if [[ "$REF" == refs/pull/* ]]; then
|
|
PR_NUM="${REF#refs/pull/}"
|
|
REF_LABEL="pr-${PR_NUM%%/*}"
|
|
else
|
|
REF_NAME="${GITHUB_REF_NAME:-}"
|
|
REF_LABEL="${REF_NAME//\//-}"
|
|
fi
|
|
|
|
declare -A VARS=(
|
|
[BUILD_VAR_GITHUB_SHA]="${GITHUB_SHA:-}"
|
|
[BUILD_VAR_GITHUB_REF_NAME]="${GITHUB_REF_NAME:-}"
|
|
[BUILD_VAR_GITHUB_REF_TYPE]="${GITHUB_REF_TYPE:-}"
|
|
[BUILD_VAR_GITHUB_REPOSITORY]="${GITHUB_REPOSITORY:-}"
|
|
[BUILD_VAR_GITHUB_REPOSITORY_OWNER]="${GITHUB_REPOSITORY_OWNER:-}"
|
|
[BUILD_VAR_GITHUB_RUN_ID]="${GITHUB_RUN_ID:-}"
|
|
[BUILD_VAR_GITHUB_RUN_NUMBER]="${GITHUB_RUN_NUMBER:-}"
|
|
[BUILD_VAR_GITHUB_RUN_ATTEMPT]="${GITHUB_RUN_ATTEMPT:-}"
|
|
[BUILD_VAR_GITHUB_RETENTION_DAYS]="${GITHUB_RETENTION_DAYS:-}"
|
|
[BUILD_VAR_GITHUB_SERVER_URL]="${GITHUB_SERVER_URL:-}"
|
|
[BUILD_VAR_GITHUB_EVENT_NAME]="${GITHUB_EVENT_NAME:-}"
|
|
[BUILD_VAR_GITHUB_BASE_REF]="${GITHUB_BASE_REF:-}"
|
|
[BUILD_VAR_GITHUB_HEAD_REF]="${GITHUB_HEAD_REF:-}"
|
|
[BUILD_VAR_GITHUB_ACTION_REF]="${GITHUB_ACTION_REF:-}"
|
|
[BUILD_VAR_GITHUB_ACTION_REPOSITORY]="${GITHUB_ACTION_REPOSITORY:-}"
|
|
[BUILD_VAR_GITEA_ACTIONS_RUNNER_VERSION]="${GITEA_ACTIONS_RUNNER_VERSION:-}"
|
|
[BUILD_VAR_COMMIT_SHA_SHORT]="$SHA_SHORT"
|
|
[BUILD_VAR_BUILD_DATE]="$BUILD_DATE"
|
|
[BUILD_VAR_REF_LABEL]="$REF_LABEL"
|
|
)
|
|
|
|
SED_ARGS=()
|
|
for key in "${!VARS[@]}"; do
|
|
SED_ARGS+=(-e "s|{{${key}}}|${VARS[$key]}|g")
|
|
done
|
|
|
|
# NUL-separated so paths with spaces survive; only touch files that contain placeholders.
|
|
# grep exits 1 when nothing matches, which is fine; 2 (real error) still fails.
|
|
FILES="$(mktemp)"
|
|
grep -rIlZ --exclude-dir=.git -F '{{BUILD_VAR_' . > "$FILES" || [ $? -eq 1 ]
|
|
xargs -0 -r sed -i "${SED_ARGS[@]}" < "$FILES"
|
|
rm -f "$FILES"
|