David Eichmann pushed to branch wip/davide/windows_ci_env at Glasgow Haskell Compiler / GHC

Commits:

1 changed file:

Changes:

  • .gitlab-ci.yml
    ... ... @@ -60,1304 +60,7 @@ default:
    60 60
       interruptible: true
    
    61 61
     
    
    62 62
     stages:
    
    63
    -  - not-interruptible
    
    64
    -  - tool-lint      # Source linting of the tools
    
    65
    -  - quick-build    # A very quick smoke-test to weed out broken commits
    
    66
    -  - full-build     # Build all the things
    
    67
    -  - packaging      # Source distribution, etc.
    
    68
    -  - testing        # head.hackage correctness and compiler performance testing
    
    69
    -  - deploy         # push documentation
    
    70
    -
    
    71
    -# Note [The CI Story]
    
    72
    -# ~~~~~~~~~~~~~~~~~~~
    
    73
    -#
    
    74
    -# There are a few different types of pipelines. Among them:
    
    75
    -#
    
    76
    -# 1. marge-bot merges to `master`. Here we perform an exhaustive validation
    
    77
    -#    across all of the platforms which we support. In addition, we push
    
    78
    -#    performance metric notes upstream, providing a persistent record of the
    
    79
    -#    performance characteristics of the compiler.
    
    80
    -#
    
    81
    -# 2. merge requests. Here we perform a slightly less exhaustive battery of
    
    82
    -#    testing. Namely we omit some configurations (e.g. the unregisterised job).
    
    83
    -#    These use the merge request's base commit for performance metric
    
    84
    -#    comparisons.
    
    85
    -#
    
    86
    -# These and other pipelines are defined implicitly by the rules of individual
    
    87
    -# jobs.
    
    88
    -#
    
    89
    -# At the top level, however, we can declare that pipelines (of whatever type)
    
    90
    -# only run when:
    
    91
    -#
    
    92
    -# 1. Processing a merge request (as mentioned above)
    
    93
    -#
    
    94
    -# 2. Processing a tag
    
    95
    -#
    
    96
    -# 3. Pushing to master on the root ghc/ghc repo (as mentioned above)
    
    97
    -#
    
    98
    -# 4. Pushing to a release branch on the root ghc/ghc repo
    
    99
    -#
    
    100
    -# 5. Somebody manually triggers a pipeline from the GitLab UI
    
    101
    -#
    
    102
    -# In particular, note that pipelines don't automatically run just when changes
    
    103
    -# are pushed to a feature branch.
    
    104
    -workflow:
    
    105
    -  rules:
    
    106
    -    - if: $CI_MERGE_REQUEST_ID
    
    107
    -    - if: $CI_COMMIT_TAG
    
    108
    -    # N.B.: If we weren't explicit about CI_PROJECT_ID, the following rule would
    
    109
    -    # cause a duplicate pipeline for merge requests coming from the master
    
    110
    -    # branch of a fork.
    
    111
    -    - if: $CI_PROJECT_ID == "1" && $CI_COMMIT_BRANCH == "master"
    
    112
    -    - if: $CI_PROJECT_ID == "1" && $CI_COMMIT_BRANCH =~ /ghc-[0-9]+\.[0-9]+/
    
    113
    -    - if: '$CI_PIPELINE_SOURCE == "web"'
    
    114
    -
    
    115
    -# which versions of GHC to allow bootstrap with
    
    116
    -.bootstrap_matrix : &bootstrap_matrix
    
    117
    -  matrix:
    
    118
    -    # If you update this version, be sure to also update 'MinBootGhcVersion' in configure.ac
    
    119
    -    - GHC_VERSION: 9.10.3
    
    120
    -      DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13-ghc9_10:$DOCKER_REV"
    
    121
    -    - GHC_VERSION: 9.12.2
    
    122
    -      DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13-ghc9_12:$DOCKER_REV"
    
    123
    -    - GHC_VERSION: 9.14.1
    
    124
    -      DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13-ghc9_14:$DOCKER_REV"
    
    125
    -
    
    126
    -# Allow linters to fail on draft MRs.
    
    127
    -# This must be explicitly transcluded in lint jobs which
    
    128
    -# override `rules:`
    
    129
    -.drafts-can-fail-lint: &drafts-can-fail-lint
    
    130
    -  if: "$CI_MERGE_REQUEST_TITLE =~ /^\\s*(Draft|wip|WIP):/"
    
    131
    -  allow_failure: true
    
    132
    -
    
    133
    -.lint:
    
    134
    -  stage: tool-lint
    
    135
    -  tags:
    
    136
    -    - lint
    
    137
    -  rules:
    
    138
    -    - *drafts-can-fail-lint
    
    139
    -    - when: always
    
    140
    -
    
    141
    -.nightly: &nightly
    
    142
    -  variables:
    
    143
    -    XZ_OPT: "-9"
    
    144
    -  rules:
    
    145
    -    - if: $NIGHTLY
    
    146
    -  artifacts:
    
    147
    -    when: always
    
    148
    -    expire_in: 8 weeks
    
    149
    -
    
    150
    -.release: &release
    
    151
    -  variables:
    
    152
    -    BUILD_FLAVOUR: "release"
    
    153
    -    XZ_OPT: "-9"
    
    154
    -    IGNORE_PERF_FAILURES: "all"
    
    155
    -    HADDOCK_HYPERLINKED_SOURCES: "YES"
    
    156
    -  artifacts:
    
    157
    -    when: always
    
    158
    -    expire_in: 1 year
    
    159
    -  rules:
    
    160
    -    - if: '$RELEASE_JOB == "yes"'
    
    161
    -
    
    162
    -.full-ci: &full-ci
    
    163
    -  - if: '$CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/'
    
    164
    -  - if: '$CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/'
    
    165
    -  - if: '$CI_COMMIT_BRANCH == "master"'
    
    166
    -  - if: '$CI_COMMIT_BRANCH =~ /ghc-[0-9]+\.[0-9]+/'
    
    167
    -
    
    168
    -############################################################
    
    169
    -# Runner Tags
    
    170
    -############################################################
    
    171
    -#
    
    172
    -# * x86_64-linux: Any Docker-capable x86_64 Linux machine
    
    173
    -# * aarch64-linux: Any Docker-capable AArch64 Linux machine
    
    174
    -# * x86_64-windows: A x86_64 Windows machine
    
    175
    -# * lint: Any Docker-capable x86_64 Linux machine; distinct from
    
    176
    -#         x86_64-linux to ensure low-latency availability.
    
    177
    -#
    
    178
    -
    
    179
    -####
    
    180
    -# HACK
    
    181
    -###
    
    182
    -#
    
    183
    -# Since 58cfcc65 the default for jobs has been "interruptible", this means
    
    184
    -# that when new commits are pushed to a branch which already has a running
    
    185
    -# pipeline then the old pipelines for this branch are cancelled.
    
    186
    -#
    
    187
    -# This includes the master branch, and in particular, new commits merged
    
    188
    -# to the master branch will cancel the nightly job.
    
    189
    -#
    
    190
    -# The semantics of pipeline cancelling are actually a bit more complicated
    
    191
    -# though. The interruptible flag is *per job*, but once a pipeline has run
    
    192
    -# *any* non-interruptible job, then the whole pipeline is considered
    
    193
    -# non-interruptible (ref
    
    194
    -# https://gitlab.com/gitlab-org/gitlab/-/issues/32837). This leads to the
    
    195
    -# hack in this MR where by default all jobs are `interruptible: True`, but
    
    196
    -# for pipelines we definitely want to run, there is a dummy job which
    
    197
    -# happens first, which is `interreuptible: False`. This has the effect of
    
    198
    -# dirtying the whole pipeline and
    
    199
    -#
    
    200
    -# For now, this patch solves the immediate problem of making sure nightly
    
    201
    -# jobs are not cancelled.
    
    202
    -# In the future, we may want to enable this job also for the master
    
    203
    -# branch, making that change might mean we need more CI capacity than
    
    204
    -# currently available.
    
    205
    -
    
    206
    -
    
    207
    -not-interruptible:
    
    208
    -  stage: not-interruptible
    
    209
    -  script: "true"
    
    210
    -  interruptible: false
    
    211
    -  image: "debian:13"
    
    212
    -  variables:
    
    213
    -    GIT_STRATEGY: none
    
    214
    -  tags:
    
    215
    -    - lint
    
    216
    -  rules:
    
    217
    -#   - if: '$CI_COMMIT_BRANCH == "master"'
    
    218
    -#      when: always
    
    219
    -    - if: $NIGHTLY
    
    220
    -      when: always
    
    221
    -
    
    222
    -
    
    223
    -############################################################
    
    224
    -# Validate jobs
    
    225
    -############################################################
    
    63
    +  - build
    
    226 64
     
    
    227 65
     # These jobs are generated by running the ./.gitlab/generate_jobs script
    
    228 66
     include: '.gitlab/jobs.yaml'
    229
    -
    
    230
    -############################################################
    
    231
    -# tool linting
    
    232
    -############################################################
    
    233
    -
    
    234
    -ghc-linters:
    
    235
    -  stage: tool-lint
    
    236
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    237
    -  extends: .lint-params
    
    238
    -  variables:
    
    239
    -    BUILD_FLAVOUR: default
    
    240
    -  script:
    
    241
    -    - .gitlab/ci.sh configure
    
    242
    -    - timeout 10m .gitlab/ci.sh run_hadrian test --test-root-dirs="testsuite/tests/linters"
    
    243
    -  dependencies: []
    
    244
    -  rules:
    
    245
    -    - if: $CI_MERGE_REQUEST_ID
    
    246
    -    - *drafts-can-fail-lint
    
    247
    -
    
    248
    -# Check that MRs include a changelog entry in changelog.d/.
    
    249
    -# Skipped if the MR has the ~"no-changelog" label.
    
    250
    -lint-changelog:
    
    251
    -  stage: tool-lint
    
    252
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    253
    -  extends: .lint-params
    
    254
    -  variables:
    
    255
    -    BUILD_FLAVOUR: default
    
    256
    -    CHANGELOG_EXPECT_MR: "$CI_MERGE_REQUEST_IID"
    
    257
    -  script:
    
    258
    -    # Check that the MR adds at least one changelog entry
    
    259
    -    - git fetch "$CI_MERGE_REQUEST_PROJECT_URL" "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"
    
    260
    -    - base="$(git merge-base FETCH_HEAD $CI_COMMIT_SHA)"
    
    261
    -    - added=$(git diff --name-only --diff-filter=A "$base..$CI_COMMIT_SHA" -- 'changelog.d/' | grep -v '^changelog.d/config$' || true)
    
    262
    -    - |
    
    263
    -      if [ -z "$added" ]; then
    
    264
    -        echo "ERROR: No changelog entry found in changelog.d/"
    
    265
    -        echo "Please add a changelog entry file describing your user-facing changes."
    
    266
    -        echo "If this MR does not need a changelog entry, apply the 'no-changelog' label."
    
    267
    -        exit 1
    
    268
    -      fi
    
    269
    -    - echo "Found changelog entries:" $added
    
    270
    -    # Build changelog-d and validate all entries (checks required fields, section names, MR number)
    
    271
    -    - .gitlab/ci.sh configure
    
    272
    -    - .gitlab/ci.sh run_hadrian test --test-root-dirs="testsuite/tests/linters" --only=changelog-d
    
    273
    -  dependencies: []
    
    274
    -  rules:
    
    275
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/'
    
    276
    -      when: never
    
    277
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*no-changelog.*/'
    
    278
    -      when: never
    
    279
    -    - if: $CI_MERGE_REQUEST_ID
    
    280
    -    - *drafts-can-fail-lint
    
    281
    -
    
    282
    -# Run mypy Python typechecker on linter scripts.
    
    283
    -lint-linters:
    
    284
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
    
    285
    -  extends: .lint
    
    286
    -  script:
    
    287
    -    - mypy testsuite/tests/linters/regex-linters/*.py
    
    288
    -  dependencies: []
    
    289
    -
    
    290
    -# Check that .T files all parse by listing broken tests.
    
    291
    -lint-testsuite:
    
    292
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    293
    -  extends: .lint
    
    294
    -  script:
    
    295
    -    - make -Ctestsuite list_broken TEST_HC=$GHC
    
    296
    -  dependencies: []
    
    297
    -
    
    298
    -# Run mypy Python typechecker on testsuite driver
    
    299
    -typecheck-testsuite:
    
    300
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
    
    301
    -  extends: .lint
    
    302
    -  script:
    
    303
    -    - mypy testsuite/driver/runtests.py
    
    304
    -  dependencies: []
    
    305
    -
    
    306
    -# We allow the submodule checker to fail when run on merge requests (to
    
    307
    -# accommodate, e.g., haddock changes not yet upstream) but not on `master` or
    
    308
    -# Marge jobs.
    
    309
    -.lint-submods:
    
    310
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    311
    -  extends: .lint-params
    
    312
    -  variables:
    
    313
    -    BUILD_FLAVOUR: default
    
    314
    -  script:
    
    315
    -    - .gitlab/ci.sh configure
    
    316
    -    - .gitlab/ci.sh run_hadrian stage0:exe:lint-submodule-refs
    
    317
    -    - git fetch "$CI_MERGE_REQUEST_PROJECT_URL" $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
    
    318
    -    - base="$(git merge-base FETCH_HEAD $CI_COMMIT_SHA)"
    
    319
    -    - "echo Linting submodule changes between $base..$CI_COMMIT_SHA"
    
    320
    -    - git submodule foreach git remote update
    
    321
    -    - _build/stageBoot/bin/lint-submodule-refs . $(git rev-list $base..$CI_COMMIT_SHA)
    
    322
    -  dependencies: []
    
    323
    -
    
    324
    -# We allow the submodule checker to fail when run on merge requests (to
    
    325
    -# accommodate, e.g., haddock changes not yet upstream) but not on `master` or
    
    326
    -# Marge jobs.
    
    327
    -lint-author:
    
    328
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    329
    -  extends: .lint-params
    
    330
    -  variables:
    
    331
    -    BUILD_FLAVOUR: default
    
    332
    -  script:
    
    333
    -    - git fetch "$CI_MERGE_REQUEST_PROJECT_URL" $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
    
    334
    -    - base="$(git merge-base FETCH_HEAD $CI_COMMIT_SHA)"
    
    335
    -    - "echo Linting authors between $base..$CI_COMMIT_SHA"
    
    336
    -    - .gitlab/ci.sh lint_author $base $CI_COMMIT_SHA
    
    337
    -  dependencies: []
    
    338
    -  rules:
    
    339
    -    - if: $CI_MERGE_REQUEST_ID
    
    340
    -    - *drafts-can-fail-lint
    
    341
    -
    
    342
    -lint-ci-config:
    
    343
    -  image: nixos/nix:2.25.2
    
    344
    -  extends: .lint
    
    345
    -  # We don't need history/submodules in this job
    
    346
    -  variables:
    
    347
    -    GIT_DEPTH: 1
    
    348
    -    GIT_SUBMODULE_STRATEGY: none
    
    349
    -  before_script:
    
    350
    -    - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf
    
    351
    -    # Note [Nix-in-Docker]
    
    352
    -    # ~~~~~~~~~~~~~~~~~~~~
    
    353
    -    # The nixos/nix default config is max-jobs=1 and cores=$(logical
    
    354
    -    # cores num) which doesn't play nice with our $CPUS convention. We
    
    355
    -    # fix it before invoking any nix build to avoid oversubscribing
    
    356
    -    # while allowing a reasonable degree of parallelism.
    
    357
    -    # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See
    
    358
    -    # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for
    
    359
    -    # discussion.
    
    360
    -    - echo "cores = $CPUS" >> /etc/nix/nix.conf
    
    361
    -    - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf
    
    362
    -    - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf
    
    363
    -  script:
    
    364
    -    - nix run .gitlab/generate-ci#generate-jobs
    
    365
    -    # 1 if .gitlab/generate_jobs changed the output of the generated config
    
    366
    -    - nix shell nixpkgs#git -c git diff --exit-code
    
    367
    -    # And run this to generate the .gitlab/jobs-metadata.json
    
    368
    -    - nix run .gitlab/generate-ci#generate-job-metadata
    
    369
    -  artifacts:
    
    370
    -    when: always
    
    371
    -    paths:
    
    372
    -      - .gitlab/jobs-metadata.json
    
    373
    -      - .gitlab/jobs.yaml
    
    374
    -  dependencies: []
    
    375
    -
    
    376
    -lint-submods:
    
    377
    -  extends: .lint-submods
    
    378
    -  # Allow failure on merge requests since any necessary submodule patches may
    
    379
    -  # not be upstreamed yet.
    
    380
    -  rules:
    
    381
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/'
    
    382
    -      allow_failure: false
    
    383
    -    # Don't run on nightly because the program needs a base commit to check.
    
    384
    -    - if: $NIGHTLY
    
    385
    -      when: never
    
    386
    -    - allow_failure: true
    
    387
    -
    
    388
    -lint-submods-branch:
    
    389
    -  extends: .lint-submods
    
    390
    -  variables:
    
    391
    -    BUILD_FLAVOUR: default
    
    392
    -  script:
    
    393
    -    - .gitlab/ci.sh configure
    
    394
    -    - .gitlab/ci.sh run_hadrian stage0:exe:lint-submodule-refs
    
    395
    -    - "echo Linting submodule changes between $CI_COMMIT_BEFORE_SHA..$CI_COMMIT_SHA"
    
    396
    -    - git submodule foreach git remote update
    
    397
    -    - _build/stageBoot/bin/lint-submodule-refs . $(git rev-list $CI_COMMIT_BEFORE_SHA..$CI_COMMIT_SHA)
    
    398
    -  rules:
    
    399
    -    - if: '$CI_COMMIT_BRANCH == "master"'
    
    400
    -    - if: '$CI_COMMIT_BRANCH =~ /ghc-[0.9]+\.[0-9]+/'
    
    401
    -    - *drafts-can-fail-lint
    
    402
    -
    
    403
    -############################################################
    
    404
    -# GHC source code linting
    
    405
    -############################################################
    
    406
    -
    
    407
    -.lint-params:
    
    408
    -  needs: []
    
    409
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    410
    -  extends: .lint
    
    411
    -  before_script:
    
    412
    -    - export PATH="/opt/toolchain/bin:$PATH"
    
    413
    -    # workaround for docker permissions
    
    414
    -    - sudo chown ghc:ghc -R .
    
    415
    -    - .gitlab/ci.sh setup
    
    416
    -  after_script:
    
    417
    -    - .gitlab/ci.sh save_cache
    
    418
    -    - cat ci_timings.txt
    
    419
    -  variables:
    
    420
    -    GHC_FLAGS: -Werror
    
    421
    -  cache:
    
    422
    -    key: lint-$CACHE_REV
    
    423
    -    paths:
    
    424
    -      - cabal-cache
    
    425
    -
    
    426
    -############################################################
    
    427
    -# GHC-in-GHCi (Hadrian)
    
    428
    -############################################################
    
    429
    -
    
    430
    -hadrian-ghc-in-ghci:
    
    431
    -  stage: quick-build
    
    432
    -  needs:
    
    433
    -    - job: lint-linters
    
    434
    -    - job: lint-submods
    
    435
    -      optional: true
    
    436
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    437
    -  before_script:
    
    438
    -    # workaround for docker permissions
    
    439
    -    - sudo chown ghc:ghc -R .
    
    440
    -  variables:
    
    441
    -    GHC_FLAGS: -Werror -Wwarn=unused-imports
    
    442
    -  tags:
    
    443
    -    - x86_64-linux
    
    444
    -  script:
    
    445
    -    - git clean -xdf && git submodule foreach git clean -xdf
    
    446
    -    - . .gitlab/ci.sh setup
    
    447
    -    - . .gitlab/ci.sh configure
    
    448
    -    # Enable -Werror when building hadrian
    
    449
    -    - "echo 'package hadrian'  > hadrian/cabal.project.local"
    
    450
    -    - "echo '  ghc-options: -Werror'  >> hadrian/cabal.project.local"
    
    451
    -    # Load ghc-in-ghci then immediately exit and check the modules loaded
    
    452
    -    - export CORES="$(mk/detect-cpu-count.sh)"
    
    453
    -    - echo ":q" | HADRIAN_ARGS=-j$CORES hadrian/ghci-multi -j$CORES | tail -n2 | grep "Ok,"
    
    454
    -  after_script:
    
    455
    -    - .gitlab/ci.sh save_cache
    
    456
    -    - cat ci_timings.txt
    
    457
    -  cache:
    
    458
    -    key: hadrian-ghci-$CACHE_REV
    
    459
    -    paths:
    
    460
    -      - cabal-cache
    
    461
    -
    
    462
    -############################################################
    
    463
    -# Hadrian Multi-Repl
    
    464
    -############################################################
    
    465
    -
    
    466
    -hadrian-multi:
    
    467
    -  stage: testing
    
    468
    -  needs:
    
    469
    -    - job: x86_64-linux-deb13-validate
    
    470
    -      optional: true
    
    471
    -    - job: nightly-x86_64-linux-deb13-validate
    
    472
    -      optional: true
    
    473
    -    - job: release-x86_64-linux-deb13-release
    
    474
    -      optional: true
    
    475
    -  dependencies: null
    
    476
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    477
    -  before_script:
    
    478
    -    # workaround for docker permissions
    
    479
    -    - sudo chown ghc:ghc -R .
    
    480
    -  variables:
    
    481
    -    GHC_FLAGS: "-Werror=-Wno-error=incomplete-record-selectors -Wwarn=deprecations -Wwarn=unused-imports"
    
    482
    -       # -Wno-error=incomplete-record-selectors is present because -Wall now
    
    483
    -       # includes -Wincomplete-record-selectors, and hadrian-multi has many, many
    
    484
    -       # warnings about incomplete record selectors.  A better fix would be to
    
    485
    -       # remove the use of incomplete record selectors, since each of them represents
    
    486
    -       # a potential crash.
    
    487
    -    CONFIGURE_ARGS: --enable-bootstrap-with-devel-snapshot
    
    488
    -  tags:
    
    489
    -    - x86_64-linux
    
    490
    -  script:
    
    491
    -    - export BOOT_HC=$GHC
    
    492
    -    - root=$(pwd)/ghc
    
    493
    -    - ls
    
    494
    -    - |
    
    495
    -      mkdir tmp
    
    496
    -      tar -xf ghc-x86_64-linux-deb13-validate.tar.xz -C tmp \
    
    497
    -        || tar -xf ghc-x86_64-linux-deb13-release.tar.xz -C tmp
    
    498
    -      pushd tmp/ghc-*/
    
    499
    -      ./configure --prefix=$root
    
    500
    -      make install
    
    501
    -      popd
    
    502
    -      rm -Rf tmp
    
    503
    -    - export HC=$root/bin/ghc
    
    504
    -    # This GHC means, use this GHC to configure with
    
    505
    -    - export GHC=$root/bin/ghc
    
    506
    -    - . .gitlab/ci.sh setup
    
    507
    -    - . .gitlab/ci.sh configure
    
    508
    -    # Now GHC means, use this GHC for hadrian
    
    509
    -    - export GHC=$BOOT_HC
    
    510
    -    - export CORES="$(mk/detect-cpu-count.sh)"
    
    511
    -    # Load hadrian-multi then immediately exit and check the modules loaded
    
    512
    -    - echo ":q" | HADRIAN_ARGS=-j$CORES hadrian/ghci-multi -j$CORES | tail -n2 | grep "Ok,"
    
    513
    -  after_script:
    
    514
    -    - .gitlab/ci.sh save_cache
    
    515
    -  cache:
    
    516
    -    key: hadrian-ghci-$CACHE_REV
    
    517
    -    paths:
    
    518
    -      - cabal-cache
    
    519
    -  rules:
    
    520
    -    - *full-ci
    
    521
    -
    
    522
    -############################################################
    
    523
    -# stack-hadrian-build
    
    524
    -############################################################
    
    525
    -
    
    526
    -# Verify that Hadrian builds with stack. Note that we don't actually perform a
    
    527
    -# build of GHC itself; we merely test that the Hadrian executable builds and
    
    528
    -# works (by invoking `hadrian --version`).
    
    529
    -stack-hadrian-build:
    
    530
    -  extends: hadrian-ghc-in-ghci
    
    531
    -  stage: quick-build
    
    532
    -  script:
    
    533
    -    - . .gitlab/ci.sh setup
    
    534
    -    - . .gitlab/ci.sh configure
    
    535
    -    - hadrian/build-stack --version
    
    536
    -
    
    537
    -####################################
    
    538
    -# Testing reinstallable ghc codepath
    
    539
    -####################################
    
    540
    -
    
    541
    -test-cabal-reinstall-x86_64-linux-deb13:
    
    542
    -  extends: nightly-x86_64-linux-deb13-validate
    
    543
    -  stage: full-build
    
    544
    -  variables:
    
    545
    -    REINSTALL_GHC: "yes"
    
    546
    -    BUILD_FLAVOUR: validate
    
    547
    -    TEST_ENV: "x86_64-linux-deb13-cabal-install"
    
    548
    -  rules:
    
    549
    -    - if: $NIGHTLY
    
    550
    -      allow_failure: true
    
    551
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-reinstall.*/'
    
    552
    -
    
    553
    -########################################
    
    554
    -# Testing ABI is invariant across builds
    
    555
    -########################################
    
    556
    -
    
    557
    -abi-test-nightly:
    
    558
    -  stage: full-build
    
    559
    -  needs:
    
    560
    -    - job: nightly-x86_64-linux-fedora43-release-hackage
    
    561
    -    - job: nightly-x86_64-linux-fedora43-release
    
    562
    -  tags:
    
    563
    -    - x86_64-linux
    
    564
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    565
    -  dependencies: null
    
    566
    -  before_script:
    
    567
    -    - mkdir -p normal
    
    568
    -    - mkdir -p hackage
    
    569
    -    - tar -xf ghc-x86_64-linux-fedora43-release.tar.xz -C normal/
    
    570
    -    - tar -xf ghc-x86_64-linux-fedora43-release-hackage_docs.tar.xz -C hackage/
    
    571
    -  script:
    
    572
    -    - .gitlab/ci.sh compare_interfaces_of "normal/ghc-*" "hackage/ghc-*"
    
    573
    -  artifacts:
    
    574
    -    paths:
    
    575
    -      - out
    
    576
    -  rules:
    
    577
    -    # This job is broken. Disabling it until some kind soul can finish its
    
    578
    -    # implementation. #23269
    
    579
    -    - when: never
    
    580
    -    - if: $NIGHTLY
    
    581
    -
    
    582
    -############################################################
    
    583
    -# Packaging
    
    584
    -############################################################
    
    585
    -
    
    586
    -doc-tarball:
    
    587
    -  stage: packaging
    
    588
    -  needs:
    
    589
    -    - job: x86_64-linux-deb13-numa-slow-validate
    
    590
    -      optional: true
    
    591
    -    - job: nightly-x86_64-linux-deb13-validate
    
    592
    -      optional: true
    
    593
    -    - job: release-x86_64-linux-deb13-release
    
    594
    -      optional: true
    
    595
    -
    
    596
    -    - job: x86_64-windows-validate
    
    597
    -      optional: true
    
    598
    -    - job: nightly-x86_64-windows-validate
    
    599
    -      optional: true
    
    600
    -    - job: release-x86_64-windows-release
    
    601
    -      optional: true
    
    602
    -
    
    603
    -  tags:
    
    604
    -    - x86_64-linux
    
    605
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    606
    -  dependencies: null
    
    607
    -  variables:
    
    608
    -    LINUX_BINDIST: "ghc-x86_64-linux-deb13.tar.xz"
    
    609
    -    WINDOWS_BINDIST: "ghc-x86_64-windows.tar.xz"
    
    610
    -  artifacts:
    
    611
    -    expose_as: "Documentation Preview"
    
    612
    -    paths:
    
    613
    -      - haddock.html.tar.xz
    
    614
    -      - docs/haddock/
    
    615
    -      - libraries.html.tar.xz
    
    616
    -      - docs/libraries/
    
    617
    -      - users_guide.html.tar.xz
    
    618
    -      - docs/users_guide/
    
    619
    -      - docs/index.html
    
    620
    -      - Haddock.pdf
    
    621
    -      - users_guide.pdf
    
    622
    -  script:
    
    623
    -    - |
    
    624
    -      mv "ghc-x86_64-linux-deb13-numa-slow-validate.tar.xz" "$LINUX_BINDIST" \
    
    625
    -        || mv "ghc-x86_64-linux-deb13-validate.tar.xz" "$LINUX_BINDIST" \
    
    626
    -        || mv "ghc-x86_64-linux-deb13-release.tar.xz" "$LINUX_BINDIST" \
    
    627
    -        || true
    
    628
    -      mv "ghc-x86_64-windows-validate.tar.xz" "$WINDOWS_BINDIST" \
    
    629
    -        || mv "ghc-x86_64-windows-release.tar.xz" "$WINDOWS_BINDIST" \
    
    630
    -        || true
    
    631
    -      if [ ! -f "$LINUX_BINDIST" ]; then
    
    632
    -        echo "Error: $LINUX_BINDIST does not exist. Did the Debian job fail?"
    
    633
    -        exit 1
    
    634
    -      fi
    
    635
    -      if [ ! -f "$WINDOWS_BINDIST" ]; then
    
    636
    -        echo "Error: $WINDOWS_BINDIST does not exist. Did the 64-bit Windows job fail?"
    
    637
    -        exit 1
    
    638
    -      fi
    
    639
    -    - rm -Rf docs
    
    640
    -    - bash -ex distrib/mkDocs/mkDocs $LINUX_BINDIST $WINDOWS_BINDIST
    
    641
    -    - mv docs/*.tar.xz docs/*.pdf .
    
    642
    -    - ls -lh
    
    643
    -
    
    644
    -hackage-doc-tarball:
    
    645
    -  stage: packaging
    
    646
    -  needs:
    
    647
    -    - job: nightly-x86_64-linux-fedora43-release-hackage
    
    648
    -      optional: true
    
    649
    -    - job: release-x86_64-linux-fedora43-release-hackage
    
    650
    -      optional: true
    
    651
    -    - job: source-tarball
    
    652
    -  tags:
    
    653
    -    - x86_64-linux
    
    654
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    655
    -  dependencies: null
    
    656
    -  variables:
    
    657
    -    # Don't clone the git repo..
    
    658
    -    GIT_STRATEGY: none
    
    659
    -    # Don't attempt to boot a source tarball
    
    660
    -    NO_BOOT: "1"
    
    661
    -  artifacts:
    
    662
    -    paths:
    
    663
    -      - hackage_docs
    
    664
    -  before_script:
    
    665
    -    - tar -xf ghc-*[0-9]-src.tar.xz
    
    666
    -    - tar -xf ghc-x86_64-linux-fedora43-release.tar.xz -C ghc*/
    
    667
    -  script:
    
    668
    -    - cd ghc*/
    
    669
    -    - mv .gitlab/rel_eng/upload_ghc_libs.py .
    
    670
    -    - . .gitlab/ci.sh setup
    
    671
    -    - . .gitlab/ci.sh configure
    
    672
    -    - ./upload_ghc_libs.py prepare --bindist ghc*linux/
    
    673
    -    - mv .upload-libs/docs ../hackage_docs
    
    674
    -  rules:
    
    675
    -    - if: $NIGHTLY
    
    676
    -    - if: '$RELEASE_JOB == "yes"'
    
    677
    -
    
    678
    -source-tarball:
    
    679
    -  stage: full-build
    
    680
    -  needs:
    
    681
    -    - hadrian-ghc-in-ghci
    
    682
    -  tags:
    
    683
    -    - x86_64-linux
    
    684
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    685
    -  dependencies: []
    
    686
    -  artifacts:
    
    687
    -    paths:
    
    688
    -      - ghc-*.tar.xz
    
    689
    -  script:
    
    690
    -    - sudo chown ghc:ghc -R .
    
    691
    -    - . .gitlab/ci.sh setup
    
    692
    -    - . .gitlab/ci.sh configure
    
    693
    -    - ./hadrian/build source-dist
    
    694
    -    - mv _build/source-dist/*.xz  .
    
    695
    -  rules:
    
    696
    -    - if: $NIGHTLY
    
    697
    -    - if: '$RELEASE_JOB == "yes"'
    
    698
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-bootstrap.*/'
    
    699
    -    - *full-ci
    
    700
    -
    
    701
    -generate-hadrian-bootstrap-sources:
    
    702
    -  stage: full-build
    
    703
    -  needs:
    
    704
    -    - hadrian-ghc-in-ghci
    
    705
    -  tags:
    
    706
    -    - x86_64-linux
    
    707
    -  image: "$DOCKER_IMAGE"
    
    708
    -  dependencies: []
    
    709
    -  parallel: *bootstrap_matrix
    
    710
    -  artifacts:
    
    711
    -    paths:
    
    712
    -      - hadrian-bootstrap-sources-*.tar.gz
    
    713
    -  script:
    
    714
    -    - bash -c "[ $($GHC --numeric-version) = $GHC_VERSION ] || { echo $GHC_VERSION is not the same as the version of $GHC && exit 1; }"
    
    715
    -    - python3 ./hadrian/bootstrap/bootstrap.py -w $GHC fetch -o hadrian-bootstrap-sources-$GHC_VERSION
    
    716
    -  rules:
    
    717
    -    - if: $NIGHTLY
    
    718
    -    - if: '$RELEASE_JOB == "yes"'
    
    719
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-bootstrap.*/'
    
    720
    -    - *full-ci
    
    721
    -
    
    722
    -
    
    723
    -package-hadrian-bootstrap-sources:
    
    724
    -  stage: full-build
    
    725
    -  tags:
    
    726
    -    - x86_64-linux
    
    727
    -  needs: ["generate-hadrian-bootstrap-sources"]
    
    728
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    729
    -  artifacts:
    
    730
    -    paths:
    
    731
    -      - hadrian-bootstrap-sources-all.tar.gz
    
    732
    -  script:
    
    733
    -    - tar -czvf hadrian-bootstrap-sources-all.tar.gz hadrian-bootstrap-sources-*.tar.gz
    
    734
    -  rules:
    
    735
    -    - if: $NIGHTLY
    
    736
    -    - if: '$RELEASE_JOB == "yes"'
    
    737
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-bootstrap.*/'
    
    738
    -    - *full-ci
    
    739
    -
    
    740
    -test-bootstrap:
    
    741
    -  stage: full-build
    
    742
    -  needs: [generate-hadrian-bootstrap-sources, source-tarball]
    
    743
    -  tags:
    
    744
    -    - x86_64-linux
    
    745
    -  image: "$DOCKER_IMAGE"
    
    746
    -  parallel: *bootstrap_matrix
    
    747
    -  dependencies: null
    
    748
    -  script:
    
    749
    -    - sudo chown ghc:ghc -R .
    
    750
    -    - mkdir test-bootstrap
    
    751
    -    - tar -xf ghc-*[0-9]-src.tar.xz -C test-bootstrap
    
    752
    -    - tar -xf ghc-*-testsuite.tar.xz -C test-bootstrap
    
    753
    -    - cp hadrian-bootstrap-sources-$GHC_VERSION.tar.gz test-bootstrap/ghc-*
    
    754
    -    - pushd test-bootstrap/ghc-*
    
    755
    -    - python3 ./hadrian/bootstrap/bootstrap.py -w $GHC --bootstrap-sources hadrian-bootstrap-sources-$GHC_VERSION.tar.gz
    
    756
    -    - export HADRIAN_PATH="$PWD/_build/bin/hadrian"
    
    757
    -    - .gitlab/ci.sh setup
    
    758
    -    # Bootstrapping should not depend on HAPPY or ALEX so set them to false
    
    759
    -    # so the build fails if they are invoked.
    
    760
    -    - unset HAPPY; unset ALEX
    
    761
    -    # Check the commands are not available, parens are crucial to start a subshell
    
    762
    -    - (! command -v alex --version)
    
    763
    -    - (! command -v happy --version)
    
    764
    -    - .gitlab/ci.sh configure
    
    765
    -    - .gitlab/ci.sh build_hadrian
    
    766
    -    - .gitlab/ci.sh test_hadrian
    
    767
    -    - popd
    
    768
    -    - rm -Rf test-bootstrap
    
    769
    -  variables:
    
    770
    -    # Don't record performance benchmarks
    
    771
    -    TEST_ENV: ""
    
    772
    -    BIN_DIST_NAME: "ghc-x86_64-deb13-linux"
    
    773
    -    BUILD_FLAVOUR: "validate"
    
    774
    -    NO_BOOT: "1"
    
    775
    -  rules:
    
    776
    -    - if: $NIGHTLY
    
    777
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-bootstrap.*/'
    
    778
    -    - *full-ci
    
    779
    -    - if: '$RELEASE_JOB == "yes"'
    
    780
    -      when: always
    
    781
    -      variables:
    
    782
    -        BUILD_FLAVOUR: "release"
    
    783
    -
    
    784
    -
    
    785
    -############################################################
    
    786
    -# Testing via head.hackage
    
    787
    -############################################################
    
    788
    -
    
    789
    -# Triggering jobs in the ghc/head.hackage project requires that we have a job
    
    790
    -# token for that repository. Furthermore the head.hackage CI job must have
    
    791
    -# access to an unprivileged access token with the ability to query the ghc/ghc
    
    792
    -# project such that it can find the job ID of the fedora43 job for the current
    
    793
    -# pipeline.
    
    794
    -#
    
    795
    -# hackage-lint: Can be triggered on any MR, normal validate pipeline or nightly build.
    
    796
    -#               Runs head.hackage with -dlint and a slow-validate bindist
    
    797
    -#
    
    798
    -# hackage-label-lint: Trigged on MRs with "user-facing" label, runs the slow-validate
    
    799
    -#                     head.hackage build with -dlint.
    
    800
    -#
    
    801
    -# nightly-hackage-lint: Runs automatically on nightly pipelines with slow-validate + dlint config.
    
    802
    -#
    
    803
    -# nightly-hackage-perf: Runs automaticaly on nightly pipelines with release build and eventlogging enabled.
    
    804
    -#
    
    805
    -# release-hackage-lint: Runs automatically on release pipelines with -dlint on a release bindist.
    
    806
    -
    
    807
    -.hackage:
    
    808
    -  stage: testing
    
    809
    -  variables:
    
    810
    -    UPSTREAM_PROJECT_PATH: "$CI_PROJECT_PATH"
    
    811
    -    UPSTREAM_PROJECT_ID: "$CI_PROJECT_ID"
    
    812
    -    UPSTREAM_PIPELINE_ID: "$CI_PIPELINE_ID"
    
    813
    -    RELEASE_JOB: "$RELEASE_JOB"
    
    814
    -  trigger:
    
    815
    -    project: "ghc/head.hackage"
    
    816
    -    branch: "upstream-testing"
    
    817
    -    strategy: "depend"
    
    818
    -
    
    819
    -hackage-lint:
    
    820
    -  needs:
    
    821
    -    - job: x86_64-linux-deb13-numa-slow-validate
    
    822
    -      optional: true
    
    823
    -      artifacts: false
    
    824
    -    - job: nightly-x86_64-linux-deb13-numa-slow-validate
    
    825
    -      optional: true
    
    826
    -      artifacts: false
    
    827
    -    - job: nightly-aarch64-linux-deb13-validate
    
    828
    -      optional: true
    
    829
    -      artifacts: false
    
    830
    -    - job: aarch64-linux-deb13-validate
    
    831
    -      optional: true
    
    832
    -      artifacts: false
    
    833
    -  extends: .hackage
    
    834
    -  variables:
    
    835
    -    SLOW_VALIDATE: 1
    
    836
    -    EXTRA_HC_OPTS: "-dlint"
    
    837
    -  # No for release jobs because there isn't a slow-valdate bindist. There is an
    
    838
    -  # automatic pipeline for release bindists (see release-hackage-lint)
    
    839
    -  rules:
    
    840
    -    - if: '$RELEASE_JOB != "yes"'
    
    841
    -  when: manual
    
    842
    -
    
    843
    -hackage-label-lint:
    
    844
    -  needs:
    
    845
    -    - job: x86_64-linux-deb13-numa-slow-validate
    
    846
    -      optional: true
    
    847
    -      artifacts: false
    
    848
    -    - job: aarch64-linux-deb13-validate
    
    849
    -      optional: true
    
    850
    -      artifacts: false
    
    851
    -  extends: .hackage
    
    852
    -  variables:
    
    853
    -    SLOW_VALIDATE: 1
    
    854
    -    EXTRA_HC_OPTS: "-dlint"
    
    855
    -  rules:
    
    856
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*user-facing.*/'
    
    857
    -
    
    858
    -# The head.hackage job is split into two jobs because enabling `-dlint`
    
    859
    -# affects the total allocation numbers for the simplifier portion significantly.
    
    860
    -nightly-hackage-lint:
    
    861
    -  needs:
    
    862
    -    - job: nightly-x86_64-linux-deb13-numa-slow-validate
    
    863
    -      optional: true
    
    864
    -      artifacts: false
    
    865
    -    - job: nightly-aarch64-linux-deb13-validate
    
    866
    -      optional: true
    
    867
    -      artifacts: false
    
    868
    -  rules:
    
    869
    -    - if: $NIGHTLY
    
    870
    -      variables:
    
    871
    -        NIGHTLY: "$NIGHTLY"
    
    872
    -  extends: .hackage
    
    873
    -  variables:
    
    874
    -    SLOW_VALIDATE: 1
    
    875
    -    EXTRA_HC_OPTS: "-dlint"
    
    876
    -
    
    877
    -nightly-hackage-perf:
    
    878
    -  needs:
    
    879
    -    - job: nightly-x86_64-linux-fedora43-release
    
    880
    -      optional: true
    
    881
    -      artifacts: false
    
    882
    -    - job: nightly-aarch64-linux-deb13-validate
    
    883
    -      optional: true
    
    884
    -      artifacts: false
    
    885
    -  rules:
    
    886
    -    - if: $NIGHTLY
    
    887
    -      variables:
    
    888
    -        NIGHTLY: "$NIGHTLY"
    
    889
    -  extends: .hackage
    
    890
    -  variables:
    
    891
    -    # Generate logs for nightly builds which include timing information.
    
    892
    -    EXTRA_HC_OPTS: "-ddump-timings"
    
    893
    -    # Ask head.hackage to generate eventlogs
    
    894
    -    EVENTLOGGING: 1
    
    895
    -
    
    896
    -release-hackage-lint:
    
    897
    -  needs:
    
    898
    -    - job: release-x86_64-linux-fedora43-release
    
    899
    -      optional: true
    
    900
    -      artifacts: false
    
    901
    -    - job: release-aarch64-linux-deb13-release+no_split_sections
    
    902
    -      optional: true
    
    903
    -      artifacts: false
    
    904
    -  rules:
    
    905
    -    - if: '$RELEASE_JOB == "yes"'
    
    906
    -  extends: .hackage
    
    907
    -  # The ghcup metadata pipeline requires all prior jobs to
    
    908
    -  # pass. The hackage job can easily fail due to API changes
    
    909
    -  # or similar - so we allow it to fail.
    
    910
    -  allow_failure: true
    
    911
    -  variables:
    
    912
    -    # No slow-validate bindist on release pipeline
    
    913
    -    EXTRA_HC_OPTS: "-dlint"
    
    914
    -
    
    915
    -############################################################
    
    916
    -# Testing via test-primops
    
    917
    -############################################################
    
    918
    -
    
    919
    -# Triggering jobs in the ghc/test-primops project
    
    920
    -
    
    921
    -.test-primops:
    
    922
    -  stage: testing
    
    923
    -  variables:
    
    924
    -    UPSTREAM_PROJECT_PATH: "$CI_PROJECT_PATH"
    
    925
    -    UPSTREAM_PROJECT_ID: "$CI_PROJECT_ID"
    
    926
    -    UPSTREAM_PIPELINE_ID: "$CI_PIPELINE_ID"
    
    927
    -  trigger:
    
    928
    -    project: "ghc/test-primops"
    
    929
    -    branch: "upstream-testing"
    
    930
    -    strategy: "depend"
    
    931
    -
    
    932
    -.test-primops-validate-template:
    
    933
    -  needs:
    
    934
    -    - job: x86_64-linux-deb13-validate
    
    935
    -      artifacts: false
    
    936
    -    - job: aarch64-linux-deb13-validate
    
    937
    -      artifacts: false
    
    938
    -    - job: aarch64-darwin-validate
    
    939
    -      artifacts: false
    
    940
    -    - job: x86_64-darwin-validate
    
    941
    -      artifacts: false
    
    942
    -  extends: .test-primops
    
    943
    -
    
    944
    -test-primops-label:
    
    945
    -  extends: .test-primops-validate-template
    
    946
    -  rules:
    
    947
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-primops.*/'
    
    948
    -      # We do not use *.full-ci here since that would imply running in nightly
    
    949
    -      # where we do not have the normal validate jobs. We have the -nightly job
    
    950
    -      # below to handle this case.
    
    951
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/'
    
    952
    -
    
    953
    -test-primops-nightly:
    
    954
    -  extends: .test-primops
    
    955
    -  needs:
    
    956
    -    - job: nightly-x86_64-linux-deb13-validate
    
    957
    -      artifacts: false
    
    958
    -    - job: nightly-aarch64-linux-deb13-validate
    
    959
    -      artifacts: false
    
    960
    -    - job: nightly-aarch64-darwin-validate
    
    961
    -      artifacts: false
    
    962
    -    - job: nightly-x86_64-darwin-validate
    
    963
    -      artifacts: false
    
    964
    -  rules:
    
    965
    -    - if: $NIGHTLY
    
    966
    -
    
    967
    -test-primops-release:
    
    968
    -  extends: .test-primops
    
    969
    -  rules:
    
    970
    -    - if: '$RELEASE_JOB == "yes"'
    
    971
    -
    
    972
    -############################################################
    
    973
    -# Nofib testing
    
    974
    -# (Disabled: See #21859)
    
    975
    -############################################################
    
    976
    -
    
    977
    -perf-nofib:
    
    978
    -  # Dependencies used by perf-nofib can't be built when some compiler changes
    
    979
    -  # aren't (yet) supported by head.hackage.
    
    980
    -  # Hence we allow this job to fail.
    
    981
    -  allow_failure: true
    
    982
    -  stage: testing
    
    983
    -  needs:
    
    984
    -    - job: x86_64-linux-fedora43-release
    
    985
    -      optional: true
    
    986
    -    - job: nightly-x86_64-linux-fedora43-release
    
    987
    -      optional: true
    
    988
    -    - job: release-x86_64-linux-fedora43-release
    
    989
    -      optional: true
    
    990
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    991
    -  rules:
    
    992
    -    - when: never
    
    993
    -    - *full-ci
    
    994
    -  tags:
    
    995
    -    - x86_64-linux
    
    996
    -  before_script:
    
    997
    -    - cd nofib
    
    998
    -    - "cabal update --index=$HACKAGE_INDEX_STATE --project-file=cabal.project.head-hackage"
    
    999
    -  script:
    
    1000
    -    - root=$(pwd)/ghc
    
    1001
    -    - |
    
    1002
    -      mkdir tmp
    
    1003
    -      tar -xf ../ghc-x86_64-linux-fedora43-release.tar.xz -C tmp
    
    1004
    -      pushd tmp/ghc-*/
    
    1005
    -      ./configure --prefix=$root
    
    1006
    -      make install
    
    1007
    -      popd
    
    1008
    -      rm -Rf tmp
    
    1009
    -    - export PATH=$root/bin:$PATH
    
    1010
    -    - cabal install -w "$root/bin/ghc" --lib regex-compat unboxed-ref parallel random-1.2.1 --allow-newer --package-env local.env --project-file=cabal.project.head-hackage
    
    1011
    -    - export GHC_ENVIRONMENT="$(pwd)/local.env"
    
    1012
    -    - "make HC=$root/bin/ghc BOOT_HC=$root/bin/ghc boot mode=fast -j$CPUS"
    
    1013
    -    - "make HC=$root/bin/ghc BOOT_HC=$root/bin/ghc EXTRA_RUNTEST_OPTS='-cachegrind +RTS -V0 -RTS' NoFibRuns=1 mode=fast -j$CPUS 2>&1 | tee nofib.log"
    
    1014
    -  artifacts:
    
    1015
    -    expire_in: 12 week
    
    1016
    -    when: always
    
    1017
    -    paths:
    
    1018
    -      - nofib/nofib.log
    
    1019
    -
    
    1020
    -############################################################
    
    1021
    -# Ad-hoc performance testing
    
    1022
    -############################################################
    
    1023
    -
    
    1024
    -perf:
    
    1025
    -  stage: testing
    
    1026
    -  needs:
    
    1027
    -    - job: x86_64-linux-deb13-validate
    
    1028
    -      optional: true
    
    1029
    -    - job: nightly-x86_64-linux-deb13-validate
    
    1030
    -      optional: true
    
    1031
    -    - job: release-x86_64-linux-deb13-release
    
    1032
    -      optional: true
    
    1033
    -  dependencies: null
    
    1034
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    1035
    -  tags:
    
    1036
    -    - x86_64-linux-perf
    
    1037
    -  before_script:
    
    1038
    -    # workaround for docker permissions
    
    1039
    -    - sudo chown ghc:ghc -R .
    
    1040
    -  script:
    
    1041
    -    - root=$(pwd)/ghc
    
    1042
    -    - |
    
    1043
    -      mkdir tmp
    
    1044
    -      tar -xf ghc-x86_64-linux-deb13-validate.tar.xz -C tmp \
    
    1045
    -        || tar -xf ghc-x86_64-linux-deb13-release.tar.xz -C tmp
    
    1046
    -      pushd tmp/ghc-*/
    
    1047
    -      ./configure --prefix=$root
    
    1048
    -      make install
    
    1049
    -      popd
    
    1050
    -      rm -Rf tmp
    
    1051
    -    - export BOOT_HC=$(which ghc)
    
    1052
    -    - export HC=$root/bin/ghc
    
    1053
    -    - .gitlab/ci.sh perf_test
    
    1054
    -  artifacts:
    
    1055
    -    expire_in: 2 year
    
    1056
    -    when: always
    
    1057
    -    paths:
    
    1058
    -      - out
    
    1059
    -  rules:
    
    1060
    -    - *full-ci
    
    1061
    -
    
    1062
    -############################################################
    
    1063
    -# ABI testing
    
    1064
    -############################################################
    
    1065
    -
    
    1066
    -abi-test:
    
    1067
    -  stage: testing
    
    1068
    -  needs:
    
    1069
    -    - job: x86_64-linux-deb13-validate
    
    1070
    -      optional: true
    
    1071
    -    - job: nightly-x86_64-linux-deb13-validate
    
    1072
    -      optional: true
    
    1073
    -    - job: release-x86_64-linux-deb13-release
    
    1074
    -      optional: true
    
    1075
    -  dependencies: null
    
    1076
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    1077
    -  tags:
    
    1078
    -    - x86_64-linux
    
    1079
    -  script:
    
    1080
    -    - root=$(pwd)/ghc
    
    1081
    -    - |
    
    1082
    -      mkdir tmp
    
    1083
    -      tar -xf ghc-x86_64-linux-deb13-validate.tar.xz -C tmp \
    
    1084
    -        || tar -xf ghc-x86_64-linux-deb13-release.tar.xz -C tmp
    
    1085
    -      pushd tmp/ghc-*/
    
    1086
    -      ./configure --prefix=$root
    
    1087
    -      make install
    
    1088
    -      popd
    
    1089
    -      rm -Rf tmp
    
    1090
    -    - export BOOT_HC=$(which ghc)
    
    1091
    -    - export HC=$root/bin/ghc
    
    1092
    -    - .gitlab/ci.sh abi_test
    
    1093
    -  artifacts:
    
    1094
    -    paths:
    
    1095
    -      - out
    
    1096
    -  rules:
    
    1097
    -    - *full-ci
    
    1098
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-abi.*/'
    
    1099
    -
    
    1100
    -############################################################
    
    1101
    -# ghc-wasm-meta integration testing
    
    1102
    -############################################################
    
    1103
    -
    
    1104
    -.ghc-wasm-meta:
    
    1105
    -  stage: testing
    
    1106
    -  variables:
    
    1107
    -    UPSTREAM_GHC_PIPELINE_ID: $CI_PIPELINE_ID
    
    1108
    -    UPSTREAM_GHC_PROJECT_ID: $CI_PROJECT_ID
    
    1109
    -  rules:
    
    1110
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-wasm.*/'
    
    1111
    -  trigger:
    
    1112
    -    project: haskell-wasm/ghc-wasm-meta
    
    1113
    -    branch: master
    
    1114
    -    strategy: depend
    
    1115
    -
    
    1116
    -ghc-wasm-meta-gmp:
    
    1117
    -  extends: .ghc-wasm-meta
    
    1118
    -  needs:
    
    1119
    -    - job: x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1120
    -      artifacts: false
    
    1121
    -  variables:
    
    1122
    -    UPSTREAM_GHC_FLAVOUR: gmp
    
    1123
    -    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1124
    -
    
    1125
    -ghc-wasm-meta-native:
    
    1126
    -  extends: .ghc-wasm-meta
    
    1127
    -  needs:
    
    1128
    -    - job: x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1129
    -      artifacts: false
    
    1130
    -  variables:
    
    1131
    -    UPSTREAM_GHC_FLAVOUR: native
    
    1132
    -    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1133
    -
    
    1134
    -ghc-wasm-meta-unreg:
    
    1135
    -  extends: .ghc-wasm-meta
    
    1136
    -  needs:
    
    1137
    -    - job: x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1138
    -      artifacts: false
    
    1139
    -  variables:
    
    1140
    -    UPSTREAM_GHC_FLAVOUR: unreg
    
    1141
    -    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1142
    -
    
    1143
    -############################################################
    
    1144
    -# Documentation deployment via GitLab Pages
    
    1145
    -############################################################
    
    1146
    -
    
    1147
    -pages:
    
    1148
    -  stage: deploy
    
    1149
    -  needs: [doc-tarball]
    
    1150
    -  dependencies: null
    
    1151
    -  image: "debian:13"
    
    1152
    -  # See #18973
    
    1153
    -  allow_failure: true
    
    1154
    -  tags:
    
    1155
    -    - x86_64-linux
    
    1156
    -  script:
    
    1157
    -    - mkdir -p public/doc
    
    1158
    -    # haddock docs are not in the hadrian produce doc tarballs at the moment
    
    1159
    -    # - tar -xf haddock.html.tar.xz -C public/doc
    
    1160
    -    - tar -xf libraries.html.tar.xz -C public/doc
    
    1161
    -    - tar -xf users_guide.html.tar.xz -C public/doc
    
    1162
    -    - |
    
    1163
    -      cat >public/index.html <<EOF
    
    1164
    -      <!DOCTYPE HTML>
    
    1165
    -      <meta charset="UTF-8">
    
    1166
    -      <meta http-equiv="refresh" content="1; url=doc/">
    
    1167
    -      EOF
    
    1168
    -    - cp -f docs/index.html public/doc
    
    1169
    -  rules:
    
    1170
    -    # N.B. only run this on ghc/ghc since the deployed pages are quite large
    
    1171
    -    # and we only serve GitLab Pages for ghc/ghc.
    
    1172
    -    - if: '$CI_COMMIT_BRANCH == "master" && $CI_PROJECT_NAMESPACE == "ghc"'
    
    1173
    -    - if: '$CI_MERGE_REQUEST_LABELS =~ /.*publish-docs.*/'
    
    1174
    -
    
    1175
    -  artifacts:
    
    1176
    -    paths:
    
    1177
    -      - public
    
    1178
    -
    
    1179
    -#############################################################
    
    1180
    -# Generation of GHCUp metadata
    
    1181
    -#############################################################
    
    1182
    -
    
    1183
    -
    
    1184
    -project-version:
    
    1185
    -  stage: packaging
    
    1186
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV"
    
    1187
    -  tags:
    
    1188
    -    - x86_64-linux
    
    1189
    -  variables:
    
    1190
    -    BUILD_FLAVOUR: default
    
    1191
    -  script:
    
    1192
    -    # Calculate the project version
    
    1193
    -    - sudo chown ghc:ghc -R .
    
    1194
    -    - .gitlab/ci.sh setup
    
    1195
    -    - .gitlab/ci.sh configure
    
    1196
    -    - echo "ProjectVersion=$(cat VERSION)" > version.sh
    
    1197
    -
    
    1198
    -  needs: []
    
    1199
    -  dependencies: []
    
    1200
    -  artifacts:
    
    1201
    -    paths:
    
    1202
    -      - version.sh
    
    1203
    -
    
    1204
    -.ghcup-metadata:
    
    1205
    -  stage: deploy
    
    1206
    -  image: nixos/nix:2.25.2
    
    1207
    -  dependencies: null
    
    1208
    -  tags:
    
    1209
    -    # N.B. we use the OpenCape runners here since this job involves a significant
    
    1210
    -    # amount of artifact fetching. This is much more efficient on these runners
    
    1211
    -    # as they are near the GitLab box.
    
    1212
    -    - opencape
    
    1213
    -    - x86_64-linux
    
    1214
    -  variables:
    
    1215
    -    BUILD_FLAVOUR: default
    
    1216
    -    GIT_SUBMODULE_STRATEGY: "none"
    
    1217
    -  before_script:
    
    1218
    -    - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf
    
    1219
    -    # FIXME: See Note [Nix-in-Docker]
    
    1220
    -    - echo "cores = $CPUS" >> /etc/nix/nix.conf
    
    1221
    -    - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf
    
    1222
    -    - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf
    
    1223
    -    - nix-channel --update
    
    1224
    -    - cat version.sh
    
    1225
    -    # Calculate the project version
    
    1226
    -    - . ./version.sh
    
    1227
    -
    
    1228
    -    # Download existing ghcup metadata for the correct year
    
    1229
    -    - PipelineYear="$(date -d $CI_PIPELINE_CREATED_AT +%Y)"
    
    1230
    -    - nix shell nixpkgs#wget -c wget "https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-$PipelineYear-0.0.7.yaml" -O ghcup-0.0.7.yaml
    
    1231
    -
    
    1232
    -    - nix run .gitlab/generate-ci#generate-job-metadata
    
    1233
    -
    
    1234
    -  artifacts:
    
    1235
    -    paths:
    
    1236
    -      - metadata_test.yaml
    
    1237
    -      - version.sh
    
    1238
    -
    
    1239
    -ghcup-metadata-nightly:
    
    1240
    -  extends: .ghcup-metadata
    
    1241
    -  # Explicit needs for validate pipeline because we only need certain bindists
    
    1242
    -  needs:
    
    1243
    -    - job: nightly-x86_64-linux-fedora43-release
    
    1244
    -      artifacts: false
    
    1245
    -    - job: nightly-x86_64-linux-ubuntu24_04-validate
    
    1246
    -      artifacts: false
    
    1247
    -    - job: nightly-x86_64-linux-ubuntu22_04-validate
    
    1248
    -      artifacts: false
    
    1249
    -    - job: nightly-x86_64-linux-rocky8-validate
    
    1250
    -      artifacts: false
    
    1251
    -    - job: nightly-x86_64-darwin-validate
    
    1252
    -      artifacts: false
    
    1253
    -    - job: nightly-aarch64-darwin-validate
    
    1254
    -      artifacts: false
    
    1255
    -    - job: nightly-x86_64-windows-validate
    
    1256
    -      artifacts: false
    
    1257
    -    - job: nightly-x86_64-linux-alpine3_23-validate
    
    1258
    -      artifacts: false
    
    1259
    -    - job: nightly-i386-linux-deb11-validate
    
    1260
    -      artifacts: false
    
    1261
    -    - job: nightly-i386-linux-deb13-validate
    
    1262
    -      artifacts: false
    
    1263
    -    - job: nightly-i386-linux-alpine3_23-validate
    
    1264
    -      artifacts: false
    
    1265
    -    - job: nightly-aarch64-linux-deb11-validate
    
    1266
    -      artifacts: false
    
    1267
    -    - job: nightly-x86_64-linux-deb11-validate
    
    1268
    -      artifacts: false
    
    1269
    -    - job: nightly-x86_64-linux-deb13-validate
    
    1270
    -      artifacts: false
    
    1271
    -    - job: nightly-aarch64-linux-deb13-validate
    
    1272
    -      artifacts: false
    
    1273
    -    - job: nightly-x86_64-linux-deb12-validate
    
    1274
    -      artifacts: false
    
    1275
    -    - job: nightly-aarch64-linux-alpine3_23-validate
    
    1276
    -      artifacts: false
    
    1277
    -    - job: source-tarball
    
    1278
    -      artifacts: false
    
    1279
    -    - job: project-version
    
    1280
    -  script:
    
    1281
    -    - nix shell -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" > "metadata_test.yaml"
    
    1282
    -  rules:
    
    1283
    -    - if: $NIGHTLY
    
    1284
    -
    
    1285
    -# Update the ghcup metadata with information about this nightly pipeline
    
    1286
    -ghcup-metadata-nightly-push:
    
    1287
    -  stage: deploy
    
    1288
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    1289
    -  dependencies: null
    
    1290
    -  tags:
    
    1291
    -    - x86_64-linux
    
    1292
    -  variables:
    
    1293
    -    BUILD_FLAVOUR: default
    
    1294
    -    GIT_SUBMODULE_STRATEGY: "none"
    
    1295
    -  needs:
    
    1296
    -    - job: ghcup-metadata-nightly
    
    1297
    -      artifacts: true
    
    1298
    -  script:
    
    1299
    -    - git clone https://gitlab.haskell.org/ghc/ghcup-metadata.git
    
    1300
    -    - PipelineYear="$(date -d $CI_PIPELINE_CREATED_AT +%Y)"
    
    1301
    -    - cp metadata_test.yaml "ghcup-metadata/ghcup-nightlies-$PipelineYear-0.0.7.yaml"
    
    1302
    -    - cp metadata_test.yaml "ghcup-metadata/ghcup-nightlies-0.0.7.yaml"
    
    1303
    -    - cd ghcup-metadata
    
    1304
    -    - git config user.email "ghc-ci@gitlab-haskell.org"
    
    1305
    -    - git config user.name "GHC GitLab CI"
    
    1306
    -    - git remote add gitlab_origin https://oauth2:$PROJECT_PUSH_TOKEN@gitlab.haskell.org/ghc/ghcup-metadata.git
    
    1307
    -    - git add .
    
    1308
    -    - git commit -m "Update metadata"
    
    1309
    -    - git push gitlab_origin HEAD:updates
    
    1310
    -  rules:
    
    1311
    -    # Only run the update on scheduled nightly pipelines, ie once a day
    
    1312
    -    - if: $NIGHTLY && $CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == "master"
    
    1313
    -
    
    1314
    -
    
    1315
    -ghcup-metadata-release:
    
    1316
    -  # No explicit needs for release pipeline as we assume we need everything and everything will pass.
    
    1317
    -  extends: .ghcup-metadata
    
    1318
    -  script:
    
    1319
    -    - nix shell -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" --fragment
    
    1320
    -    - nix shell -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" > "metadata_test.yaml"
    
    1321
    -  rules:
    
    1322
    -    - if: '$RELEASE_JOB == "yes"'
    
    1323
    -
    
    1324
    -.ghcup-metadata-testing:
    
    1325
    -  stage: deploy
    
    1326
    -  variables:
    
    1327
    -    UPSTREAM_PROJECT_PATH: "$CI_PROJECT_PATH"
    
    1328
    -    UPSTREAM_PROJECT_ID: "$CI_PROJECT_ID"
    
    1329
    -    UPSTREAM_PIPELINE_ID: "$CI_PIPELINE_ID"
    
    1330
    -    RELEASE_JOB: "$RELEASE_JOB"
    
    1331
    -  # Do not inherit global variables (such as CONFIGURE_ARGS) as these take
    
    1332
    -  # precedence over the variables defined in the downstream job.
    
    1333
    -  inherit:
    
    1334
    -    variables: false
    
    1335
    -  trigger:
    
    1336
    -    project: "ghc/ghcup-ci"
    
    1337
    -    branch: "upstream-testing"
    
    1338
    -    strategy: "depend"
    
    1339
    -    forward:
    
    1340
    -        yaml_variables: true
    
    1341
    -        pipeline_variables: false
    
    1342
    -
    
    1343
    -ghcup-metadata-testing-nightly:
    
    1344
    -  needs:
    
    1345
    -    - job: ghcup-metadata-nightly
    
    1346
    -      artifacts: false
    
    1347
    -  extends: .ghcup-metadata-testing
    
    1348
    -  variables:
    
    1349
    -      NIGHTLY: "$NIGHTLY"
    
    1350
    -      UPSTREAM_JOB_NAME: "ghcup-metadata-nightly"
    
    1351
    -  rules:
    
    1352
    -    - if: '$NIGHTLY == "1"'
    
    1353
    -
    
    1354
    -ghcup-metadata-testing-release:
    
    1355
    -  needs:
    
    1356
    -    - job: ghcup-metadata-release
    
    1357
    -      artifacts: false
    
    1358
    -  extends: .ghcup-metadata-testing
    
    1359
    -  variables:
    
    1360
    -      UPSTREAM_JOB_NAME: "ghcup-metadata-release"
    
    1361
    -  rules:
    
    1362
    -    - if: '$RELEASE_JOB == "yes"'
    
    1363
    -  when: manual