This commit is contained in:
Julian Ospald 2024-05-30 21:13:08 +08:00
parent 67115cb06f
commit 3ad0a34337
No known key found for this signature in database
GPG Key ID: 4275CDA6A29BED43
5 changed files with 175 additions and 21 deletions

133
GHCup.md
View File

@ -2,7 +2,7 @@
% Julian Ospald
% June 07, 2024
# GHCup
# Introduction
## What is GHCup?
@ -35,25 +35,25 @@
## 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
- supports all platforms: Linux, Windows, macOS, FreeBSD
:::
## GHCup and haskell.org
::: incremental
The default installer:
![](downloads.png)
. . .
* the default installer
- ![](downloads.png)
* provides infrastructure (home page, downloads)
:::
## GHCup and the Haskell Foundation
::: incremental
@ -64,6 +64,8 @@
:::
# Philosophy
## What is a good installer?
::: 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
@ -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
@ -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?
::: 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**
- ![](sh-file.png){#id .class height=32px} bootstrap scripts
- ![](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**
- ![](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
- ![](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**
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
- [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**
- [x] ![](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
- [ ] ![](config.svg){#id .class height=32px} configuration
## 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**
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
- [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**
- [ ] ![](terminal.png){#id .class height=32px} cli interface
- [x] ![](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
- [ ] ![](config.svg){#id .class height=32px} configuration
## 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**
- [ ] ![](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 (configuration files)
- [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
- [x] ![](tar.png){#id .class height=32px} bindist selection
- [ ] ![](brick-final-clearbg.png){#id .class height=32px} tui interface
- [ ] ![](config.svg){#id .class height=32px} configuration
## 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**
- [ ] ![](sh-file.png){#id .class height=32px} bootstrap scripts
- [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**
- [ ] ![](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
- [x] ![](brick-final-clearbg.png){#id .class height=32px} tui interface
- [ ] ![](config.svg){#id .class height=32px} configuration
## 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

View File

@ -8,14 +8,21 @@
- unix vs holistic user experience
- non-goals (invoking pkg manager)
- relasionships
- relationships
- Code walkthrougs
- Version file, Types file (GHCup types)
- advanced topics
- bootstrap scripts
- windows and MSYS2
- security
- HLS/GHC interaction
- reproducibility
- stack integration
- bindist work (curation)
- isolated installs
- mirrors
- contributing
- repos
@ -26,7 +33,6 @@
- metadata variants
- bootstrap script
- Version file, Types file (GHCup types)
- for the future

53
config.svg Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 KiB

BIN
install-flow.dia Normal file

Binary file not shown.