Sven Tennie pushed to branch wip/supersven/cross-compiler-manual-test-jobs at Glasgow Haskell Compiler / GHC Commits: b7a84067 by Sven Tennie at 2026-06-08T11:35:14+00:00 ci: add manually-triggered full-testsuite jobs for cross-compilers For cross-compiler targets with a real emulator (qemu, wine) add a manually-triggered companion job that downloads the bindist artifact from the corresponding build job and runs the full testsuite via a new ci.sh command test_hadrian_cross_full. Changes: - gen_ci.hs: add jobNeedsWithArtifacts field to Job (needs with artifacts:true), add crossTestJob/withCrossTestJob helpers, add withCrossTestJobAuto which activates only for real-emulator jobs by inspecting CROSS_EMULATOR in the job's variables - ci.sh: add test_hadrian_cross_full command (extract bindist, install, run hadrian test with EXTRA_HC_OPTS=-fexternal-interpreter) - jobs.yaml: regenerated Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> - - - - - 96d3e23e by Sven Tennie at 2026-06-08T11:35:14+00:00 ci: symlink bootstrap GHC for test tool builds in cross test job Cross-compiler bindist only provides the cross-prefixed ghc binary. Hadrian needs a native ghc at _build/install/bin/ghc to build test support tools (check-exact, ghc-config). Symlink to bootstrap GHC which is on PATH after ci.sh setup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> - - - - - 3 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml Changes: ===================================== .gitlab/ci.sh ===================================== @@ -59,6 +59,7 @@ Common Modes: Hadrian build system build_hadrian Build GHC via the Hadrian build system test_hadrian Test GHC via the Hadrian build system + test_hadrian_cross_full Test cross-compiled GHC using a downloaded bindist artifact Environment variables affecting both build systems: @@ -640,6 +641,34 @@ function install_bindist() { end_section install-bindist } +function test_hadrian_cross_full() { + if [[ -z "${BIN_DIST_NAME:-}" ]]; then + fail "BIN_DIST_NAME is not set; cannot locate bindist artifact" + fi + + local instdir="$TOP/_build/install" + local test_compiler="$instdir/bin/${cross_prefix}ghc$exe" + + tar xJf "${BIN_DIST_NAME}.tar.xz" + install_bindist ghc-*/ "$instdir" + + # Cross-compiler bindist provides only the cross-prefixed ghc binary, not a + # native ghc. Hadrian needs a native ghc at this path to build test support + # tools (check-exact, ghc-config). Symlink to the bootstrap GHC from setup. + if [[ ! -e "$instdir/bin/ghc" ]]; then + ln -sf "$GHC" "$instdir/bin/ghc" + fi + + EXTRA_HC_OPTS="-fexternal-interpreter" run_hadrian \ + test \ + --summary-junit=./junit.xml \ + --test-have-intree-files \ + --test-compiler="${test_compiler}" \ + "runtest.opts+=${RUNTEST_ARGS:-}" \ + "runtest.opts+=--unexpected-output-dir=$TOP/unexpected-test-output" \ + || fail "hadrian cross full testsuite" +} + function test_hadrian() { check_msys2_deps _build/stage1/bin/ghc --version check_release_build @@ -1091,6 +1120,12 @@ case ${1:-help} in time_it "test" test_hadrian || res=$? push_perf_notes exit $res ;; + test_hadrian_cross_full) + fetch_perf_notes + res=0 + time_it "test" test_hadrian_cross_full || res=$? + push_perf_notes + exit $res ;; run_hadrian) shift; run_hadrian "$@" ;; perf_test) run_perf_test ;; abi_test) abi_test ;; ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -589,6 +589,10 @@ modifyValidateRules _ r = error $ "Applying validate rule to nightly/release job manualRule :: OnOffRules -> OnOffRules manualRule rules = rules { when = Manual } +renameRule :: String -> OnOffRules -> OnOffRules +renameRule n (OnOffRules (ValidateOnly _ rs) w) = OnOffRules (ValidateOnly n rs) w +renameRule _ r = error $ "renameRule: not a ValidateOnly rule: " ++ show (rule_set r) + -- Given 'OnOffRules', returns a list of ALL rules with their toggled status. -- For example, even if you don't explicitly disable a rule it will end up in the -- rule list with the OFF state. @@ -786,6 +790,7 @@ validateRuleString LoongArch64 = labelString "loongarch" data Job = Job { jobStage :: String , jobNeeds :: [String] + , jobNeedsWithArtifacts :: [String] , jobTags :: [String] , jobAllowFailure :: Bool , jobScript :: [String] @@ -807,7 +812,9 @@ instance ToJSON Job where [ "stage" A..= jobStage -- Convoluted to avoid download artifacts from ghci job -- https://docs.gitlab.com/ee/ci/yaml/#needsartifacts - , "needs" A..= map (\j -> object [ "job" A..= j, "artifacts" A..= False ]) jobNeeds + , "needs" A..= ( map (\j -> object [ "job" A..= j, "artifacts" A..= False ]) jobNeeds + ++ map (\j -> object [ "job" A..= j, "artifacts" A..= True ]) jobNeedsWithArtifacts + ) , "dependencies" A..= jobDependencies , "image" A..= jobDockerImage , "tags" A..= jobTags @@ -868,6 +875,7 @@ job arch opsys buildConfig = NamedJob { name = jobName, jobInfo = Job {..} } jobFlavour = mkJobFlavour buildConfig jobDependencies = [] + jobNeedsWithArtifacts = [] jobVariables = mconcat [ opsysVariables arch opsys , "TEST_ENV" =: testEnv arch opsys buildConfig @@ -1001,6 +1009,41 @@ release arch opsys bc = . ignorePerfFailures . highCompression $ j } +crossTestJob :: NamedJob Job -> NamedJob Job +crossTestJob (NamedJob buildName buildJob) = + NamedJob testName $ + buildJob + { jobNeeds = ["hadrian-ghc-in-ghci"] + , jobNeedsWithArtifacts = [buildName] + , jobDependencies = [buildName] + , jobScript = testScript (jobPlatform buildJob) + , jobRules = renameRule testName $ manualRule (jobRules buildJob) + , jobAllowFailure = True + } + where + testName = buildName ++ "-manual-testsuite" + testScript (_, opsys) = + [ "sudo chown ghc:ghc -R ." | Linux {} <- [opsys] ] ++ + [ ".gitlab/ci.sh setup" + , ".gitlab/ci.sh configure" + , ".gitlab/ci.sh test_hadrian_cross_full" + ] + +withCrossTestJob :: JobGroup Job -> [JobGroup Job] +withCrossTestJob jg@(StandardTriple (Just vj) _ _) = + [jg, StandardTriple (Just (crossTestJob vj)) Nothing Nothing] +withCrossTestJob jg = [jg] + +-- | Apply withCrossTestJob only when the job already has a real emulator configured. +-- JS and wasm jobs run their own testsuite; jobs without CROSS_EMULATOR can't run tests. +withCrossTestJobAuto :: JobGroup Job -> [JobGroup Job] +withCrossTestJobAuto jg@(StandardTriple (Just (NamedJob _ vj)) _ _) + | Just [e] <- mmlookup "CROSS_EMULATOR" (jobVariables vj) + , e /= "NOT_SET" + , e /= "js-emulator" + = withCrossTestJob jg +withCrossTestJobAuto jg = [jg] + --------------------------------------------------------------------- -- Specific job modification functions --------------------------------------------------------------------- @@ -1259,7 +1302,7 @@ alpine_aarch64 = [ ] cross_jobs :: [JobGroup Job] -cross_jobs = [ +cross_jobs = concatMap withCrossTestJobAuto [ -- x86 -> aarch64 validateBuilds Amd64 (Linux Debian13) (crossConfig "aarch64-linux-gnu" (Emulator "qemu-aarch64 -L /usr/aarch64-linux-gnu") Nothing) @@ -1439,6 +1482,8 @@ platform_mapping = Map.map go combined_result , show (name b) ] -- Explicitly selected | name a `elem` whitelist = a -- Explicitly selected | name b `elem` whitelist = b + | "-manual-testsuite" `isSuffixOf` name a = b -- prefer build job over manual test job + | "-manual-testsuite" `isSuffixOf` name b = a | otherwise = error (show (name a) ++ show (name b)) go = fmap (BindistInfo . unwords . fromJust . mmlookup "BIN_DIST_NAME" . jobVariables) ===================================== .gitlab/jobs.yaml ===================================== @@ -417,6 +417,182 @@ "WindresCmd": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-windres" } }, + "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm-manual-testsuite": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings.txt" + ], + "allow_failure": true, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "aarch64-linux-deb12-wine-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [ + "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm" + ], + "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb12-wine:$DOCKER_REV", + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + }, + { + "artifacts": true, + "job": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm" + } + ], + "rules": [ + { + "allow_failure": true, + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\baarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate\\+llvm-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || (($CI_MERGE_REQUEST_LABELS =~ /.*aarch64.*/) && ($CI_MERGE_REQUEST_LABELS =~ /.*Windows.*/) && ($CI_MERGE_REQUEST_LABELS =~ /.*LLVM backend.*/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "manual" + } + ], + "script": [ + "sudo chown ghc:ghc -R .", + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh test_hadrian_cross_full" + ], + "stage": "full-build", + "tags": [ + "aarch64-linux" + ], + "variables": { + "AR": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ar", + "BIGNUM_BACKEND": "native", + "BIN_DIST_NAME": "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm", + "BUILD_FLAVOUR": "validate+llvm", + "CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang", + "CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt", + "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check", + "CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt", + "CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine", + "CROSS_TARGET": "aarch64-unknown-mingw32", + "CXX": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang++", + "HADRIAN_ARGS": "--docs=none", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "LD": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld", + "LLVMAS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang", + "MergeObjsCmd": "", + "NM": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-nm", + "OBJCOPY": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objcopy", + "OBJDUMP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objdump", + "RANLIB": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ranlib", + "RUNTEST_ARGS": "", + "SIZE": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-size", + "STRINGS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strings", + "STRIP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strip", + "TEST_ENV": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm", + "USER_CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt", + "WindresCmd": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-windres" + } + }, + "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate-manual-testsuite": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings.txt" + ], + "allow_failure": true, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "aarch64-linux-deb12-wine-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [ + "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate" + ], + "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb12-wine:$DOCKER_REV", + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + }, + { + "artifacts": true, + "job": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate" + } + ], + "rules": [ + { + "allow_failure": true, + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\baarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || (($CI_MERGE_REQUEST_LABELS =~ /.*aarch64.*/) && ($CI_MERGE_REQUEST_LABELS =~ /.*Windows.*/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "manual" + } + ], + "script": [ + "sudo chown ghc:ghc -R .", + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh test_hadrian_cross_full" + ], + "stage": "full-build", + "tags": [ + "aarch64-linux" + ], + "variables": { + "AR": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ar", + "BIGNUM_BACKEND": "native", + "BIN_DIST_NAME": "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate", + "BUILD_FLAVOUR": "validate", + "CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang", + "CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt", + "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check", + "CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt", + "CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine", + "CROSS_TARGET": "aarch64-unknown-mingw32", + "CXX": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang++", + "HADRIAN_ARGS": "--docs=none", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "LD": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld", + "LLVMAS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang", + "MergeObjsCmd": "", + "NM": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-nm", + "OBJCOPY": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objcopy", + "OBJDUMP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objdump", + "RANLIB": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ranlib", + "RUNTEST_ARGS": "", + "SIZE": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-size", + "STRINGS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strings", + "STRIP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strip", + "TEST_ENV": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate", + "USER_CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt", + "WindresCmd": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-windres" + } + }, "aarch64-linux-deb13-validate": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -6347,6 +6523,76 @@ "TEST_ENV": "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate" } }, + "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate-manual-testsuite": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings.txt" + ], + "allow_failure": true, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-x86_64-linux-deb13-cross_aarch64-linux-gnu-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-linux-deb13-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [ + "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate" + ], + "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV", + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + }, + { + "artifacts": true, + "job": "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate" + } + ], + "rules": [ + { + "allow_failure": true, + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-deb13-cross_aarch64-linux-gnu-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "manual" + } + ], + "script": [ + "sudo chown ghc:ghc -R .", + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh test_hadrian_cross_full" + ], + "stage": "full-build", + "tags": [ + "x86_64-linux" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-linux-deb13-cross_aarch64-linux-gnu-validate", + "BUILD_FLAVOUR": "validate", + "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check", + "CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu", + "CROSS_TARGET": "aarch64-linux-gnu", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate" + } + }, "x86_64-linux-deb13-int_native-validate": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -6661,6 +6907,76 @@ "TEST_ENV": "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate" } }, + "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate-manual-testsuite": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings.txt" + ], + "allow_failure": true, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-linux-deb13-riscv-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [ + "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate" + ], + "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13-riscv:$DOCKER_REV", + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + }, + { + "artifacts": true, + "job": "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate" + } + ], + "rules": [ + { + "allow_failure": true, + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*RISC-V.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "manual" + } + ], + "script": [ + "sudo chown ghc:ghc -R .", + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh test_hadrian_cross_full" + ], + "stage": "full-build", + "tags": [ + "x86_64-linux" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate", + "BUILD_FLAVOUR": "validate", + "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check", + "CROSS_EMULATOR": "qemu-riscv64 -L /usr/riscv64-linux-gnu", + "CROSS_TARGET": "riscv64-linux-gnu", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate" + } + }, "x86_64-linux-deb13-unreg-validate": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -7537,6 +7853,76 @@ "TEST_ENV": "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate" } }, + "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate-manual-testsuite": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings.txt" + ], + "allow_failure": true, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-linux-ubuntu24_04-loongarch-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [ + "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate" + ], + "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-ubuntu24_04-loongarch:$DOCKER_REV", + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + }, + { + "artifacts": true, + "job": "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate" + } + ], + "rules": [ + { + "allow_failure": true, + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*loongarch.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "manual" + } + ], + "script": [ + "sudo chown ghc:ghc -R .", + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh test_hadrian_cross_full" + ], + "stage": "full-build", + "tags": [ + "x86_64-linux" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate", + "BUILD_FLAVOUR": "validate", + "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check", + "CROSS_EMULATOR": "qemu-loongarch64 -L /usr/loongarch64-linux-gnu", + "CROSS_TARGET": "loongarch64-linux-gnu", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate" + } + }, "x86_64-linux-ubuntu24_04-validate": { "after_script": [ ".gitlab/ci.sh save_cache", View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dd38245169e7890f7e486d4b77a7c40... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dd38245169e7890f7e486d4b77a7c40... You're receiving this email because of your account on gitlab.haskell.org.