Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
8881 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
.gitlab-ci.yml 41.78 KiB
variables:
  GIT_SSL_NO_VERIFY: "1"

  # Commit of ghc/ci-images repository from which to pull Docker images
  DOCKER_REV: 885dfba7f74583d6a394dbf711cc805178cfcc47

  # Sequential version number of all cached things.
  # Bump to invalidate GitLab CI cache.
  CACHE_REV: 4

  # Disable shallow clones; they break our linting rules
  GIT_DEPTH: 0

  # Always start with a fresh clone to avoid non-hermetic builds
  GIT_STRATEGY: clone

  # Overridden by individual jobs
  CONFIGURE_ARGS: ""

  GIT_SUBMODULE_STRATEGY: "recursive"

  HACKAGE_INDEX_STATE: "2020-12-21T14:48:20Z"

  # Makes ci.sh isolate CABAL_DIR
  HERMETIC: "YES"

  # Reduce XZ compression level for regular jobs (it is bumped to 9 for releases
  # and nightly jobs). In my experiments I've got the following bindist size in
  # the given time for each compression level (with the quick flavour):
  #
  #     XZ_OPT        Time    Size
  #     -9            4m06s   112 MB
  #     -8            4m00s   114 MB
  #     -7            3m50s   116 MB
  #     -6 (default)  3m40s   118 MB
  #     -5            2m47s   123 MB
  #     -4            1m57s   134 MB
  #     -3            1m03s   129 MB
  #     -2            49.73s  136 MB
  #     -1            37.72s  142 MB
  #     -0            34.40s  156 MB
  #
  XZ_OPT: "-1"
default:
  interruptible: true

stages:
  - not-interruptible
  - tool-lint      # Source linting of the tools
  - quick-build    # A very quick smoke-test to weed out broken commits
  - full-build     # Build all the things
  - packaging      # Source distribution, etc.
  - testing        # head.hackage correctness and compiler performance testing
  - deploy         # push documentation

# Note [The CI Story]
# ~~~~~~~~~~~~~~~~~~~
#
# There are two different types of pipelines:
#
#  - marge-bot merges to `master`. Here we perform an exhaustive validation
#    across all of the platforms which we support. In addition, we push
#    performance metric notes upstream, providing a persistent record of the
#    performance characteristics of the compiler.
#
#  - merge requests. Here we perform a slightly less exhaustive battery of
#    testing. Namely we omit some configurations (e.g. the unregisterised job).
#    These use the merge request's base commit for performance metric
#    comparisons.
#