blob: 7742aba6acf37fd7b0c42cd0cf0818244bc44315 [file] [log] [blame]
#!/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