On 2020-05-05 17:04:51-0400, Jeff King <peff@xxxxxxxx> wrote: > We could likewise try to get some information from the branch name. But > that leads to debates about whether the default should be "off" or "on", > and overriding still ends up somewhat awkward. If we default to "on", > you have to remember to name your branches appropriately to skip CI. And > if "off", you end up having to contort your branch names or duplicate > your pushes with an extra refspec. > > By comparison, this commit's solution lets you specify your config once > and forget about it, and all of the data is off in its own ref, where it > can be changed by individual forks without touching the main tree. How about supports the best of both worlds. Let's say support wildcard 'wip/**' for opt-out. And use "./allow-ref" to filter everything that passed the wildcard. > I used refs/ci/config as the config ref, which should be a commit whose > tree contains various config files (right now the only one is > "ref-whitelist"). It was intentional to avoid refs/heads/ here so we > don't conflict with any branch workflows. But it does make it a little > awkward to edit, since you can't check it out directly. > > Right now the logic is to run CI for all branches by default, unless a > whitelist exists, in which case the branch must be mentioned there > (using its fully qualified ref name). We could easily add in a > blacklist, as well. Or since we're running a shell in a VM, we really > could just run "./allow-ref $refname" and let individual forks specify > whatever shell code they like. Should we go with this route, here is a fix-up patch for your, (after cherry-pick my [1/3]) --------------------8<------------------- Subject: [PATCH] fixup! ci: allow per-branch config for GitHub Actions Signed-off-by: Đoàn Trần Công Danh <congdanhqx@xxxxxxxxx> --- .github/workflows/main.yml | 3 +-- Documentation/SubmittingPatches | 12 ++++++++++++ contrib/ci-config-allow-ref | 9 +++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100755 contrib/ci-config-allow-ref diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 51f4ff6e89..08217c5ed8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,8 +19,7 @@ jobs: name: check whether CI is enabled for ref run: | enabled=yes - if test -e ref-whitelist && - ! grep '^${{ github.ref }}$' ref-whitelist + if test -x allow-ref && ! ./allow-ref '${{ github.ref }}' then enabled=no fi diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index 8686318550..8175424929 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches @@ -82,6 +82,18 @@ Alternately, you can use GitHub Actions (which supports testing your changes on Linux, macOS, and Windows) by pushing into a branch in your fork or opening a GitHub's Pull Request against https://github.com/git/git.git or a fork of that repository. +In the event that you only want to trigger GitHub Actions for specific +refname, you can create an executable file named `allow-ref` in +`refs/ci/config`. Those below steps may help you: +-------------- +$ git checkout --orphan ci-config +$ cp contrib/ci-config-allow-ref allow-ref +$ $EDITOR allow-ref +$ git rm -rf . +$ git commit allow-ref +$ git push <your-fork> HEAD:refs/ci/config +-------------- + Do not forget to update the documentation to describe the updated behavior and make sure that the resulting documentation set formats diff --git a/contrib/ci-config-allow-ref b/contrib/ci-config-allow-ref new file mode 100755 index 0000000000..b53e9ddbd0 --- /dev/null +++ b/contrib/ci-config-allow-ref @@ -0,0 +1,9 @@ +#!/bin/sh +# Sample filter for GitHub Actions +# GitHub Actions will run if and only if this script exit with zero status + +REFNAME="$1" + +case "$REFNAME" in +refs/heads/no-ci*) exit 1 ;; +esac -- 2.26.2.672.g232c24e857