Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ghc/ghc
  • bgamari/ghc
  • syd/ghc
  • ggreif/ghc
  • watashi/ghc
  • RolandSenn/ghc
  • mpickering/ghc
  • DavidEichmann/ghc
  • carter/ghc
  • harpocrates/ghc
  • ethercrow/ghc
  • mijicd/ghc
  • adamse/ghc
  • alexbiehl/ghc
  • gridaphobe/ghc
  • trofi/ghc
  • supersven/ghc
  • ppk/ghc
  • ulysses4ever/ghc
  • AndreasK/ghc
  • ghuntley/ghc
  • shayne-fletcher-da/ghc
  • fgaz/ghc
  • yav/ghc
  • osa1/ghc
  • mbbx6spp/ghc
  • JulianLeviston/ghc
  • reactormonk/ghc
  • rae/ghc
  • takenobu-hs/ghc
  • michalt/ghc
  • andrewthad/ghc
  • hsyl20/ghc
  • scottgw/ghc
  • sjakobi/ghc
  • angerman/ghc
  • RyanGlScott/ghc
  • hvr/ghc
  • howtonotwin/ghc
  • chessai/ghc
  • m-renaud/ghc
  • brprice/ghc
  • stevehartdata/ghc
  • sighingnow/ghc
  • kgardas/ghc
  • ckoparkar/ghc
  • alp/ghc
  • smaeul/ghc
  • kakkun61/ghc
  • sykloid/ghc
  • newhoggy/ghc
  • toonn/ghc
  • nineonine/ghc
  • Phyx/ghc
  • ezyang/ghc
  • tweag/ghc
  • langston/ghc
  • ndmitchell/ghc
  • rockbmb/ghc
  • artempyanykh/ghc
  • mniip/ghc
  • mynguyenbmc/ghc
  • alexfmpe/ghc
  • crockeea/ghc
  • nh2/ghc
  • vaibhavsagar/ghc
  • phadej/ghc
  • Haskell-mouse/ghc
  • lolotp/ghc
  • spacekitteh/ghc
  • michaelpj/ghc
  • mgsloan/ghc
  • HPCohen/ghc
  • tmobile/ghc
  • radrow/ghc
  • simonmar/ghc
  • _deepfire/ghc
  • Ericson2314/ghc
  • leitao/ghc
  • fumieval/ghc
  • trac-isovector/ghc
  • cblp/ghc
  • xich/ghc
  • ciil/ghc
  • erthalion/ghc
  • xldenis/ghc
  • autotaker/ghc
  • haskell-wasm/ghc
  • kcsongor/ghc
  • agander/ghc
  • Baranowski/ghc
  • trac-dredozubov/ghc
  • 23Skidoo/ghc
  • iustin/ghc
  • ningning/ghc
  • josefs/ghc
  • kabuhr/ghc
  • gallais/ghc
  • dten/ghc
  • expipiplus1/ghc
  • Pluralia/ghc
  • rohanjr/ghc
  • intricate/ghc
  • kirelagin/ghc
  • Javran/ghc
  • DanielG/ghc
  • trac-mizunashi_mana/ghc
  • pparkkin/ghc
  • bollu/ghc
  • ntc2/ghc
  • jaspervdj/ghc
  • JoshMeredith/ghc
  • wz1000/ghc
  • zkourouma/ghc
  • code5hot/ghc
  • jdprice/ghc
  • tdammers/ghc
  • J-mie6/ghc
  • trac-lantti/ghc
  • ch1bo/ghc
  • cgohla/ghc
  • lucamolteni/ghc
  • acairncross/ghc
  • amerocu/ghc
  • chreekat/ghc
  • txsmith/ghc
  • trupill/ghc
  • typetetris/ghc
  • sergv/ghc
  • fryguybob/ghc
  • erikd/ghc
  • trac-roland/ghc
  • setupminimal/ghc
  • Friede80/ghc
  • SkyWriter/ghc
  • xplorld/ghc
  • abrar/ghc
  • obsidiansystems/ghc
  • Icelandjack/ghc
  • adinapoli/ghc
  • trac-matthewbauer/ghc
  • heatsink/ghc
  • dwijnand/ghc
  • Cmdv/ghc
  • alinab/ghc
  • pepeiborra/ghc
  • fommil/ghc
  • luochen1990/ghc
  • rlupton20/ghc
  • applePrincess/ghc
  • lehins/ghc
  • ronmrdechai/ghc
  • leeadam/ghc
  • harendra/ghc
  • mightymosquito1991/ghc
  • trac-gershomb/ghc
  • lucajulian/ghc
  • Rizary/ghc
  • VictorCMiraldo/ghc
  • jamesbrock/ghc
  • andrewdmeier/ghc
  • luke/ghc
  • pranaysashank/ghc
  • cocreature/ghc
  • hithroc/ghc
  • obreitwi/ghc
  • slrtbtfs/ghc
  • kaol/ghc
  • yairchu/ghc
  • Mathemagician98/ghc
  • trac-taylorfausak/ghc
  • leungbk/ghc
  • MichaWiedenmann/ghc
  • chris-martin/ghc
  • TDecki/ghc
  • adithyaov/ghc
  • trac-gelisam/ghc
  • Lysxia/ghc
  • complyue/ghc
  • bwignall/ghc
  • sternmull/ghc
  • sonika/ghc
  • leif/ghc
  • broadwaylamb/ghc
  • myszon/ghc
  • danbroooks/ghc
  • Mechachleopteryx/ghc
  • zardyh/ghc
  • trac-vdukhovni/ghc
  • OmarKhaledAbdo/ghc
  • arrowd/ghc
  • Bodigrim/ghc
  • matheus23/ghc
  • cardenaso11/ghc
  • trac-Athas/ghc
  • mb720/ghc
  • DylanZA/ghc
  • liff/ghc
  • typedrat/ghc
  • trac-claude/ghc
  • jbm/ghc
  • Gertjan423/ghc
  • PHO/ghc
  • JKTKops/ghc
  • kockahonza/ghc
  • msakai/ghc
  • Sir4ur0n/ghc
  • barambani/ghc
  • vishnu.c/ghc
  • dcoutts/ghc
  • trac-runeks/ghc
  • trac-MaxGabriel/ghc
  • lexi.lambda/ghc
  • strake/ghc
  • spavikevik/ghc
  • JakobBruenker/ghc
  • rmanne/ghc
  • gdziadkiewicz/ghc
  • ani/ghc
  • iliastsi/ghc
  • smunix/ghc
  • judah/ghc
  • blackgnezdo/ghc
  • emilypi/ghc
  • trac-bpfoley/ghc
  • muesli4/ghc
  • trac-gkaracha/ghc
  • Kleidukos/ghc
  • nek0/ghc
  • TristanCacqueray/ghc
  • dwulive/ghc
  • mbakke/ghc
  • arybczak/ghc
  • Yang123321/ghc
  • maksbotan/ghc
  • QuietMisdreavus/ghc
  • trac-olshanskydr/ghc
  • emekoi/ghc
  • samuela/ghc
  • josephcsible/ghc
  • dramforever/ghc
  • lpsmith/ghc
  • DenisFrezzato/ghc
  • michivi/ghc
  • jneira/ghc
  • jeffhappily/ghc
  • Ivan-Yudin/ghc
  • nakaji-dayo/ghc
  • gdevanla/ghc
  • galen/ghc
  • fendor/ghc
  • yaitskov/ghc
  • rcythr/ghc
  • awpr/ghc
  • jeremyschlatter/ghc
  • Aver1y/ghc
  • mitchellvitez/ghc
  • merijn/ghc
  • tomjaguarpaw1/ghc
  • trac-NoidedSuper/ghc
  • erewok/ghc
  • trac-junji.hashimoto/ghc
  • adamwespiser/ghc
  • bjaress/ghc
  • jhrcek/ghc
  • leonschoorl/ghc
  • lukasz-golebiewski/ghc
  • sheaf/ghc
  • last-g/ghc
  • carassius1014/ghc
  • eschwartz/ghc
  • dwincort/ghc
  • felixwiemuth/ghc
  • TimWSpence/ghc
  • marcusmonteirodesouza/ghc
  • WJWH/ghc
  • vtols/ghc
  • theobat/ghc
  • BinderDavid/ghc
  • ckoparkar0/ghc
  • alexander-kjeldaas/ghc
  • dme2/ghc
  • philderbeast/ghc
  • aaronallen8455/ghc
  • rayshih/ghc
  • benkard/ghc
  • mpardalos/ghc
  • saidelman/ghc
  • leiftw/ghc
  • ca333/ghc
  • bwroga/ghc
  • nmichael44/ghc
  • trac-crobbins/ghc
  • felixonmars/ghc
  • adityagupta1089/ghc
  • hgsipiere/ghc
  • treeowl/ghc
  • alexpeits/ghc
  • CraigFe/ghc
  • dnlkrgr/ghc
  • kerckhove_ts/ghc
  • cptwunderlich/ghc
  • eiais/ghc
  • hahohihu/ghc
  • sanchayan/ghc
  • lemmih/ghc
  • sehqlr/ghc
  • trac-dbeacham/ghc
  • luite/ghc
  • trac-f-a/ghc
  • vados/ghc
  • luntain/ghc
  • fatho/ghc
  • alexbiehl-gc/ghc
  • dcbdan/ghc
  • tvh/ghc
  • liam-ly/ghc
  • timbobbarnes/ghc
  • GovanifY/ghc
  • shanth2600/ghc
  • gliboc/ghc
  • duog/ghc
  • moxonsghost/ghc
  • zander/ghc
  • masaeedu/ghc
  • georgefst/ghc
  • guibou/ghc
  • nicuveo/ghc
  • mdebruijne/ghc
  • stjordanis/ghc
  • emiflake/ghc
  • wygulmage/ghc
  • frasertweedale/ghc
  • coot/ghc
  • aratamizuki/ghc
  • tsandstr/ghc
  • mrBliss/ghc
  • Anton-Latukha/ghc
  • tadfisher/ghc
  • vapourismo/ghc
  • Sorokin-Anton/ghc
  • basile-henry/ghc
  • trac-mightybyte/ghc
  • AbsoluteNikola/ghc
  • cobrien99/ghc
  • songzh/ghc
  • blamario/ghc
  • aj4ayushjain/ghc
  • trac-utdemir/ghc
  • tangcl/ghc
  • hdgarrood/ghc
  • maerwald/ghc
  • arjun/ghc
  • ratherforky/ghc
  • haskieLambda/ghc
  • EmilGedda/ghc
  • Bogicevic/ghc
  • eddiejessup/ghc
  • kozross/ghc
  • AlistairB/ghc
  • 3Rafal/ghc
  • christiaanb/ghc
  • trac-bit/ghc
  • matsumonkie/ghc
  • trac-parsonsmatt/ghc
  • chisui/ghc
  • jaro/ghc
  • trac-kmiyazato/ghc
  • davidsd/ghc
  • Tritlo/ghc
  • I-B-3/ghc
  • lykahb/ghc
  • AriFordsham/ghc
  • turion1/ghc
  • berberman/ghc
  • christiantakle/ghc
  • zyklotomic/ghc
  • trac-ocramz/ghc
  • CSEdd/ghc
  • doyougnu/ghc
  • mmhat/ghc
  • why-not-try-calmer/ghc
  • plutotulp/ghc
  • kjekac/ghc
  • Manvi07/ghc
  • teo/ghc
  • cactus/ghc
  • CarrieMY/ghc
  • abel/ghc
  • yihming/ghc
  • tsakki/ghc
  • jessicah/ghc
  • oliverbunting/ghc
  • meld/ghc
  • friedbrice/ghc
  • Joald/ghc
  • abarbu/ghc
  • DigitalBrains1/ghc
  • sterni/ghc
  • alexDarcy/ghc
  • hexchain/ghc
  • minimario/ghc
  • zliu41/ghc
  • tommd/ghc
  • jazcarate/ghc
  • peterbecich/ghc
  • alirezaghey/ghc
  • solomon/ghc
  • mikael.urankar/ghc
  • davjam/ghc
  • int-index/ghc
  • MorrowM/ghc
  • nrnrnr/ghc
  • Sonfamm/ghc-test-only
  • afzt1/ghc
  • nguyenhaibinh-tpc/ghc
  • trac-lierdakil/ghc
  • MichaWiedenmann1/ghc
  • jmorag/ghc
  • Ziharrk/ghc
  • trac-MitchellSalad/ghc
  • juampe/ghc
  • jwaldmann/ghc
  • snowleopard/ghc
  • juhp/ghc
  • normalcoder/ghc
  • ksqsf/ghc
  • trac-jberryman/ghc
  • roberth/ghc
  • 1ntEgr8/ghc
  • epworth/ghc
  • MrAdityaAlok/ghc
  • JunmingZhao42/ghc
  • jappeace/ghc
  • trac-Gabriel439/ghc
  • alt-romes/ghc
  • HugoPeters1024/ghc
  • 10ne1/ghc-fork
  • agentultra/ghc
  • Garfield1002/ghc
  • ChickenProp/ghc
  • clyring/ghc
  • MaxHearnden/ghc
  • jumper149/ghc
  • vem/ghc
  • ketzacoatl/ghc
  • Rosuavio/ghc
  • jackohughes/ghc
  • p4l1ly/ghc
  • konsumlamm/ghc
  • shlevy/ghc
  • torsten.schmits/ghc
  • andremarianiello/ghc
  • amesgen/ghc
  • googleson78/ghc
  • InfiniteVerma/ghc
  • uhbif19/ghc
  • yiyunliu/ghc
  • raehik/ghc
  • mrkun/ghc
  • telser/ghc
  • 1Jajen1/ghc
  • slotThe/ghc
  • WinstonHartnett/ghc
  • mpilgrem/ghc
  • dreamsmasher/ghc
  • schuelermine/ghc
  • trac-Viwor/ghc
  • undergroundquizscene/ghc
  • evertedsphere/ghc
  • coltenwebb/ghc
  • oberblastmeister/ghc
  • agrue/ghc
  • lf-/ghc
  • zacwood9/ghc
  • steshaw/ghc
  • high-cloud/ghc
  • SkamDart/ghc
  • PiDelport/ghc
  • maoif/ghc
  • RossPaterson/ghc
  • CharlesTaylor7/ghc
  • ribosomerocker/ghc
  • trac-ramirez7/ghc
  • daig/ghc
  • NicolasT/ghc
  • FinleyMcIlwaine/ghc
  • lawtonnichols/ghc
  • jmtd/ghc
  • ozkutuk/ghc
  • wildsebastian/ghc
  • nikshalark/ghc
  • lrzlin/ghc
  • tobias/ghc
  • fw/ghc
  • hawkinsw/ghc
  • type-dance/ghc
  • rui314/ghc
  • ocharles/ghc
  • wavewave/ghc
  • TheKK/ghc
  • nomeata/ghc
  • trac-csabahruska/ghc
  • jonathanjameswatson/ghc
  • L-as/ghc
  • Axman6/ghc
  • barracuda156/ghc
  • trac-jship/ghc
  • jake-87/ghc
  • meooow/ghc
  • rebeccat/ghc
  • hamana55/ghc
  • Enigmage/ghc
  • kokobd/ghc
  • agevelt/ghc
  • gshen42/ghc
  • chrismwendt/ghc
  • MangoIV/ghc
  • teto/ghc
  • Sookr1/ghc
  • trac-thomasjm/ghc
  • barci2/ghc-dev
  • trac-m4dc4p/ghc
  • dixonary/ghc
  • breakerzirconia/ghc
  • alexsio27444/ghc
  • glocq/ghc
  • sourabhxyz/ghc
  • ryantrinkle/ghc
  • Jade/ghc
  • scedfaliako/ghc
  • martijnbastiaan/ghc
  • trac-george.colpitts/ghc
  • ammarbinfaisal/ghc
  • mimi.vx/ghc
  • lortabac/ghc
  • trac-zyla/ghc
  • benbellick/ghc
  • aadaa-fgtaa/ghc
  • jvanbruegge/ghc
  • archbung/ghc
  • gilmi/ghc
  • mfonism/ghc
  • alex-mckenna/ghc
  • Ei30metry/ghc
  • DiegoDiverio/ghc
  • jorgecunhamendes/ghc
  • liesnikov/ghc
  • akrmn/ghc
  • trac-simplifierticks/ghc
  • jacco/ghc
  • rhendric/ghc
  • damhiya/ghc
  • ryndubei/ghc
  • DaveBarton/ghc
  • trac-Profpatsch/ghc
  • GZGavinZhao/ghc
  • ncfavier/ghc
  • jameshaydon/ghc
  • ajccosta/ghc
  • dschrempf/ghc
  • cydparser/ghc
  • LinuxUserGD/ghc
  • elodielander/ghc
  • facundominguez/ghc
  • psilospore/ghc
  • lachrimae/ghc
  • dylan-thinnes/ghc-type-errors-plugin
  • hamishmack/ghc
  • Leary/ghc
  • lzszt/ghc
  • lyokha/ghc
  • trac-glaubitz/ghc
  • Rewbert/ghc
  • andreabedini/ghc
  • Jasagredo/ghc
  • sol/ghc
  • OlegAlexander/ghc
  • trac-sthibaul/ghc
  • avdv/ghc
  • Wendaolee/ghc
  • ur4t/ghc
  • daylily/ghc
  • boltzmannrain/ghc
  • mmzk1526/ghc
  • trac-fizzixnerd/ghc
  • soulomoon/ghc
  • rwmjones/ghc
  • j14i/ghc
  • tracsis/ghc
  • gesh/ghc
  • flip101/ghc
  • eldritch-cookie/ghc
  • LemonjamesD/ghc
  • pgujjula/ghc
  • skeuchel/ghc
  • noteed/ghc
  • gulin.serge/ghc
  • Torrekie/ghc
  • jlwoodwa/ghc
  • ayanamists/ghc
  • husong998/ghc
  • trac-edmundnoble/ghc
  • josephf/ghc
  • contrun/ghc
  • baulig/ghc
  • edsko/ghc
  • mzschr/ghc-issue-24732
  • ulidtko/ghc
  • Arsen/ghc
  • trac-sjoerd_visscher/ghc
  • crumbtoo/ghc
  • L0neGamer/ghc
  • DrewFenwick/ghc
  • benz0li/ghc
  • MaciejWas/ghc
  • jordanrule/ghc
  • trac-qqwy/ghc
  • LiamGoodacre/ghc
  • isomorpheme/ghc
  • trac-danidiaz/ghc
  • Kariim/ghc
  • MTaimoorZaeem/ghc
  • hololeap/ghc
  • ticat-fp/ghc
  • meritamen/ghc
  • criskell/ghc
  • trac-kraai/ghc
  • aergus/ghc
  • jdral/ghc
  • SamB/ghc
  • Tristian/ghc
  • ywgrit/ghc
  • KatsuPatrick/ghc
  • OsePedro/ghc
  • mpscholten/ghc
  • fp/ghc
  • zaquest/ghc
  • fangyi-zhou/ghc
  • augyg/ghc
640 results
Show changes
Commits on Source (5808)
Showing
with 3919 additions and 1469 deletions
--command sh ./hadrian/ghci --command sh -c "HADRIAN_ARGS=-j exec ./hadrian/ghci-multi -j"
--reload compiler --reload compiler
--reload ghc --reload ghc
--reload includes --reload includes
--restart hadrian/ghci --restart hadrian/ghci-multi
5eecb20a0368b599d03930e2dbb0e91540de4cb2
...@@ -2,3 +2,4 @@ ...@@ -2,3 +2,4 @@
# don't convert anything on checkout # don't convert anything on checkout
* text=auto eol=lf * text=auto eol=lf
mk/win32-tarballs.md5sum text=auto eol=LF mk/win32-tarballs.md5sum text=auto eol=LF
testsuite/tests/parser/should_run/T25375.hs text=auto eol=crlf
...@@ -35,6 +35,7 @@ Thumbs.db ...@@ -35,6 +35,7 @@ Thumbs.db
__pycache__ __pycache__
.mypy_cache .mypy_cache
*.SYMDEF* *.SYMDEF*
a.out
log log
tags tags
...@@ -60,7 +61,9 @@ _* ...@@ -60,7 +61,9 @@ _*
*/ghc-stage1 */ghc-stage1
.shake.* .shake.*
.hadrian_ghci .hadrian_ghci
.hadrian_ghci_multi/
.hie-bios .hie-bios
hadrian/bootstrap/jq-bin
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Ignore any overlapped darcs repos and back up files # Ignore any overlapped darcs repos and back up files
...@@ -112,7 +115,7 @@ _darcs/ ...@@ -112,7 +115,7 @@ _darcs/
/compiler/FunTypes.h /compiler/FunTypes.h
/compiler/MachRegs.h /compiler/MachRegs.h
/compiler/MachRegs /compiler/MachRegs
/compiler/ghc-llvm-version.h /compiler/GHC/CmmToLlvm/Version/Bounds.hs
/compiler/ghc.cabal /compiler/ghc.cabal
/compiler/ghc.cabal.old /compiler/ghc.cabal.old
/distrib/configure.ac /distrib/configure.ac
...@@ -165,8 +168,12 @@ _darcs/ ...@@ -165,8 +168,12 @@ _darcs/
/libraries/ghc-boot/ghc-boot.cabal /libraries/ghc-boot/ghc-boot.cabal
/libraries/ghc-boot-th/GNUmakefile /libraries/ghc-boot-th/GNUmakefile
/libraries/ghc-boot-th/ghc-boot-th.cabal /libraries/ghc-boot-th/ghc-boot-th.cabal
/libraries/ghc-boot-th-next/ghc-boot-th-next.cabal
/libraries/ghc-boot-th/ghc.mk /libraries/ghc-boot-th/ghc.mk
/libraries/ghc-heap/ghc-heap.cabal /libraries/ghc-heap/ghc-heap.cabal
/libraries/ghc-internal/ghc-internal.cabal
/libraries/ghc-experimental/ghc-experimental.cabal
/libraries/base/base.cabal
/libraries/ghci/GNUmakefile /libraries/ghci/GNUmakefile
/libraries/ghci/ghci.cabal /libraries/ghci/ghci.cabal
/libraries/ghci/ghc.mk /libraries/ghci/ghc.mk
...@@ -184,8 +191,6 @@ _darcs/ ...@@ -184,8 +191,6 @@ _darcs/
/linter.log /linter.log
/mk/are-validating.mk /mk/are-validating.mk
/mk/build.mk /mk/build.mk
/mk/unused.h
/mk/unused.h.in
/mk/config.mk /mk/config.mk
/mk/config.mk.old /mk/config.mk.old
/mk/system-cxx-std-lib-1.0.conf /mk/system-cxx-std-lib-1.0.conf
...@@ -204,10 +209,9 @@ _darcs/ ...@@ -204,10 +209,9 @@ _darcs/
/utils/runghc/runghc.cabal /utils/runghc/runghc.cabal
/utils/gen-dll/gen-dll.cabal /utils/gen-dll/gen-dll.cabal
/utils/ghc-pkg/ghc-pkg.cabal /utils/ghc-pkg/ghc-pkg.cabal
utils/lndir/fs.*
utils/unlit/fs.* utils/unlit/fs.*
libraries/base/include/fs.h libraries/ghc-internal/include/fs.h
libraries/base/cbits/fs.c libraries/ghc-internal/cbits/fs.c
missing-win32-tarballs missing-win32-tarballs
/extra-gcc-opts /extra-gcc-opts
......
...@@ -2,11 +2,11 @@ variables: ...@@ -2,11 +2,11 @@ variables:
GIT_SSL_NO_VERIFY: "1" GIT_SSL_NO_VERIFY: "1"
# Commit of ghc/ci-images repository from which to pull Docker images # Commit of ghc/ci-images repository from which to pull Docker images
DOCKER_REV: a55d4ae0f9da0a2fb3bc72a13f356e2511a4c4fd DOCKER_REV: 94df7d589f0ded990826bc7a4d7f5a40d6055a4f
# Sequential version number of all cached things. # Sequential version number of all cached things.
# Bump to invalidate GitLab CI cache. # Bump to invalidate GitLab CI cache.
CACHE_REV: 10 CACHE_REV: 11
# Disable shallow clones; they break our linting rules # Disable shallow clones; they break our linting rules
GIT_DEPTH: 0 GIT_DEPTH: 0
...@@ -22,6 +22,9 @@ variables: ...@@ -22,6 +22,9 @@ variables:
GIT_SUBMODULE_STRATEGY: "normal" GIT_SUBMODULE_STRATEGY: "normal"
# GitLab recommends using https:, not ssh:, to clone submodules. See #25528.
GIT_SUBMODULE_FORCE_HTTPS: 1
# Makes ci.sh isolate CABAL_DIR # Makes ci.sh isolate CABAL_DIR
HERMETIC: "YES" HERMETIC: "YES"
...@@ -101,12 +104,10 @@ workflow: ...@@ -101,12 +104,10 @@ workflow:
# which versions of GHC to allow bootstrap with # which versions of GHC to allow bootstrap with
.bootstrap_matrix : &bootstrap_matrix .bootstrap_matrix : &bootstrap_matrix
matrix: matrix:
- GHC_VERSION: 9.4.7
DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10-ghc9_4:$DOCKER_REV"
- GHC_VERSION: 9.6.3
DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10-ghc9_6:$DOCKER_REV"
- GHC_VERSION: 9.8.1 - GHC_VERSION: 9.8.1
DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10-ghc9_8:$DOCKER_REV" DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12-ghc9_8:$DOCKER_REV"
- GHC_VERSION: 9.10.1
DOCKER_IMAGE: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12-ghc9_10:$DOCKER_REV"
# Allow linters to fail on draft MRs. # Allow linters to fail on draft MRs.
# This must be explicitly transcluded in lint jobs which # This must be explicitly transcluded in lint jobs which
...@@ -218,7 +219,7 @@ include: '.gitlab/jobs.yaml' ...@@ -218,7 +219,7 @@ include: '.gitlab/jobs.yaml'
ghc-linters: ghc-linters:
stage: tool-lint stage: tool-lint
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
extends: .lint-params extends: .lint-params
variables: variables:
BUILD_FLAVOUR: default BUILD_FLAVOUR: default
...@@ -258,7 +259,7 @@ typecheck-testsuite: ...@@ -258,7 +259,7 @@ typecheck-testsuite:
# accommodate, e.g., haddock changes not yet upstream) but not on `master` or # accommodate, e.g., haddock changes not yet upstream) but not on `master` or
# Marge jobs. # Marge jobs.
.lint-submods: .lint-submods:
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
extends: .lint-params extends: .lint-params
variables: variables:
BUILD_FLAVOUR: default BUILD_FLAVOUR: default
...@@ -276,7 +277,7 @@ typecheck-testsuite: ...@@ -276,7 +277,7 @@ typecheck-testsuite:
# accommodate, e.g., haddock changes not yet upstream) but not on `master` or # accommodate, e.g., haddock changes not yet upstream) but not on `master` or
# Marge jobs. # Marge jobs.
lint-author: lint-author:
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
extends: .lint-params extends: .lint-params
variables: variables:
BUILD_FLAVOUR: default BUILD_FLAVOUR: default
...@@ -291,7 +292,7 @@ lint-author: ...@@ -291,7 +292,7 @@ lint-author:
- *drafts-can-fail-lint - *drafts-can-fail-lint
lint-ci-config: lint-ci-config:
image: nixos/nix:2.14.1 image: nixos/nix:2.25.2
extends: .lint extends: .lint
# We don't need history/submodules in this job # We don't need history/submodules in this job
variables: variables:
...@@ -299,6 +300,18 @@ lint-ci-config: ...@@ -299,6 +300,18 @@ lint-ci-config:
GIT_SUBMODULE_STRATEGY: none GIT_SUBMODULE_STRATEGY: none
before_script: before_script:
- echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf
# Note [Nix-in-Docker]
# ~~~~~~~~~~~~~~~~~~~~
# The nixos/nix default config is max-jobs=1 and cores=$(logical
# cores num) which doesn't play nice with our $CPUS convention. We
# fix it before invoking any nix build to avoid oversubscribing
# while allowing a reasonable degree of parallelism.
# FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See
# https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for
# discussion.
- echo "cores = $CPUS" >> /etc/nix/nix.conf
- echo "max-jobs = $CPUS" >> /etc/nix/nix.conf
- nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf
script: script:
- nix run .gitlab/generate-ci#generate-jobs - nix run .gitlab/generate-ci#generate-jobs
# 1 if .gitlab/generate_jobs changed the output of the generated config # 1 if .gitlab/generate_jobs changed the output of the generated config
...@@ -345,7 +358,7 @@ lint-submods-branch: ...@@ -345,7 +358,7 @@ lint-submods-branch:
.lint-params: .lint-params:
needs: [] needs: []
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
extends: .lint extends: .lint
before_script: before_script:
- export PATH="/opt/toolchain/bin:$PATH" - export PATH="/opt/toolchain/bin:$PATH"
...@@ -386,7 +399,7 @@ hadrian-ghc-in-ghci: ...@@ -386,7 +399,7 @@ hadrian-ghc-in-ghci:
- job: lint-linters - job: lint-linters
- job: lint-submods - job: lint-submods
optional: true optional: true
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
before_script: before_script:
# workaround for docker permissions # workaround for docker permissions
- sudo chown ghc:ghc -R . - sudo chown ghc:ghc -R .
...@@ -396,13 +409,14 @@ hadrian-ghc-in-ghci: ...@@ -396,13 +409,14 @@ hadrian-ghc-in-ghci:
- x86_64-linux - x86_64-linux
script: script:
- git clean -xdf && git submodule foreach git clean -xdf - git clean -xdf && git submodule foreach git clean -xdf
- .gitlab/ci.sh setup - . .gitlab/ci.sh setup
- .gitlab/ci.sh configure - . .gitlab/ci.sh configure
# Enable -Werror when building hadrian # Enable -Werror when building hadrian
- "echo 'package hadrian' > hadrian/cabal.project.local" - "echo 'package hadrian' > hadrian/cabal.project.local"
- "echo ' ghc-options: -Werror' >> hadrian/cabal.project.local" - "echo ' ghc-options: -Werror' >> hadrian/cabal.project.local"
# Load ghc-in-ghci then immediately exit and check the modules loaded # Load ghc-in-ghci then immediately exit and check the modules loaded
- echo ":q" | hadrian/ghci -j`mk/detect-cpu-count.sh`| tail -n2 | grep "Ok," - export CORES="$(mk/detect-cpu-count.sh)"
- echo ":q" | HADRIAN_ARGS=-j$CORES hadrian/ghci -j$CORES | tail -n2 | grep "Ok,"
after_script: after_script:
- .gitlab/ci.sh save_cache - .gitlab/ci.sh save_cache
- cat ci-timings - cat ci-timings
...@@ -430,7 +444,12 @@ hadrian-multi: ...@@ -430,7 +444,12 @@ hadrian-multi:
# workaround for docker permissions # workaround for docker permissions
- sudo chown ghc:ghc -R . - sudo chown ghc:ghc -R .
variables: variables:
GHC_FLAGS: "-Werror -Wwarn=deprecations" GHC_FLAGS: "-Werror=-Wno-error=incomplete-record-selectors -Wwarn=deprecations -Wwarn=unused-imports"
# -Wno-error=incomplete-record-selectors is present because -Wall now
# includes -Wincomplete-record-selectors, and hadrian-multi has many, many
# warnings about incomplete record selectors. A better fix would be to
# remove the use of incomplete record selectors, since each of them represents
# a potential crash.
CONFIGURE_ARGS: --enable-bootstrap-with-devel-snapshot CONFIGURE_ARGS: --enable-bootstrap-with-devel-snapshot
tags: tags:
- x86_64-linux - x86_64-linux
...@@ -449,12 +468,13 @@ hadrian-multi: ...@@ -449,12 +468,13 @@ hadrian-multi:
- export HC=$root/bin/ghc - export HC=$root/bin/ghc
# This GHC means, use this GHC to configure with # This GHC means, use this GHC to configure with
- export GHC=$root/bin/ghc - export GHC=$root/bin/ghc
- .gitlab/ci.sh setup - . .gitlab/ci.sh setup
- .gitlab/ci.sh configure - . .gitlab/ci.sh configure
# Now GHC means, use this GHC for hadrian # Now GHC means, use this GHC for hadrian
- export GHC=$BOOT_HC - export GHC=$BOOT_HC
- export CORES="$(mk/detect-cpu-count.sh)"
# Load hadrian-multi then immediately exit and check the modules loaded # Load hadrian-multi then immediately exit and check the modules loaded
- echo ":q" | hadrian/ghci-multi -j`mk/detect-cpu-count.sh`| tail -n2 | grep "Ok," - echo ":q" | HADRIAN_ARGS=-j$CORES hadrian/ghci-multi -j$CORES | tail -n2 | grep "Ok,"
after_script: after_script:
- .gitlab/ci.sh save_cache - .gitlab/ci.sh save_cache
cache: cache:
...@@ -475,8 +495,8 @@ stack-hadrian-build: ...@@ -475,8 +495,8 @@ stack-hadrian-build:
extends: hadrian-ghc-in-ghci extends: hadrian-ghc-in-ghci
stage: quick-build stage: quick-build
script: script:
- .gitlab/ci.sh setup - . .gitlab/ci.sh setup
- .gitlab/ci.sh configure - . .gitlab/ci.sh configure
- hadrian/build-stack --version - hadrian/build-stack --version
#################################### ####################################
...@@ -530,11 +550,11 @@ abi-test-nightly: ...@@ -530,11 +550,11 @@ abi-test-nightly:
doc-tarball: doc-tarball:
stage: packaging stage: packaging
needs: needs:
- job: x86_64-linux-deb10-numa-slow-validate - job: x86_64-linux-deb12-numa-slow-validate
optional: true optional: true
- job: nightly-x86_64-linux-deb10-validate - job: nightly-x86_64-linux-deb12-validate
optional: true optional: true
- job: release-x86_64-linux-deb10-release - job: release-x86_64-linux-deb12-release
optional: true optional: true
- job: x86_64-windows-validate - job: x86_64-windows-validate
...@@ -546,23 +566,28 @@ doc-tarball: ...@@ -546,23 +566,28 @@ doc-tarball:
tags: tags:
- x86_64-linux - x86_64-linux
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
dependencies: null dependencies: null
variables: variables:
LINUX_BINDIST: "ghc-x86_64-linux-deb10.tar.xz" LINUX_BINDIST: "ghc-x86_64-linux-deb12.tar.xz"
WINDOWS_BINDIST: "ghc-x86_64-windows.tar.xz" WINDOWS_BINDIST: "ghc-x86_64-windows.tar.xz"
artifacts: artifacts:
expose_as: "Documentation Preview"
paths: paths:
- haddock.html.tar.xz - haddock.html.tar.xz
- docs/haddock/
- libraries.html.tar.xz - libraries.html.tar.xz
- docs/libraries/
- users_guide.html.tar.xz - users_guide.html.tar.xz
- index.html - docs/users_guide/
- "*.pdf" - docs/index.html
- Haddock.pdf
- users_guide.pdf
script: script:
- | - |
mv "ghc-x86_64-linux-deb10-numa-slow-validate.tar.xz" "$LINUX_BINDIST" \ mv "ghc-x86_64-linux-deb12-numa-slow-validate.tar.xz" "$LINUX_BINDIST" \
|| mv "ghc-x86_64-linux-deb10-validate.tar.xz" "$LINUX_BINDIST" \ || mv "ghc-x86_64-linux-deb12-validate.tar.xz" "$LINUX_BINDIST" \
|| mv "ghc-x86_64-linux-deb10-release.tar.xz" "$LINUX_BINDIST" \ || mv "ghc-x86_64-linux-deb12-release.tar.xz" "$LINUX_BINDIST" \
|| true || true
mv "ghc-x86_64-windows-validate.tar.xz" "$WINDOWS_BINDIST" \ mv "ghc-x86_64-windows-validate.tar.xz" "$WINDOWS_BINDIST" \
|| mv "ghc-x86_64-windows-release.tar.xz" "$WINDOWS_BINDIST" \ || mv "ghc-x86_64-windows-release.tar.xz" "$WINDOWS_BINDIST" \
...@@ -577,8 +602,8 @@ doc-tarball: ...@@ -577,8 +602,8 @@ doc-tarball:
fi fi
- rm -Rf docs - rm -Rf docs
- bash -ex distrib/mkDocs/mkDocs $LINUX_BINDIST $WINDOWS_BINDIST - bash -ex distrib/mkDocs/mkDocs $LINUX_BINDIST $WINDOWS_BINDIST
- mv docs/*.tar.xz docs/*.pdf .
- ls -lh - ls -lh
- mv docs/*.tar.xz docs/index.html .
hackage-doc-tarball: hackage-doc-tarball:
stage: packaging stage: packaging
...@@ -590,7 +615,7 @@ hackage-doc-tarball: ...@@ -590,7 +615,7 @@ hackage-doc-tarball:
- job: source-tarball - job: source-tarball
tags: tags:
- x86_64-linux - x86_64-linux
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
dependencies: null dependencies: null
variables: variables:
# Don't clone the git repo.. # Don't clone the git repo..
...@@ -606,8 +631,8 @@ hackage-doc-tarball: ...@@ -606,8 +631,8 @@ hackage-doc-tarball:
script: script:
- cd ghc*/ - cd ghc*/
- mv .gitlab/rel_eng/upload_ghc_libs.py . - mv .gitlab/rel_eng/upload_ghc_libs.py .
- .gitlab/ci.sh setup - . .gitlab/ci.sh setup
- .gitlab/ci.sh configure - . .gitlab/ci.sh configure
- ./upload_ghc_libs.py prepare --bindist ghc*linux/ - ./upload_ghc_libs.py prepare --bindist ghc*linux/
- mv .upload-libs/docs ../hackage_docs - mv .upload-libs/docs ../hackage_docs
rules: rules:
...@@ -616,17 +641,19 @@ hackage-doc-tarball: ...@@ -616,17 +641,19 @@ hackage-doc-tarball:
source-tarball: source-tarball:
stage: full-build stage: full-build
needs:
- hadrian-ghc-in-ghci
tags: tags:
- x86_64-linux - x86_64-linux
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
dependencies: [] dependencies: []
artifacts: artifacts:
paths: paths:
- ghc-*.tar.xz - ghc-*.tar.xz
script: script:
- sudo chown ghc:ghc -R . - sudo chown ghc:ghc -R .
- ./boot - . .gitlab/ci.sh setup
- ./configure - . .gitlab/ci.sh configure
- ./hadrian/build source-dist - ./hadrian/build source-dist
- mv _build/source-dist/*.xz . - mv _build/source-dist/*.xz .
rules: rules:
...@@ -637,6 +664,8 @@ source-tarball: ...@@ -637,6 +664,8 @@ source-tarball:
generate-hadrian-bootstrap-sources: generate-hadrian-bootstrap-sources:
stage: full-build stage: full-build
needs:
- hadrian-ghc-in-ghci
tags: tags:
- x86_64-linux - x86_64-linux
image: "$DOCKER_IMAGE" image: "$DOCKER_IMAGE"
...@@ -660,7 +689,7 @@ package-hadrian-bootstrap-sources: ...@@ -660,7 +689,7 @@ package-hadrian-bootstrap-sources:
tags: tags:
- x86_64-linux - x86_64-linux
needs: ["generate-hadrian-bootstrap-sources"] needs: ["generate-hadrian-bootstrap-sources"]
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
artifacts: artifacts:
paths: paths:
- hadrian-bootstrap-sources-all.tar.gz - hadrian-bootstrap-sources-all.tar.gz
...@@ -692,7 +721,10 @@ test-bootstrap: ...@@ -692,7 +721,10 @@ test-bootstrap:
- .gitlab/ci.sh setup - .gitlab/ci.sh setup
# Bootstrapping should not depend on HAPPY or ALEX so set them to false # Bootstrapping should not depend on HAPPY or ALEX so set them to false
# so the build fails if they are invoked. # so the build fails if they are invoked.
- export HAPPY=/bin/false; export ALEX=/bin/false - unset HAPPY; unset ALEX
# Check the commands are not available, parens are crucial to start a subshell
- (! command -v alex --version)
- (! command -v happy --version)
- .gitlab/ci.sh configure - .gitlab/ci.sh configure
- .gitlab/ci.sh build_hadrian - .gitlab/ci.sh build_hadrian
- .gitlab/ci.sh test_hadrian - .gitlab/ci.sh test_hadrian
...@@ -701,7 +733,7 @@ test-bootstrap: ...@@ -701,7 +733,7 @@ test-bootstrap:
variables: variables:
# Don't record performance benchmarks # Don't record performance benchmarks
TEST_ENV: "" TEST_ENV: ""
BIN_DIST_NAME: "ghc-x86_64-deb10-linux" BIN_DIST_NAME: "ghc-x86_64-deb12-linux"
BUILD_FLAVOUR: "validate" BUILD_FLAVOUR: "validate"
NO_BOOT: "1" NO_BOOT: "1"
rules: rules:
...@@ -750,16 +782,16 @@ test-bootstrap: ...@@ -750,16 +782,16 @@ test-bootstrap:
hackage-lint: hackage-lint:
needs: needs:
- job: x86_64-linux-deb10-numa-slow-validate - job: x86_64-linux-deb12-numa-slow-validate
optional: true optional: true
artifacts: false artifacts: false
- job: nightly-x86_64-linux-deb10-numa-slow-validate - job: nightly-x86_64-linux-deb12-numa-slow-validate
optional: true optional: true
artifacts: false artifacts: false
- job: nightly-aarch64-linux-deb10-validate - job: nightly-aarch64-linux-deb12-validate
optional: true optional: true
artifacts: false artifacts: false
- job: aarch64-linux-deb10-validate - job: aarch64-linux-deb12-validate
optional: true optional: true
artifacts: false artifacts: false
extends: .hackage extends: .hackage
...@@ -774,10 +806,10 @@ hackage-lint: ...@@ -774,10 +806,10 @@ hackage-lint:
hackage-label-lint: hackage-label-lint:
needs: needs:
- job: x86_64-linux-deb10-numa-slow-validate - job: x86_64-linux-deb12-numa-slow-validate
optional: true optional: true
artifacts: false artifacts: false
- job: aarch64-linux-deb10-validate - job: aarch64-linux-deb12-validate
optional: true optional: true
artifacts: false artifacts: false
extends: .hackage extends: .hackage
...@@ -791,10 +823,10 @@ hackage-label-lint: ...@@ -791,10 +823,10 @@ hackage-label-lint:
# affects the total allocation numbers for the simplifier portion significantly. # affects the total allocation numbers for the simplifier portion significantly.
nightly-hackage-lint: nightly-hackage-lint:
needs: needs:
- job: nightly-x86_64-linux-deb10-numa-slow-validate - job: nightly-x86_64-linux-deb12-numa-slow-validate
optional: true optional: true
artifacts: false artifacts: false
- job: nightly-aarch64-linux-deb10-validate - job: nightly-aarch64-linux-deb12-validate
optional: true optional: true
artifacts: false artifacts: false
rules: rules:
...@@ -811,7 +843,7 @@ nightly-hackage-perf: ...@@ -811,7 +843,7 @@ nightly-hackage-perf:
- job: nightly-x86_64-linux-fedora33-release - job: nightly-x86_64-linux-fedora33-release
optional: true optional: true
artifacts: false artifacts: false
- job: nightly-aarch64-linux-deb10-validate - job: nightly-aarch64-linux-deb12-validate
optional: true optional: true
artifacts: false artifacts: false
rules: rules:
...@@ -830,12 +862,16 @@ release-hackage-lint: ...@@ -830,12 +862,16 @@ release-hackage-lint:
- job: release-x86_64-linux-fedora33-release - job: release-x86_64-linux-fedora33-release
optional: true optional: true
artifacts: false artifacts: false
- job: release-aarch64-linux-deb10-release+no_split_sections - job: release-aarch64-linux-deb12-release+no_split_sections
optional: true optional: true
artifacts: false artifacts: false
rules: rules:
- if: '$RELEASE_JOB == "yes"' - if: '$RELEASE_JOB == "yes"'
extends: .hackage extends: .hackage
# The ghcup metadata pipeline requires all prior jobs to
# pass. The hackage job can easily fail due to API changes
# or similar - so we allow it to fail.
allow_failure: true
variables: variables:
# No slow-validate bindist on release pipeline # No slow-validate bindist on release pipeline
EXTRA_HC_OPTS: "-dlint" EXTRA_HC_OPTS: "-dlint"
...@@ -859,9 +895,9 @@ release-hackage-lint: ...@@ -859,9 +895,9 @@ release-hackage-lint:
.test-primops-validate-template: .test-primops-validate-template:
needs: needs:
- job: x86_64-linux-deb10-validate+debug_info - job: x86_64-linux-deb12-validate
artifacts: false artifacts: false
- job: aarch64-linux-deb10-validate - job: aarch64-linux-deb12-validate
artifacts: false artifacts: false
- job: aarch64-darwin-validate - job: aarch64-darwin-validate
artifacts: false artifacts: false
...@@ -873,13 +909,17 @@ test-primops-label: ...@@ -873,13 +909,17 @@ test-primops-label:
extends: .test-primops-validate-template extends: .test-primops-validate-template
rules: rules:
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-primops.*/' - if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-primops.*/'
# We do not use *.full-ci here since that would imply running in nightly
# where we do not have the normal validate jobs. We have the -nightly job
# below to handle this case.
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/'
test-primops-nightly: test-primops-nightly:
extends: .test-primops extends: .test-primops
needs: needs:
- job: nightly-x86_64-linux-deb10-validate - job: nightly-x86_64-linux-deb12-validate
artifacts: false artifacts: false
- job: nightly-aarch64-linux-deb10-validate - job: nightly-aarch64-linux-deb12-validate
artifacts: false artifacts: false
- job: nightly-aarch64-darwin-validate - job: nightly-aarch64-darwin-validate
artifacts: false artifacts: false
...@@ -1018,6 +1058,7 @@ abi-test: ...@@ -1018,6 +1058,7 @@ abi-test:
- out - out
rules: rules:
- *full-ci - *full-ci
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*test-abi.*/'
############################################################ ############################################################
...@@ -1045,7 +1086,7 @@ pages: ...@@ -1045,7 +1086,7 @@ pages:
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="refresh" content="1; url=doc/"> <meta http-equiv="refresh" content="1; url=doc/">
EOF EOF
- cp -f index.html public/doc - cp -f docs/index.html public/doc
rules: rules:
# N.B. only run this on ghc/ghc since the deployed pages are quite large # N.B. only run this on ghc/ghc since the deployed pages are quite large
# and we only serve GitLab Pages for ghc/ghc. # and we only serve GitLab Pages for ghc/ghc.
...@@ -1063,7 +1104,7 @@ pages: ...@@ -1063,7 +1104,7 @@ pages:
project-version: project-version:
stage: packaging stage: packaging
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV" image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV"
tags: tags:
- x86_64-linux - x86_64-linux
variables: variables:
...@@ -1083,7 +1124,7 @@ project-version: ...@@ -1083,7 +1124,7 @@ project-version:
.ghcup-metadata: .ghcup-metadata:
stage: deploy stage: deploy
image: nixos/nix:2.14.1 image: nixos/nix:2.25.2
dependencies: null dependencies: null
tags: tags:
- x86_64-linux - x86_64-linux
...@@ -1092,6 +1133,10 @@ project-version: ...@@ -1092,6 +1133,10 @@ project-version:
GIT_SUBMODULE_STRATEGY: "none" GIT_SUBMODULE_STRATEGY: "none"
before_script: before_script:
- echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf
# FIXME: See Note [Nix-in-Docker]
- echo "cores = $CPUS" >> /etc/nix/nix.conf
- echo "max-jobs = $CPUS" >> /etc/nix/nix.conf
- nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf
- nix-channel --update - nix-channel --update
- cat version.sh - cat version.sh
# Calculate the project version # Calculate the project version
...@@ -1114,7 +1159,7 @@ ghcup-metadata-nightly: ...@@ -1114,7 +1159,7 @@ ghcup-metadata-nightly:
needs: needs:
- job: nightly-x86_64-linux-fedora33-release - job: nightly-x86_64-linux-fedora33-release
artifacts: false artifacts: false
- job: nightly-x86_64-linux-centos7-validate - job: nightly-x86_64-linux-ubuntu22_04-validate
artifacts: false artifacts: false
- job: nightly-x86_64-linux-ubuntu20_04-validate - job: nightly-x86_64-linux-ubuntu20_04-validate
artifacts: false artifacts: false
...@@ -1130,21 +1175,31 @@ ghcup-metadata-nightly: ...@@ -1130,21 +1175,31 @@ ghcup-metadata-nightly:
artifacts: false artifacts: false
- job: nightly-x86_64-linux-alpine3_12-validate - job: nightly-x86_64-linux-alpine3_12-validate
artifacts: false artifacts: false
- job: nightly-x86_64-linux-alpine3_20-validate
artifacts: false
- job: nightly-x86_64-linux-deb9-validate - job: nightly-x86_64-linux-deb9-validate
artifacts: false artifacts: false
- job: nightly-i386-linux-deb10-validate - job: nightly-i386-linux-deb10-validate
artifacts: false artifacts: false
- job: nightly-i386-linux-deb12-validate
artifacts: false
- job: nightly-x86_64-linux-deb10-validate - job: nightly-x86_64-linux-deb10-validate
artifacts: false artifacts: false
- job: nightly-aarch64-linux-deb10-validate - job: nightly-aarch64-linux-deb10-validate
artifacts: false artifacts: false
- job: nightly-x86_64-linux-deb11-validate - job: nightly-x86_64-linux-deb11-validate
artifacts: false artifacts: false
- job: nightly-x86_64-linux-deb12-validate
artifacts: false
- job: nightly-aarch64-linux-deb12-validate
artifacts: false
- job: nightly-aarch64-linux-alpine3_18-validate
artifacts: false
- job: source-tarball - job: source-tarball
artifacts: false artifacts: false
- job: project-version - job: project-version
script: script:
- nix shell --extra-experimental-features nix-command -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" - 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"
rules: rules:
- if: $NIGHTLY - if: $NIGHTLY
...@@ -1182,7 +1237,8 @@ ghcup-metadata-release: ...@@ -1182,7 +1237,8 @@ ghcup-metadata-release:
# No explicit needs for release pipeline as we assume we need everything and everything will pass. # No explicit needs for release pipeline as we assume we need everything and everything will pass.
extends: .ghcup-metadata extends: .ghcup-metadata
script: script:
- nix shell --extra-experimental-features nix-command -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" - 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
- 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"
rules: rules:
- if: '$RELEASE_JOB == "yes"' - if: '$RELEASE_JOB == "yes"'
...@@ -1193,10 +1249,17 @@ ghcup-metadata-release: ...@@ -1193,10 +1249,17 @@ ghcup-metadata-release:
UPSTREAM_PROJECT_ID: "$CI_PROJECT_ID" UPSTREAM_PROJECT_ID: "$CI_PROJECT_ID"
UPSTREAM_PIPELINE_ID: "$CI_PIPELINE_ID" UPSTREAM_PIPELINE_ID: "$CI_PIPELINE_ID"
RELEASE_JOB: "$RELEASE_JOB" RELEASE_JOB: "$RELEASE_JOB"
# Do not inherit global variables (such as CONFIGURE_ARGS) as these take
# precedence over the variables defined in the downstream job.
inherit:
variables: false
trigger: trigger:
project: "ghc/ghcup-ci" project: "ghc/ghcup-ci"
branch: "upstream-testing" branch: "upstream-testing"
strategy: "depend" strategy: "depend"
forward:
yaml_variables: true
pipeline_variables: false
ghcup-metadata-testing-nightly: ghcup-metadata-testing-nightly:
needs: needs:
......
# Where the GitLab happens
## Updating PERF_NOTES_PUSH_CREDENTIALS
This CI variable is used by test-metrics.sh to push performance data as a git
note to https://gitlab.haskell.org/ghc/ghc-performance-notes.
The current token will expire on 2025-07-02.
### STEPS
Set and fetch the updated token:
```
GITLAB_WRITE=<Your Gitlab API token>
one_year_later="$(date --date='1 year' --iso-8601)"
curl -X POST --header "PRIVATE-TOKEN: $GITLAB_WRITE" -H "Content-Type: application/json" \
--data '{"name":"test-metrics.sh", "scopes":["write_repository"], "expires_at":"$one_year_later"}' \
https://gitlab.haskell.org/api/v4/projects/117/access_tokens \
| jq .token
```
Update the variable:
```
GITLAB_WRITE=<Your Gitlab API token>
NEW_VALUE=<Output from the above>
curl --fail-with-body --request PUT --header "PRIVATE-TOKEN: $GITLAB_WRITE" \
"https://gitlab.haskell.org/api/v4/projects/1/variables/PERF_NOTES_PUSH_CREDENTIALS" \
--form "value=$NEW_VALUE"
```
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
set -Eeuo pipefail set -Eeuo pipefail
# Configuration: # Configuration:
HACKAGE_INDEX_STATE="2023-10-05T11:38:51Z" # N.B. You may want to also update the index-state in hadrian/cabal.project.
HACKAGE_INDEX_STATE="2025-01-27T17:45:32Z"
MIN_HAPPY_VERSION="1.20" MIN_HAPPY_VERSION="1.20"
MIN_ALEX_VERSION="3.2.6" MIN_ALEX_VERSION="3.2.6"
...@@ -151,6 +152,8 @@ function mingw_init() { ...@@ -151,6 +152,8 @@ function mingw_init() {
# We always use mingw64 Python to avoid path length issues like #17483. # We always use mingw64 Python to avoid path length issues like #17483.
export PYTHON="/mingw64/bin/python3" export PYTHON="/mingw64/bin/python3"
# And need to use sphinx-build from the environment
export SPHINXBUILD="/mingw64/bin/sphinx-build.exe"
} }
# This will contain GHC's local native toolchain # This will contain GHC's local native toolchain
...@@ -305,7 +308,7 @@ function fetch_cabal() { ...@@ -305,7 +308,7 @@ function fetch_cabal() {
fail "neither CABAL nor CABAL_INSTALL_VERSION are not set" fail "neither CABAL nor CABAL_INSTALL_VERSION are not set"
fi fi
start_section "fetch GHC" start_section "fetch cabal"
case "$(uname)" in case "$(uname)" in
# N.B. Windows uses zip whereas all others use .tar.xz # N.B. Windows uses zip whereas all others use .tar.xz
MSYS_*|MINGW*) MSYS_*|MINGW*)
...@@ -323,16 +326,22 @@ function fetch_cabal() { ...@@ -323,16 +326,22 @@ function fetch_cabal() {
local base_url="https://downloads.haskell.org/~cabal/cabal-install-$v/" local base_url="https://downloads.haskell.org/~cabal/cabal-install-$v/"
case "$(uname)" in case "$(uname)" in
Darwin) cabal_url="$base_url/cabal-install-$v-x86_64-apple-darwin17.7.0.tar.xz" ;; Darwin) cabal_url="$base_url/cabal-install-$v-x86_64-apple-darwin17.7.0.tar.xz" ;;
FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd13.tar.xz" ;; FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd14.tar.xz" ;;
*) fail "don't know where to fetch cabal-install for $(uname)" *) fail "don't know where to fetch cabal-install for $(uname)"
esac esac
echo "Fetching cabal-install from $cabal_url" echo "Fetching cabal-install from $cabal_url"
curl "$cabal_url" > cabal.tar.xz curl "$cabal_url" > cabal.tar.xz
tmp="$(tar -tJf cabal.tar.xz | head -n1)"
$TAR -xJf cabal.tar.xz $TAR -xJf cabal.tar.xz
mv cabal "$toolchain/bin" # Check if the bindist has directory structure
if [[ "$tmp" = "cabal" ]]; then
mv cabal "$toolchain/bin"
else
mv "$tmp/cabal" "$toolchain/bin"
fi
;; ;;
esac esac
end_section "fetch GHC" end_section "fetch cabal"
fi fi
} }
...@@ -401,6 +410,12 @@ function configure() { ...@@ -401,6 +410,12 @@ function configure() {
else else
args+=("--disable-numa") args+=("--disable-numa")
fi fi
if [[ -n ${HAPPY:-} ]]; then
args+=("HAPPY=$HAPPY")
fi
if [[ -n ${ALEX:-} ]]; then
args+=("ALEX=$ALEX")
fi
start_section "configuring" start_section "configuring"
# See https://stackoverflow.com/questions/7577052 for a rationale for the # See https://stackoverflow.com/questions/7577052 for a rationale for the
...@@ -409,8 +424,6 @@ function configure() { ...@@ -409,8 +424,6 @@ function configure() {
--enable-tarballs-autodownload \ --enable-tarballs-autodownload \
"${args[@]+"${args[@]}"}" \ "${args[@]+"${args[@]}"}" \
GHC="$GHC" \ GHC="$GHC" \
HAPPY="$HAPPY" \
ALEX="$ALEX" \
|| ( cat config.log; fail "configure failed" ) || ( cat config.log; fail "configure failed" )
end_section "configuring" end_section "configuring"
} }
...@@ -425,7 +438,9 @@ function push_perf_notes() { ...@@ -425,7 +438,9 @@ function push_perf_notes() {
return return
fi fi
if [ -n "${CROSS_TARGET:-}" ] && [ "${CROSS_EMULATOR:-}" != "js-emulator" ]; then # TODO: Remove this check, see #25299
# It is easy to forget to update this when testing a new cross platform
if [[ -n "${CROSS_TARGET:-}" ]] && [[ "${CROSS_TARGET:-}" != *"javascript"* ]] && [[ "${CROSS_TARGET:-}" != *"wasm"* ]]; then
info "Can't test cross-compiled build." info "Can't test cross-compiled build."
return return
fi fi
...@@ -554,8 +569,10 @@ function install_bindist() { ...@@ -554,8 +569,10 @@ function install_bindist() {
run ${CONFIGURE_WRAPPER:-} ./configure \ run ${CONFIGURE_WRAPPER:-} ./configure \
--prefix="$instdir" \ --prefix="$instdir" \
"${args[@]+"${args[@]}"}" "${args[@]+"${args[@]}"}" || fail "bindist configure failed"
make_install_destdir "$TOP"/destdir "$instdir" make_install_destdir "$TOP"/destdir "$instdir"
# And check the `--info` of the installed compiler, sometimes useful in CI log.
"$instdir"/bin/ghc --info
;; ;;
esac esac
popd popd
...@@ -671,12 +688,25 @@ function test_hadrian() { ...@@ -671,12 +688,25 @@ function test_hadrian() {
} }
function summarise_hi_files() { function summarise_hi_files() {
for iface in $(find . -type f -name "*.hi" | sort); do echo "$iface $($HC --show-iface $iface | grep " ABI hash:")"; done | tee $OUT/abis hi_files=$(find . -type f -name "*.hi" | sort)
for iface in $(find . -type f -name "*.hi" | sort); do echo "$iface $($HC --show-iface $iface | grep " interface hash:")"; done | tee $OUT/interfaces for iface in $hi_files; do echo "$iface $($HC --show-iface "$iface" | grep " ABI hash:")"; done | tee $OUT/abis
for iface in $(find . -type f -name "*.hi" | sort); do for iface in $hi_files; do echo "$iface $($HC --show-iface "$iface" | grep " interface hash:")"; done | tee $OUT/interfaces
fname="$OUT/$(dirname $iface)" for iface in $hi_files; do
mkdir -p $fname fname="$OUT/$(dirname "$iface")"
$HC --show-iface $iface > "$OUT/$iface" mkdir -p "$fname"
$HC --show-iface "$iface" > "$OUT/$iface"
done
}
function summarise_o_files() {
OBJDUMP=$(if test "$(uname)" == "Darwin"; then echo "objdump -m"; else echo "objdump"; fi)
o_files=$(find . -type f -name "*.o" | sort)
for o in $o_files; do
fname="$OUT/objs/$(dirname "$o")"
mkdir -p "$fname"
# To later compare object dumps except for the first line which prints the file path
$OBJDUMP --all-headers "$o" | tail -n+2 > "$OUT/objs/$o.all-headers"
$OBJDUMP --disassemble-all "$o" | tail -n+2 > "$OUT/objs/$o.disassemble-all"
done done
} }
...@@ -691,11 +721,13 @@ function cabal_abi_test() { ...@@ -691,11 +721,13 @@ function cabal_abi_test() {
start_section "Cabal test: $OUT" start_section "Cabal test: $OUT"
mkdir -p "$OUT" mkdir -p "$OUT"
run "$HC" \ "$HC" \
-hidir tmp -odir tmp -fforce-recomp -haddock \ -hidir tmp -odir tmp -fforce-recomp -haddock \
-iCabal/Cabal/src -XNoPolyKinds Distribution.Simple -j"$cores" \ -iCabal/Cabal/src -XNoPolyKinds Distribution.Simple -j"$cores" \
"$@" 2>&1 | tee $OUT/log -fobject-determinism \
"$@" 2>&1 | sed '1d' | tee $OUT/log
summarise_hi_files summarise_hi_files
summarise_o_files
popd popd
end_section "Cabal test: $OUT" end_section "Cabal test: $OUT"
} }
...@@ -740,12 +772,40 @@ function check_interfaces(){ ...@@ -740,12 +772,40 @@ function check_interfaces(){
for line in $(echo "$difference" | tr ' ' '\n' | grep ".hi" | sort | uniq); do for line in $(echo "$difference" | tr ' ' '\n' | grep ".hi" | sort | uniq); do
diff "$1/$line" "$2/$line" diff "$1/$line" "$2/$line"
done done
fail "$3" fail "$4"
fi fi
} }
function check_objects(){
# Big fast check
if diff -r "$1" "$2"
then
echo "Objects are the same"
else
echo "--------------------------------------------------------------------------------"
echo "Comparing all objects (1. headers, 2. disassembly). Stopping at first failure..."
echo "--------------------------------------------------------------------------------"
pushd "$1" >/dev/null
OBJ_DUMPS=$(find . -type f -name "*.all-headers" -or -name "*.disassemble-all")
popd >/dev/null
for dump in $OBJ_DUMPS
do
if diff "$1/$dump" "$2/$dump"
then
fail "Mismatched object: $dump"
fi
done
fail "Some objects are mismatched, but theres no diff with --all-headers or --disassemble-all. Perhaps try objdump -s"
fi
}
function abi_test() { function abi_test() {
for i in {1..20}; do info "iteration $i"; run_abi_test; done for i in {1..10}; do info "iteration $i"; run_abi_test; done
} }
function run_abi_test() { function run_abi_test() {
...@@ -753,10 +813,12 @@ function run_abi_test() { ...@@ -753,10 +813,12 @@ function run_abi_test() {
fail "HC not set" fail "HC not set"
fi fi
mkdir -p out mkdir -p out
OUT="$PWD/out/run1" DIR=$(mktemp -d XXXX-looooooooong) cabal_abi_test -O0 OUT="$PWD/out/run1" DIR=$(mktemp -d XXXX-looooooooong) cabal_abi_test -O1 -haddock
OUT="$PWD/out/run2" DIR=$(mktemp -d XXXX-short) cabal_abi_test -O0 # Count uniques in reverse one of the runs to get more non-determinism exposed
OUT="$PWD/out/run2" DIR=$(mktemp -d XXXX-short) cabal_abi_test -O1 -haddock -dunique-increment=-1 -dinitial-unique=16777215
check_interfaces out/run1 out/run2 abis "Mismatched ABI hash" check_interfaces out/run1 out/run2 abis "Mismatched ABI hash"
check_interfaces out/run1 out/run2 interfaces "Mismatched interface hashes" check_interfaces out/run1 out/run2 interfaces "Mismatched interface hashes"
check_objects out/run1 out/run2
} }
function save_test_output() { function save_test_output() {
...@@ -898,7 +960,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/ ...@@ -898,7 +960,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/
fi fi
fi fi
if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then
RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES" RUNTEST_ARGS=( "${RUNTEST_ARGS[@]:-}" "--ignore-perf-failures=$IGNORE_PERF_FAILURES" )
fi fi
if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi
......
...@@ -12,15 +12,15 @@ ...@@ -12,15 +12,15 @@
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
}, },
"nixpkgs": { "nixpkgs": {
"branch": "master", "branch": "nixos-unstable",
"description": "Nix Packages collection", "description": "Nix Packages collection",
"homepage": "", "homepage": "",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ce1aa29621356706746c53e2d480da7c68f6c972", "rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60",
"sha256": "sha256:1sbs3gi1nf4rcbmnw69fw0fpvb3qvlsa84hqimv78vkpd6xb0bgg", "sha256": "1anwxmjpm21msnnlrjdz19w31bxnbpn4kgf93sn3npihi7wf4a8h",
"type": "tarball", "type": "tarball",
"url": "https://github.com/nixos/nixpkgs/archive/ce1aa29621356706746c53e2d480da7c68f6c972.tar.gz", "url": "https://github.com/nixos/nixpkgs/archive/2893f56de08021cffd9b6b6dfc70fd9ccd51eb60.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
} }
} }
...@@ -4,6 +4,7 @@ let ...@@ -4,6 +4,7 @@ let
sources = import ./nix/sources.nix; sources = import ./nix/sources.nix;
nixpkgsSrc = sources.nixpkgs; nixpkgsSrc = sources.nixpkgs;
pkgs = import nixpkgsSrc { inherit system; }; pkgs = import nixpkgsSrc { inherit system; };
hostPkgs = import nixpkgsSrc { };
in in
let let
...@@ -13,25 +14,29 @@ let ...@@ -13,25 +14,29 @@ let
targetTriple = pkgs.stdenv.targetPlatform.config; targetTriple = pkgs.stdenv.targetPlatform.config;
ghcBindists = let version = ghc.version; in { ghcBindists = let version = ghc.version; in {
aarch64-darwin = pkgs.fetchurl { aarch64-darwin = hostPkgs.fetchurl {
url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-aarch64-apple-darwin.tar.xz"; url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-aarch64-apple-darwin.tar.xz";
sha256 = "sha256-tQUHsingxBizLktswGAoi6lJf92RKWLjsHB9CisANlg="; sha256 = "sha256-c1GTMJf3/yiW/t4QL532EswD5JVlgA4getkfsxj4TaA=";
}; };
x86_64-darwin = pkgs.fetchurl { x86_64-darwin = hostPkgs.fetchurl {
url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz"; url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz";
sha256 = "sha256-OjXjVe+ZODDCc/hqtihqqz6CX25TKI0ZgORzkR5O3pQ="; sha256 = "sha256-LrYniMG0phsvyW6dhQC+3ompvzcxnwAe6GezEqqzoTQ=";
}; };
}; };
ghc = pkgs.stdenv.mkDerivation rec { ghc = pkgs.stdenv.mkDerivation rec {
version = "9.4.4"; # Using 9.6.2 because of #24050
version = "9.6.2";
name = "ghc"; name = "ghc";
src = ghcBindists.${pkgs.stdenv.hostPlatform.system}; src = ghcBindists.${pkgs.stdenv.hostPlatform.system};
configureFlags = [ configureFlags = [
"CC=/usr/bin/clang" "CC=/usr/bin/clang"
"CLANG=/usr/bin/clang" "CLANG=/usr/bin/clang"
"AR=/usr/bin/ar"
"LLC=${llvm}/bin/llc" "LLC=${llvm}/bin/llc"
"OPT=${llvm}/bin/opt" "OPT=${llvm}/bin/opt"
"LLVMAS=${llvm_clang}/bin/clang"
"CONF_CC_OPTS_STAGE2=--target=${targetTriple}" "CONF_CC_OPTS_STAGE2=--target=${targetTriple}"
"CONF_CXX_OPTS_STAGE2=--target=${targetTriple}" "CONF_CXX_OPTS_STAGE2=--target=${targetTriple}"
"CONF_GCC_LINKER_OPTS_STAGE2=--target=${targetTriple}" "CONF_GCC_LINKER_OPTS_STAGE2=--target=${targetTriple}"
...@@ -92,7 +97,8 @@ let ...@@ -92,7 +97,8 @@ let
}; };
fonts = with pkgs; makeFontsConf { fontDirectories = [ dejavu_fonts ]; }; fonts = with pkgs; makeFontsConf { fontDirectories = [ dejavu_fonts ]; };
llvm = pkgs.llvm_11; llvm = pkgs.llvm_15;
llvm_clang = pkgs.llvmPackages_15.clang-unwrapped;
in in
pkgs.writeTextFile { pkgs.writeTextFile {
name = "toolchain"; name = "toolchain";
...@@ -108,6 +114,7 @@ pkgs.writeTextFile { ...@@ -108,6 +114,7 @@ pkgs.writeTextFile {
export GHC="${ghc}/bin/ghc" export GHC="${ghc}/bin/ghc"
export LLC="${llvm}/bin/llc" export LLC="${llvm}/bin/llc"
export OPT="${llvm}/bin/opt" export OPT="${llvm}/bin/opt"
export LLVMAS="${llvm_clang}/bin/clang"
export SPHINXBUILD="${pkgs.python3Packages.sphinx}/bin/sphinx-build" export SPHINXBUILD="${pkgs.python3Packages.sphinx}/bin/sphinx-build"
export CABAL_INSTALL="${pkgs.cabal-install}/bin/cabal" export CABAL_INSTALL="${pkgs.cabal-install}/bin/cabal"
export CABAL="$CABAL_INSTALL" export CABAL="$CABAL_INSTALL"
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1687709756, "lastModified": 1710146030,
"narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=", "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github" "type": "github"
}, },
"original": { "original": {
...@@ -20,11 +20,11 @@ ...@@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1687886075, "lastModified": 1724334015,
"narHash": "sha256-PeayJDDDy+uw1Ats4moZnRdL1OFuZm1Tj+KiHlD67+o=", "narHash": "sha256-5sfvc0MswIRNdRWioUhG58rGKGn2o90Ck6l6ClpwQqA=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a565059a348422af5af9026b5174dc5c0dcefdae", "rev": "6d204f819efff3d552a88d0a44b5aaaee172b784",
"type": "github" "type": "github"
}, },
"original": { "original": {
......
This diff is collapsed.
{-# OPTIONS_GHC -Wall -Wno-missing-fields #-} {-# OPTIONS_GHC -Wall -Wno-missing-fields #-}
import GHC.Unit.Types (stringToUnitId)
import GHC hiding (parseModule) import GHC hiding (parseModule)
import GHC.Data.StringBuffer import GHC.Data.StringBuffer
import GHC.Driver.Config.Parser import GHC.Driver.Config.Parser
...@@ -26,7 +27,8 @@ fakeSettings = ...@@ -26,7 +27,8 @@ fakeSettings =
sToolSettings = ToolSettings {}, sToolSettings = ToolSettings {},
sTargetPlatform = sTargetPlatform =
genericPlatform, genericPlatform,
sPlatformMisc = PlatformMisc {} sPlatformMisc = PlatformMisc {},
sUnitSettings = UnitSettings { unitSettings_baseUnitId = stringToUnitId "base" }
} }
fakeDynFlags :: DynFlags fakeDynFlags :: DynFlags
......
This diff is collapsed.
...@@ -7,7 +7,12 @@ expectations. Also please answer the following question in your MR description:* ...@@ -7,7 +7,12 @@ expectations. Also please answer the following question in your MR description:*
Please take a few moments to address the following points: Please take a few moments to address the following points:
* [ ] if your MR may break existing programs (e.g. touches `base` or causes the * [ ] if your MR touches `base` (or touches parts of `ghc-internal` used
or re-exported by `base`) more substantially than just amending comments
or documentation, you likely need to raise a
[CLC proposal](https://github.com/haskell/core-libraries-committee#base-package)
before merging it.
* [ ] if your MR may break existing programs (e.g. causes the
compiler to reject programs), please describe the expected breakage and add compiler to reject programs), please describe the expected breakage and add
the ~"user-facing" label. This will run ghc/head.hackage> to characterise the ~"user-facing" label. This will run ghc/head.hackage> to characterise
the effect of your change on Hackage. the effect of your change on Hackage.
...@@ -30,7 +35,7 @@ label can be applied to perform additional validation checks if your MR affects ...@@ -30,7 +35,7 @@ label can be applied to perform additional validation checks if your MR affects
unusual configuration. unusual configuration.
Once your change is ready please remove the `WIP:` tag and wait for review. If Once your change is ready please remove the `WIP:` tag and wait for review. If
no one has offerred review in a few days then please leave a comment mentioning no one has offered a review in a few days then please leave a comment mentioning
@triagers and apply the ~"Blocked on Review" label. @triagers and apply the ~"Blocked on Review" label.
[notes]: https://gitlab.haskell.org/ghc/ghc/wikis/commentary/coding-style#comments-in-the-source-code [notes]: https://gitlab.haskell.org/ghc/ghc/wikis/commentary/coding-style#comments-in-the-source-code
......
Thank your for your contribution to Haddock!
* [ ] This MR relates to \<ticket number>
* [ ] I have read the [CONTRIBUTING](./utils/haddock/CONTRIBUTING.md) guide
* [ ] I have inserted a CHANGELOG entry if this warrants it
* [ ] I have squashed my commits
* [ ] I have added tests if necessary
* [ ] I have updated the documentation
If you have any questions don't hesitate to open your merge request and inquire
in a comment. If your patch isn't quite done yet please do add prefix your MR
title with `Draft:`.
Once your change is ready please remove the `Draft:` tag and wait for review. If
no one has offered a review in a few days then please leave a comment mentioning
@triagers and apply the ~"Blocked on Review" label.
...@@ -27,6 +27,15 @@ let ...@@ -27,6 +27,15 @@ let
buildCommand = '' buildCommand = ''
mkdir -p $out/bin mkdir -p $out/bin
makeWrapper ${./recompress-all} $out/bin/recompress-all \
--prefix PATH : ${gnumake}/bin \
--prefix PATH : ${gnutar}/bin \
--prefix PATH : ${lzip}/bin \
--prefix PATH : ${bzip2}/bin \
--prefix PATH : ${gzip}/bin \
--prefix PATH : ${xz}/bin \
--prefix PATH : ${zip}/bin
makeWrapper ${./upload.sh} $out/bin/upload.sh \ makeWrapper ${./upload.sh} $out/bin/upload.sh \
--prefix PATH : ${moreutils}/bin \ --prefix PATH : ${moreutils}/bin \
--prefix PATH : ${lftp}/bin \ --prefix PATH : ${lftp}/bin \
...@@ -35,8 +44,8 @@ let ...@@ -35,8 +44,8 @@ let
--prefix PATH : ${s3cmd}/bin \ --prefix PATH : ${s3cmd}/bin \
--prefix PATH : ${gnupg}/bin \ --prefix PATH : ${gnupg}/bin \
--prefix PATH : ${pinentry}/bin \ --prefix PATH : ${pinentry}/bin \
--prefix PATH : ${parallel}/bin \
--prefix PATH : ${python3}/bin \ --prefix PATH : ${python3}/bin \
--prefix PATH : $out/bin \
--set ENTER_FHS_ENV ${bindistPrepEnv}/bin/enter-fhs \ --set ENTER_FHS_ENV ${bindistPrepEnv}/bin/enter-fhs \
--set BASH ${bash}/bin/bash --set BASH ${bash}/bin/bash
......
...@@ -18,15 +18,16 @@ def job_triple(job_name): ...@@ -18,15 +18,16 @@ def job_triple(job_name):
bindists = { bindists = {
'release-x86_64-windows-release': 'x86_64-unknown-mingw32', 'release-x86_64-windows-release': 'x86_64-unknown-mingw32',
'release-x86_64-windows-int_native-release': 'x86_64-unknown-mingw32-int_native', 'release-x86_64-windows-int_native-release': 'x86_64-unknown-mingw32-int_native',
'release-x86_64-rocky8-release': 'x86_64-rocky8-linux', 'release-x86_64-linux-rocky8-release': 'x86_64-rocky8-linux',
'release-x86_64-linux-ubuntu22_04-release': 'x86_64-ubuntu22_04-linux',
'release-x86_64-linux-ubuntu20_04-release': 'x86_64-ubuntu20_04-linux', 'release-x86_64-linux-ubuntu20_04-release': 'x86_64-ubuntu20_04-linux',
'release-x86_64-linux-ubuntu18_04-release': 'x86_64-ubuntu18_04-linux', 'release-x86_64-linux-ubuntu18_04-release': 'x86_64-ubuntu18_04-linux',
'release-x86_64-linux-fedora38-release': 'x86_64-fedora38-linux',
'release-x86_64-linux-fedora33-release+debug_info': 'x86_64-fedora33-linux-dwarf', 'release-x86_64-linux-fedora33-release+debug_info': 'x86_64-fedora33-linux-dwarf',
'release-x86_64-linux-fedora33-release': 'x86_64-fedora33-linux', 'release-x86_64-linux-fedora33-release': 'x86_64-fedora33-linux',
'release-x86_64-linux-fedora38-release': 'x86_64-fedora38-linux',
'release-x86_64-linux-fedora27-release': 'x86_64-fedora27-linux', 'release-x86_64-linux-fedora27-release': 'x86_64-fedora27-linux',
'release-x86_64-linux-deb11-release': 'x86_64-deb11-linux',
'release-x86_64-linux-deb12-release': 'x86_64-deb12-linux', 'release-x86_64-linux-deb12-release': 'x86_64-deb12-linux',
'release-x86_64-linux-deb11-release': 'x86_64-deb11-linux',
'release-x86_64-linux-deb10-release+debug_info': 'x86_64-deb10-linux-dwarf', 'release-x86_64-linux-deb10-release+debug_info': 'x86_64-deb10-linux-dwarf',
'release-x86_64-linux-deb10-release': 'x86_64-deb10-linux', 'release-x86_64-linux-deb10-release': 'x86_64-deb10-linux',
'release-x86_64-linux-deb9-release': 'x86_64-deb9-linux', 'release-x86_64-linux-deb9-release': 'x86_64-deb9-linux',
...@@ -34,13 +35,16 @@ def job_triple(job_name): ...@@ -34,13 +35,16 @@ def job_triple(job_name):
'release-x86_64-linux-alpine3_12-release+fully_static': 'x86_64-alpine3_12-linux-static', 'release-x86_64-linux-alpine3_12-release+fully_static': 'x86_64-alpine3_12-linux-static',
'release-x86_64-linux-alpine3_12-release': 'x86_64-alpine3_12-linux', 'release-x86_64-linux-alpine3_12-release': 'x86_64-alpine3_12-linux',
'release-x86_64-linux-alpine3_12-int_native-release+fully_static': 'x86_64-alpine3_12-linux-static-int_native', 'release-x86_64-linux-alpine3_12-int_native-release+fully_static': 'x86_64-alpine3_12-linux-static-int_native',
'release-x86_64-linux-alpine3_20-release': 'x86_64-alpine3_20-linux',
'release-x86_64-darwin-release': 'x86_64-apple-darwin', 'release-x86_64-darwin-release': 'x86_64-apple-darwin',
'release-i386-linux-deb9-release': 'i386-deb9-linux', 'release-i386-linux-deb12-release': 'i386-deb12-linux',
'release-i386-linux-deb10-release': 'i386-deb10-linux', 'release-i386-linux-deb10-release': 'i386-deb10-linux',
'release-i386-linux-deb9-release': 'i386-deb9-linux',
'release-armv7-linux-deb10-release': 'armv7-deb10-linux', 'release-armv7-linux-deb10-release': 'armv7-deb10-linux',
'release-aarch64-linux-deb10-release': 'aarch64-deb10-linux', 'release-aarch64-linux-deb10-release': 'aarch64-deb10-linux',
'release-aarch64-linux-deb11-release': 'aarch64-deb11-linux', 'release-aarch64-linux-deb11-release': 'aarch64-deb11-linux',
'release-aarch64-linux-alpine_3_18-release': 'aarch64-alpine3_18-linux', 'release-aarch64-linux-deb12-release': 'aarch64-deb12-linux',
'release-aarch64-linux-alpine3_18-release+no_split_sections': 'aarch64-alpine3_18-linux',
'release-aarch64-darwin-release': 'aarch64-apple-darwin', 'release-aarch64-darwin-release': 'aarch64-apple-darwin',
'source-tarball': 'src', 'source-tarball': 'src',
...@@ -128,7 +132,7 @@ def fetch_artifacts(release: str, pipeline_id: int, ...@@ -128,7 +132,7 @@ def fetch_artifacts(release: str, pipeline_id: int,
for f in doc_files: for f in doc_files:
subprocess.run(['tar', '-xf', f, '-C', dest]) subprocess.run(['tar', '-xf', f, '-C', dest])
logging.info(f'extracted docs {f} to {dest}') logging.info(f'extracted docs {f} to {dest}')
index_path = destdir / 'index.html' index_path = destdir / 'docs' / 'index.html'
index_path.replace(dest / 'index.html') index_path.replace(dest / 'index.html')
elif job.name == 'hackage-doc-tarball': elif job.name == 'hackage-doc-tarball':
dest = dest_dir / 'hackage_docs' dest = dest_dir / 'hackage_docs'
......
...@@ -22,7 +22,7 @@ options: ...@@ -22,7 +22,7 @@ options:
``` ```
The script also requires the `.gitlab/jobs-metadata.yaml` file which can be generated The script also requires the `.gitlab/jobs-metadata.yaml` file which can be generated
by running `.gitlab/generate_jobs_metadata` script if you want to run it locally. by running `.gitlab/generate-ci/generate_jobs_metadata` script if you want to run it locally.
## CI Pipelines ## CI Pipelines
......
...@@ -36,16 +36,16 @@ import os ...@@ -36,16 +36,16 @@ import os
import yaml import yaml
import gitlab import gitlab
from urllib.request import urlopen from urllib.request import urlopen
from urllib.parse import urlparse
import hashlib import hashlib
import sys import sys
import json import json
import urllib.parse import urllib.parse
import fetch_gitlab import fetch_gitlab
def eprint(*args, **kwargs): def eprint(*args, **kwargs) -> None:
print(*args, file=sys.stderr, **kwargs) print(*args, file=sys.stderr, **kwargs)
gl = gitlab.Gitlab('https://gitlab.haskell.org', per_page=100) gl = gitlab.Gitlab('https://gitlab.haskell.org', per_page=100)
# TODO: Take this file as an argument # TODO: Take this file as an argument
...@@ -59,6 +59,10 @@ with open(metadata_file, 'r') as f: ...@@ -59,6 +59,10 @@ with open(metadata_file, 'r') as f:
eprint(f"Supported platforms: {job_mapping.keys()}") eprint(f"Supported platforms: {job_mapping.keys()}")
# Mapping from job name to its corresponding Job
JobMap = Dict[str, gitlab.Job]
GhcupDist = object
# Artifact precisely specifies a job what the bindist to download is called. # Artifact precisely specifies a job what the bindist to download is called.
class Artifact(NamedTuple): class Artifact(NamedTuple):
...@@ -66,6 +70,7 @@ class Artifact(NamedTuple): ...@@ -66,6 +70,7 @@ class Artifact(NamedTuple):
download_name: str download_name: str
output_name: str output_name: str
subdir: str subdir: str
anchor_name: str
# Platform spec provides a specification which is agnostic to Job # Platform spec provides a specification which is agnostic to Job
# PlatformSpecs are converted into Artifacts by looking in the jobs-metadata.json file. # PlatformSpecs are converted into Artifacts by looking in the jobs-metadata.json file.
...@@ -76,45 +81,46 @@ class PlatformSpec(NamedTuple): ...@@ -76,45 +81,46 @@ class PlatformSpec(NamedTuple):
source_artifact = Artifact('source-tarball' source_artifact = Artifact('source-tarball'
, 'ghc-{version}-src.tar.xz' , 'ghc-{version}-src.tar.xz'
, 'ghc-{version}-src.tar.xz' , 'ghc-{version}-src.tar.xz'
, 'ghc-{version}' ) , 'ghc-{version}'
, 'ghc{version}-src')
test_artifact = Artifact('source-tarball' test_artifact = Artifact('source-tarball'
, 'ghc-{version}-testsuite.tar.xz' , 'ghc-{version}-testsuite.tar.xz'
, 'ghc-{version}-testsuite.tar.xz' , 'ghc-{version}-testsuite.tar.xz'
, 'ghc-{version}' ) , 'ghc-{version}/testsuite'
, 'ghc{version}-testsuite')
def debian(arch, n):
return linux_platform(arch, "{arch}-linux-deb{n}".format(arch=arch, n=n))
def darwin(arch): def darwin(arch: str) -> PlatformSpec:
return PlatformSpec ( '{arch}-darwin'.format(arch=arch) return PlatformSpec ( '{arch}-darwin'.format(arch=arch)
, 'ghc-{version}-{arch}-apple-darwin'.format(arch=arch, version="{version}") ) , 'ghc-{version}-{arch}-apple-darwin'.format(arch=arch, version="{version}") )
windowsArtifact = PlatformSpec ( 'x86_64-windows' windowsArtifact = PlatformSpec ( 'x86_64-windows'
, 'ghc-{version}-x86_64-unknown-mingw32' ) , 'ghc-{version}-x86_64-unknown-mingw32' )
def centos(n): def debian(n: int, arch: str='x86_64') -> PlatformSpec:
return linux_platform("x86_64", "x86_64-linux-centos{n}".format(n=n)) return linux_platform(arch, "{arch}-linux-deb{n}".format(arch=arch, n=n))
def centos(n: int, arch='x86_64') -> PlatformSpec:
return linux_platform(arch, "{arch}-linux-centos{n}".format(n=n,arch=arch))
def fedora(n): def fedora(n: int, arch='x86_64') -> PlatformSpec:
return linux_platform("x86_64", "x86_64-linux-fedora{n}".format(n=n)) return linux_platform(arch, "{arch}-linux-fedora{n}".format(n=n,arch=arch))
def alpine(n): def alpine(n: str, arch='x86_64') -> PlatformSpec:
return linux_platform("x86_64", "x86_64-linux-alpine{n}".format(n=n)) return linux_platform(arch, "{arch}-linux-alpine{n}".format(n=n,arch=arch))
def rocky(n): def rocky(n: int, arch='x86_64') -> PlatformSpec:
return linux_platform("x86_64", "x86_64-linux-rocky{n}".format(n=n)) return linux_platform(arch, "{arch}-linux-rocky{n}".format(n=n,arch=arch))
def ubuntu(n): def ubuntu(n: str, arch='x86_64') -> PlatformSpec:
return linux_platform("x86_64", "x86_64-linux-ubuntu{n}".format(n=n)) return linux_platform(arch, "{arch}-linux-ubuntu{n}".format(n=n,arch=arch))
def linux_platform(arch, opsys): def linux_platform(arch: str, opsys: str) -> PlatformSpec:
return PlatformSpec( opsys, 'ghc-{version}-{arch}-unknown-linux'.format(version="{version}", arch=arch) ) return PlatformSpec( opsys, 'ghc-{version}-{arch}-unknown-linux'.format(version="{version}", arch=arch) )
base_url = 'https://gitlab.haskell.org/api/v4/projects/1/jobs/{job_id}/artifacts/{artifact_name}' base_url = 'https://gitlab.haskell.org/api/v4/projects/1/jobs/{job_id}/artifacts/{artifact_name}'
hash_cache = {} # type: Dict[str, str]
hash_cache = {}
# Download a URL and return its hash # Download a URL and return its hash
def download_and_hash(url): def download_and_hash(url):
...@@ -132,8 +138,10 @@ def download_and_hash(url): ...@@ -132,8 +138,10 @@ def download_and_hash(url):
hash_cache[url] = digest hash_cache[url] = digest
return digest return digest
uri_to_anchor_cache = {} # type: Dict[str, str]
# Make the metadata for one platform. # Make the metadata for one platform.
def mk_one_metadata(release_mode, version, job_map, artifact): def mk_one_metadata(release_mode: bool, version: str, job_map: JobMap, artifact: Artifact) -> GhcupDist:
job_id = job_map[artifact.job_name].id job_id = job_map[artifact.job_name].id
url = base_url.format(job_id=job_id, artifact_name=urllib.parse.quote_plus(artifact.download_name.format(version=version))) url = base_url.format(job_id=job_id, artifact_name=urllib.parse.quote_plus(artifact.download_name.format(version=version)))
...@@ -141,8 +149,14 @@ def mk_one_metadata(release_mode, version, job_map, artifact): ...@@ -141,8 +149,14 @@ def mk_one_metadata(release_mode, version, job_map, artifact):
# In --release-mode, the URL in the metadata needs to point into the downloads folder # In --release-mode, the URL in the metadata needs to point into the downloads folder
# rather then the pipeline. # rather then the pipeline.
if release_mode: if release_mode:
# the test artifact is bundled with the source artifact, so it doesn't have its own job name
# So we must manually set the name of the bindist location
if artifact == test_artifact:
bindist_name = "testsuite"
else:
bindist_name = fetch_gitlab.job_triple(artifact.job_name)
final_url = release_base.format( version=version final_url = release_base.format( version=version
, bindistName=urllib.parse.quote_plus(f"{fetch_gitlab.job_triple(artifact.job_name)}.tar.xz")) , bindistName=urllib.parse.quote_plus(f"{bindist_name}.tar.xz"))
else: else:
final_url = url final_url = url
...@@ -150,48 +164,63 @@ def mk_one_metadata(release_mode, version, job_map, artifact): ...@@ -150,48 +164,63 @@ def mk_one_metadata(release_mode, version, job_map, artifact):
eprint(f"Bindist URL: {url}") eprint(f"Bindist URL: {url}")
eprint(f"Download URL: {final_url}") eprint(f"Download URL: {final_url}")
#Download and hash from the release pipeline, this must not change anyway during upload. # Download and hash from the release pipeline, this must not change anyway during upload.
h = download_and_hash(url) h = download_and_hash(url)
res = { "dlUri": final_url res = { "dlUri": final_url
, "dlSubdir": artifact.subdir.format(version=version) , "dlSubdir": artifact.subdir.format(version=version)
, "dlOutput": artifact.output_name.format(version=version)
, "dlHash" : h } , "dlHash" : h }
# Only add dlOutput if it is inconsistent with the filename inferred from the URL
output = artifact.output_name.format(version=version)
if Path(urlparse(final_url).path).name != output:
res["dlOutput"] = output
eprint(res) eprint(res)
# add the uri to the anchor name cache so we can lookup an anchor for this uri
uri_to_anchor_cache[final_url] = artifact.anchor_name
return res return res
# Turns a platform into an Artifact respecting pipeline_type # Turns a platform into an Artifact respecting pipeline_type
# Looks up the right job to use from the .gitlab/jobs-metadata.json file # Looks up the right job to use from the .gitlab/jobs-metadata.json file
def mk_from_platform(pipeline_type, platform): def mk_from_platform(pipeline_type: str, platform: PlatformSpec) -> Artifact:
info = job_mapping[platform.name][pipeline_type] info = job_mapping[platform.name][pipeline_type]
eprint(f"From {platform.name} / {pipeline_type} selecting {info['name']}") eprint(f"From {platform.name} / {pipeline_type} selecting {info['name']}")
return Artifact(info['name'] return Artifact(info['name']
, f"{info['jobInfo']['bindistName']}.tar.xz" , f"{info['jobInfo']['bindistName']}.tar.xz"
, "ghc-{version}-{pn}.tar.xz".format(version="{version}", pn=platform.name) , "ghc-{version}-{pn}.tar.xz".format(version="{version}", pn=platform.name)
, platform.subdir) , platform.subdir
, f"ghc{{version}}-{platform.name}")
# Generate the new metadata for a specific GHC mode etc # Generate the new metadata for a specific GHC mode etc
def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): def mk_new_yaml(release_mode: bool, version: str, date: str, pipeline_type, job_map: JobMap) -> object:
def mk(platform): def mk(platform):
eprint("\n=== " + platform.name + " " + ('=' * (75 - len(platform.name)))) eprint("\n=== " + platform.name + " " + ('=' * (75 - len(platform.name))))
return mk_one_metadata(release_mode, version, job_map, mk_from_platform(pipeline_type, platform)) return mk_one_metadata(release_mode, version, job_map, mk_from_platform(pipeline_type, platform))
# Here are all the bindists we can distribute
ubuntu1804 = mk(ubuntu("18_04")) ubuntu1804 = mk(ubuntu("18_04"))
ubuntu2004 = mk(ubuntu("20_04")) ubuntu2004 = mk(ubuntu("20_04"))
rocky8 = mk(rocky("8")) ubuntu2204 = mk(ubuntu("22_04"))
# Here are all the bindists we can distribute rocky8 = mk(rocky(8))
centos7 = mk(centos(7)) centos7 = mk(centos(7))
fedora33 = mk(fedora(33)) fedora33 = mk(fedora(33))
darwin_x86 = mk(darwin("x86_64")) darwin_x86 = mk(darwin("x86_64"))
darwin_arm64 = mk(darwin("aarch64")) darwin_arm64 = mk(darwin("aarch64"))
windows = mk(windowsArtifact) windows = mk(windowsArtifact)
alpine3_12 = mk(alpine("3_12")) alpine3_12 = mk(alpine("3_12"))
deb9 = mk(debian("x86_64", 9)) alpine3_20 = mk(alpine("3_20"))
deb10 = mk(debian("x86_64", 10)) alpine3_18_arm64 = mk(alpine("3_18", arch='aarch64'))
deb11 = mk(debian("x86_64", 11)) deb9 = mk(debian(9, "x86_64"))
deb10_arm64 = mk(debian("aarch64", 10)) deb10 = mk(debian(10, "x86_64"))
deb10_i386 = mk(debian("i386", 10)) deb11 = mk(debian(11, "x86_64"))
deb12 = mk(debian(12, "x86_64"))
deb10_arm64 = mk(debian(10, "aarch64"))
deb12_arm64 = mk(debian(12, "aarch64"))
deb10_i386 = mk(debian(10, "i386"))
deb12_i386 = mk(debian(12, "i386"))
source = mk_one_metadata(release_mode, version, job_map, source_artifact) source = mk_one_metadata(release_mode, version, job_map, source_artifact)
test = mk_one_metadata(release_mode, version, job_map, test_artifact) test = mk_one_metadata(release_mode, version, job_map, test_artifact)
...@@ -200,34 +229,49 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): ...@@ -200,34 +229,49 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map):
# developers want. # developers want.
a64 = { "Linux_Debian": { "< 10": deb9 a64 = { "Linux_Debian": { "< 10": deb9
, "(>= 10 && < 11)": deb10 , "( >= 10 && < 11 )": deb10
, ">= 11": deb11 , "( >= 11 && < 12 )": deb11
, ">= 12": deb12
, "unknown_versioning": deb11 } , "unknown_versioning": deb11 }
, "Linux_Ubuntu" : { "unknown_versioning": ubuntu2004 , "Linux_Ubuntu" : { "unknown_versioning": ubuntu2004
, "( >= 16 && < 19 )": ubuntu1804 , "( >= 16 && < 18 )": deb9
, "( >= 18 && < 19 )": ubuntu1804
, "( >= 19 && < 21 )": ubuntu2004
, "( >= 21 )": ubuntu2204
} }
, "Linux_Mint" : { "< 20": ubuntu1804 , "Linux_Mint" : { "< 20": ubuntu1804
, ">= 20": ubuntu2004 } , ">= 20": ubuntu2004
, "unknown_versioning": ubuntu2004 }
, "Linux_CentOS" : { "( >= 7 && < 8 )" : centos7 , "Linux_CentOS" : { "( >= 7 && < 8 )" : centos7
, "unknown_versioning" : centos7 } , "unknown_versioning" : centos7 }
, "Linux_Fedora" : { ">= 33": fedora33 , "Linux_Fedora" : { ">= 33": fedora33
, "unknown_versioning": centos7 } , "unknown_versioning": centos7 }
, "Linux_RedHat" : { "unknown_versioning": centos7 } , "Linux_RedHat" : { "< 9": centos7
#MP: Replace here with Rocky8 when that job is in the pipeline , ">= 9": fedora33
, "unknown_versioning": fedora33 }
, "Linux_UnknownLinux" : { "unknown_versioning": rocky8 } , "Linux_UnknownLinux" : { "unknown_versioning": rocky8 }
, "Darwin" : { "unknown_versioning" : darwin_x86 } , "Darwin" : { "unknown_versioning" : darwin_x86 }
, "Windows" : { "unknown_versioning" : windows } , "Windows" : { "unknown_versioning" : windows }
, "Linux_Alpine" : { "unknown_versioning": alpine3_12 } , "Linux_Alpine" : { "( >= 3.12 && < 3.20 )": alpine3_12
, ">= 3.20": alpine3_20
, "unknown_versioning": alpine3_12 }
} }
a32 = { "Linux_Debian": { "unknown_versioning": deb10_i386 } a32 = { "Linux_Debian": { "( >= 10 && < 12 )": deb10_i386
, ">= 12": deb12_i386
, "unknown_versioning": deb10_i386 }
, "Linux_Ubuntu": { "unknown_versioning": deb10_i386 } , "Linux_Ubuntu": { "unknown_versioning": deb10_i386 }
, "Linux_Mint" : { "unknown_versioning": deb10_i386 } , "Linux_Mint" : { "unknown_versioning": deb10_i386 }
, "Linux_UnknownLinux" : { "unknown_versioning": deb10_i386 } , "Linux_UnknownLinux" : { "unknown_versioning": deb10_i386 }
} }
arm64 = { "Linux_UnknownLinux": { "unknown_versioning": deb10_arm64 } arm64 = { "Linux_UnknownLinux": { "unknown_versioning": deb10_arm64 }
, "Linux_Alpine" : { "unknown_versioning": alpine3_18_arm64 }
, "Linux_Debian": { "( >= 10 && < 12 )": deb10_arm64
, "( >= 12 )": deb12_arm64
, "unknown_versioning": deb10_arm64
}
, "Darwin": { "unknown_versioning": darwin_arm64 } , "Darwin": { "unknown_versioning": darwin_arm64 }
} }
...@@ -260,13 +304,26 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): ...@@ -260,13 +304,26 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map):
} }
def setNightlyTags(ghcup_metadata): def setNightlyTags(ghcup_metadata: dict) -> None:
for version in ghcup_metadata['ghcupDownloads']['GHC']: for version in ghcup_metadata['ghcupDownloads']['GHC']:
if "LatestNightly" in ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"]: if "LatestNightly" in ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"]:
ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"].remove("LatestNightly") ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"].remove("LatestNightly")
ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"].append("Nightly") ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"].append("Nightly")
def mk_dumper(version: str) -> yaml.Dumper:
class CustomAliasDumper(yaml.Dumper):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def generate_anchor(self, node):
if isinstance(node, yaml.MappingNode):
node_dict = { k.value : v.value for (k,v) in node.value }
if 'dlUri' in node_dict:
return uri_to_anchor_cache[node_dict['dlUri']].format(version=version.replace('.',''))
return super().generate_anchor(node)
return CustomAliasDumper
def main() -> None: def main() -> None:
...@@ -302,7 +359,7 @@ def main() -> None: ...@@ -302,7 +359,7 @@ def main() -> None:
new_yaml = mk_new_yaml(args.release_mode, args.version, args.date, pipeline_type, job_map) new_yaml = mk_new_yaml(args.release_mode, args.version, args.date, pipeline_type, job_map)
if args.fragment: if args.fragment:
print(yaml.dump({ args.version : new_yaml })) print(yaml.dump({ args.version : new_yaml }, Dumper=mk_dumper(args.version)))
else: else:
with open(args.metadata, 'r') as file: with open(args.metadata, 'r') as file:
......
#!/usr/bin/env -S make -f
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
usage :
echo "recompress [dest files]"
exit 1
%.gz : %.xz
echo "[xz->gz] $< to $@..."
xz -cd $< | gzip -c > $@
%.bz2 : %.xz
echo "[xz->bz2] $< to $@..."
xz -cd $< | bzip2 -c > $@
%.lz : %.xz
echo "[xz->lz] $< to $@..."
xz -cd $< | lzip -c > $@
%.zip : %.tar.xz
echo "[tarxz->zip] $< to $@..."
tmp="$$(mktemp -d tmp.XXX)" && \
tar -C "$$tmp" -xf $< && \
cd "$$tmp" && \
zip -9 -r ../$@ * && \
cd .. && \
rm -R "$$tmp"