mirror of
https://gitlab.freedesktop.org/libevdev/libevdev.git
synced 2025-12-28 02:40:08 +01:00
gitlab CI: use ci-fairy to check commits and merge requests
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
0ebdab6d6c
commit
2698867311
3 changed files with 52 additions and 138 deletions
|
|
@ -160,31 +160,45 @@ check-ci-script:
|
|||
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
||||
- exit 1
|
||||
|
||||
#
|
||||
# Verify that commit messages are as expected, signed-off, etc.
|
||||
#
|
||||
|
||||
check-commit:
|
||||
image: golang:alpine
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install GitPython
|
||||
- pip3 install pytest
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- |
|
||||
pytest --junitxml=results.xml \
|
||||
--tb=line \
|
||||
--assert=plain \
|
||||
./.gitlab-ci/check-commit.py
|
||||
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
||||
except:
|
||||
- master@libevdev/libevdev
|
||||
- master@libinput/libinput
|
||||
variables:
|
||||
GIT_DEPTH: 100
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
when: on_failure
|
||||
paths:
|
||||
- results.xml
|
||||
reports:
|
||||
junit: results.xml
|
||||
|
||||
#
|
||||
# Verify that the merge request has the allow-collaboration checkbox ticked
|
||||
#
|
||||
|
||||
check-merge-request:
|
||||
image: golang:alpine
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
||||
artifacts:
|
||||
when: on_failure
|
||||
reports:
|
||||
junit: results.xml
|
||||
allow_failure: true
|
||||
|
||||
|
||||
.fedora.packages:
|
||||
variables:
|
||||
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
|
||||
|
|
|
|||
|
|
@ -1,114 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# This script tests a few things against the commit messages, search for
|
||||
# `def test_` to see the actual tests run.
|
||||
|
||||
import git
|
||||
import os
|
||||
import pytest
|
||||
|
||||
if os.environ.get('CI'):
|
||||
# Environment variables set by gitlab
|
||||
CI_COMMIT_SHA = os.environ['CI_COMMIT_SHA']
|
||||
# This is intentionally hardcoded to master. CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
||||
# is only available when run with only: [merge_requests]
|
||||
# but that generates a detached pipeline with only this job in it.
|
||||
# Since merging into a non-master branch is not a thing in libevdev
|
||||
# anyway, we can hardcode this here.
|
||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME = 'master'
|
||||
CI_SERVER_HOST = os.environ['CI_SERVER_HOST']
|
||||
UPSTREAM = 'upstream'
|
||||
else:
|
||||
# Local emulation mode when called directly
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='Commit message checker - local emulation mode')
|
||||
parser.add_argument('--sha', help='The commit message to start at (default: HEAD}',
|
||||
default='HEAD')
|
||||
parser.add_argument('--branch', help='The branch name to merge to (default: master)',
|
||||
default='master')
|
||||
parser.add_argument('--remote', help='The remote name (default: origin)',
|
||||
default='origin')
|
||||
args = parser.parse_args()
|
||||
|
||||
CI_COMMIT_SHA = args.sha
|
||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME = args.branch
|
||||
CI_SERVER_HOST = None
|
||||
UPSTREAM = 'origin'
|
||||
print(f'Running in local testing mode.')
|
||||
|
||||
print(f'Merging {CI_COMMIT_SHA} into {CI_MERGE_REQUEST_TARGET_BRANCH_NAME}')
|
||||
|
||||
# We need to add the real libevdev as remote, our origin here is the user's
|
||||
# fork.
|
||||
repo = git.Repo('.')
|
||||
if UPSTREAM not in repo.remotes:
|
||||
upstream = repo.create_remote('upstream', f'https://{CI_SERVER_HOST}/libevdev/libevdev.git')
|
||||
upstream.fetch()
|
||||
|
||||
sha = CI_COMMIT_SHA
|
||||
branch = CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
||||
|
||||
commits = list(repo.iter_commits(f'{UPSTREAM}/{branch}..{sha}'))
|
||||
|
||||
|
||||
def error(commit, message, long_message=''):
|
||||
info = ('After correcting the above issue(s), force-push to the same branch.\n'
|
||||
'This will re-trigger the CI.\n\n'
|
||||
'A list of requirements for commit messages is available at\n'
|
||||
'https://gitlab.freedesktop.org/libevdev/libevdev/blob/master/CODING_STYLE.md')
|
||||
|
||||
msg = (f'\n'
|
||||
f'Commit message check failed: {message}\n\n'
|
||||
f' commit: {str(commit)}\n'
|
||||
f' author: {commit.author.name} <{commit.author.email}>\n'
|
||||
f'\n'
|
||||
f' {commit.summary}\n'
|
||||
f'\n'
|
||||
f'\n'
|
||||
f'{long_message}\n\n'
|
||||
f'{info}\n\n')
|
||||
return msg
|
||||
|
||||
|
||||
@pytest.mark.parametrize('commit', commits)
|
||||
class TestCommits:
|
||||
def test_author_email(self, commit):
|
||||
assert '@users.noreply.gitlab.freedesktop.org' not in commit.author.email, \
|
||||
error(commit, 'git author email invalid',
|
||||
('Please set your name and email with the commands\n',
|
||||
' git config --global user.name Your Name\n'
|
||||
' git config --global user.email your.email@provider.com\n'))
|
||||
|
||||
def test_signed_off_by(self, commit):
|
||||
if not commit.message.startswith('Revert "'):
|
||||
assert 'Signed-off-by:' in commit.message, \
|
||||
error(commit, 'missing Signed-off-by tag',
|
||||
'Please add the required "Signed-off-by: author information" line\n'
|
||||
'to the commit message')
|
||||
|
||||
def test_fixup(self, commit):
|
||||
assert not commit.message.startswith('fixup!'), \
|
||||
error(commit, 'Remove fixup! tag',
|
||||
'Leftover "fixup!" commit message detected, please squash')
|
||||
assert not commit.message.startswith('squash!'), \
|
||||
error(commit, 'Remove squash! tag',
|
||||
'Leftover "squash!" commit message detected, please squash')
|
||||
|
||||
def test_line_length(self, commit):
|
||||
lines = commit.message.split('\n')
|
||||
first_line = lines[0]
|
||||
|
||||
assert len(first_line) < 85, \
|
||||
error(commit, 'Commit message subject line too long')
|
||||
|
||||
try:
|
||||
second_line = lines[1]
|
||||
assert second_line == '', \
|
||||
error(commit, 'Second line in commit message must be emtpy')
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
pytest.main([__file__])
|
||||
|
|
@ -97,31 +97,45 @@ check-ci-script:
|
|||
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
||||
- exit 1
|
||||
|
||||
#
|
||||
# Verify that commit messages are as expected, signed-off, etc.
|
||||
#
|
||||
|
||||
check-commit:
|
||||
image: golang:alpine
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install GitPython
|
||||
- pip3 install pytest
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- |
|
||||
pytest --junitxml=results.xml \
|
||||
--tb=line \
|
||||
--assert=plain \
|
||||
./.gitlab-ci/check-commit.py
|
||||
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
||||
except:
|
||||
- master@libevdev/libevdev
|
||||
- master@libinput/libinput
|
||||
variables:
|
||||
GIT_DEPTH: 100
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
when: on_failure
|
||||
paths:
|
||||
- results.xml
|
||||
reports:
|
||||
junit: results.xml
|
||||
|
||||
#
|
||||
# Verify that the merge request has the allow-collaboration checkbox ticked
|
||||
#
|
||||
|
||||
check-merge-request:
|
||||
image: golang:alpine
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
||||
artifacts:
|
||||
when: on_failure
|
||||
reports:
|
||||
junit: results.xml
|
||||
allow_failure: true
|
||||
|
||||
|
||||
{% for distro in distributions %}
|
||||
.{{ distro.name }}.packages:
|
||||
variables:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue