Skip to content

Commit

Permalink
Add initial CI setup
Browse files Browse the repository at this point in the history
  • Loading branch information
t-wallet committed Aug 27, 2024
1 parent 2dee5a3 commit 519d2c0
Show file tree
Hide file tree
Showing 7 changed files with 209 additions and 1 deletion.
44 changes: 44 additions & 0 deletions .ci/build_docs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/bin/bash
set -xueo pipefail

mkdir -p hadocs

# Cache dependencies
cabal v2-build clash-cores -O0 --enable-documentation --only-dependencies

cabal v2-haddock clash-cores -O0 --enable-documentation \
| tee haddock_log

set +e

# Temporarily disabled, as there are hundreds of TH-generated instances without
# documentation.
#if grep -q "Missing documentation" haddock_log; then
# echo -e "\e[1m\e[31mMissing documentation! Scroll up for full log.\e[0m"
# grep --color=always -n -C 5 "Missing documentation" haddock_log
# exit 1
#fi

out_of_scope_warn="If you qualify the identifier, haddock can try to link it anyway"
if grep -q "${out_of_scope_warn}" haddock_log; then
echo -e "\e[1m\e[31mIdentifier out of scope in ${pkg}! Scroll up for full log.\e[0m"
grep --color=always -n -C 5 "${out_of_scope_warn}" haddock_log
exit 1
fi

link_dest_warn="could not find link destinations for:"
if grep -q "${link_dest_warn}" haddock_log; then
echo -e "\e[1m\e[31mCould not find link destination in ${pkg}! Scroll up for full log.\e[0m"
grep --color=always -n -C 5 "${link_dest_warn}" haddock_log
exit 1
fi

ambiguous_warn="You may be able to disambiguate the identifier by"
if grep -q "${ambiguous_warn}" haddock_log; then
echo -e "\e[1m\e[31mAmbiguous identifier found in ${pkg}! Scroll up for full log.\e[0m"
grep --color=always -n -C 5 "${ambiguous_warn}" haddock_log
exit 1
fi

# Copy documention to hadocs/
ln -s "$(dirname "$(tail -n1 haddock_log)")" hadocs/${pkg}
2 changes: 2 additions & 0 deletions .ci/cabal.project.local
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package clash-cores
ghc-options: -Werror
7 changes: 7 additions & 0 deletions .ci/test_cabal.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash
set -xeou pipefail

cabal v2-build all -fci
cabal v2-run unittests -fci --enable-tests
cabal v2-run doctests -fci --enable-tests
cabal v2-sdist
11 changes: 11 additions & 0 deletions .ci/test_whitespace.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash
set -xou pipefail

grep \
-E ' $' -n -r . \
--include=*.{hs,hs-boot,sh,cabal,md,yml} \
--exclude-dir=dist-newstyle --exclude-dir=deps
if [[ $? == 0 ]]; then
echo "EOL whitespace detected. See ^"
exit 1;
fi
137 changes: 137 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
name: CI

# Trigger the workflow on all pull requests and pushes/merges to main branch
on:
pull_request:
push:
branches: [main]

concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
cabal:
name: Cabal tests - ghc ${{ matrix.ghc }} / clash ${{ matrix.clash }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
clash:
- "1.8.1"
cabal:
- "3.10"
ghc:
- "9.6.4"

env:
clash_version: ${{ matrix.clash }}
NIXPKGS_ALLOW_BROKEN: 1

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Nix
uses: cachix/install-nix-action@v22
with:
nix-path: nixpkgs=channel:nixos-unstable

- name: Cache nix
uses: DeterminateSystems/magic-nix-cache-action@v2

- name: Run nix garbage collector
run: nix-store --gc

- name: Enter the nix environment
run: nix-shell

- name: Setup Haskell
uses: haskell-actions/setup@v2
id: setup-haskell-cabal
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: ${{ matrix.cabal }}

- name: Use CI specific settings
run: |
cp .ci/cabal.project.local .
- name: Unit Tests
run: |
.ci/test_cabal.sh
- name: Testsuite (VHDL)
run: |
cabal v2-run cores-testsuite -- --hide-successes -p .VHDL --no-vivado
- name: Testsuite (Verilog)
run: |
cabal v2-run cores-testsuite -- --hide-successes -p .Verilog --no-vivado
- name: Testsuite (SystemVerilog)
run: |
cabal v2-run cores-testsuite -- --hide-successes -p .SystemVerilog --no-modelsim --no-vivado
documentation:
name: Haddock Documentation - ghc ${{ matrix.ghc }} / clash ${{ matrix.clash }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
clash:
- "1.8.1"
cabal:
- "3.10"
ghc:
- "9.6.4"

env:
clash_version: ${{ matrix.clash }}
NIXPKGS_ALLOW_BROKEN: 1

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Nix
uses: cachix/install-nix-action@v22
with:
nix-path: nixpkgs=channel:nixos-unstable

- name: Cache nix
uses: DeterminateSystems/magic-nix-cache-action@v2

- name: Run nix garbage collector
run: nix-store --gc

- name: Enter the nix environment
run: nix-shell

- name: Setup Haskell
uses: haskell-actions/setup@v2
id: setup-haskell-cabal
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: ${{ matrix.cabal }}

- name: Use CI specific settings
run: |
cp .ci/cabal.project.local .
- name: Build
run: |
.ci/build_docs.sh
linting:
name: Source code linting
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Whitespace
run: |
.ci/test_whitespace.sh
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ dist-newstyle/
stack.yaml.lock
cabal-dev
/cabal.project.local
haddock_log
.ghc.environment.*
*.o
*.o-boot
Expand Down
8 changes: 7 additions & 1 deletion default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,10 @@
with nixpkgs.pkgs;
with gitignore;

haskellPackages.callCabal2nix "clash-cores" (gitignoreSource ./.) {}
let
clash-cores = haskellPackages.callCabal2nix "clash-cores" (gitignoreSource ./.) {};
in
clash-cores.overrideAttrs (final: prev: {
buildInputs = prev.buildInputs ++ [ pkgs.git ];
})

0 comments on commit 519d2c0

Please sign in to comment.