diff --git a/.github/workflows/haddock-pages.yml b/.github/workflows/haddock-pages.yml deleted file mode 100644 index 9b434e5..0000000 --- a/.github/workflows/haddock-pages.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: Publish API docs - -on: [push, pull_request, workflow_dispatch] - -env: - HADDOCK_DIR: haddock-html - PAGES_DIR: gh-pages - -jobs: - - haddock: - runs-on: ubuntu-20.04 - steps: - - - name: Set up haskell - uses: haskell/actions/setup@v1 - with: - ghc-version: '9.0.1' - cabal-version: '3.4' - - - name: Checkout repository content - uses: actions/checkout@v2 - - - name: Prepare cabal cache - uses: actions/cache@v2 - env: - cache-name: cache-cabal - with: - path: ~/.cabal - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - name: Prepare cabal - run: cabal update - - - name: Generate haddock API docs - run: cabal haddock --builddir=haddock_build - - - name: Find generated HTML - run: mv $(find haddock_build -wholename '*doc/html/trivialini' | head -n 1) $HADDOCK_DIR - - - name: Store generated API docs - uses: actions/upload-artifact@v2 - with: - path: ${{ env.HADDOCK_DIR }} - name: haddock-html - - deploy-pages: - needs: haddock - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-20.04 - steps: - - - name: Load API docs - uses: actions/download-artifact@v2 - with: - name: haddock-html - path: ${{ env.PAGES_DIR }} - - - name: Disable GitHub Pages' Jekyll - run: touch $PAGES_DIR/.nojekyll - - - name: Deploy to GitHub Pages - uses: crazy-max/ghaction-github-pages@v2 - with: - target_branch: gh-pages - build_dir: ${{ env.PAGES_DIR }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test-apidocs.yml b/.github/workflows/test-apidocs.yml new file mode 100644 index 0000000..0a6226b --- /dev/null +++ b/.github/workflows/test-apidocs.yml @@ -0,0 +1,83 @@ +name: Build, Test, API Docs + +on: [push, workflow_dispatch] + +jobs: + build_test_docs: + name: GHC ${{ matrix.ghc-version }} on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + ghc-version: ['8.10', '9.2', '9.4', '9.6', '9.8'] + steps: + + - name: Set up GHC ${{ matrix.ghc-version }} + uses: haskell-actions/setup@v2 + id: setup + with: + ghc-version: ${{ matrix.ghc-version }} + cabal-version: 'latest' + cabal-update: true + + - name: Checkout repository content + uses: actions/checkout@v3 + + - name: Configure the build + run: | + cabal configure --enable-tests + cabal build --dry-run + # The last step generates dist-newstyle/cache/plan.json for the cache key + + - name: Restore cached dependencies + uses: actions/cache/restore@v3 + id: cache + env: + key: ${{ runner.os }}-ghc-${{ steps.setup-outputs.ghc-version }}-cabal-${{ steps.setup.outputs.cabal-version }} + with: + path: ${{ steps.setup.outputs.cabal-store }} + key: ${{ env.key }}-plan-${{ hashFiles('**/plan.json') }} + restore-keys: ${{ env.key }} + + - name: Install dependencies + run: cabal build all --only-dependencies --enable-tests + + - name: Build project + run: cabal build --enable-tests all + + - name: Run tests + run: cabal test --test-show-details=streaming + + - name: Build API docs + run: cabal haddock --builddir=haddock_build --haddock-hyperlinked-source --haddock-html-location='https://hackage.haskell.org/package/$pkg-$version/docs' + + - name: Save cached dependencies + uses: actions/cache/save@v3 + if: ${{ steps.cache.outputs.cache-primary-key != steps.cache.outputs.cache-matched-key }} + with: + path: ${{ steps.setup.outputs.cabal-store }} + key: ${{ steps.cache.outputs.cache-primary-key }} + + - name: Collect generated API docs + run: mv $(find haddock_build -wholename '*doc/html/trivialini' | head -n 1) haddock_html + + - name: Store generated API docs as artifact + uses: actions/upload-artifact@v2 + with: + path: haddock_html + + deploy_docs: + needs: build_test_docs + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deploy.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deploy + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 821d586..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Build and test - -on: [push, pull_request, workflow_dispatch] - -jobs: - test: - runs-on: ubuntu-20.04 - steps: - - - name: Set up haskell - uses: haskell/actions/setup@v1 - with: - ghc-version: '9.0.1' - cabal-version: '3.4' - - - name: Checkout repository content - uses: actions/checkout@v2 - - - name: Prepare cabal cache - uses: actions/cache@v2 - env: - cache-name: cache-cabal - with: - path: ~/.cabal - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - name: Install dependencies - run: | - cabal update - cabal build --only-dependencies --enable-tests --enable-benchmarks - - name: Build project - run: cabal build --enable-tests --enable-benchmarks all - - - name: Run tests - run: cabal test --test-show-details=streaming diff --git a/README.md b/README.md index c9432c6..bcda3a3 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,7 @@ **Ultra light weight ini file parser, written in Haskell** -[![Build and test](https://github.com/memowe/trivialini/actions/workflows/test.yml/badge.svg)](https://github.com/memowe/trivialini/actions/workflows/test.yml) -[![Publish API docs](https://github.com/memowe/trivialini/actions/workflows/haddock-pages.yml/badge.svg)](https://github.com/memowe/trivialini/actions/workflows/haddock-pages.yml) +[![Test & API Docs pipeline](https://github.com/memowe/trivialini/actions/workflows/test-apidocs.yml/badge.svg)](https://github.com/memowe/trivialini/actions/workflows/test-apidocs.yml) [![API docs](https://img.shields.io/badge/Haddock-Documentation-8a80a8?style=flat&logo=haskell&logoColor=lightgray)](https://mirko.westermeier.de/trivialini/Trivialini.html) ## Overview