Hello Mike, Thanks for this proposal.
The tag in the commit log works fine for me. This leaves the issue you raised that a contributor might add this tag themselves when sending the patch but this is something we should be able to catch in review. -- Ard. On Sun, 18 Feb 2024 at 04:36, Michael D Kinney <michael.d.kin...@intel.com> wrote: > > Hi Ard, > > I did some experiments with the 2 methods discussed earlier in > this thread to disable the specific check being discussed in this > patch. Details of the experiments and analysis of the results > are included at the end of the email. > > 1) Use GitHub PR Label > 2) Add a special tags to a commit message > > My conclusion is that using a PR Label to control CI actions is > not a good approach due to some behaviors in GitHub and that I > recommend that special tags be used in commit messages as a method > to enable/disable specific CI check options. There is actually > precedence for use of commit message tags in GitHub to skip CI > workflow runs: > > https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs > > The proposal is to define a tag name 'Continuous-integration-options:' > that can appear on one or more lines of the commit message and the tag > value is a list of one or more CI check options. This defines a mechanism > that can be extended as needed. For the specific check under discussion > here, I am proposing an option value of 'PatchCheck.ignore-multi-package' > An example commit message line to disable the multiple package check > for the one commit would be: > > Continuous-integration-options: PatchCheck.ignore-multi-package > > When PatchCheck evaluates the commit message, if this tag/value is > present, then the multiple package check is still run, but the log > shows results as WARNING messages, and no errors are raised and CI > receives a PASS result. > > Please provide feedback on this updated proposal. > > Thanks, > > Mike > > ======================================================== > > GitHub PR Label Experiments > ============================ > An experiment was done to use a GitHub PR Label to enable/disable the > multiple package check. PatchCheck was ported to a GitHub Action for > this experiment and a label with name 'ignore-multi-package' is used > to disable the PatchCheck multiple packages check. PatchCheck is updated > to support a --ignore-multi-option flag that is passed into PatchCheck > when the label is set. > > Description Result Label Set PR Link > ------------------ ------- --------- ---------------------------------------- > Modify 1 package PASS NO https://github.com/mdkinney/edk2/pull/15 > Modify 1 package PASS YES https://github.com/mdkinney/edk2/pull/15 > Modify 2 packages FAIL NO https://github.com/mdkinney/edk2/pull/16 > Modify 2 packages PASS YES https://github.com/mdkinney/edk2/pull/17 > > Main Branch: > * https://github.com/mdkinney/edk2/tree/CiEnabled > Patch Check with --ignore-multi-package option: > * > https://github.com/mdkinney/edk2/blob/CiEnabled/BaseTools/Scripts/PatchCheck.py > GitHub Action Files: > * > https://github.com/mdkinney/edk2/blob/CiEnabled/.github/workflows/patchcheck.yml > * > https://github.com/mdkinney/edk2/blob/CiEnabled/.github/workflows/patchcheck_call.yml > > The expected results were achieved where the label has no impact on a > PR with commits that only modifies a single package, and the label being > set can change a PR from FAIL->PASS if one or more of the commits in the > PR modify multiple packages. > > The disadvantages of this approach are: > 1) The scope of the label is the entire PR for all commits instead of > the specific commits that require the check to be skipped. > 2) The information to skip a specific check is only in the GitHub PR > in the form of a label being set. The git commit history has no information > on the label settings. This can cause side effects if downstream consumers > use some of the edk2 CI checkers and may then see unexpected CI failures. > 3) CI is run again when commits are merged with a 'push' action. It was > not verified, but the label information is not provided when a push > is performed, so the result of using labels to change CI behavior > may be a PASS condition when the PR is being reviewed, and a FAIL > condition when the commits from the PR are merged. This is not an expected > or acceptable state of the main branch. > 4) The GitHub action must add 'labeled' and 'unlabeled' PR types for > the GitHub action to run when a label is added or removed. There is > no mechanism to filter based on which specific label was added or > removed. This means CI must be invoked each time a label is modified > in a PR, even for labels that are not related to CI behavior. This is > not efficient for CI and implies that this mechanism does not scale > well if several of these CI option labels are added over time. > * Experiments were run to filter based in label inside the GitHub > Action itself. This *only* worked if a CI related label is modified. > If a non-CI related label is modified, the GitHub Action is skipped, > and the result is PASS even if the result of the last run was FAIL. > This would allow merges of PRs with known issues. > * The other option is to remove 'labeled' and 'unlabeled' events from > the GitHub Action. This can work, but has an unexpected behavior from > the maintainer perspective. Setting a label does not re-run CI. > Instead, the label has to be set, then either the PR must be closed > and re-opened, or additional commits have to be added, or commits > must be force pushed in order for the CI check to be re-run with > the label changes. This also implies that that PASS/FAIL state of > the PR can be out of sync with the current label settings if those > additional actions are not performed after the labels are modified. > > Commit Message Tag Experiments > ============================== > An experiment was done to use a commit message tag/value to disable the > multiple package check on only the commits that contain a matching > tag/value. The tag/value used is: > > Continuous-Integration-Options: PatchCheck.ignore-multi-package > > Description Result Tag Present PR Link > ------------------ ------- ----------- > ---------------------------------------- > Modify 1 package PASS NO > https://github.com/mdkinney/edk2/pull/30 > Modify 2 packages FAIL NO > https://github.com/mdkinney/edk2/pull/28 > Modify 2 packages PASS YES > https://github.com/mdkinney/edk2/pull/29 > > Main Branch: > * https://github.com/mdkinney/edk2/tree/CommitMessageCiFilter > Patch Check with Continuous-Integration-Options tag parsing > * > https://github.com/mdkinney/edk2/blob/CommitMessageCiFilter/BaseTools/Scripts/PatchCheck.py > GitHub Action File: > * > https://github.com/mdkinney/edk2/blob/CommitMessageCiFilter/.github/workflows/patchcheck.yml > > The expected results were achieved when adding the tag/value to the > commit message of a commit that modifies multiple packages changes > the PR from FAIL->PASS. > > The disadvantages of this approach are: > 1) Adds CI specific tags to commit messages and commit history > 2) Requires author or maintainer to update commit message with a > CI specific tag/value if a multiple package check fails and is > considered a false positive. > > The advantages of this approach are: > 1) The scope of the tag/value is a single commit. Not the entire PR. > 2) The information about what CI checks to skip are part of the > commit message and the commit history so the information can be > reused if needed in downstream CI. > 3) The information is in the commit message, so it is available for both > PR CI checks and 'push' CI checks. > 4) No new behavior from a maintainer perspective on how/when CI checks > are run and when the status if CI checks are available. > > ================================================================== > > > -----Original Message----- > > From: Kinney, Michael D <michael.d.kin...@intel.com> > > Sent: Wednesday, February 14, 2024 4:49 PM > > To: Ard Biesheuvel <a...@kernel.org>; devel@edk2.groups.io > > Cc: Leif Lindholm <quic_llind...@quicinc.com>; Rebecca Cran > > <rebe...@bsdio.com>; Liming Gao <gaolim...@byosoft.com.cn>; Feng, Bob C > > <bob.c.f...@intel.com>; Chen, Christine <yuwei.c...@intel.com>; Michael > > Kubacki <mikub...@linux.microsoft.com>; Kinney, Michael D > > <michael.d.kin...@intel.com> > > Subject: RE: [edk2-devel] [Patch 1/1] BaseTools/Scripts/PatchCheck: > > Error if commit modifies multiple packages > > > > Hi Ard, > > > > I agree we do not want to code to be worse. Which I interpret > > in this context as introducing extra commits that reduce the > > readability of the commits. > > > > We also need to consider the ease of review of patches and clear > > responsibility for providing reviews. Especially when we have > > different reviewers/maintainers for different packages. It makes > > it easier to review a patch when patches do not cross package > > boundaries. Otherwise, what does a Reviewed-by mean if you > > only have context for a portion of the patch? Does that mean > > that reviewer is confident in all the changes including those > > they may not have any experience with? > > > > That means there is some tension between readability of commits > > and code review of commits. > > > > The other topic brought up in this discussion is bisect. > > > > I understand the value of bisect to help identify the source > > of a bug or behavior change. > > > > However, the current EDK II CI system does not test at the > > granularity of single commits. Instead, it tests the entire > > patch series in a PR. > > > > I have also observed some maintainers combining multiple > > patch series into a single PR. > > > > I also suspect that there are many patch series in the edk2 > > commit history that would not work if bisect was run across > > them today. > > > > What this means in practice with the current edk2 repository > > history is that we do not know if every commit can be built > > and run. We only know that the EDK II CI tests that are run > > against PRs have passed. > > > > We do expect build/run at the granularity of a PR merge today. > > However, there is no information in the git history to know > > where the PR merges occur. If that extra bit of information > > was available, then bisect could select the commits at PR > > merge boundaries to look for bug/behavior change. The history > > of merged PRs is in github using the following query. > > > > https://github.com/tianocore/edk2/pulls?q=is%3Apr+is%3Aclosed+is%3Amerg > > ed > > > > I imagine the set of sha hashes at PR boundaries could be extracted > > from this query and bisect could select from that set of sha hashes > > that are a subset of the total set of sha hashes. Biset would > > identify the specific PR merge where the bug or behavior change was > > introduced. > > > > Given the current state of the edk2 repo history, the concern about > > splitting up commits on package boundaries that may cause a bisect > > failure at a commit boundary within a single patch series may not be > > something that needs to be considered. > > > > A refinement to the proposal is to require patches to not cross > > package boundaries and authors simply need to split into multiple > > commits based on package boundaries without considering bisect within > > a single patch series. That prevents adding extra patches that make > > the changes hard to understand and has the additional benefit of > > making the patch series easier to review and clear ownership for > > reviewing each patch. > > > > Best regards, > > > > Mike > > > > > -----Original Message----- > > > From: Ard Biesheuvel <a...@kernel.org> > > > Sent: Wednesday, February 14, 2024 3:48 PM > > > To: devel@edk2.groups.io; Kinney, Michael D > > > <michael.d.kin...@intel.com> > > > Cc: Leif Lindholm <quic_llind...@quicinc.com>; Rebecca Cran > > > <rebe...@bsdio.com>; Liming Gao <gaolim...@byosoft.com.cn>; Feng, Bob > > C > > > <bob.c.f...@intel.com>; Chen, Christine <yuwei.c...@intel.com>; > > Michael > > > Kubacki <mikub...@linux.microsoft.com> > > > Subject: Re: [edk2-devel] [Patch 1/1] BaseTools/Scripts/PatchCheck: > > > Error if commit modifies multiple packages > > > > > > On Thu, 15 Feb 2024 at 00:27, Michael D Kinney > > > <michael.d.kin...@intel.com> wrote: > > > > > > > > Hi Ard, > > > > > > > > Using commit message does provide granularity down to a single > > > commit, > > > > which may be better than PR label which applies across all commits > > > > in a series. > > > > > > > > However, a flag in the commit message can be set by the author who > > > may > > > > not be a maintainer and maintainers would then need to review > > commit > > > > messages for incorrect use of those flags. > > > > > > > > Only maintainers/admins can set labels, so from a permission > > > management > > > > perspective the PR label has an advantage. > > > > > > > > Additional comments below. There are ways to support bisect and > > meet > > > > the proposed checks. The suggestion uses techniques that Laszlo > > > helped > > > > me with in the past when working on issues like there. I have seen > > > more > > > > complex scenarios than the examples listed below, and have been > > able > > > to > > > > figure out a path through. > > > > > > > > I would agree it is extra work to think about these when working on > > > > the code changes and extra work to reformulate the patches when > > these > > > > conditions are encountered. > > > > > > > > I just want to be clear on the objections. It is not about if the > > > patches > > > > can be organized to follow this proposal. The objection is about > > the > > > > extra work required to reformulate patches. > > > > > > > > > > No. > > > > > > The objection is fundamentally about having to appease the CI even if > > > doing so is unreasonable. I don't mind a bit of extra work. I do mind > > > having to make code changes that make the code worse just to tick a > > CI > > > box. (This is why I disabled uncrustify for the ARM packages: many > > > header files which were perfectly legible before were converted into > > a > > > jumble of alphabet soup because uncrustify removed all of the > > > indentation) > > > > > > It is about having the discretion to deviate from the rules in the > > odd > > > case where the cure is worse than the disease. > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115567): https://edk2.groups.io/g/devel/message/115567 Mute This Topic: https://groups.io/mt/104345509/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-