Bindist installation #455
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Bindist installation | |
defaults: | |
run: | |
shell: bash | |
on: | |
workflow_dispatch: | |
inputs: | |
tool: | |
description: Tool | |
required: true | |
type: string | |
version: | |
description: Version | |
required: true | |
type: string | |
metadataFile: | |
description: Metadata file | |
required: true | |
default: ghcup-0.0.8.yaml | |
type: string | |
channel: | |
description: Distribution channel (main|prerelease|nightly) | |
required: true | |
default: Main | |
type: string | |
env: | |
BOOTSTRAP_HASKELL_NONINTERACTIVE: 1 | |
BOOTSTRAP_HASKELL_MINIMAL: 1 | |
BOOTSTRAP_HASKELL_ADJUST_BASHRC: 1 | |
TOOL: ${{ github.event.inputs.tool }} | |
VERSION: ${{ github.event.inputs.version }} | |
METADATA_FILE: ${{ github.event.inputs.metadataFile }} | |
CHANNEL: ${{ github.event.inputs.channel }} | |
jobs: | |
bindist-install: | |
name: linux-${{ matrix.image }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- image: alpine:latest | |
installCmd: apk update && apk add | |
toolRequirements: binutils-gold curl gcc g++ gmp-dev libc-dev libffi-dev make musl-dev ncurses-dev perl tar xz | |
- image: debian:10 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 libnuma-dev | |
- image: debian:11 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 libnuma-dev | |
- image: debian:12 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 libnuma-dev | |
- image: debian:unstable | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libgmp-dev libgmp10 libncurses-dev libncurses6 libtinfo6 libnuma-dev | |
- image: ubuntu:20.04 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libffi7 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 | |
- image: ubuntu:22.04 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libffi7 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 | |
- image: ubuntu:24.04 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libffi8 libgmp-dev libgmp10 libncurses-dev libncurses6 libtinfo6 | |
- image: archlinux:latest | |
installCmd: pacman -Syu --noconfirm | |
toolRequirements: which gcc gmp libffi make ncurses perl tar xz | |
- image: fedora:37 | |
installCmd: dnf install -y | |
toolRequirements: which gcc g++ gmp gmp-devel make ncurses ncurses-compat-libs xz perl | |
- image: fedora:40 | |
installCmd: dnf install -y | |
toolRequirements: which gcc g++ gmp gmp-devel make ncurses ncurses-compat-libs xz perl | |
- image: rockylinux:8 | |
installCmd: dnf install -y | |
toolRequirements: which findutils gcc gcc-c++ gmp gmp-devel make ncurses ncurses-compat-libs xz perl | |
- image: rockylinux:9 | |
installCmd: dnf install -y --allowerasing | |
toolRequirements: which findutils gcc gcc-c++ gmp gmp-devel make ncurses xz perl | |
- image: registry.access.redhat.com/ubi8/ubi | |
installCmd: dnf install -y --allowerasing | |
toolRequirements: gcc gcc-c++ gmp gmp-devel make ncurses ncurses-compat-libs xz perl pkgconfig | |
- image: registry.access.redhat.com/ubi9/ubi | |
installCmd: dnf install -y --allowerasing | |
toolRequirements: gcc gcc-c++ gmp gmp-devel make ncurses xz perl pkgconfig | |
- image: linuxmintd/mint20.3-amd64 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libffi7 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 | |
- image: linuxmintd/mint21.3-amd64 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libffi7 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 | |
- image: ghcr.io/void-linux/void-glibc-full:latest | |
installCmd: xbps-install -Suy && xbps-install -y | |
toolRequirements: binutils curl gcc gmp-devel glibc-devel libffi-devel make ncurses-devel ncurses-libtinfo-libs perl tar xz | |
container: | |
image: ${{ matrix.image }} | |
steps: | |
- name: Install requirements | |
shell: sh | |
run: | | |
${{ matrix.installCmd }} curl bash git ${{ matrix.toolRequirements }} | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- name: Install ghcup and bindist | |
run: .github/workflows/install-bindist.sh | |
# These jobs have to use checkout@v1 as later versions attempt to use a dynamically linked node | |
i386: | |
name: linux-${{ matrix.image }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- image: i386/alpine:latest | |
installCmd: apk update && apk add | |
toolRequirements: binutils-gold curl gcc g++ gmp-dev libc-dev libffi-dev make musl-dev ncurses-dev perl tar xz | |
- image: i386/debian:10 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 libnuma-dev | |
- image: i386/debian:11 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 libnuma-dev | |
- image: i386/debian:12 | |
installCmd: apt-get update && apt-get install -y | |
toolRequirements: build-essential curl libffi-dev libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 libnuma-dev | |
container: | |
image: ${{ matrix.image }} | |
steps: | |
- name: Install requirements | |
shell: sh | |
run: | | |
${{ matrix.installCmd }} curl bash git ${{ matrix.toolRequirements }} | |
- uses: actions/checkout@af513c7a016048ae468971c52ed77d9562c7c819 # v1 | |
- name: Install ghcup and bindist | |
run: .github/workflows/install-bindist.sh | |
bindist-install-mac-win: | |
name: Build non-linux | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: [self-hosted, macOS, ARM64] | |
- os: macos-13 | |
- os: windows-latest | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- if: ${{ github.event_name == 'workflow_dispatch' }} | |
name: Install ghcup and bindist | |
run: .github/workflows/install-bindist.sh | |
bindist-install-arm: | |
name: Build ARM binary | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: [self-hosted, Linux, ARM64, maerwald] | |
ARCH: ARM | |
DISTRO: Debian | |
- os: [self-hosted, Linux, ARM64, maerwald] | |
ARCH: ARM64 | |
DISTRO: Debian | |
- os: [self-hosted, Linux, ARM64, maerwald] | |
ARCH: ARM64 | |
DISTRO: Alpine | |
steps: | |
- uses: docker://arm64v8/ubuntu:focal | |
name: Cleanup (aarch64 linux) | |
with: | |
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +" | |
- name: git config | |
run: | | |
git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*" | |
shell: bash | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- if: matrix.ARCH == 'ARM' | |
uses: docker://hasufell/arm32v7-ubuntu-haskell:focal | |
name: Run build (armv7 linux) | |
with: | |
args: sh -c '.github/workflows/install-bindist.sh' | |
- if: matrix.ARCH == 'ARM64' && matrix.DISTRO == 'Debian' | |
uses: docker://hasufell/arm64v8-ubuntu-haskell:focal | |
name: Run build (aarch64 linux) | |
with: | |
args: sh -c '.github/workflows/install-bindist.sh' | |
- if: matrix.ARCH == 'ARM64' && matrix.DISTRO == 'Alpine' | |
uses: docker://hasufell/arm64v8-alpine-haskell:3.20 | |
name: Run build (aarch64 alpine) | |
with: | |
args: sh -c '.github/workflows/install-bindist.sh' | |
bindist-install-arm-alpine: | |
name: Build ARM binary (alpine) | |
runs-on: [self-hosted, Linux, ARM64, maerwald] | |
steps: | |
- uses: docker://arm64v8/ubuntu:focal | |
name: Cleanup (aarch64 linux) | |
with: | |
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +" | |
- name: git config | |
run: | | |
git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*" | |
shell: bash | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- uses: docker://alpine | |
name: Run build (aarch64 alpine linux) | |
with: | |
args: sh -c "apk add curl gcc g++ binutils binutils-gold coreutils bsd-compat-headers gmp-dev ncurses-dev libffi-dev make xz tar perl bash diffutils git gzip gnupg zlib zlib-dev zlib-static bzip2 bzip2-dev bzip2-static gmp gmp-dev openssl-dev openssl-libs-static xz xz-dev ncurses-static && .github/workflows/install-bindist.sh" | |
bindist-install-freebsd: | |
name: Install FreeBSD binary | |
runs-on: [self-hosted, FreeBSD, X64] | |
steps: | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- name: Install prerequisites | |
run: sudo pkg install -y curl gcc gmp gmake ncurses perl5 pkgconf libffi libiconv | |
- name: Run build | |
run: .github/workflows/install-bindist.sh | |
validate: | |
name: ghcup-gen check | |
runs-on: ubuntu-latest | |
env: | |
GHC: 9.2.8 | |
CABAL: 3.10.1.0 | |
steps: | |
- name: create ~/.local/bin | |
run: mkdir -p "$HOME/.local/bin" | |
shell: bash | |
- name: Add ~/.local/bin to PATH | |
run: echo "$HOME/.local/bin" >> $GITHUB_PATH | |
shell: bash | |
- name: install yamllint | |
run: pip install yamllint | |
- name: Update cabal cache | |
run: cabal update | |
shell: bash | |
- name: Install requirements | |
shell: sh | |
run: | | |
export DEBIAN_FRONTEND=noninteractive | |
export TZ=Asia/Singapore | |
sudo apt-get update && sudo apt-get install -y curl bash git gnupg libarchive-dev | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- name: Cache Cabal | |
uses: actions/cache@v2 | |
env: | |
cache-name: cache-cabal | |
with: | |
path: | | |
~/.cabal/store | |
~/.cabal/packages | |
key: v2-${{ runner.os }}-${{ env.GHC }}-${{ env.CABAL }}-build-${{ hashFiles('cabal.project') }} | |
restore-keys: | | |
v2-${{ runner.os }}-${{ env.GHC }}-${{ env.CABAL }}-build-${{ hashFiles('cabal.project') }} | |
v2-${{ runner.os }}-${{ env.GHC }}-${{ env.CABAL }}-build- | |
v2-${{ runner.os }}-${{ env.GHC }} | |
- name: Install ghcup-gen | |
run: | | |
ghcup run --cabal 3.10.1.0 --ghc 9.2.8 --install -- cabal install --installdir="$HOME/.local/bin" --overwrite-policy=always --install-method=copy ghcup-gen | |
shell: bash | |
- name: Check yaml | |
run: | | |
ghcup-gen -- check -f ${{ env.METADATA_FILE }} --channel ${{ env.CHANNEL }} | |
yamllint ${{ env.METADATA_FILE }} | |
python3 -c "import yaml ; stream = open('${{ env.METADATA_FILE }}', 'r') ; yaml.safe_load(stream)" | |
shell: bash | |
signature-test: | |
name: Test signatures | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install requirements | |
shell: sh | |
run: | | |
sudo apt-get update && sudo apt-get install -y curl bash git gnupg | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- name: Test signatures | |
run: .github/workflows/test-sigs.sh |