Skip to content

Commit

Permalink
Start CI setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Kleidukos committed Jul 21, 2024
1 parent 990de27 commit a949733
Show file tree
Hide file tree
Showing 6 changed files with 404 additions and 0 deletions.
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Set update schedule for GitHub Actions

version: 2
updates:

- package-ecosystem: "github-actions"
directory: "/"
schedule:
# Check for updates to GitHub Actions every week
interval: "weekly"
168 changes: 168 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
name: Tests Pipeline

on:
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/[email protected]
with:
cabal-file: dump-decls.cabal
ubuntu-version: 'latest'
macos-version: 'latest'
version: 0.1.7.1
tests:
name: ${{ matrix.ghc }} on ${{ matrix.os }}
needs: generate-matrix
runs-on: ${{ matrix.os }}
strategy:
matrix: ${{ fromJSON(needs.generate-matrix.outputs.matrix) }}
steps:
- name: Checkout base repo
uses: actions/checkout@v4
- name: "Install tools"
run: |
.github/workflows/install-tools.sh
- 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 ${{ env.ARCH }}
cabal configure --enable-tests
- name: Freeze
run: cabal freeze --project-file=cabal.release.project
- name: Cache
uses: actions/[email protected]
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: ${{ runner.os }}-ghc-${{ matrix.ghc }}-${{ hashFiles('**/plan.json') }}
restore-keys: ${{ runner.os }}-ghc-${{ matrix.ghc }}-

- name: Build
run: cabal build --project-file=cabal.release.project

- name: Install
run: |
bin=$(cabal -v0 --project-file=cabal.static.project list-bin dump-decls)
mkdir distribution
cp ${bin} distribution/dump-decls
- name: File type
run: file distribution/dump-decls

- name: Package the dump-decls executable
run: |
GETTESTED_EXEC=distribution/dump-decls
.github/workflows/process-binaries.sh
DIR=$(dirname $GETTESTED_EXEC)
FILE=$(basename $GETTESTED_EXEC)
GETTESTED_EXEC_TAR=dump-decls-head-${{ runner.os }}-${{ env.ARCH }}.tar.gz
tar -czvf $GETTESTED_EXEC_TAR -C $DIR $FILE
echo GETTESTED_EXEC_TAR=$GETTESTED_EXEC_TAR >> $GITHUB_ENV
- name: Upload the dump-decls executable
uses: actions/upload-artifact@v3
with:
name: artifact
path: ${{ env.GETTESTED_EXEC_TAR }}

build-alpine:
name: 9.10.1 on alpine-3.19
runs-on: ubuntu-latest
container: 'alpine:3.19'
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 ${{ env.ARCH }}
cabal configure --enable-tests
- name: Freeze
run: cabal freeze --project-file=cabal.static.project

- uses: actions/cache@v4
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: ${{ runner.os }}-ghc-${{ steps.setup.outputs.ghc-version }}-${{ hashFiles('**/plan.json') }}
restore-keys: ${{ runner.os }}-${{ steps.setup.outputs.ghc-version }}-

- name: Build
run: cabal build --project-file=cabal.static.project

- name: Test
run: cabal test --project-file=cabal.static.project all

- name: Install
run: |
bin=$(cabal -v0 --project-file=cabal.static.project list-bin dump-decls)
mkdir distribution
cp ${bin} distribution/dump-decls
- name: File type
run: file distribution/dump-decls

- name: Tar dump-decls executable
run: |
GETTESTED_EXEC=distribution/dump-decls
.github/workflows/process-binaries.sh
DIR=$(dirname $GETTESTED_EXEC)
FILE=$(basename $GETTESTED_EXEC)
GETTESTED_EXEC_TAR=dump-decls-head-${{ runner.os }}-static-${{ env.ARCH }}.tar.gz
tar -czvf $GETTESTED_EXEC_TAR -C $DIR $FILE
echo GETTESTED_EXEC_TAR=$GETTESTED_EXEC_TAR >> $GITHUB_ENV
- name: Upload dump-decls executable to workflow artifacts
uses: actions/upload-artifact@v3
with:
name: artifact
path: ${{ env.GETTESTED_EXEC_TAR }}

prerelease-head:
name: Create a GitHub prerelease with the binary artifacts
runs-on: ubuntu-latest
needs: ['tests', 'build-alpine']

steps:
- uses: actions/download-artifact@v3
with:
name: artifact
path: ./out

- name: Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
files: ./out/*
6 changes: 6 additions & 0 deletions .github/workflows/install-tools.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash

case "$(uname -s)" in
Linux*) sudo apt install upx-ucl;;
Darwin*) exit 0;;
esac
35 changes: 35 additions & 0 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Linting

on:
pull_request:
push:
branches: ["main"]

jobs:
fourmolu:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: fourmolu/fourmolu-action@v10
with:
pattern: |
app/**/*.hs
src/**/*.hs
hlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: 'Set up HLint'
uses: haskell-actions/hlint-setup@v2
with:
version: '3.8'

- name: 'Run HLint'
uses: haskell-actions/hlint-run@v2
with:
path: '["app, src"]'
fail-on: warning

12 changes: 12 additions & 0 deletions .github/workflows/process-binaries.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env bash

GETTESTED_PATH="distribution/dump-decls"

case "$(uname -s)" in
Linux*)
strip $GETTESTED_PATH
upx -9 $GETTESTED_PATH
;;
Darwin*)
echo "upx crashes on macOS Ventura and above" ;;
esac
Loading

0 comments on commit a949733

Please sign in to comment.