mirror of
https://gitea.com/gitea/docs.git
synced 2026-09-17 19:55:34 +00:00
Reviewed-on: https://gitea.com/gitea/docs/pulls/488 Reviewed-by: silverwind <[email protected]>
197 lines
6.4 KiB
Bash
Executable File
197 lines
6.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Regenerates the generated pages of the runner documentation from the runner
|
|
# source: the command line reference and the example configuration file.
|
|
#
|
|
# Usage:
|
|
#
|
|
# ./update_runner_docs.sh develop docs, from the main branch
|
|
# ./update_runner_docs.sh --released every documented release series
|
|
# ./update_runner_docs.sh <git ref> <dir> one ref into one directory
|
|
#
|
|
# --released needs no version list: the documented series are the
|
|
# runner-docs_versioned_docs/version-<series>/reference directories, and the tag
|
|
# each one is generated from is the newest stable v<series>.x.y tag of
|
|
# gitea/runner, looked up through the Gitea API. A new series is documented by
|
|
# running `pnpm run docusaurus docs:version:runner-docs <series>`, nothing here
|
|
# has to be edited.
|
|
|
|
set -euo pipefail
|
|
|
|
RUNNER_REMOTE="${RUNNER_REMOTE:-https://gitea.com/gitea/runner.git}"
|
|
RUNNER_API="${RUNNER_API:-https://gitea.com/api/v1/repos/gitea/runner}"
|
|
VERSIONED_DOCS="runner-docs_versioned_docs"
|
|
SRC_DIR=".tmp/upstream-runner"
|
|
BIN="$PWD/.tmp/gitea-runner"
|
|
TAGS_FILE=".tmp/runner-tags.txt"
|
|
|
|
mkdir -p .tmp
|
|
|
|
# prints every tag name of the runner repository, one per line
|
|
list_runner_tags() {
|
|
local page=1 names
|
|
while :; do
|
|
names="$(curl --silent --show-error --fail \
|
|
"$RUNNER_API/tags?limit=50&page=$page" |
|
|
grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d '"' -f 4)"
|
|
[ -n "$names" ] || return 0
|
|
printf '%s\n' "$names"
|
|
page=$((page + 1))
|
|
done
|
|
}
|
|
|
|
# latest_stable_tag <series>, e.g. "3" -> "v3.0.2", empty if the series has no
|
|
# release yet. Pre-release tags (v3.0.0-rc1) are ignored on purpose.
|
|
latest_stable_tag() {
|
|
local series="$1"
|
|
if [ ! -s "$TAGS_FILE" ]; then
|
|
list_runner_tags > "$TAGS_FILE"
|
|
fi
|
|
grep -E "^v${series}\.[0-9]+\.[0-9]+$" "$TAGS_FILE" |
|
|
sed 's/^v//' |
|
|
sort -t . -k1,1n -k2,2n -k3,3n |
|
|
tail -n 1 |
|
|
sed 's/^/v/'
|
|
}
|
|
|
|
# checkout_runner <git ref>, builds the runner binary at $BIN
|
|
checkout_runner() {
|
|
local ref="$1"
|
|
|
|
if [ -d "$SRC_DIR/.git" ]; then
|
|
git -C "$SRC_DIR" remote set-url origin "$RUNNER_REMOTE"
|
|
else
|
|
rm -rf "$SRC_DIR"
|
|
git init --quiet "$SRC_DIR"
|
|
git -C "$SRC_DIR" remote add origin "$RUNNER_REMOTE"
|
|
fi
|
|
git -C "$SRC_DIR" fetch --quiet --depth 1 origin "$ref"
|
|
git -C "$SRC_DIR" checkout --quiet --detach FETCH_HEAD
|
|
|
|
(cd "$SRC_DIR" && go build -o "$BIN" .)
|
|
}
|
|
|
|
# the commands the reference documents, in the order they are presented
|
|
COMMANDS=(register daemon exec cache-server generate-config bug-report)
|
|
|
|
# one short paragraph per command, printed above its help output
|
|
describe_command() {
|
|
case "$1" in
|
|
register)
|
|
echo 'Registers the runner against a Gitea instance and writes the registration file. Interactive unless `--no-interactive` is given; the token can also come from `--token-file` or the `GITEA_RUNNER_REGISTRATION_TOKEN` environment variable. See [Registering a runner](../registration.md).'
|
|
;;
|
|
daemon)
|
|
echo 'Runs the runner: it polls the instance for jobs and executes them until it is stopped. `--labels` (default: `GITEA_RUNNER_LABELS`) overrides the labels of an already registered runner, and `--once` exits after a single job.'
|
|
;;
|
|
exec)
|
|
echo 'Runs a workflow from the current repository locally, without a Gitea instance and without the runner configuration file. Useful for debugging a workflow before pushing it. Runner YAML is not loaded, so hooks and cache settings do not apply.'
|
|
;;
|
|
cache-server)
|
|
echo 'Runs only the cache server, so several runners can share one cache. `--dir`, `--host` and `--port` override the matching `cache.*` keys; every other setting, `cache.external_secret` included, has to come from the config file. See [Caching](../cache.md#sharing-a-cache-between-runners).'
|
|
;;
|
|
generate-config)
|
|
echo 'Prints the commented example configuration on stdout, which is the starting point for a config file: `gitea-runner generate-config > config.yaml`.'
|
|
;;
|
|
bug-report)
|
|
echo 'Prints the runner version, Go version, OS/architecture and CPU count, for pasting into an issue.'
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# generate_reference <git ref> <target directory>
|
|
generate_reference() {
|
|
local ref="$1" target="$2" cmd
|
|
|
|
mkdir -p "$target"
|
|
checkout_runner "$ref"
|
|
|
|
{
|
|
cat <<'EOF'
|
|
---
|
|
sidebar_position: 1
|
|
description: Every gitea-runner command and flag, generated from the runner sources.
|
|
---
|
|
|
|
# Command line reference
|
|
|
|
{/* Generated by update_runner_docs.sh from the gitea/runner sources, do not edit. */}
|
|
|
|
`gitea-runner` is a single binary with one subcommand per task. `--config` / `-c` is
|
|
global: every command that reads configuration accepts it, and commands that do not
|
|
read any ignore it.
|
|
|
|
EOF
|
|
printf '## gitea-runner\n\n```text\n'
|
|
"$BIN" --help
|
|
printf '```\n'
|
|
|
|
for cmd in "${COMMANDS[@]}"; do
|
|
printf '\n## %s\n\n' "$cmd"
|
|
describe_command "$cmd"
|
|
printf '\n```text\n'
|
|
"$BIN" "$cmd" --help
|
|
printf '```\n'
|
|
done
|
|
} > "$target/cli.md"
|
|
|
|
{
|
|
cat <<'EOF'
|
|
---
|
|
sidebar_position: 2
|
|
description: The commented example configuration of the runner, generated from the runner sources.
|
|
---
|
|
|
|
# Example configuration
|
|
|
|
{/* Generated by update_runner_docs.sh from the gitea/runner sources, do not edit. */}
|
|
|
|
This is the output of `gitea-runner generate-config`. It is safe to use unmodified,
|
|
and it is the authoritative list of every option the runner understands. See
|
|
[Configuration](../configuration.md) for what the options mean and how the file is
|
|
loaded.
|
|
|
|
```yaml
|
|
EOF
|
|
"$BIN" generate-config
|
|
printf '```\n'
|
|
} > "$target/config-example.md"
|
|
|
|
echo "wrote $target/cli.md and $target/config-example.md from $RUNNER_REMOTE@$ref"
|
|
}
|
|
|
|
# regenerates every documented release series from its newest stable tag
|
|
generate_released() {
|
|
local dir series tag found=0
|
|
|
|
for dir in "$VERSIONED_DOCS"/version-*/reference; do
|
|
[ -d "$dir" ] || continue
|
|
found=1
|
|
series="${dir#"$VERSIONED_DOCS"/version-}"
|
|
series="${series%/reference}"
|
|
|
|
tag="$(latest_stable_tag "$series")"
|
|
if [ -z "$tag" ]; then
|
|
echo "no stable v$series tag in $RUNNER_API, skipping $dir" >&2
|
|
continue
|
|
fi
|
|
generate_reference "$tag" "$dir"
|
|
done
|
|
|
|
if [ "$found" -eq 0 ]; then
|
|
echo "no $VERSIONED_DOCS/version-*/reference directory to regenerate" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
case "${1:-}" in
|
|
--released)
|
|
generate_released
|
|
;;
|
|
-h | --help)
|
|
sed -n '3,17s/^#\{1,2\} \{0,1\}//p' "$0"
|
|
;;
|
|
*)
|
|
generate_reference "${1:-main}" "${2:-runner-docs/reference}"
|
|
;;
|
|
esac
|