runner/.forgejo/cascading-forgejo
Earl Warren 2286f71dd5
chore: cascade forgejo pull request out of the runner branch or PR (followup)
The SHA must be reachable from a branch or tags to be discovered by go
mod tidy.
2025-08-18 12:49:23 +02:00

46 lines
1.2 KiB
Bash
Executable file

#!/bin/bash
set -ex
forgejo=$1
forgejo_pr=$2
runner=$3
runner_pr_or_ref=$4
#
# Get information from the runner
#
cd $runner
#
# code.forgejo.org/forgejo/runner/vN may be
# upgraded to code.forgejo.org/forgejo/runner/vN+1
#
module=$(cat go.mod | head -1 | cut -d' ' -f2)
test "$module"
sha=$(git -C $runner show --no-patch --format=%H)
test "$sha"
#
# Update Forgejo to use the runner at $runner_pr_or_ref
#
cd $forgejo
#
# Update the runner major version if needed
#
find * -name '*.go' -o -name 'go.mod' | xargs sed -i -E -e "s|code.forgejo.org/forgejo/runner/v[0-9]+|$module|"
#
# If it is a pull request, change the module to reference the forked repository so
# go mod tidy can find the SHA from a known branch or tag
#
if test -f "$runner_pr_or_ref"; then
repository=$(jq --raw-output .head.repo.full_name <$runner_pr_or_ref)
test "$repository"
module=$(echo $module | sed -e "s|code.forgejo.org/forgejo/runner|code.forgejo.org/$repository|")
fi
#
# add a "replace code.forgejo.org/forgejo/runner/v?? $sha" line to the forgejo go.mod
# so that it uses the branch or pull request from which the cascade is run.
#
sed -i -e "\|replace $module|d" go.mod
echo "replace $module => $module $sha" >>go.mod
go mod tidy