diff --git a/.github/workflows/github-action-checks.yml b/.github/workflows/github-action-checks.yml index ad76317f96..60e99c1295 100644 --- a/.github/workflows/github-action-checks.yml +++ b/.github/workflows/github-action-checks.yml @@ -20,6 +20,11 @@ jobs: with: fetch-depth: 2 - run: scripts/diffcheck.sh + Scripted-Diff-Checks: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: scripts/commit-script-check.sh ${{ github.sha }} Typo-Checks: name: "Typo Checks" runs-on: ubuntu-latest diff --git a/bip-0003.md b/bip-0003.md index c5f4476115..e538a18e85 100644 --- a/bip-0003.md +++ b/bip-0003.md @@ -21,7 +21,7 @@ address the evolving needs of the BIP process. ## Motivation -BIP 2 was written in 2016. +BIP 2 was written in 2017. This BIP revisits aspects of the BIP 2 process that did not achieve broad adoption, reduces the judgment calls assigned to the BIP Editor role, delineates the BIP types more clearly, and generalizes the BIP process to fit the community’s use of the repository. diff --git a/scripts/commit-script-check.sh b/scripts/commit-script-check.sh new file mode 100755 index 0000000000..af99b9cb22 --- /dev/null +++ b/scripts/commit-script-check.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# Copyright (c) 2009-present The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# This simple script checks for commits beginning with: scripted-diff: +# If found, looks for a script between the lines -BEGIN VERIFY SCRIPT- and +# -END VERIFY SCRIPT-. If no ending is found, it reads until the end of the +# commit message. + +# The resulting script should exactly transform the previous commit into the +# current one. Any remaining diff signals an error. + +export LC_ALL=C +if test -z "$1"; then + echo "Usage: $0 ..." + exit 1 +fi + +if ! sed --help 2>&1 | grep -q 'GNU'; then + echo "Error: the installed sed package is not compatible. Please make sure you have GNU sed installed in your system."; + exit 1; +fi + +if ! grep --help 2>&1 | grep -q 'GNU'; then + echo "Error: the installed grep package is not compatible. Please make sure you have GNU grep installed in your system."; + exit 1; +fi + +RET=0 +PREV_BRANCH=$(git name-rev --name-only HEAD) +PREV_HEAD=$(git rev-parse HEAD) +for commit in $(git rev-list --reverse "$1"); do + if git rev-list -n 1 --pretty="%s" "$commit" | grep -q "^scripted-diff:"; then + git checkout --quiet "$commit"^ || exit + SCRIPT="$(git rev-list --format=%b -n1 "$commit" | sed '/^-BEGIN VERIFY SCRIPT-$/,/^-END VERIFY SCRIPT-$/{//!b};d')" + if test -z "$SCRIPT"; then + echo "Error: missing script for: $commit" >&2 + echo "Failed" >&2 + RET=1 + else + echo "Running script for: $commit" >&2 + echo "$SCRIPT" >&2 + (eval "$SCRIPT") + git --no-pager diff --exit-code "$commit" && echo "OK" >&2 || (echo "Failed" >&2; false) || RET=1 + fi + git reset --quiet --hard HEAD + else + if git rev-list "--format=%b" -n1 "$commit" | grep -q '^-\(BEGIN\|END\)[ a-zA-Z]*-$'; then + echo "Error: script block marker but no scripted-diff in title of commit $commit" >&2 + echo "Failed" >&2 + RET=1 + fi + fi +done +git checkout --quiet "$PREV_BRANCH" 2>/dev/null || git checkout --quiet "$PREV_HEAD" +exit $RET