summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-01-17 11:07:30 -0500
committerBen Gamari <ben@smart-cactus.org>2019-01-17 11:11:42 -0500
commit6e0a518d24c7c15c291e8ba69d171b6897cfe683 (patch)
tree7db953930bcbd29331057dbb92841f95ed3e392f
parent6aaa0655a721605740f23e49c5b4bf6165bfe865 (diff)
downloadhaskell-6e0a518d24c7c15c291e8ba69d171b6897cfe683.tar.gz
gitlab-ci: Add linter validating that all submodules are releasedwip/check-submodules
-rw-r--r--.gitlab-ci.yml11
-rwxr-xr-x.gitlab/linters/check-submodules.py54
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()