Skip to content

Set profiling options in the cabal file #345

Set profiling options in the cabal file

Set profiling options in the cabal file #345

Workflow file for this run

name: Tests Pipeline
on:
pull_request:
push:
branches: ["main"]
jobs:
generate-matrix:
name: "Generate matrix from cabal"
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
runs-on: ubuntu-latest
steps:
- name: Extract the tested GHC versions
id: set-matrix
uses: kleidukos/get-tested@0.1.7.1
with:
cabal-file: get-tested.cabal
ubuntu-version: 'latest'
macos-version: 'latest'
version: 0.1.7.0
build:
name: ${{ matrix.ghc }} on ${{ matrix.os }}
needs: generate-matrix
runs-on: ${{ matrix.os }}
strategy:
matrix: ${{ fromJSON(needs.generate-matrix.outputs.matrix) }}
steps:
- name: "Install tools"
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
sudo apt install upx-ucl
- name: Checkout base repo
uses: actions/checkout@v4
- name: Set up Haskell
id: setup-haskell
uses: haskell-actions/setup@v2
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: "latest"
- name: Configure
run: |
ARCHITECTURE=$(uname -m)
echo "ARCH=$ARCHITECTURE" >> $GITHUB_ENV
echo "REPORT_NAME=report-${{ runner.os }}-ghc-${{ matrix.ghc }}.xml" >> $GITHUB_ENV
- name: Freeze
run: cabal freeze --project-file=cabal.release.project
- name: Cache
uses: actions/cache@v4
with:
key: ${{ runner.os }}-ghc-${{ matrix.ghc }}-${{ hashFiles('**/plan.json') }}
path: ${{ steps.setup-haskell.outputs.cabal-store }}
restore-keys: ${{ runner.os }}-ghc-${{ matrix.ghc }}-
- name: Build
run: cabal build --project-file=cabal.release.project
- name: Test
run: |
cabal test --project-file=cabal.release.project --test-options "--xml=../get-tested/${{ env.REPORT_NAME }}" all
- name: Upload the test report
uses: actions/upload-artifact@v4
if: success() || failure() # always run even if the previous step fails
with:
name: ${{ env.REPORT_NAME }}
path: ${{ env.REPORT_NAME }}
- name: Install
run: |
bin=$(cabal -v0 --project-file=cabal.release.project list-bin get-tested)
mkdir distribution
cp ${bin} distribution/get-tested
- name: Post-process executables
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
strip distribution/get-tested
upx -9 distribution/get-tested
- name: Package the get-tested executable
run: |
executable=distribution/get-tested
ARTIFACT_NAME="get-tested-head-${{ runner.os }}-${{ env.ARCH }}"
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV
mv ./distribution/get-tested ${ARTIFACT_NAME}
- name: Upload the get-tested executable
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.ARTIFACT_NAME }}
build-alpine:
name: 9.10.1 on alpine-3.20
runs-on: ubuntu-latest
container: "alpine:3.20"
needs: generate-matrix
steps:
- name: Install extra dependencies
shell: sh
run: |
apk add bash binutils-gold curl \
curl file g++ gcc git gmp-dev \
jq libc-dev libffi-dev make \
musl-dev ncurses-dev perl pkgconfig \
sudo tar upx xz zlib-dev zlib-static
- uses: actions/checkout@v4
- uses: haskell-actions/setup@v2
id: setup-haskell
with:
ghc-version: "9.10.1"
cabal-version: "latest"
- name: Configure
run: |
ARCHITECTURE=$(uname -m)
echo "ARCH=$ARCHITECTURE" >> $GITHUB_ENV
echo "REPORT_NAME=report-alpine.xml" >> $GITHUB_ENV
- name: Freeze
run: cabal freeze --project-file=cabal.static.project
- name: Cache
uses: actions/cache@v4
with:
key: ${{ runner.os }}-ghc-${{ matrix.ghc }}-${{ hashFiles('**/plan.json') }}
path: ${{ steps.setup-haskell.outputs.cabal-store }}
restore-keys: ${{ runner.os }}-ghc-${{ matrix.ghc }}-
- name: Build
run: cabal build --project-file=cabal.static.project
- name: Test
run: |
cabal test --project-file=cabal.static.project --test-options "--xml=../get-tested/${{ env.REPORT_NAME }}" all
- name: Upload the test report
uses: actions/upload-artifact@v4
if: success() || failure() # always run even if the previous step fails
with:
name: ${{ env.REPORT_NAME }}
path: ${{ env.REPORT_NAME }}
- name: Install
run: |
bin=$(cabal -v0 --project-file=cabal.static.project list-bin get-tested)
mkdir distribution
cp ${bin} distribution/get-tested
- name: Post-process executables
run: |
strip distribution/get-tested
upx -9 distribution/get-tested
- name: Create artifact name
run: |
ARTIFACT_NAME="get-tested-head-${{ runner.os }}-static-${{ env.ARCH }}"
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV
mv ./distribution/get-tested ${ARTIFACT_NAME}
- name: Upload get-tested executable to workflow artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.ARTIFACT_NAME }}
collect-test-results:
name: Collect test results
runs-on: ubuntu-latest
if: ${{ always() }}
needs: ['build', 'build-alpine']
steps:
- name: Install junitparser
run: |
pip install junitparser==3.2.0
- name: Download Test Report
uses: actions/download-artifact@v4
with:
pattern: report-*
merge-multiple: true
- name: Merge XML files
run: |
junitparser merge --glob *.xml final-report.xml
- name: Publish Test Report
uses: mikepenz/action-junit-report@v5
with:
commit: ${{github.event.workflow_run.head_sha}}
report_paths: 'final-report.xml'
prerelease-head:
name: Create a GitHub prerelease with the binary artifacts
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
needs: ["build", "build-alpine"]
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
pattern: get-tested-*
merge-multiple: true
path: ./out
- name: Pre-release
uses: softprops/action-gh-release@v2
with:
prerelease: true
files: ./out/*
tag_name: get-tested-head