name: Idris2 on: push: branches: - '*' tags: - '*' paths-ignore: - 'docs/**' - 'icons/**' - 'Release/**' - '**.md' - 'CONTRIBUTORS' - 'LICENSE' - '.github/workflows/ci-bootstrap.yml' - '.github/workflows/ci-lint.yml' - '.github/workflows/ci-sphinx.yml' - '.github/workflows/ci-super-linter.yml' pull_request: branches: - main paths-ignore: - 'docs/**' - 'icons/**' - 'Release/**' - '**.md' - 'CONTRIBUTORS' - 'LICENSE' - '.github/workflows/ci-bootstrap.yml' - '.github/workflows/ci-lint.yml' - '.github/workflows/ci-sphinx.yml' - '.github/workflows/ci-super-linter.yml' env: IDRIS2_VERSION: 0.5.1 # For previous-version build jobs: initialise: runs-on: ubuntu-latest steps: - name: Checkout Project uses: actions/checkout@v2 with: # for pull_request so we can do HEAD^2 fetch-depth: 2 - name: Get commit message id: get_commit_message run: | if [[ '${{ github.event_name }}' == 'push' ]]; then echo "::set-output name=commit_message::$(git log --format=%B -n 1 HEAD)" elif [[ '${{ github.event_name }}' == 'pull_request' ]]; then echo "::set-output name=commit_message::$(git log --format=%B -n 1 HEAD^2)" fi outputs: commit_message: echo "${{ steps.get_commit_message.outputs.commit_message }}" ###################################################################### # Build from the previous version # We perform this check before all the other ones because: # 1. It is fast # 2. If it fails then there is no point in trying the rest ###################################################################### quick-check: needs: initialise runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci: skip]') env: IDRIS2_CG: chez SCHEME: scheme steps: - name: Checkout uses: actions/checkout@v2 - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" # Get our hands on the released version either by using the cache # or by rebuilding it if necessary. - name: Cache Chez Previous Version id: previous-version-cache uses: actions/cache@v2 with: path: Idris2-${{ env.IDRIS2_VERSION }} key: ${{ runner.os }}-idris2-bootstrapped-chez-${{ env.IDRIS2_VERSION }} - name : Build previous version if: steps.previous-version-cache.outputs.cache-hit != 'true' run: | wget "https://www.idris-lang.org/idris2-src/idris2-$IDRIS2_VERSION.tgz" tar zxvf "idris2-$IDRIS2_VERSION.tgz" cd "Idris2-$IDRIS2_VERSION" make bootstrap cd .. - name: Install previous version run: | cd "Idris2-$IDRIS2_VERSION" make install cd .. # Build the current version and save the installation. - name: Build current version run: | make && make install - name: Artifact Idris2 from previous version uses: actions/upload-artifact@v2 with: name: ubuntu-installed-idris2-${{ env.IDRIS2_VERSION }}-chez path: ~/.idris2/ ###################################################################### # Bootstrapping builds ###################################################################### # CHEZ ubuntu-bootstrap-chez: needs: quick-check runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: ubuntu]') || contains(needs.initialise.outputs.commit_message, '[ci: chez]') env: IDRIS2_CG: chez SCHEME: scheme steps: - name: Checkout uses: actions/checkout@v2 - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" - name: Make bootstrap folder readonly run: chmod -R a-w bootstrap - name: Build from bootstrap run: make bootstrap && make install - name: Artifact Bootstrapped Idris2 uses: actions/upload-artifact@v2 with: name: ubuntu-installed-bootstrapped-idris2-chez path: ~/.idris2/ macos-bootstrap-chez: needs: quick-check runs-on: macos-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: macos]') || contains(needs.initialise.outputs.commit_message, '[ci: chez]') env: SCHEME: chez steps: - name: Checkout uses: actions/checkout@v2 - name: Install build dependencies run: | brew install chezscheme brew install coreutils echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" - name: Make bootstrap folder readonly run: chmod -R a-w bootstrap - name: Build Idris 2 from bootstrap run: make bootstrap && make install shell: bash - name: Artifact Bootstrapped Idris2 uses: actions/upload-artifact@v2 with: name: macos-installed-bootstrapped-idris2-chez path: ~/.idris2/ windows-bootstrap-chez: needs: quick-check runs-on: windows-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: windows]') || contains(needs.initialise.outputs.commit_message, '[ci: chez]') || contains(needs.initialise.outputs.commit_message, '[ci: racket]') env: MSYSTEM: MINGW64 MSYS2_PATH_TYPE: inherit SCHEME: scheme CC: gcc steps: - name: Init run: | git config --global core.autocrlf false - name: Checkout uses: actions/checkout@v2 - name: Get Chez Scheme run: | git clone --depth 1 https://github.com/cisco/ChezScheme c:\msys64\usr\bin\bash -l -c "pacman -S --noconfirm tar make mingw-w64-x86_64-gcc" echo "PWD=$(c:\msys64\usr\bin\cygpath -u $(pwd))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: Configure and Build Chez Scheme run: | c:\msys64\usr\bin\bash -l -c "cd $env:PWD && cd ChezScheme && ./configure --threads && make" - name: Set Path run: | $chez="$(pwd)\ChezScheme\ta6nt\bin\ta6nt" $idris="$(pwd)\.idris2" echo "$chez" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "$idris\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "IDRIS_PREFIX=$idris" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "PREFIX=$(c:\msys64\usr\bin\cygpath -u $idris)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: Test Scheme run: | scheme --version - name: Bootstrap run: c:\msys64\usr\bin\bash -l -c "cd $env:PWD && make bootstrap" - name: Bootstrap test run: c:\msys64\usr\bin\bash -l -c "cd $env:PWD && make bootstrap-test" - name: Install run: c:\msys64\usr\bin\bash -l -c "cd $env:PWD && make install" - name: Artifact Idris2 from chez uses: actions/upload-artifact@v2 with: name: windows-installed-bootstrapped-idris2-chez path: ${{ env.IDRIS_PREFIX }} nix-bootstrap-chez: needs: quick-check runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: nix]') || contains(needs.initialise.outputs.commit_message, '[ci: chez]') steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - uses: cachix/install-nix-action@v12 with: install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-2.4pre20210126_f15f0b8/install - run: nix-build -A checks.x86_64-linux # RACKET ubuntu-bootstrap-racket: needs: quick-check runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: ubuntu]') || contains(needs.initialise.outputs.commit_message, '[ci: racket]') env: IDRIS2_CG: racket steps: - name: Checkout uses: actions/checkout@v2 - name: Install build dependencies run: | sudo apt-get install -y racket echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" - name: Make bootstrap folder readonly run: chmod -R a-w bootstrap - name: Build from bootstrap run: make bootstrap-racket && make install - name: Artifact Bootstrapped Idris2 uses: actions/upload-artifact@v2 with: name: ubuntu-installed-bootstrapped-idris2-racket path: ~/.idris2/ ###################################################################### # Self-hosting builds and testing ###################################################################### # CHEZ ubuntu-self-host-chez: needs: ubuntu-bootstrap-chez runs-on: ubuntu-latest env: IDRIS2_CG: chez SCHEME: scheme steps: - name: Checkout uses: actions/checkout@v2 - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: ubuntu-installed-bootstrapped-idris2-chez path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Build self-hosted run: make all IDRIS2_BOOT="idris2 -Werror" && make install - name: Test self-hosted run: make test INTERACTIVE='' macos-self-host-chez: needs: macos-bootstrap-chez runs-on: macos-latest env: SCHEME: chez steps: - name: Checkout uses: actions/checkout@v2 - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: macos-installed-bootstrapped-idris2-chez path: ~/.idris2/ - name: Install build dependencies run: | brew install chezscheme brew install coreutils echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Build self-hosted run: make all IDRIS2_BOOT="idris2 -Werror" && make install shell: bash - name: Test self-hosted run: make test INTERACTIVE='' shell: bash # RACKET ubuntu-self-host-racket: needs: ubuntu-bootstrap-racket runs-on: ubuntu-latest if: false env: IDRIS2_CG: racket steps: - name: Checkout uses: actions/checkout@v2 - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: ubuntu-installed-bootstrapped-idris2-racket path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get install -y racket echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Build self-hosted run: make all IDRIS2_BOOT="idris2 -Werror" && make install - name: Test self-hosted run: make test INTERACTIVE='' ubuntu-self-host-previous-version: needs: quick-check runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: ubuntu]') || contains(needs.initialise.outputs.commit_message, '[ci: libs]') env: IDRIS2_CG: chez steps: - name: Checkout uses: actions/checkout@v2 - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: ubuntu-installed-idris2-${{ env.IDRIS2_VERSION }}-chez path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Build self-hosted from previous version run: make all IDRIS2_BOOT="idris2 -Werror" && make install - name: Test self-hosted from previous version run: make test INTERACTIVE='' - name: Artifact Idris2 uses: actions/upload-artifact@v2 with: name: idris2-nightly-chez path: ~/.idris2/ windows-self-host-racket: needs: windows-bootstrap-chez runs-on: windows-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: windows]') || contains(needs.initialise.outputs.commit_message, '[ci: racket]') env: IDRIS2_CG: racket MSYSTEM: MINGW64 MSYS2_PATH_TYPE: inherit CC: gcc RACKET_RACO: raco steps: - name: Init run: | git config --global core.autocrlf false echo "PWD=$(c:\msys64\usr\bin\cygpath -u $(pwd))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: Checkout uses: actions/checkout@v2 - name: Get Chez Scheme run: | git clone --depth 1 https://github.com/cisco/ChezScheme c:\msys64\usr\bin\bash -l -c "pacman -S --noconfirm tar make mingw-w64-x86_64-gcc" echo "PWD=$(c:\msys64\usr\bin\cygpath -u $(pwd))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: Configure and Build Chez Scheme run: | c:\msys64\usr\bin\bash -l -c "cd $env:PWD && cd ChezScheme && ./configure --threads && make" - name: Set Path run: | $chez="$(pwd)\ChezScheme\ta6nt\bin\ta6nt" $idris="$(pwd)\.idris2" echo "$chez" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "$idris\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "IDRIS_PREFIX=$idris" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "PREFIX=$(c:\msys64\usr\bin\cygpath -u $idris)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: windows-installed-bootstrapped-idris2-chez path: ${{ env.IDRIS_PREFIX }} - name: Install build dependencies uses: Bogdanp/setup-racket@v1.4 with: variant: 'CS' version: 'stable' distribution: 'full' - name: Self host run: | c:\msys64\usr\bin\bash -l -c "cd $env:PWD && make" # TODO: fix the broken tests! # - name: Test # run: c:\msys64\usr\bin\bash -l -c "cd $env:PWD && make test" - name: Install run: c:\msys64\usr\bin\bash -l -c "cd $env:PWD && make install" ###################################################################### # Ubuntu API ###################################################################### ubuntu-build-api: needs: ubuntu-bootstrap-chez runs-on: ubuntu-latest env: IDRIS2_CG: chez steps: - name: Checkout uses: actions/checkout@v2 - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: ubuntu-installed-bootstrapped-idris2-chez path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Build API run: make install-api shell: bash - name: Test API run: cd tests/idris2/api001 && ./run idris2 shell: bash ###################################################################### # Ubuntu testing some libraries. # We are particularly interested in libraries that are heavily using # dependent types, that are prone to find bugs and regressions in the # compiler. ###################################################################### ubuntu-test-collie: needs: ubuntu-self-host-previous-version runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: libs]') env: IDRIS2_CG: chez steps: - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: idris2-nightly-chez path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Checkout uses: actions/checkout@v2 with: repository: 'ohad/collie' - name: Build Collie run: | make ubuntu-test-frex: needs: ubuntu-self-host-previous-version runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: libs]') env: IDRIS2_CG: chez steps: - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: idris2-nightly-chez path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Checkout uses: actions/checkout@v2 with: repository: 'frex-project/idris-frex' - name: Build Frex run: | make make test ubuntu-test-elab: needs: ubuntu-self-host-previous-version runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: libs]') env: IDRIS2_CG: chez steps: - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: idris2-nightly-chez path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Checkout uses: actions/checkout@v2 with: repository: 'stefan-hoeck/idris2-elab-util' - name: Build idris2-elab-util run: | make all ###################################################################### # Ubuntu using katla to build html doc of the libs ###################################################################### ubuntu-katla: needs: ubuntu-test-collie runs-on: ubuntu-latest if: | !contains(needs.initialise.outputs.commit_message, '[ci:') || contains(needs.initialise.outputs.commit_message, '[ci: html]') env: IDRIS2_CG: chez steps: - name: Initialise DEPLOY variable run: | if [[ '${{ github.ref }}' == 'refs/heads/main' ]]; then echo "IDRIS2_DEPLOY=true" >> "$GITHUB_ENV" fi - name: Download Idris2 Artifact uses: actions/download-artifact@v2 with: name: idris2-nightly-chez path: ~/.idris2/ - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y chezscheme markdown echo "$HOME/.idris2/bin" >> "$GITHUB_PATH" chmod +x "$HOME/.idris2/bin/idris2" "$HOME/.idris2/bin/idris2_app/"* - name: Checkout idris2 uses: actions/checkout@v2 - name: Build API run: make install-api shell: bash - name: Checkout collie uses: actions/checkout@v2 with: repository: 'ohad/collie' - name: Build and install Collie run: | make install - name: Checkout idrall uses: actions/checkout@v2 with: repository: 'alexhumphreys/idrall' - name: Build and install idrall run: | make install - name: Checkout katla uses: actions/checkout@v2 with: repository: 'idris-community/katla' - name: Build and install katla run: | make mkdir -p "${HOME}"/.local/bin/ cp -r build/exec/* "${HOME}"/.local/bin/ echo "${HOME}/.local/bin" >> "$GITHUB_PATH" - name: Checkout idris2 uses: actions/checkout@v2 - name: Build html doc & landing page run: | make -C libs/prelude/ install docs IDRIS2=idris2 make -C libs/base/ install docs IDRIS2=idris2 make -C libs/contrib/ install docs IDRIS2=idris2 make -C libs/network/ install docs IDRIS2=idris2 make -C libs/linear/ install docs IDRIS2=idris2 make -C libs/test/ install docs IDRIS2=idris2 make -C libs/papers/ install docs IDRIS2=idris2 cd .github/scripts ./katla.sh cd - cd www/ ./katla.sh cd - cp -r www/html/* .github/scripts/html/ - name: Deploy HTML uses: JamesIves/github-pages-deploy-action@4.1.3 if: ${{ success() && env.IDRIS2_DEPLOY }} with: branch: gh-pages folder: .github/scripts/html/ git-config-name: Github Actions