diff options
author | Ben Gamari <ben@smart-cactus.org> | 2019-01-17 11:07:30 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2019-01-17 11:11:42 -0500 |
commit | 6e0a518d24c7c15c291e8ba69d171b6897cfe683 (patch) | |
tree | 7db953930bcbd29331057dbb92841f95ed3e392f | |
parent | 6aaa0655a721605740f23e49c5b4bf6165bfe865 (diff) | |
download | haskell-6e0a518d24c7c15c291e8ba69d171b6897cfe683.tar.gz |
gitlab-ci: Add linter validating that all submodules are releasedwip/check-submodules
-rw-r--r-- | .gitlab-ci.yml | 11 | ||||
-rwxr-xr-x | .gitlab/linters/check-submodules.py | 54 |
2 files changed, 65 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 162c19ccb6..0fa772e8f3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -45,6 +45,17 @@ ghc-linters: tags: - lint +check-submodules: + stage: lint + image: ghcci/linters:0.1 + script: + - | + if [ -n "$CI_COMMIT_TAG" -a -n "$RELEASE" ]; then + .gitlab/linters/check-submodules + fi + tags: + - lint + ############################################################ # Validation via Pipelines (hadrian) ############################################################ diff --git a/.gitlab/linters/check-submodules.py b/.gitlab/linters/check-submodules.py new file mode 100755 index 0000000000..72862a4fd3 --- /dev/null +++ b/.gitlab/linters/check-submodules.py @@ -0,0 +1,54 @@ +""" +Ensure all submodules point to released (tagged) commits. +""" + +from subprocess import run, PIPE +import re + +def get_submodules(): + p = run(['git', 'submodule'], stdout=PIPE) + for match in re.finditer('^.([0-9a-f]{40}) ([^ ]+) \(([^\)]+)\)', + p.stdout.decode('UTF-8'), re.M): + commit = match.group(1) + submodule = match.group(2) + rev = match.group(3) + yield (commit, submodule, rev) + +checked_submodules = { + 'libraries/array', + 'libraries/binary', + 'libraries/bytestring', + 'libraries/Cabal', + 'libraries/containers', + 'libraries/deepseq', + 'libraries/directory', + 'libraries/filepath', + 'libraries/haskeline', + 'libraries/hpc', + 'libraries/mtl', + 'libraries/parsec', + 'libraries/pretty', + 'libraries/process', + 'libraries/stm', + 'libraries/text', + 'libraries/terminfo', + 'libraries/time', + 'libraries/transformers', + 'libraries/unix', + 'libraries/Win32' +} + +def main(): + fail = False + for (commit, submodule, rev) in get_submodules(): + if submodule in check_submodules: + if re.match('.*-g[0-9a-f]+', rev): + fail = True + print('Error: Submodule {submodule} points to non-released commit {commit} (rev={rev})'.format( + commit=commit, submodule=submodule, rev=rev)) + + if fail: + sys.exit(1) + +if __name__ == "__main__": + main() |