From 92d06db75835e41b45fd5c54b4b0cda4395b0c76 Mon Sep 17 00:00:00 2001 From: Amitai Burstein Date: Sat, 24 Jun 2023 15:19:57 +0300 Subject: [PATCH] Add docs about GH Actions --- Guide/testing.markdown | 66 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/Guide/testing.markdown b/Guide/testing.markdown index a9148377e..3e3358c38 100644 --- a/Guide/testing.markdown +++ b/Guide/testing.markdown @@ -24,6 +24,7 @@ The following setup and tests can be viewed in the [Blog example](https://github ```haskell # Test/Main.hs + module Main where import Test.Hspec @@ -128,6 +129,12 @@ package flags have changed, resetting and loading new packages... Loaded GHCi configuration from /home/amitaibu/Sites/Haskell/ihp/blog/.ghci ``` +Another way of executing the tests, that we'll use on CI, is to use the `runghc` command, while running `devenv up` on another tab: + +``` +nix-shell --run "runghc $(make print-ghc-extensions) -i. -ibuild -iConfig Test/Main.hs" +``` + ## Setting the Current User During Testing Use `withUser` to call an action with a specific user during testing: @@ -163,3 +170,62 @@ tests = aroundAll (withIHPApp WebApplication config) do ## Advanced For more details on how to structure test suites see the [Hspec manual](http://hspec.github.io/) (a Haskell testing library). You also might want to check out the cool [Hedgehog](https://hedgehog.qa/) library for automated property tests. + +## GitHub Actions + +The following GitHub Action workflow can be used to run the tests on CI: + +```yaml +# .github/workflows/test.yml + +name: Test + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + tests: + name: Run Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: cachix/install-nix-action@v20 + with: + nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/51bcdc4cdaac48535dabf0ad4642a66774c609ed.tar.gz + + # Use the cachix cache for faster builds. + - name: Cachix Init + uses: cachix/cachix-action@v12 + with: + name: digitallyinduced + skipPush: true + + # Install devenv. + - uses: cachix/cachix-action@v12 + with: + name: devenv + - name: Install devenv.sh + run: nix profile install github:cachix/devenv/latest + shell: sh + + # Install direnv, which also `direnv allow`s the project. + - uses: HatsuneMiku3939/direnv-action@v1 + with: + direnvVersion: 2.32.3 + + - run: | + # Start the project in the background. + nix-shell --run "devenv up &" + + # Execute the tests. + nix-shell --run "runghc $(make print-ghc-extensions) -i. -ibuild -iConfig Test/Main.hs" +``` \ No newline at end of file