Install the correct ghcup binary on aarch64 #117
Workflow file for this run
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: "/setup" | |
on: | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- "**.md" | |
pull_request: | |
paths-ignore: | |
- "**.md" | |
workflow_dispatch: | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
test: | |
name: Unit Tests - ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macOS-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: "16" | |
cache: "npm" | |
cache-dependency-path: package-lock.json | |
- run: npm ci --prefer-offline --no-audit --progress=false | |
- run: npm run bundle | |
- run: npm test | |
- name: Ensure generated files are up-to-date | |
run: git diff --exit-code dist/ lib/ | |
install-haskell: | |
name: GHC ${{ matrix.plan.ghc }}, Cabal ${{ matrix.plan.cabal }} - ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# Let's see how the other installs are doing and not fail on the first | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macOS-latest, windows-latest] | |
plan: | |
# Latest releases | |
- ghc: latest | |
cabal: latest | |
# Latest ghc with cabal head | |
- ghc: latest | |
cabal: head | |
# Recommended releases (update according to ghcup) | |
# 9.4 will be recommended soon | |
- ghc: "9.4" | |
cabal: "3.8" | |
- ghc: "9.2" | |
cabal: "3.6" | |
# Some previously recommended releases of ghc with matching cabal | |
- ghc: "8.10" | |
cabal: "3.2" | |
- ghc: "8.8" | |
cabal: "3.0" | |
# cabal-3.0 install might have the Windows symlinking problem | |
# https://github.com/haskell/cabal/issues/5748 | |
- ghc: "8.6" | |
cabal: "2.4" | |
cabal_update: ["false"] | |
# The following tests do not set 'cabal-update', which defaults to 'true' then. | |
include: | |
# Test #210 (XDG): is the cabal store-dir set to something meaningful? | |
- os: ubuntu-latest | |
plan: | |
ghc: "9.6" | |
cabal: "3.10" | |
cabal_update: "true" | |
# With choco, cabal 3.10.1.0 should map to 3.10.1.1 | |
- os: windows-latest | |
plan: | |
ghc: "9.6" | |
cabal: "3.10" | |
cabal_update: "true" | |
# Test some old versions | |
- os: ubuntu-latest | |
plan: | |
ghc: "8.2.2" | |
cabal: "2.4.1.0" | |
cabal_update: "false" | |
- os: ubuntu-20.04 | |
plan: | |
ghc: "7.4.2" | |
cabal: "3.4" | |
# ubuntu-20.04/hvr has of GHC 7 just 7.0.1, 7.0.4, 7.2.2, 7.4.2, 7.10.3 | |
# and of cabal just 2.4, 3.0, 3.2, 3.4 | |
# according to https://launchpad.net/~hvr/+archive/ubuntu/ghc?field.series_filter=focal | |
# Test ghcup pre-release channel | |
- os: ubuntu-latest | |
ghcup_release_channel: "https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml" | |
plan: | |
ghc: "9.6.0.20230111" | |
cabal: "3.8" | |
# Test ghc nightly | |
- os: ubuntu-latest | |
ghcup_release_channel: "https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml" | |
plan: | |
ghc: "latest-nightly" | |
cabal: "latest" | |
# setup does something special for 7.10.3 (issue #79) | |
- os: ubuntu-20.04 | |
plan: | |
ghc: "7.10.3" | |
cabal: "3.6" | |
- os: macOS-latest | |
plan: | |
ghc: "7.10.3" | |
cabal: "3.4" | |
# Andreas 2022-12-29, issue #98: GHC 7.10 failed to install on windows (choco) | |
- os: windows-latest | |
plan: | |
ghc: "7.10" | |
cabal: "3.0" | |
# Test for issue #129: GHC 9.4.3 failed to install on windows (choco) | |
- os: windows-latest | |
plan: | |
ghc: "9.4.3" | |
cabal: "3.8.1.0" | |
# Test ghcup on windows (PR #206) which choco does not have 9.4.5 | |
- os: windows-latest | |
plan: | |
ghc: "9.4.5" | |
cabal: "3.8" | |
# Test GHC 9.4.4 on windows (Issue #245) | |
- os: windows-latest | |
plan: | |
ghc: "9.4.4" | |
cabal: "3.10.1.0" | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./ | |
id: setup | |
with: | |
ghc-version: ${{ matrix.plan.ghc }} | |
ghcup-release-channel: ${{ matrix.ghcup_release_channel }} | |
cabal-version: ${{ matrix.plan.cabal }} | |
cabal-update: ${{ matrix.cabal_update }} | |
- name: Show installed versions and PATH | |
run: | | |
cabal --version | |
ghc --version | |
echo "$PATH" | |
- name: Confirm resolved and installed versions match | |
shell: bash | |
run: | | |
CABALVER="$(cabal --numeric-version)" | |
GHCVER="$(ghc --numeric-version)" | |
echo "CABALVER=${CABALVER}" >> "${GITHUB_ENV}" | |
echo "GHCVER=${GHCVER}" >> "${GITHUB_ENV}" | |
if [[ "${{ steps.setup.outputs.ghc-version }}" == "latest-nightly" ]] | |
then | |
GHCVER_EXPECTED=$( \ | |
curl "${{ matrix.ghcup_release_channel }}" | \ | |
yq '.ghcupDownloads.GHC[] | select(.viTags[] | contains("LatestNightly")) | key' \ | |
) | |
echo "Latest nightly: ${GHCVER_EXPECTED}" | |
else | |
GHCVER_EXPECTED="${{ steps.setup.outputs.ghc-version }}" | |
fi | |
if [[ "${{ steps.setup.outputs.cabal-version }}" == "head" ]] | |
then | |
CABALVER_EXPECTED=$( \ | |
curl --silent https://raw.githubusercontent.com/haskell/cabal/master/cabal-install/cabal-install.cabal | \ | |
sed -E -n 's/^Version:[[:space:]]+//p' \ | |
) | |
echo "Cabal head: ${CABALVER_EXPECTED}" | |
else | |
CABALVER_EXPECTED="${{ steps.setup.outputs.cabal-version }}" | |
fi | |
[[ "${CABALVER_EXPECTED}" == ${CABALVER}* ]] && \ | |
[[ "${GHCVER}" == "${GHCVER_EXPECTED}" ]] | |
- name: Test runghc | |
run: | | |
runghc --version | |
runghc __tests__/hello.hs | |
- name: Build test project | |
working-directory: __tests__/project | |
run: cabal build | |
- name: Run test project | |
working-directory: __tests__/project | |
run: cabal run | |
- name: Install test project | |
working-directory: __tests__/project | |
run: cabal install | |
- name: Run installed test project | |
run: hello-haskell-setup | |
# This tests whether the default installdir has been added to the PATH (issue #130). | |
- name: Build and run test with Hackage dependency | |
if: ${{ matrix.cabal_update != 'false' }} | |
working-directory: __tests__/project-with-hackage-dependency | |
run: cabal build && cabal run | |
- name: Confirm installed and expected versions match | |
shell: bash | |
# check that if given in the matrix, the actual version matches: | |
# - cabal: major version | |
# - ghc: major and minor version | |
# pure bash startsWith | |
run: | | |
if [[ "${{ matrix.plan.cabal }}" =~ ^([0-9]+\.[0-9]+) ]]; then cabalmajor="${BASH_REMATCH[1]}"; fi | |
if [[ "${{ matrix.plan.ghc }}" =~ ^([0-9]+\.[0-9]+) ]]; then ghcmajor="${BASH_REMATCH[1]}"; fi | |
if [[ "${{ matrix.plan.ghc }}" =~ ^([0-9]+\.[0-9]+\.[0-9]+) ]]; then ghcver="${BASH_REMATCH[1]}"; fi | |
[[ "${CABALVER}" =~ ^"${cabalmajor}" ]] && [[ "${GHCVER}" =~ ^"${ghcmajor}" ]] && [[ "${GHCVER}" =~ ^"${ghcver}" ]] | |
test-fallback: | |
name: Test GHC Installation Fallbacks - ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macOS-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./ | |
id: setup | |
env: | |
RUNNER_DEBUG: "1" | |
with: | |
ghc-version: 8.21.5 | |
- name: Error on success | |
if: steps.setup.outputs.failed != 'true' | |
# NB: 'failed' is an undeclared output of the setup action, used in debug mode | |
run: | | |
echo "Error: ghc 8.21.5 didn't fail to install" | |
install-stack: | |
name: Stack ${{ matrix.stack }} ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macOS-latest, windows-latest] | |
stack: ["latest", "2.9.3"] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./ | |
id: setup | |
with: | |
enable-stack: true | |
stack-no-global: true | |
stack-version: ${{ matrix.stack }} | |
- run: | | |
stack --version | |
stack --help | |
- name: Checking if returned stack-root output is correct | |
shell: bash | |
# NB: we invoke `stack path` twice, because the first time it | |
# might install things (like MSYS2 on Windows) which clobber the output. | |
run: | | |
stack path --system-ghc | |
expected_stack_root=$(stack path --system-ghc --stack-root) | |
if [ "${expected_stack_root}" != "${{ steps.setup.outputs.stack-root }}" ]; then | |
echo "Stack-root does not match expected value" | |
echo "Expected stack-root: ${expected_stack_root}" | |
echo "Returned stack-root: ${{ steps.setup.outputs.stack-root }}" | |
exit 1 | |
fi |