Skip to content

CI

CI #1312

Workflow file for this run

name: CI
on:
push:
branches:
- 'master'
- 'release-*'
tags: '*'
pull_request:
schedule:
# Every day at 3:08 AM UTC
- cron: '8 3 * * *'
concurrency:
# group by workflow and ref; the last slightly strange component ensures that for pull
# requests, we limit to 1 concurrent job, but for the default repository branch we don't
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.ref_name != github.event.repository.default_branch || github.run_number }}
# Cancel intermediate builds, but only if it is a pull request build.
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}
jobs:
test:
name: Julia ${{ matrix.julia-version }} - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 20
continue-on-error: ${{ matrix.julia-version == 'nightly' }}
strategy:
fail-fast: false
matrix:
julia-version:
- '1.6'
- '1.10'
- '~1.11.0-0'
- 'nightly'
julia-arch:
- x64
os:
- ubuntu-latest
include:
# Add a few macOS jobs (not too many, the number we can run in parallel is limited)
- julia-version: '1.10'
julia-arch: x64
os: macOS-latest
- julia-version: 'nightly'
julia-arch: x64
os: macOS-latest
steps:
- uses: actions/checkout@v4
with:
# For Codecov, we must also fetch the parent of the HEAD commit to
# be able to properly deal with PRs / merges
fetch-depth: 2
- name: "Set up Julia"
uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.julia-version }}
arch: ${{ matrix.julia-arch }}
- name: "Cache artifacts"
uses: julia-actions/cache@v2
- name: "Build package"
uses: julia-actions/julia-buildpkg@v1
- name: "Run tests"
uses: julia-actions/julia-runtest@v1
with:
depwarn: error
- name: "Add optional Julia dependencies for GAP tests"
run: julia --color=yes -e 'using Pkg ; Pkg.add(["Singular", "Nemo"])'
- name: "GAP tests"
run: |
julia --project=. -e 'import GAP; GAP.create_gap_sh("/tmp")'
export GAP="/tmp/gap.sh -A --quitonbreak --norepl"
etc/ci_test.sh
- name: "Process Julia code coverage"
uses: julia-actions/julia-processcoverage@v1
- name: "Process GAP code coverage"
run: |
julia --color=yes --project=. -e '
using GAP
GAP.Packages.install("profiling", interactive = false) || exit(1)
'
/tmp/gap.sh -A --quitonbreak --norepl etc/gather_coverage.g
cat gap-lcov.info >> lcov.info
- name: "Upload coverage data to Codecov"
continue-on-error: true
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
docs:
name: "Documentation"
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
with:
version: '1'
- uses: julia-actions/cache@v2
- uses: julia-actions/julia-buildpkg@v1
- name: "Install package"
run: |
julia --project=docs --color=yes -e '
using Pkg
Pkg.develop(PackageSpec(path=pwd()))
Pkg.instantiate()'
- name: "Run doctests"
run: |
julia --project=docs --color=yes test/doctest.jl
- name: "Build GAP manual"
run: |
julia --project=. -e 'import GAP; GAP.create_gap_sh("/tmp")'
cd pkg/JuliaInterface
/tmp/gap.sh -A --quitonbreak --norepl makedoc.g
cd ../..
mkdir -p docs/src/assets/html/JuliaInterface/
cp pkg/JuliaInterface/doc/*.{html,css,js} docs/src/assets/html/JuliaInterface/
- name: "Deploy documentation"
run: julia --project=docs --color=yes docs/make.jl
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }}
slack-notification:
name: Send Slack notification on status change
needs:
- test
- docs
if: github.ref_name == github.event.repository.default_branch
runs-on: ubuntu-latest
steps:
- name: Determine whether CI status changed
uses: gap-actions/should-i-notify-action@v1
id: should_notify
with:
branch: master
needs_context: ${{ toJson(needs) }}
github_token: ${{ secrets.GITHUB_TOKEN }}
notify_on_changed_status: true
- name: Send slack notification
uses: act10ns/slack@e4e71685b9b239384b0f676a63c32367f59c2522
if: ${{ steps.should_notify.outputs.should_send_message == 'yes' }}
with:
status: ${{ steps.should_notify.outputs.current_status }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}