WIP: CI: convert release.yaml into "Reusable workflow" #1
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: Build and test | ||
on: | ||
workflow_call: | ||
on: | ||
push: | ||
branches: | ||
- master | ||
pull_request: | ||
branches: | ||
- master | ||
schedule: | ||
- cron: '0 2 * * *' | ||
env: | ||
CABAL_CACHE_DISABLE: ${{ vars.CABAL_CACHE_DISABLE }} | ||
CABAL_CACHE_NONFATAL: yes | ||
jobs: | ||
build-linux: | ||
name: Build linux binary | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
CABAL_VER: 3.10.1.0 | ||
JSON_VERSION: "0.0.7" | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ secrets.S3_HOST }} | ||
strategy: | ||
fail-fast: true | ||
matrix: | ||
include: | ||
- os: ubuntu-latest | ||
ARTIFACT: "i386-linux-ghcup" | ||
GHC_VER: 8.10.7 | ||
ARCH: 32 | ||
- os: ubuntu-latest | ||
ARTIFACT: "x86_64-linux-ghcup" | ||
GHC_VER: 8.10.7 | ||
ARCH: 64 | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- if: matrix.ARCH == '32' | ||
name: Run build (32 bit linux) | ||
uses: docker://hasufell/i386-alpine-haskell:3.12 | ||
with: | ||
args: sh .github/scripts/build.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: Alpine | ||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ env.S3_HOST }} | ||
- if: matrix.ARCH == '64' | ||
name: Run build (64 bit linux) | ||
uses: docker://hasufell/alpine-haskell:3.12 | ||
with: | ||
args: sh .github/scripts/build.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: Alpine | ||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ env.S3_HOST }} | ||
- if: always() | ||
name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: artifacts | ||
path: | | ||
./out/* | ||
build-arm: | ||
name: Build ARM binary | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
CABAL_VER: 3.10.1.0 | ||
JSON_VERSION: "0.0.7" | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ secrets.S3_HOST }} | ||
strategy: | ||
fail-fast: true | ||
matrix: | ||
include: | ||
- os: [self-hosted, Linux, ARM64] | ||
ARTIFACT: "armv7-linux-ghcup" | ||
GHC_VER: 9.2.2 | ||
ARCH: ARM | ||
- os: [self-hosted, Linux, ARM64] | ||
ARTIFACT: "aarch64-linux-ghcup" | ||
GHC_VER: 9.2.6 | ||
ARCH: ARM64 | ||
steps: | ||
- uses: docker://arm64v8/debian:10 | ||
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 | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- if: matrix.ARCH == 'ARM' | ||
uses: docker://hasufell/arm32v7-debian-haskell:10 | ||
name: Run build (armv7 linux) | ||
with: | ||
args: sh .github/scripts/build.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: Ubuntu | ||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ env.S3_HOST }} | ||
- if: matrix.ARCH == 'ARM64' | ||
uses: docker://hasufell/arm64v8-debian-haskell:10 | ||
name: Run build (aarch64 linux) | ||
with: | ||
args: sh .github/scripts/build.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: Ubuntu | ||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ env.S3_HOST }} | ||
- if: always() | ||
name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: artifacts | ||
path: | | ||
./out/* | ||
build-macwin: | ||
name: Build binary (Mac/Win) | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
CABAL_VER: 3.10.1.0 | ||
MACOSX_DEPLOYMENT_TARGET: 10.13 | ||
JSON_VERSION: "0.0.7" | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ secrets.S3_HOST }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
- os: [self-hosted, macOS, ARM64] | ||
ARTIFACT: "aarch64-apple-darwin-ghcup" | ||
GHC_VER: 9.2.6 | ||
ARCH: ARM64 | ||
- os: macOS-11 | ||
ARTIFACT: "x86_64-apple-darwin-ghcup" | ||
GHC_VER: 9.2.6 | ||
ARCH: 64 | ||
- os: windows-latest | ||
ARTIFACT: "x86_64-mingw64-ghcup" | ||
GHC_VER: 8.10.7 | ||
ARCH: 64 | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- if: matrix.ARCH == 'ARM64' && runner.os == 'macOS' | ||
name: Run build | ||
run: | | ||
bash .github/scripts/brew.sh git coreutils llvm@11 autoconf automake | ||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$HOME/.brew/opt/llvm@11/bin:$PATH" | ||
export CC="$HOME/.brew/opt/llvm@11/bin/clang" | ||
export CXX="$HOME/.brew/opt/llvm@11/bin/clang++" | ||
export LD=ld | ||
export AR="$HOME/.brew/opt/llvm@11/bin/llvm-ar" | ||
export RANLIB="$HOME/.brew/opt/llvm@11/bin/llvm-ranlib" | ||
bash .github/scripts/build.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: na | ||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ env.S3_HOST }} | ||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1 | ||
- if: matrix.ARCH == '64' && runner.os == 'macOS' | ||
name: Run build (windows/mac) | ||
run: | | ||
bash .github/scripts/brew.sh coreutils | ||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$PATH" | ||
bash .github/scripts/build.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: na | ||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ env.S3_HOST }} | ||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1 | ||
- if: runner.os == 'Windows' | ||
name: Run build (windows/mac) | ||
run: | | ||
bash .github/scripts/brew.sh git coreutils autoconf automake | ||
bash .github/scripts/build.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: na | ||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ env.S3_HOST }} | ||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1 | ||
- if: always() | ||
name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: artifacts | ||
path: | | ||
./out/* | ||
test-linux: | ||
name: Test linux | ||
needs: "build-linux" | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
CABAL_VER: 3.10.1.0 | ||
JSON_VERSION: "0.0.7" | ||
strategy: | ||
matrix: | ||
include: | ||
- os: ubuntu-latest | ||
ARTIFACT: "i386-linux-ghcup" | ||
GHC_VER: 8.10.7 | ||
ARCH: 32 | ||
DISTRO: Alpine | ||
- os: ubuntu-latest | ||
ARTIFACT: "x86_64-linux-ghcup" | ||
GHC_VER: 8.10.7 | ||
ARCH: 64 | ||
DISTRO: Alpine | ||
- os: ubuntu-latest | ||
ARTIFACT: "x86_64-linux-ghcup" | ||
GHC_VER: 8.10.7 | ||
ARCH: 64 | ||
DISTRO: Ubuntu | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: artifacts | ||
path: ./out | ||
- if: matrix.ARCH == '32' && matrix.DISTRO == 'Alpine' | ||
name: Run test (32 bit linux Alpine) | ||
uses: docker://hasufell/i386-alpine-haskell:3.12 | ||
with: | ||
args: sh .github/scripts/test.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: ${{ matrix.DISTRO }} | ||
- if: matrix.ARCH == '64' && matrix.DISTRO == 'Alpine' | ||
name: Run test (64 bit linux Alpine) | ||
uses: docker://hasufell/alpine-haskell:3.12 | ||
with: | ||
args: sh .github/scripts/test.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: ${{ matrix.DISTRO }} | ||
- if: matrix.DISTRO != 'Alpine' | ||
name: Run test (64 bit linux) | ||
run: | | ||
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential curl gzip | ||
sh .github/scripts/test.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: ${{ matrix.DISTRO }} | ||
- if: failure() | ||
name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: testfiles | ||
path: | | ||
./test/ghcup-test/golden/unix/GHCupInfo*json | ||
test-arm: | ||
name: Test ARM | ||
needs: "build-arm" | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
CABAL_VER: 3.10.1.0 | ||
JSON_VERSION: "0.0.7" | ||
strategy: | ||
matrix: | ||
include: | ||
- os: [self-hosted, Linux, ARM64] | ||
ARTIFACT: "armv7-linux-ghcup" | ||
GHC_VER: 9.2.2 | ||
ARCH: ARM | ||
DISTRO: Ubuntu | ||
- os: [self-hosted, Linux, ARM64] | ||
ARTIFACT: "aarch64-linux-ghcup" | ||
GHC_VER: 9.2.6 | ||
ARCH: ARM64 | ||
DISTRO: Ubuntu | ||
steps: | ||
- uses: docker://arm64v8/debian:10 | ||
name: Cleanup (aarch64 linux) | ||
with: | ||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +" | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: artifacts | ||
path: ./out | ||
- if: matrix.ARCH == 'ARM' | ||
uses: docker://hasufell/arm32v7-debian-haskell:10 | ||
name: Run test (armv7 linux) | ||
with: | ||
args: sh .github/scripts/test.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: Ubuntu | ||
- if: matrix.ARCH == 'ARM64' | ||
uses: docker://hasufell/arm64v8-debian-haskell:10 | ||
name: Run test (aarch64 linux) | ||
with: | ||
args: sh .github/scripts/test.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: Ubuntu | ||
- if: failure() | ||
name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: testfiles | ||
path: | | ||
./test/ghcup-test/golden/unix/GHCupInfo*json | ||
test-macwin: | ||
name: Test Mac/Win | ||
needs: "build-macwin" | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
CABAL_VER: 3.10.1.0 | ||
MACOSX_DEPLOYMENT_TARGET: 10.13 | ||
JSON_VERSION: "0.0.7" | ||
strategy: | ||
matrix: | ||
include: | ||
- os: [self-hosted, macOS, ARM64] | ||
ARTIFACT: "aarch64-apple-darwin-ghcup" | ||
GHC_VER: 9.2.6 | ||
ARCH: ARM64 | ||
DISTRO: na | ||
- os: macOS-11 | ||
ARTIFACT: "x86_64-apple-darwin-ghcup" | ||
GHC_VER: 9.2.6 | ||
ARCH: 64 | ||
DISTRO: na | ||
- os: windows-latest | ||
ARTIFACT: "x86_64-mingw64-ghcup" | ||
GHC_VER: 8.10.7 | ||
ARCH: 64 | ||
DISTRO: na | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: artifacts | ||
path: ./out | ||
- if: runner.os == 'macOS' | ||
name: Run test | ||
run: | | ||
bash .github/scripts/brew.sh coreutils | ||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$PATH" | ||
bash .github/scripts/test.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: ${{ matrix.DISTRO }} | ||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1 | ||
- if: runner.os != 'macOS' | ||
name: Run test | ||
run: bash .github/scripts/test.sh | ||
env: | ||
ARTIFACT: ${{ matrix.ARTIFACT }} | ||
ARCH: ${{ matrix.ARCH }} | ||
GHC_VER: ${{ matrix.GHC_VER }} | ||
DISTRO: ${{ matrix.DISTRO }} | ||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1 | ||
- if: failure() && runner.os == 'Windows' | ||
name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: testfiles | ||
path: | | ||
./test/ghcup-test/golden/windows/GHCupInfo*json | ||
- if: failure() && runner.os != 'Windows' | ||
name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: testfiles | ||
path: | | ||
./test/ghcup-test/golden/unix/GHCupInfo*json | ||
hls: | ||
name: hls | ||
needs: build-linux | ||
runs-on: ubuntu-latest | ||
env: | ||
GHC_VERSION: "8.10.7" | ||
HLS_TARGET_VERSION: "1.8.0.0" | ||
CABAL_VERSION: "3.8.1.0" | ||
JSON_VERSION: "0.0.7" | ||
ARTIFACT: "x86_64-linux-ghcup" | ||
DISTRO: Ubuntu | ||
ARCH: 64 | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
S3_HOST: ${{ secrets.S3_HOST }} | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: artifacts | ||
path: ./out | ||
- name: Run hls build | ||
run: | | ||
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential curl gzip | ||
sh .github/scripts/hls.sh |