Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 157 additions & 39 deletions .github/workflows/ci-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
##
Expand All @@ -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
Expand All @@ -107,21 +116,28 @@ 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 }}
cabal-version: ${{ env.CABAL_VERSION }}
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'
Expand All @@ -136,27 +152,138 @@ 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
cabal run GenerateEverything -- --include-deprecated
${{ 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
Expand All @@ -167,31 +294,22 @@ 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.
# We then generate the docs in the AGDA_HTML_DIR subdirectory
- 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
Expand Down
Loading