Update
This commit is contained in:
parent
67115cb06f
commit
3ad0a34337
133
GHCup.md
133
GHCup.md
@ -2,7 +2,7 @@
|
|||||||
% Julian Ospald
|
% Julian Ospald
|
||||||
% June 07, 2024
|
% June 07, 2024
|
||||||
|
|
||||||
# GHCup
|
# Introduction
|
||||||
|
|
||||||
## What is GHCup?
|
## What is GHCup?
|
||||||
|
|
||||||
@ -35,25 +35,25 @@
|
|||||||
|
|
||||||
## GHCup today
|
## GHCup today
|
||||||
|
|
||||||
::: incremental
|
[Haskell Survey 2022](https://taylor.fausak.me/2022/11/18/haskell-survey-results/#s2q1):
|
||||||
|
|
||||||
|
![](survey.png)
|
||||||
|
|
||||||
|
. . .
|
||||||
|
|
||||||
* [Haskell Survey 2022](https://taylor.fausak.me/2022/11/18/haskell-survey-results/#s2q1)
|
|
||||||
* ![](survey.png)
|
|
||||||
- over **17k** LOC Haskell
|
- over **17k** LOC Haskell
|
||||||
- supports all platforms: Linux, Windows, macOS, FreeBSD
|
- supports all platforms: Linux, Windows, macOS, FreeBSD
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## GHCup and haskell.org
|
## GHCup and haskell.org
|
||||||
|
|
||||||
::: incremental
|
The default installer:
|
||||||
|
|
||||||
|
![](downloads.png)
|
||||||
|
|
||||||
|
. . .
|
||||||
|
|
||||||
* the default installer
|
|
||||||
- ![](downloads.png)
|
|
||||||
* provides infrastructure (home page, downloads)
|
* provides infrastructure (home page, downloads)
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## GHCup and the Haskell Foundation
|
## GHCup and the Haskell Foundation
|
||||||
|
|
||||||
::: incremental
|
::: incremental
|
||||||
@ -64,6 +64,8 @@
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
# Philosophy
|
||||||
|
|
||||||
## What is a good installer?
|
## What is a good installer?
|
||||||
|
|
||||||
::: incremental
|
::: incremental
|
||||||
@ -122,7 +124,7 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Upstream
|
## Upstream (dependencies)
|
||||||
|
|
||||||
::: incremental
|
::: incremental
|
||||||
|
|
||||||
@ -133,7 +135,7 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Downstream
|
## Downstream (dependents)
|
||||||
|
|
||||||
::: incremental
|
::: incremental
|
||||||
|
|
||||||
@ -149,6 +151,8 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
# Bits and pieces
|
||||||
|
|
||||||
## How does it work?
|
## How does it work?
|
||||||
|
|
||||||
::: incremental
|
::: incremental
|
||||||
@ -156,12 +160,13 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
* **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 (configuration files)
|
- ![](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
|
||||||
- ![](tar.png){#id .class height=32px} bindist selection
|
- ![](tar.png){#id .class height=32px} bindist selection
|
||||||
- ![](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
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
@ -170,12 +175,13 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
* **Architectural components**
|
* **Architectural components**
|
||||||
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
||||||
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
||||||
- [ ] ![](config-file.png){#id .class height=32px} ghcup-metadata (configuration files)
|
- [ ] ![](config-file.png){#id .class height=32px} ghcup-metadata
|
||||||
* **Logical components**
|
* **Logical components**
|
||||||
- [x] ![](terminal.png){#id .class height=32px} cli interface
|
- [x] ![](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
|
||||||
- [ ] ![](tar.png){#id .class height=32px} bindist selection
|
- [ ] ![](tar.png){#id .class height=32px} bindist selection
|
||||||
- [ ] ![](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
|
||||||
|
|
||||||
## Basic CLI
|
## Basic CLI
|
||||||
|
|
||||||
@ -205,12 +211,13 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
* **Architectural components**
|
* **Architectural components**
|
||||||
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
||||||
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
||||||
- [ ] ![](config-file.png){#id .class height=32px} ghcup-metadata (configuration files)
|
- [ ] ![](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
|
||||||
- [x] ![](file.png){#id .class height=32px} file layout / installation destination
|
- [x] ![](file.png){#id .class height=32px} file layout / installation destination
|
||||||
- [ ] ![](tar.png){#id .class height=32px} bindist selection
|
- [ ] ![](tar.png){#id .class height=32px} bindist selection
|
||||||
- [ ] ![](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
|
||||||
|
|
||||||
## File layout
|
## File layout
|
||||||
|
|
||||||
@ -243,12 +250,13 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
* **Architectural components**
|
* **Architectural components**
|
||||||
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
||||||
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
||||||
- [x] ![](config-file.png){#id .class height=32px} ghcup-metadata (configuration files)
|
- [x] ![](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
|
||||||
- [x] ![](tar.png){#id .class height=32px} bindist selection
|
- [x] ![](tar.png){#id .class height=32px} bindist selection
|
||||||
- [ ] ![](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
|
||||||
|
|
||||||
## Bindist selection (sysinfo)
|
## Bindist selection (sysinfo)
|
||||||
|
|
||||||
@ -293,13 +301,100 @@ curl -s -L 'https://downloads.haskell.org/~ghc/9.6.5/ghc-9.6.5-x86_64-fedora33-l
|
|||||||
* **Architectural components**
|
* **Architectural components**
|
||||||
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
||||||
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
||||||
- [ ] ![](config-file.png){#id .class height=32px} ghcup-metadata (configuration files)
|
- [ ] ![](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
|
||||||
- [ ] ![](tar.png){#id .class height=32px} bindist selection
|
- [ ] ![](tar.png){#id .class height=32px} bindist selection
|
||||||
- [x] ![](brick-final-clearbg.png){#id .class height=32px} tui interface
|
- [x] ![](brick-final-clearbg.png){#id .class height=32px} tui interface
|
||||||
|
- [ ] ![](config.svg){#id .class height=32px} configuration
|
||||||
|
|
||||||
## TUI interface
|
## TUI interface
|
||||||
|
|
||||||
![](matrix.png){#id .class height=600px}
|
![](matrix.png){#id .class height=550px}
|
||||||
|
|
||||||
|
## Configuration (context)
|
||||||
|
|
||||||
|
* **Architectural components**
|
||||||
|
- [X] ![](sh-file.png){#id .class height=32px} bootstrap scripts
|
||||||
|
- [x] ![](exe-file.png){#id .class height=32px} ghcup binary (compiled)
|
||||||
|
- [x] ![](config-file.png){#id .class height=32px} ghcup-metadata
|
||||||
|
* **Logical components**
|
||||||
|
- [ ] ![](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
|
||||||
|
- [ ] ![](brick-final-clearbg.png){#id .class height=32px} tui interface
|
||||||
|
- [x] ![](config.svg){#id .class height=32px} configuration
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
::: incremental
|
||||||
|
|
||||||
|
* Types of configuration:
|
||||||
|
- environment variables
|
||||||
|
- cli switches / TUI options
|
||||||
|
- config file (`~/.ghcup/config.yaml`)
|
||||||
|
* e.g.
|
||||||
|
- env: `GHCUP_INSTALL_BASE_PREFIX` (default `$HOME`)
|
||||||
|
- cli: `ghcup install ghc -u <url> <version>`
|
||||||
|
- config: `url-source` (selecting and mixing "channels")
|
||||||
|
- file/http/https URI
|
||||||
|
- `GHCupURL`
|
||||||
|
- `StackSetupURL`
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Phew
|
||||||
|
|
||||||
|
![](headache.png){#id .class height=550px}
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
|
||||||
|
## How to contribute
|
||||||
|
|
||||||
|
**Some live action:**
|
||||||
|
|
||||||
|
- project structure
|
||||||
|
- building the project (flags and project files)
|
||||||
|
- small code walkthrough
|
||||||
|
|
||||||
|
## The future
|
||||||
|
|
||||||
|
::: incremental
|
||||||
|
|
||||||
|
- nightlies
|
||||||
|
- revisions
|
||||||
|
- curating old releases
|
||||||
|
- beefed up `ghcup compile` interface
|
||||||
|
- TUF?
|
||||||
|
- supporting more tools (installer DSL)
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Advanced topics
|
||||||
|
|
||||||
|
- bootstrap scripts
|
||||||
|
- windows and MSYS2
|
||||||
|
- security
|
||||||
|
- HLS/GHC interaction
|
||||||
|
- reproducibility
|
||||||
|
- stack integration
|
||||||
|
- bindist work (curation)
|
||||||
|
- isolated installs
|
||||||
|
- 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
|
||||||
|
|
||||||
|
10
NOTES.md
10
NOTES.md
@ -8,14 +8,21 @@
|
|||||||
|
|
||||||
- unix vs holistic user experience
|
- unix vs holistic user experience
|
||||||
- non-goals (invoking pkg manager)
|
- non-goals (invoking pkg manager)
|
||||||
- relasionships
|
- relationships
|
||||||
|
|
||||||
|
- Code walkthrougs
|
||||||
|
- Version file, Types file (GHCup types)
|
||||||
|
|
||||||
- advanced topics
|
- advanced topics
|
||||||
|
- bootstrap scripts
|
||||||
|
- windows and MSYS2
|
||||||
- security
|
- security
|
||||||
- HLS/GHC interaction
|
- HLS/GHC interaction
|
||||||
- reproducibility
|
- reproducibility
|
||||||
- stack integration
|
- stack integration
|
||||||
- bindist work (curation)
|
- bindist work (curation)
|
||||||
|
- isolated installs
|
||||||
|
- mirrors
|
||||||
|
|
||||||
- contributing
|
- contributing
|
||||||
- repos
|
- repos
|
||||||
@ -26,7 +33,6 @@
|
|||||||
- metadata variants
|
- metadata variants
|
||||||
- bootstrap script
|
- bootstrap script
|
||||||
|
|
||||||
- Version file, Types file (GHCup types)
|
|
||||||
|
|
||||||
- for the future
|
- for the future
|
||||||
|
|
||||||
|
53
config.svg
Normal file
53
config.svg
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 29.643 29.643" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<path d="M18.621,12.397l-0.546-1.295c0,0,1.267-2.859,1.157-2.969l-1.678-1.639c-0.117-0.113-2.978,1.191-2.978,1.191l-1.32-0.533
|
||||||
|
c0,0-1.169-2.898-1.327-2.898h-2.37c-0.164,0-1.242,2.906-1.242,2.906L6.998,7.695c0,0-2.922-1.242-3.034-1.135L2.287,8.203
|
||||||
|
c-0.116,0.115,1.219,2.916,1.219,2.916l-0.544,1.295c0,0-2.962,1.139-2.962,1.295v2.322c0,0.16,2.969,1.217,2.969,1.217
|
||||||
|
l0.545,1.291c0,0-1.268,2.861-1.157,2.971l1.679,1.641c0.113,0.111,2.976-1.195,2.976-1.195l1.321,0.537
|
||||||
|
c0,0,1.166,2.896,1.326,2.896h2.37c0.163,0,1.244-2.906,1.244-2.906l1.32-0.535c0,0,2.918,1.242,3.031,1.135l1.678-1.643
|
||||||
|
c0.115-0.111-1.221-2.914-1.221-2.914l0.546-1.295c0,0,2.963-1.143,2.963-1.299v-2.32C21.591,13.453,18.621,12.397,18.621,12.397z
|
||||||
|
M10.795,18.207c-1.905,0-3.459-1.52-3.459-3.387c0-1.865,1.554-3.385,3.459-3.385c1.908,0,3.459,1.52,3.459,3.385
|
||||||
|
C14.254,16.688,12.703,18.207,10.795,18.207z"/>
|
||||||
|
<path d="M28.538,9.693l0.014-0.676c0,0,1.118-1.006,1.091-1.076l-0.414-1.048c-0.031-0.072-1.544-0.062-1.544-0.062l-0.474-0.492
|
||||||
|
c0,0,0.058-1.502-0.013-1.533l-1.041-0.467c-0.074-0.033-1.117,1.035-1.117,1.035l-0.684-0.027c0,0-1.039-1.119-1.109-1.092
|
||||||
|
l-1.061,0.393c-0.071,0.025-0.036,1.518-0.036,1.518l-0.495,0.463c0,0-1.523-0.082-1.554-0.014l-0.457,1.02
|
||||||
|
c-0.032,0.072,1.065,1.119,1.065,1.119l-0.014,0.672c0,0-1.117,1.008-1.09,1.078l0.415,1.049c0.03,0.07,1.543,0.059,1.543,0.059
|
||||||
|
l0.473,0.494c0,0-0.055,1.502,0.016,1.533l1.041,0.465c0.072,0.033,1.116-1.029,1.116-1.029l0.685,0.023
|
||||||
|
c0,0,1.037,1.119,1.109,1.094l1.058-0.393c0.073-0.025,0.038-1.52,0.038-1.52l0.494-0.459c0,0,1.523,0.078,1.555,0.01l0.457-1.02
|
||||||
|
C29.634,10.74,28.538,9.693,28.538,9.693z M26.145,9.9c-0.367,0.82-1.347,1.184-2.187,0.809c-0.836-0.373-1.22-1.346-0.853-2.168
|
||||||
|
c0.365-0.818,1.348-1.18,2.184-0.807C26.126,8.111,26.51,9.082,26.145,9.9z"/>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
BIN
headache.png
Normal file
BIN
headache.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 801 KiB |
BIN
install-flow.dia
Normal file
BIN
install-flow.dia
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user