Update
This commit is contained in:
parent
60b9754415
commit
d56109df04
131
GHCup.md
131
GHCup.md
@ -10,7 +10,13 @@
|
||||
|
||||
![](survey.png)
|
||||
|
||||
## What is GHCup?
|
||||
## Intro (pt. 2)
|
||||
|
||||
haskell.org:
|
||||
|
||||
![](downloads.png)
|
||||
|
||||
## What is GHCup (simplified)?
|
||||
|
||||
```sh
|
||||
curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-linux.tar.xz' |
|
||||
@ -23,13 +29,19 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
||||
|
||||
## How it started
|
||||
|
||||
::: incremental
|
||||
|
||||
* 🤹 small team at work on different platforms
|
||||
* 🧑💻 SHELL + POSIX
|
||||
* 🦾 first version was 165 LOC
|
||||
* 🙏 only installer at that time was stack
|
||||
|
||||
:::
|
||||
|
||||
## Goals
|
||||
|
||||
::: incremental
|
||||
|
||||
- ☮️ unification
|
||||
- unix principles
|
||||
- 🛠️ do one thing and do it well
|
||||
@ -37,20 +49,125 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
||||
- 🎁 good re-distribution
|
||||
- 🛣️ user experience (get out of the way)
|
||||
|
||||
## To install or not install
|
||||
:::
|
||||
|
||||
## What is GHCup really?
|
||||
|
||||
* [https://hasufell.github.io/posts/2023-11-14-ghcup-is-not-an-installer.html](https://hasufell.github.io/posts/2023-11-14-ghcup-is-not-an-installer.html)
|
||||
|
||||
### Concerns
|
||||
::: incremental
|
||||
|
||||
* ![](open-box.png){#id .class width=32 height=32px} installer
|
||||
* ![](linux.png){#id .class width=32 height=32px} distribution channel
|
||||
* ![](feedback.png){#id .class width=32 height=32px} feedback channel
|
||||
* ![](qa.png){#id .class width=32 height=32px} testing/QA
|
||||
* ![](user.png){#id .class width=32 height=32px} deciding on defaults (e.g. "recommended" GHC version)
|
||||
* ![](chain-saw.png){#id .class width=32 height=32px} holistic toolchain experience
|
||||
* ![](qa.png){#id .class width=32 height=32px} testing/QA gateway
|
||||
* ![](user.png){#id .class width=32 height=32px} provider of sane defaults (e.g. "recommended" GHC version)
|
||||
* ![](chain-saw.png){#id .class width=32 height=32px} glue for holistic toolchain experience
|
||||
- stack integration
|
||||
- VSCode integration
|
||||
- cabal-install integration
|
||||
* ![](ghaction.png){#id .class width=32 height=32px} CI (e.g. github actions)
|
||||
* ![](ghaction.png){#id .class width=32 height=32px} CI provisioning (e.g. github actions)
|
||||
|
||||
:::
|
||||
|
||||
## Upstream
|
||||
|
||||
Supported tools/dependencies:
|
||||
|
||||
::: incremental
|
||||
|
||||
- GHC
|
||||
- Cabal
|
||||
- HLS
|
||||
- Stack
|
||||
|
||||
:::
|
||||
|
||||
## Downstream
|
||||
|
||||
Users:
|
||||
|
||||
::: incremental
|
||||
|
||||
- ![](haskell_logo.png){#id .class height=32px} Haskell developers
|
||||
- beginners / advanced
|
||||
- student courses
|
||||
- companies
|
||||
- ![](person.png){#id .class width=32 height=32px} end users (e.g.compiling pandoc from source)
|
||||
- ![](ghaction.png){#id .class width=32 height=32px} GitHub CI
|
||||
- GitHub images
|
||||
- Haskell repos
|
||||
- 🪞 mirrors
|
||||
- [sjtug](https://mirror.sjtu.edu.cn/docs/ghcup)
|
||||
- 🧰 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)
|
||||
|
||||
:::
|
||||
|
||||
## How does it work?
|
||||
|
||||
**Components:**
|
||||
|
||||
::: incremental
|
||||
|
||||
- ![](terminal.png){#id .class height=32px} cli interface
|
||||
- ![](file.png){#id .class height=32px} file layout / installation destination
|
||||
- ![](tar.png){#id .class height=32px} bindist selection
|
||||
- 🧱 tui interface
|
||||
|
||||
:::
|
||||
|
||||
## Basic CLI
|
||||
|
||||
::: incremental
|
||||
|
||||
* show all available tools / versions
|
||||
```sh
|
||||
ghcup list
|
||||
```
|
||||
* install a tool
|
||||
```sh
|
||||
ghcup install ghc latest
|
||||
```
|
||||
* make a tool version the default
|
||||
```sh
|
||||
ghcup set ghc latest
|
||||
```
|
||||
* remove a tool version
|
||||
```sh
|
||||
ghcup rm ghc 9.10.1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## Where does it install?
|
||||
|
||||
::: incremental
|
||||
|
||||
* root dir
|
||||
```sh
|
||||
$ ls ~/.ghcup
|
||||
bin cache config.yaml db env ghc hls logs share tmp trash
|
||||
```
|
||||
|
||||
* GHC and HLS are installed into sub-directories
|
||||
```sh
|
||||
$ ls ~/.ghcup/ghc
|
||||
8.10.7 9.0.2 9.2.8
|
||||
```
|
||||
|
||||
* bin directory is mostly symbolic links
|
||||
```sh
|
||||
$ ls ~/.ghcup/bin
|
||||
ghcup
|
||||
cabal cabal-3.10.3.0
|
||||
ghc ghc-8.10 ghc-8.10.7 ghc-9.0 ghc-9.0.2 ghc-9.2 ghc-9.2.8
|
||||
```
|
||||
:::
|
||||
|
||||
## Bindist selection
|
||||
|
||||
*
|
||||
|
||||
|
8
NOTES.md
8
NOTES.md
@ -1,16 +1,20 @@
|
||||
- vision, usability
|
||||
- file layout
|
||||
|
||||
- cli interface
|
||||
|
||||
- main GHCup types
|
||||
- metadata versions
|
||||
- metadata variants
|
||||
- ghcup-metadata CI (bindist install)
|
||||
- bindist work
|
||||
- distro selection (libc compatibilty etc.)
|
||||
- stack
|
||||
- how we manage metadata
|
||||
- https://gitlab.haskell.org/ghc/ghc/-/wikis/platforms/linux
|
||||
- Dockerfiles
|
||||
- stack integration
|
||||
- Version file, Types file
|
||||
- file layout
|
||||
- reproducibility
|
||||
- security
|
||||
- HLS/GHC interaction
|
||||
@ -28,4 +32,6 @@
|
||||
- documentation
|
||||
- cross
|
||||
- nightlies
|
||||
- health check
|
||||
- discussions
|
||||
|
||||
|
BIN
downloads.png
Normal file
BIN
downloads.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
BIN
haskell_logo.png
Normal file
BIN
haskell_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 93 KiB |
BIN
person.png
Normal file
BIN
person.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.7 KiB |
BIN
tar_gz.png
Normal file
BIN
tar_gz.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
terminal.png
Normal file
BIN
terminal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
Loading…
Reference in New Issue
Block a user