Skip to content

Modernize server build and CI#320

Closed
thomashoneyman wants to merge 3 commits into
masterfrom
haskell-modernization
Closed

Modernize server build and CI#320
thomashoneyman wants to merge 3 commits into
masterfrom
haskell-modernization

Conversation

@thomashoneyman

@thomashoneyman thomashoneyman commented Jul 3, 2026

Copy link
Copy Markdown
Member

Summary

Scoped down after #316 landed — the compiler bump, package set, and deploy changes all live there now. What remains here is the server-build and CI modernization that composes with it:

  • Resolver: lts-20.9lts-20.26 (GHC 9.2.5 → 9.2.8), the newest snapshot compatible with purescript-0.15.15. Two pin adjustments were needed: protolude-0.3.3 (0.3.1's bytestring bound predates lts-20.26's bytestring-0.11.4) and happy-1.20.0 (purescript pins happy ==1.20.0 exactly; the snapshot ships 1.20.1.1).
  • Cabal file: cabal-version: 2.4, SPDX license, default-language, unused dependencies removed (http-types, directory, filepath), and the executable now builds with -Wall -Werror. The redundant Setup.hs is deleted (build-type: Simple ignores it).
  • server/Main.hs: cleanup to get -Wall-clean — six dead imports removed, name shadowing fixed (including next shadowing scotty's export), and the port/glob arguments are now parsed with readMaybe and a usage message instead of a partial pattern match. No behavior changes otherwise; the scotty 0.12 API (param, def) is untouched since that's what the snapshot ships.
  • CI: drop -j1 from the server build — it dates from much smaller runners; ubuntu-24.04 runners have 4 vCPUs and 16GB of RAM.

Not included (deliberately): the GHC 9.8 / lts-23 jump. That requires PureScript 0.15.16+, which never reached Hackage; it becomes a clean follow-up when 0.15.17 is published. The scotty 0.22 API changes go with it, since lts-23 ships scotty 0.22 natively.

Verified locally: full stack build on GHC 9.2.8 passes with -Wall -Werror, and the binary was smoke-tested (usage message on bad args, endpoints unchanged).

PureScript 0.15.16 was never uploaded to Hackage, so the extra-dep now
pins the v0.15.16 release tag on GitHub. The other extra-deps mirror the
upstream purescript stack.yaml at that tag, which also lets us drop the
stale process/Cabal/protolude pins.

The server is updated for scotty 0.22 (queryParam, defaultOptions) and
now builds warning-free with -Wall -Werror; the cabal file is updated to
cabal-version 2.4 with unused dependencies removed, and the redundant
Setup.hs is deleted (build-type: Simple ignores it).
The set grew from 459 to 641 packages since psc-0.15.13-20231219, so the
server's RTS heap cap is raised from 3G to 6G; deploying this requires
more than the current 4GB of droplet RAM (the old set already peaked at
3.1G during startup).

The version-sync script now understands a GitHub-pinned compiler
extra-dep, and the client explicitly requires purs >= 0.15.16 (the
previous ^0.15.2 range already floated there on fresh installs).
Node 20 reached end of life in April 2026. The -j1 flag dates from
smaller CI runners; ubuntu-24.04 runners have 4 vCPUs and 16GB of RAM.
@thomashoneyman thomashoneyman changed the title Modernize Haskell toolchain: PureScript 0.15.16, GHC 9.8.4, latest package set Modernize server build and CI Jul 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant