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 28, 2024
1 parent f520f49 commit c3ad532
Show file tree
Hide file tree
Showing 9 changed files with 247 additions and 2 deletions.
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! 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! 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! 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/
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
141 changes: 141 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
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.5"

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

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

- 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: Setup CI
run: |
cabal v2-freeze
mv cabal.project.freeze frozen
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }}
key: ${{ matrix.os }}-ghc-${{ matrix.ghc }}-${{ matrix.clash }}-${{ hashFiles('frozen') }}
restore-keys: |
${{ matrix.os }}-ghc-${{ matrix.ghc }}-${{ matrix.clash }}-${{ hashFiles('frozen') }}
${{ matrix.os }}-ghc-${{ matrix.ghc }}-${{ matrix.clash }}-
${{ matrix.os }}-ghc-${{ matrix.ghc }}-
- name: Unit Tests
run: |
.ci/test_cabal.sh
- name: Setup binaries for testsuite
run: |
cabal v2-install --lib exe:clash
- 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.5"

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

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

- 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: Setup CI
run: |
cabal v2-freeze
mv cabal.project.freeze frozen
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }}
key: ${{ matrix.os }}-ghc-${{ matrix.ghc }}-${{ matrix.clash }}-${{ hashFiles('frozen') }}
restore-keys: |
${{ matrix.os }}-ghc-${{ matrix.ghc }}-${{ matrix.clash }}-${{ hashFiles('frozen') }}
${{ matrix.os }}-ghc-${{ matrix.ghc }}-${{ matrix.clash }}-
${{ matrix.os }}-ghc-${{ matrix.ghc }}-
- 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
32 changes: 32 additions & 0 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,35 @@ write-ghc-environment-files: always

-- Eliminates the need for `--enable-tests`, which is needed for HLS.
tests: true

-- Bleeding edge Clash libraries.
source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: f946617561565440d82f67747acb2486f6526a66
subdir: clash-prelude

source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: f946617561565440d82f67747acb2486f6526a66
subdir: clash-ghc

source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: f946617561565440d82f67747acb2486f6526a66
subdir: clash-lib

-- clash-testsuite
source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: f946617561565440d82f67747acb2486f6526a66
subdir: tests

source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: f946617561565440d82f67747acb2486f6526a66
subdir: clash-prelude-hedgehog
3 changes: 2 additions & 1 deletion clash-cores.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ library
reducers >= 3.12.2 && < 4.0,
text >= 1.2.2 && < 2.2,
constraints >= 0.9 && < 1.0,
template-haskell >= 2.12.0.0 && < 2.22
template-haskell >= 2.12.0.0 && < 2.23

test-suite unittests
import: basic-config
Expand Down Expand Up @@ -258,3 +258,4 @@ test-suite cores-testsuite
clash-lib,
clash-prelude,
clash-testsuite

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 c3ad532

Please sign in to comment.