CI: Force changelog updates
Some checks are pending
Build / lint (push) Waiting to run
Build / test-stable (push) Blocked by required conditions
Build / test-nightly (push) Blocked by required conditions

Changelog updates are now required in MRs by default. If there is a
match for "\<skip.\?changelog\>" in the commit message, this will be
ignored.

$CI_COMMIT_MESSAGE mangles newlines so it's not possible to require the
string to be on its own line, that means it would also trigger within a
wall of text, which makes it less obvious.

Also, I wasn't able to find a CI variable which has the ref of the
branch the MR is set against, to build a tree-ish than spans over the
whole MR and not just HEAD.

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2024-12-16 17:04:44 +01:00
parent 580fdeffa9
commit 2dfaad49f3
Signed by: pep
GPG key ID: DEDA74AEECA9D0F2
2 changed files with 34 additions and 0 deletions

View file

@ -68,6 +68,38 @@ rustfmt:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_REF_NAME == 'main'
changelog-update:
stage: lint
extends:
- .stable
# Check in the commit message for "skip.?changelog", if not present
# then check for changes in changelogs.
# XXX: It looks like $CI_COMMIT_MESSAGE mangles newlines so it's not
# possible to require the "skip.?changelog" string to be on its own line,
# that means it would also trigger within a wall of text. Not so obvious.
# TODO: Check the whole MR for updates in changelogs, not just the last
# commit.
script:
- apt update; apt install -y --no-install-recommends git python3
- echo $CI_COMMIT_MESSAGE
- |
/usr/bin/env python3 -c "
import os, re, subprocess, sys
if re.search(r'skip changelog', os.environ['CI_COMMIT_MESSAGE'], flags=re.I) is not None:
print('Changelog skipped.')
sys.exit(0)
foo=subprocess.run(['git', 'log', '-1', '--oneline'], capture_output=True).stdout
print(f'FOO1:\n {foo}')
diff=subprocess.run(['git', 'diff-tree', '--no-commit-id', '-r', 'HEAD'], capture_output=True).stdout
print(f'FOO2:\n {diff}')
if re.search(b'[AM]\\s+\\S*changelog', diff, flags=re.I) is None:
print('Please update the Changelog. Use \"skip-changelog\" in the commit message to skip this check.')
sys.exit(1)
print('Changelog has been updated as expected.')"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_REF_NAME == 'main'
stable-test:
extends:
- .test

View file

@ -5,6 +5,8 @@ XXXX-YY-ZZ [ RELEASER <admin@localhost> ]
- Agent::wait_for_events now return Vec<Event> and sets inner tokio_xmpp Client
auto-reconnect to true... It is still aware of Event::Disconnected but should
no longer have weird hanging state or panic (!436)
* CI:
- Enforce changelog updates in Gitlab CI.
Version 0.6.0:
2024-07-27 [ Maxime “pep” Buquet <pep@bouah.net> ]