diff --git a/.github/workflows/ci-ubuntu.yml b/.github/workflows/ci-ubuntu.yml index a623879445..906068b5d1 100644 --- a/.github/workflows/ci-ubuntu.yml +++ b/.github/workflows/ci-ubuntu.yml @@ -54,11 +54,6 @@ env: CABAL_INSTALL: cabal install --overwrite-policy=always --ghc-options='-O1 +RTS -M6G -RTS' AGDA: agda -Werror +RTS -M5G -H3.5G -A128M -RTS -i. -isrc -idoc -jobs: - test-stdlib: - runs-on: ubuntu-latest - steps: - ######################################################################## ## SETTINGS ## @@ -71,27 +66,41 @@ jobs: ## master version at the root and the experimental in a subdirectory. ######################################################################## +jobs: + ######################################################################## + ## INITIALISATION + ######################################################################## + init: + runs-on: ubuntu-latest + outputs: + AGDA_COMMIT: ${{ steps.init_vars.outputs.AGDA_COMMIT }} + AGDA_HTML_DIR: ${{ steps.init_vars.outputs.AGDA_HTML_DIR }} + AGDA_DEPLOY: ${{ steps.init_vars.outputs.AGDA_DEPLOY }} + BIN_PATH: ${{ steps.path.outputs.BIN_PATH }} + GHC_PATH: ${{ steps.install-ghc-cabal.outputs.ghc-path }} + steps: - name: Initialise variables + id: init_vars run: | if [[ '${{ github.ref }}' == 'refs/heads/experimental' \ - || '${{ github.base_ref }}' == 'experimental' ]]; then + || '${{ github.base_ref }}' == 'experimental' ]]; then # Pick Agda version for experimental - echo "AGDA_COMMIT=tags/v2.8.0" >> "${GITHUB_ENV}"; - echo "AGDA_HTML_DIR=html/experimental" >> "${GITHUB_ENV}" + echo "AGDA_COMMIT=tags/v2.8.0" >> "${GITHUB_OUTPUT}"; + echo "AGDA_HTML_DIR=html/experimental" >> "${GITHUB_OUTPUT}" else # Pick Agda version for master - echo "AGDA_COMMIT=tags/v2.8.0" >> "${GITHUB_ENV}"; - echo "AGDA_HTML_DIR=html/master" >> "${GITHUB_ENV}" + echo "AGDA_COMMIT=tags/v2.8.0" >> "${GITHUB_OUTPUT}"; + echo "AGDA_HTML_DIR=html/master" >> "${GITHUB_OUTPUT}" fi if [[ '${{ github.ref }}' == 'refs/heads/master' \ - || '${{ github.ref }}' == 'refs/heads/experimental' ]]; then - echo "AGDA_DEPLOY=true" >> "${GITHUB_ENV}" + || '${{ github.ref }}' == 'refs/heads/experimental' ]]; then + echo "AGDA_DEPLOY=true" >> "${GITHUB_OUTPUT}" fi -######################################################################## -## CACHING -######################################################################## + ######################################################################## + ## CACHING + ######################################################################## # This caching step allows us to save a lot of building time by only @@ -107,13 +116,14 @@ jobs: ~/.cabal/store ~/.cabal/bin ~/.cabal/share - key: ${{ runner.os }}-${{ env.GHC_VERSION }}-${{ env.CABAL_VERSION }}-${{ env.AGDA_COMMIT }}-cache + key: ${{ runner.os }}-${{ env.GHC_VERSION }}-${{ env.CABAL_VERSION }}-${{ steps.init_vars.outputs.AGDA_COMMIT }}-cache -######################################################################## -## INSTALLATION STEPS -######################################################################## + ######################################################################## + ## INSTALLATION STEPS + ######################################################################## - name: Install ghc & cabal + id: install-ghc-cabal uses: haskell-actions/setup@v2 with: ghc-version: ${{ env.GHC_VERSION }} @@ -121,7 +131,13 @@ jobs: cabal-update: true - name: Put cabal programs in PATH - run: echo ~/.cabal/bin >> "${GITHUB_PATH}" + run: | + echo ~/.cabal/bin >> "${GITHUB_PATH}" + echo ${{ steps.install-ghc-cabal.outputs.ghc-path }} >> "${GITHUB_PATH}" + + - name: Output PATH + id: path + run: echo "BIN_PATH=$PATH" >> "${GITHUB_OUTPUT}" - name: Install alex & happy if: steps.cache-cabal.outputs.cache-hit != 'true' @@ -136,20 +152,57 @@ jobs: run: | git clone https://github.com/agda/agda cd agda - git checkout ${{ env.AGDA_COMMIT }} + git checkout ${{ steps.init_vars.outputs.AGDA_COMMIT }} mkdir -p doc touch doc/user-manual.pdf ${{ env.CABAL_V1_INSTALL }} cd .. -######################################################################## -## TESTING -######################################################################## + - name: Upload Cabal directory + uses: actions/upload-artifact@v4 + with: + include-hidden-files: true + name: ubuntu-cabal-dir + path: ~/.cabal/ + + - name: Upload GHC directory + uses: actions/upload-artifact@v4 + with: + include-hidden-files: true + name: ubuntu-ghc-dir + path: ${{ steps.install-ghc-cabal.outputs.ghc-path }} - # By default github actions do not pull the repo - - name: Checkout stdlib + + ######################################################################## + ## TESTING + ######################################################################## + test-stdlib: + needs: init + runs-on: ubuntu-latest + steps: + - name: Checkout uses: actions/checkout@v5 + - name: Download Cabal directory + uses: actions/download-artifact@v4 + with: + name: ubuntu-cabal-dir + path: ~/.cabal/ + + - name: Download GHC directory + uses: actions/download-artifact@v4 + with: + name: ubuntu-ghc-dir + path: ${{ needs.init.outputs.GHC_PATH }} + + - name: Set permissions + run: | + sudo chmod -R 777 ~/.cabal/bin/ + sudo chmod -R 777 ${{ needs.init.outputs.GHC_PATH }} + + - name: Set PATH + run: echo "${{ needs.init.outputs.BIN_PATH }}" >> ${GITHUB_PATH} + - name: Test stdlib run: | # Including deprecated modules purely for testing @@ -157,6 +210,80 @@ jobs: ${{ env.AGDA }} -WnoUserWarning --safe EverythingSafe.agda ${{ env.AGDA }} -WnoUserWarning Everything.agda + - name: Upload agdai files + uses: actions/upload-artifact@v4 + with: + name: ubuntu-agdai + include-hidden-files: true + path: ./*.agdai + + test-stdlib-golden: + needs: [init, test-stdlib] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Download Cabal directory + uses: actions/download-artifact@v4 + with: + name: ubuntu-cabal-dir + path: ~/.cabal/ + + - name: Download GHC directory + uses: actions/download-artifact@v4 + with: + name: ubuntu-ghc-dir + path: ${{ needs.init.outputs.GHC_PATH }} + + - name: Set permissions + run: | + sudo chmod -R 777 ~/.cabal/bin/ + sudo chmod -R 777 ${{ needs.init.outputs.GHC_PATH }} + + - name: Download agdai files + uses: actions/download-artifact@v4 + with: + name: ubuntu-agdai + + - name: Set PATH + run: echo "${{ needs.init.outputs.BIN_PATH }}" >> ${GITHUB_PATH} + + - name: Golden testing + run: | + make testsuite INTERACTIVE='' AGDA_EXEC='agda' GHC_EXEC='ghc' + + + ######################################################################## + ## DOC DEPLOYMENT + ######################################################################## + html: + needs: [init, test-stdlib] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Download Cabal directory + uses: actions/download-artifact@v4 + with: + name: ubuntu-cabal-dir + path: ~/.cabal/ + + - name: Download GHC directory + uses: actions/download-artifact@v4 + with: + name: ubuntu-ghc-dir + path: ${{ needs.init.outputs.GHC_PATH }} + + - name: Set permissions + run: | + sudo chmod -R 777 ~/.cabal/bin/ + sudo chmod -R 777 ${{ needs.init.outputs.GHC_PATH }} + + - name: Set PATH + run: echo "${{ needs.init.outputs.BIN_PATH }}" >> ${GITHUB_PATH} + - name: Prepare HTML index run: | # Regenerating the Everything files without the deprecated modules @@ -167,15 +294,6 @@ jobs: ${{ env.AGDA }} Everything.agda ${{ env.AGDA }} index.agda - - name: Golden testing - run: | - make testsuite INTERACTIVE='' AGDA_EXEC='agda' GHC_EXEC='ghc' - - -######################################################################## -## DOC DEPLOYMENT -######################################################################## - # We start by retrieving the currently deployed docs # We remove the content that is in the directory we are going to populate # so that stale files corresponding to deleted modules do not accumulate. @@ -183,15 +301,15 @@ jobs: - name: Generate HTML run: | git clone --depth 1 --single-branch --branch gh-pages https://github.com/agda/agda-stdlib html - rm -f '${{ env.AGDA_HTML_DIR }}'/*.html - rm -f '${{ env.AGDA_HTML_DIR }}'/*.css - ${{ env.AGDA }} --html --html-dir ${{ env.AGDA_HTML_DIR }} index.agda + rm -f '${{ needs.init.outputs.AGDA_HTML_DIR }}'/*.html + rm -f '${{ needs.init.outputs.AGDA_HTML_DIR }}'/*.css + ${{ env.AGDA }} --html --html-dir ${{ needs.init.outputs.AGDA_HTML_DIR }} index.agda cp .github/tooling/* . ./landing.sh - name: Deploy HTML uses: JamesIves/github-pages-deploy-action@v4 - if: success() && env.AGDA_DEPLOY + if: success() && needs.init.outputs.AGDA_DEPLOY with: branch: gh-pages