// SPDX-License-Identifier: MIT package workflow import "testing" // TestSkipCI replays the commit messages pushed by the recorded scenarios // skip-directives, skip-directives-placement, skip-checks-trailer and // skip-directive-tag. skip is true when GitHub started no run. func TestSkipCI(t *testing.T) { tests := []struct { scenario, msg string skip bool }{ // skip-directives {"skip-directives 1", "change one [skip ci]", true}, {"skip-directives 2", "change two [ci skip]", true}, {"skip-directives 3", "change three [no ci]", true}, {"skip-directives 4", "change four [skip actions]", true}, {"skip-directives 5", "change five [actions skip]", true}, {"skip-directives 6", "change six, no directive", false}, // skip-directives-placement {"placement 1 body", "subject\n\nbody line [skip ci] more body", true}, {"placement 2 mid-subject", "prefix [skip ci] suffix", true}, {"placement 3 upper case", "upper case [SKIP CI]", false}, {"placement 4 mixed case", "mixed case [Skip Ci]", false}, {"placement 5 near miss dash", "near miss [skip-ci]", false}, {"placement 6 no brackets", "near miss skip ci without brackets", false}, {"placement 7 extra word", "near miss [skip ci please]", false}, {"placement 8 NO_CI", "marker ***NO_CI*** in subject", false}, {"placement 9 SKIP_CI", "marker ***SKIP_CI*** in subject", false}, // skip-checks-trailer {"trailer 1 one blank line", "trailer true\n\nskip-checks: true", false}, {"trailer 2 false, one blank line", "trailer false\n\nskip-checks: false", false}, {"trailer 3 upper, one blank line", "trailer upper\n\nSkip-Checks: true", false}, {"trailer 4 other trailer first", "trailer after other trailer\n\nSigned-off-by: A Person \nskip-checks: true", false}, {"trailer 5 in the subject", "not a trailer, in the subject skip-checks: true", false}, {"trailer 6 no blank line", "trailer without blank line\nskip-checks: true", false}, {"trailer 7 two blank lines", "two blank lines true\n\n\nskip-checks: true", true}, {"trailer 8 no space", "two blank lines no space\n\n\nskip-checks:true", true}, {"trailer 9 false", "two blank lines false\n\n\nskip-checks: false", false}, {"trailer 10 value upper", "two blank lines upper\n\n\nSkip-Checks: TRUE", false}, {"trailer 11 text after", "two blank lines then more text\n\n\nskip-checks: true\nand more", false}, {"trailer 12 after other trailer", "two blank lines after other trailer\n\n\nSigned-off-by: A Person \nskip-checks: true", false}, {"trailer 13 trailing spaces", "two blank lines trailing spaces\n\n\nskip-checks: true ", true}, {"trailer 14 yes", "two blank lines yes\n\n\nskip-checks: yes", false}, {"trailer 15 key upper", "two blank lines key upper value lower\n\n\nSkip-Checks: true", false}, {"trailer 16 value upper", "two blank lines key lower value upper\n\n\nskip-checks: TRUE", false}, {"trailer 17 key mixed", "two blank lines key mixed\n\n\nSkip-checks: true", false}, {"trailer 18 plain", "plain commit", false}, // skip-directive-tag: the message of the commit a tag points at. {"tag 1", "tagged [skip ci]", true}, {"tag 2", "tagged normally", false}, // Not recorded: see the doc comment of SkipCI. {"trailing newline", "x\n\n\nskip-checks: true\n", true}, {"crlf", "x\r\n\r\n\r\nskip-checks: true\r\n", true}, {"three blank lines", "x\n\n\n\nskip-checks: true", true}, {"trailer alone", "\n\n\nskip-checks: true", false}, // A line with only white space is not blank (GO-006, assumed). {"space-only lines before trailer", "x\n \n \nskip-checks: true", false}, {"one space-only line before trailer", "x\n\n \nskip-checks: true", false}, {"tab-only lines before trailer", "x\n\t\n\t\nskip-checks: true", false}, {"empty", "", false}, } for _, tc := range tests { if got := SkipCI(tc.msg); got != tc.skip { t.Errorf("%s: SkipCI(%q) = %v, want %v", tc.scenario, tc.msg, got, tc.skip) } } }