Update
This commit is contained in:
parent
67115cb06f
commit
3ad0a34337
133
GHCup.md
133
GHCup.md
@ -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
|
||||
|
||||
|
10
NOTES.md
10
NOTES.md
@ -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
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