| #!/usr/bin/env bash |
| # SPDX-License-Identifier: GPL-3.0-or-later |
| # Copyright (c) Jarkko Sakkinen 2025 |
| |
| set -e |
| |
| SOURCE="git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git" |
| |
| usage() { |
| echo "Usage: $0 -C <linux kernel tree> <tag> <mustache template>" |
| } |
| |
| git_kernel() { |
| git -C "$kernel_tree" "$@" |
| } |
| |
| kernel_tree= |
| |
| while [[ $# -gt 0 ]]; do |
| case "$1" in |
| -C|--kernel-tree) |
| if [[ $# -lt 2 ]]; then |
| usage >&2 |
| exit 1 |
| fi |
| kernel_tree="$2" |
| shift 2 |
| ;; |
| -h|--help) |
| usage |
| exit 0 |
| ;; |
| --) |
| shift |
| break |
| ;; |
| -*) |
| echo "Unknown option: $1" >&2 |
| usage >&2 |
| exit 1 |
| ;; |
| *) |
| break |
| ;; |
| esac |
| done |
| |
| if [[ -z "$kernel_tree" || $# -ne 2 ]]; then |
| usage >&2 |
| exit 1 |
| fi |
| |
| if ! git -C "$kernel_tree" rev-parse --show-toplevel >/dev/null 2>&1; then |
| echo "\"$kernel_tree\" is not a git repository" >&2 |
| exit 1 |
| fi |
| |
| tag="$1" |
| template="$2" |
| tag_ref="refs/tags/$tag" |
| |
| if git_kernel show-ref --verify --quiet "$tag_ref"; then |
| echo "\"$tag\" pre-exists" |
| exit 1 |
| fi |
| |
| if git_kernel ls-remote --exit-code --refs --tags origin "$tag_ref" >/dev/null 2>&1; then |
| echo "\"origin/$tag\" pre-exists" |
| exit 1 |
| fi |
| |
| git_kernel tag -s "$tag" |
| git_kernel push origin "$tag" |
| |
| printf "Waiting for '%s'" "$tag" >&2 |
| while ! git ls-remote --exit-code --refs --tags "$SOURCE" "$tag_ref" >/dev/null 2>&1; do |
| printf "." >&2 |
| sleep 1 |
| done |
| printf " found\n" >&2 |
| |
| pull_request=$(git_kernel request-pull mainline/master "$SOURCE" "$tag") |
| sender="$(git_kernel config user.email)" |
| timestamp=$(date +"%a %b %e %H:%M:%S %Y") |
| output="git-pull-${tag}.mbox" |
| tmp_output="$(mktemp "${output}.XXXXXX")" |
| |
| trap 'rm -f "$tmp_output"' EXIT |
| |
| jq \ |
| --rawfile template "$template" \ |
| --arg tag "$tag" \ |
| --arg pull_request "$pull_request" \ |
| --arg sender "$sender" \ |
| --arg timestamp "$timestamp" \ |
| -rn ' |
| $template |
| | gsub("{{sender}}"; $sender) |
| | sub("{{timestamp}}"; $timestamp) |
| | sub("{{tag}}"; $tag) |
| | sub("{{pull_request}}"; $pull_request) |
| ' > "$tmp_output" |
| |
| if grep -Eq '\{\{[^}]+\}\}' "$tmp_output"; then |
| echo "\"$template\" contains unresolved placeholders" >&2 |
| exit 1 |
| fi |
| |
| mv "$tmp_output" "$output" |
| trap - EXIT |