1
0
mirror of https://github.com/tektoncd/catalog.git synced 2024-11-24 06:15:46 +00:00
catalog/hack/diff-task-version
Frerik Andriessen a771c5cefc Make diff-task handle code blocks
Github markdown allows using 4 (or more) backticks to differentiate
between triple backticks inside the code blocks. Seeing as how most
task-diffs will probably have some form of markdown with codeblocks
inside them, this will escape that.
2021-11-02 13:15:38 +00:00

115 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Chmouel Boudjnah <chmouel@chmouel.com>
#
# Using github.com/cli/cli it takes a PR URL as first argument and check
# it out.
#
# It will then detect automatically the old and new version and post a
# comment to the PR with the diff and copy it in your clipboard (with
# xclip on Linux and pbcopy on OSX)
set -euf
cd "$GOPATH/src/github.com/tektoncd/catalog"
# by default autodetect, set it up here if you like
upstream=
# Wether to delete the checkout branch, set it to yes or use the -d option
deletecheckout=
# Wether to create a issue comment on PR
nocreatepr=
currentbranch=$(git symbolic-ref -q HEAD);currentbranch=${currentbranch#refs/heads/}
if git --no-pager remote |grep -q upstream;then
upstream=upstream
elif [[ -z ${upstream} ]];then
upstream=origin
fi
type -p gh >/dev/null 2>/dev/null || {
echo "we need https://github.com/cli/cli installed"
exit 1
}
while getopts "dn" o; do
case "${o}" in
n)
nocreatepr=yes
;;
d)
deletecheckout="yes"
;;
*)
echo "Invalid option: ${OPTARG}"; exit 1;
;;
esac
done
shift $((OPTIND-1))
PR=${1}
[[ ${PR} != *tektoncd/catalog/pull* ]] && {
echo "i need the first argument to be a tekton/catalog PR, ie.: https://github.com/tektoncd/catalog/pull/1"
exit 1
}
gh pr checkout "${PR}"
newbranch=$(git symbolic-ref -q HEAD);newbranch=${newbranch#refs/heads/}
changed_task_version=$(git diff-tree --no-commit-id --name-only -r \
$(git rev-parse --abbrev-ref HEAD)|grep '^task/'| \
sed 's,\([^/]*/[^/]*/[^/]*\).*,\1,'|sort -u)
if [[ -z ${changed_task_version} ]];then
echo "Not a commit with a change in task"
exit 0
fi
check_if_task_version_on_main=$(git ls-tree -r ${upstream}/main --name-only ${changed_task_version} || true)
if [[ -n ${check_if_task_version_on_main} ]];then
echo "Not a new version, since '${changed_task_version}' is already in main"
exit 0
fi
if [[ $(basename ${changed_task_version}) == 0.1 ]];then
echo "New task 0.1, skipping the diff"
exit
fi
task_name=$(basename $(dirname ${changed_task_version}))
task_version=$(basename ${changed_task_version})
# previous_task_version=$(ls task/${task_name}|sort -ur|grep '^[0-9]*\.[0-9]*'|grep -v ${task_version} | head -1)
previous_task_version=$(find task/${task_name} -maxdepth 1 -regex '.*/[0-9]\.[0-9]$' \! -name "${task_version}" -printf "%f\n"|sort -run|head -1)
difffilename=/tmp/catalog-review-${task_name}-${task_version}.diff
copier="/usr/bin/env true"
type -p xclip >/dev/null 2>/dev/null && copier="xclip -i -selection clipboard"
type -p pbcopy >/dev/null 2>/dev/null && copier=pbcopy
(
echo "<details><summary>Diff between version ${previous_task_version} and ${task_version}</summary>"
echo
echo "\`\`\`\`diff"
diff -urN task/${task_name}/${previous_task_version} task/${task_name}/${task_version}
echo "\`\`\`\`"
echo
echo "</details>"
)| tee ${difffilename} | ${copier}
echo "Paste copied in your clipboard"
[[ -z ${nocreatepr}]] && gh pr comment -F ${difffilename}
if [[ -n ${deletecheckout} && ${newbranch} != ${currentbranch} ]];then
git checkout ${currentbranch}
git branch -D ${newbranch}
fi