This commit is contained in:
Julian Ospald 2024-06-01 21:31:00 +08:00
parent 3ad0a34337
commit 16511b852b
No known key found for this signature in database
GPG Key ID: 4275CDA6A29BED43

115
GHCup.md
View File

@ -124,21 +124,26 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
::: :::
# Relationships
## Upstream (dependencies) ## Upstream (dependencies)
::: incremental - supported tools
- GHC - GHC
- Cabal - Cabal
- HLS - HLS
- Stack - Stack
::: . . .
- decisions that affect us
- release frequency
- upstream CI
- platform support
- binary distributions (the `.tar.gz`/`.zip`)
## Downstream (dependents) ## Downstream (dependents)
::: incremental
- ![](haskell_logo.png){#id .class height=32px} Haskell developers - ![](haskell_logo.png){#id .class height=32px} Haskell developers
- beginners, advanced, students, companies - beginners, advanced, students, companies
- ![](person.png){#id .class width=32 height=32px} end users (e.g. compiling pandoc from source) - ![](person.png){#id .class width=32 height=32px} end users (e.g. compiling pandoc from source)
@ -149,18 +154,17 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
- 🧰 tools - 🧰 tools
- [vscode-haskell](https://github.com/haskell/vscode-haskell), [Haskell playground](https://play.haskell.org/), [nvim-lsp-installer](https://github.com/williamboman/nvim-lsp-installer) - [vscode-haskell](https://github.com/haskell/vscode-haskell), [Haskell playground](https://play.haskell.org/), [nvim-lsp-installer](https://github.com/williamboman/nvim-lsp-installer)
::: # The installer in detail
# Bits and pieces
## How does it work? ## How does it work?
::: incremental
* **Architectural components** * **Architectural components**
- ![](sh-file.png){#id .class height=32px} bootstrap scripts - ![](sh-file.png){#id .class height=32px} bootstrap scripts
- ![](exe-file.png){#id .class height=32px} ghcup binary (compiled) - ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
- ![](config-file.png){#id .class height=32px} ghcup-metadata - ![](config-file.png){#id .class height=32px} ghcup-metadata
. . .
* **Logical components** * **Logical components**
- ![](terminal.png){#id .class height=32px} cli interface - ![](terminal.png){#id .class height=32px} cli interface
- ![](file.png){#id .class height=32px} file layout / installation destination - ![](file.png){#id .class height=32px} file layout / installation destination
@ -168,8 +172,6 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
- ![](brick-final-clearbg.png){#id .class height=32px} tui interface - ![](brick-final-clearbg.png){#id .class height=32px} tui interface
- ![](config.svg){#id .class height=32px} configuration - ![](config.svg){#id .class height=32px} configuration
:::
## Basic CLI (context) ## Basic CLI (context)
* **Architectural components** * **Architectural components**
@ -348,29 +350,83 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
![](headache.png){#id .class height=550px} ![](headache.png){#id .class height=550px}
# Distribution
## What is distribution?
* QA gate between "upstream" and "downstream"
* trust relationship (with upstream and downstream)
* release selection and defaults
* binary distribution
## What happens on e.g. a GHC release
- testing and inspection of bindists
- manual
- automated at [github.com/haskell/ghcup-metadata](https://github.com/haskell/ghcup-metadata/blob/develop/.github/workflows/bindists.yaml)
- fixing bindists
- building additional bindists (e.g. FreeBSD)
. . .
- forks at [github.com/stable-haskell](https://github.com/stable-haskell)
- builds cabal, stack and HLS binaries
- GHC TBD
## The "recommended" versions (defaults)
* community adoption (both industry and "open source")
* stack LTS
* HLS support
* known issues and regressions
* GHC HQs opinion and support window
* must be consistent across platforms
# Contributing # Contributing
## How to contribute ## How to contribute
**Some live action:**
- project structure
- building the project (flags and project files)
- small code walkthrough
## The future
::: incremental ::: incremental
- loose project structure (BDFL)
- discuss early
- repositories
- [github.com/haskell/ghcup-hs](https://github.com/haskell/ghcup-hs): documentation, bootstrap-scripts, ghcup exe
- [github.com/haskell/ghcup-metadata](https://github.com/haskell/ghcup-metadata): bindist mapping (YAML), bindist testing
- build with cabal/stack
- communication
- [#haskell-ghcup](https://kiwiirc.com/nextclient/irc.libera.chat/?nick=Guest%7C?##haskell-ghcup) on libera IRC
- [#ghcup:matrix.org](https://matrix.to/#/#ghcup:matrix.org) (bridged with IRC)
- github issues
- [haskell discourse](https://discourse.haskell.org/) (interacting with the community)
:::
## Cool things to contribute to
- documentation
- discussions
- defaults (e.g. "recommended" versions)
- overview of GHC issues and regressions
- Dhall
- manpage (via [optparse-applicative](https://github.com/pcapriotti/optparse-applicative/issues/176)?)
- TUI (ask @lsmor)
- YAML schema for metadata
- integration test
- new commands
- e.g. "health check"
## Hard things to contribute to
- nightlies - nightlies
- revisions - revisions
- cross compiler support
- curating old releases - curating old releases
- proper API for e.g. stack
- beefed up `ghcup compile` interface - beefed up `ghcup compile` interface
- TUF? - TUF?
- supporting more tools (installer DSL) - supporting more tools (installer DSL)
:::
## Advanced topics ## Advanced topics
- bootstrap scripts - bootstrap scripts
@ -383,18 +439,3 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
- isolated installs - isolated installs
- mirrors - mirrors
## Cool things to contribute to
- documentation
- discussions
- deciding on defaults (metadata etc.)
- API for e.g. stack
- Dhall
- manpage (via [optparse-applicative](https://github.com/pcapriotti/optparse-applicative/issues/176)?)
- TUI (@lsmor)
- YAML schema for metadata
- integration test
- cross compiler support
- nightlies
- "health check" command