Generalize interpreter (#2019) #5741
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
- release-* | |
tags: '*' | |
concurrency: | |
# Skip intermediate builds: always. | |
# Cancel intermediate builds: only if it is a pull request build. | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} | |
jobs: | |
test: | |
name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ matrix.libEnzyme }} libEnzyme - assertions=${{ matrix.assertions }} - ${{ github.event_name }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
version: | |
- '1.10' | |
- '1.11' | |
- 'nightly' | |
os: | |
- ubuntu-20.04 | |
- macOS-latest | |
- windows-latest | |
arch: | |
- x64 | |
assertions: | |
- false | |
libEnzyme: [local, packaged] | |
exclude: | |
- os: windows-latest | |
arch: x64 | |
libEnzyme: local | |
include: | |
- os: ubuntu-20.04 | |
arch: x86 | |
libEnzyme: packaged | |
version: '1.10' | |
assertions: false | |
- os: ubuntu-20.04 | |
arch: x64 | |
libEnzyme: packaged | |
version: '1.10' | |
assertions: true | |
- os: ubuntu-20.04 | |
arch: x64 | |
libEnzyme: packaged | |
version: '1.11' | |
assertions: true | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: julia-actions/setup-julia@v2 | |
if: ${{ ! matrix.assertions }} | |
with: | |
version: ${{ matrix.version }} | |
arch: ${{ matrix.arch }} | |
- uses: actions/checkout@v4 | |
if: ${{ matrix.assertions }} | |
with: | |
repository: 'JuliaLang/julia' | |
ref: release-${{ matrix.version }} | |
path: 'julia' | |
- name: Compile Julia | |
if: ${{ matrix.assertions }} | |
run: | | |
sed -i.bak 's/exit 2/exit 0/g' julia/deps/tools/jlchecksum | |
make -C julia -j $(nproc) FORCE_ASSERTIONS=1 LLVM_ASSERTIONS=1 JULIA_PRECOMPILE=0 | |
echo $PWD/julia/usr/bin >> $GITHUB_PATH | |
- uses: actions/cache@v2 | |
env: | |
cache-name: cache-artifacts | |
with: | |
path: ~/.julia/artifacts | |
key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} | |
restore-keys: | | |
${{ runner.os }}-test-${{ env.cache-name }}- | |
${{ runner.os }}-test- | |
${{ runner.os }}- | |
- name: add EnzymeCore | |
shell: julia --color=yes --project=. {0} | |
run: | | |
using Pkg | |
Pkg.develop([PackageSpec(; path) for path in ("lib/EnzymeCore", "lib/EnzymeTestUtils")]) | |
Pkg.instantiate() | |
env: | |
JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager | |
- name: Build libEnzyme | |
if: ${{ matrix.libEnzyme == 'local' && matrix.os != 'macOS-latest'}} | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
id: build_libenzyme | |
run: | | |
julia --project=deps -e 'using Pkg; Pkg.instantiate()' | |
julia --project=deps deps/build_local.jl | |
cp LocalPreferences.toml test/ | |
- name: Build libEnzyme MacOS | |
if: ${{ matrix.libEnzyme == 'local' && matrix.os == 'macOS-latest'}} | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
id: build_libenzyme_mac | |
run: | | |
julia --project=deps -e 'using Pkg; Pkg.instantiate()' | |
SDKROOT=`xcrun --show-sdk-path` julia --project=deps deps/build_local.jl | |
cp LocalPreferences.toml test/ | |
- uses: julia-actions/julia-buildpkg@v1 | |
if: matrix.version != 'nightly' || steps.build_libenzyme.outcome == 'success' || steps.build_libenzyme_mac.outcome == 'success' | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
id: buildpkg | |
env: | |
JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager | |
- uses: julia-actions/julia-runtest@v1 | |
if: matrix.version != 'nightly' || steps.buildpkg.outcome == 'success' | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
id: run_tests | |
env: | |
JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager | |
- uses: julia-actions/julia-processcoverage@v1 | |
if: matrix.version != 'nightly' || steps.run_tests.outcome == 'success' | |
- uses: codecov/codecov-action@v4 | |
if: matrix.version != 'nightly' || steps.run_tests.outcome == 'success' | |
with: | |
file: lcov.info | |
token: ${{ secrets.CODECOV_TOKEN }} | |
fail_ci_if_error: false # or true if you want CI to fail when Codecov fails | |
enzymetestutils: | |
name: EnzymeTestUtils - Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ matrix.libEnzyme }} libEnzyme - ${{ github.event_name }} | |
runs-on: ${{ matrix.os }} | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
env: | |
JULIA_PROJECT: "lib/EnzymeTestUtils" | |
strategy: | |
fail-fast: false | |
matrix: | |
version: | |
- '1.10' | |
- '1.11' | |
- 'nightly' | |
os: | |
- ubuntu-latest | |
arch: | |
- x64 | |
libEnzyme: [packaged] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: julia-actions/setup-julia@v2 | |
with: | |
version: ${{ matrix.version }} | |
arch: ${{ matrix.arch }} | |
- uses: actions/cache@v2 | |
env: | |
cache-name: cache-artifacts | |
with: | |
path: ~/.julia/artifacts | |
key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} | |
restore-keys: | | |
${{ runner.os }}-test-${{ env.cache-name }}- | |
${{ runner.os }}-test- | |
${{ runner.os }}- | |
- name: setup EnzymeTestUtils | |
shell: julia --color=yes {0} | |
id: setup_testutils | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
run: | | |
using Pkg | |
Pkg.develop([PackageSpec(; path) for path in (".", "lib/EnzymeCore")]) | |
Pkg.instantiate() | |
env: | |
JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager | |
- name: Run the tests | |
if: matrix.version != 'nightly' || steps.setup_testutils.outcome == 'success' | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
id: run_tests | |
shell: julia --color=yes {0} | |
run: | | |
using Pkg | |
Pkg.test("EnzymeTestUtils"; coverage=true) | |
- uses: julia-actions/julia-processcoverage@v1 | |
if: matrix.version != 'nightly' || steps.run_tests.outcome == 'success' | |
with: | |
directories: lib/EnzymeTestUtils/src | |
- uses: codecov/codecov-action@v4 | |
if: matrix.version != 'nightly' || steps.run_tests.outcome == 'success' | |
with: | |
files: lcov.info | |
token: ${{ secrets.CODECOV_TOKEN }} | |
fail_ci_if_error: false # or true if you want CI to fail when Codecov fails | |
enzymecore: | |
name: EnzymeCore - Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ matrix.libEnzyme }} libEnzyme - ${{ github.event_name }} | |
runs-on: ${{ matrix.os }} | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
env: | |
JULIA_PROJECT: "lib/EnzymeCore" | |
strategy: | |
fail-fast: false | |
matrix: | |
version: | |
- '1.10' | |
- ~1.11.0-0 | |
- 'nightly' | |
os: | |
- ubuntu-latest | |
arch: | |
- x64 | |
libEnzyme: [packaged] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: julia-actions/setup-julia@v2 | |
with: | |
version: ${{ matrix.version }} | |
arch: ${{ matrix.arch }} | |
- uses: actions/cache@v2 | |
env: | |
cache-name: cache-artifacts | |
with: | |
path: ~/.julia/artifacts | |
key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} | |
restore-keys: | | |
${{ runner.os }}-test-${{ env.cache-name }}- | |
${{ runner.os }}-test- | |
${{ runner.os }}- | |
- name: setup EnzymeCore | |
shell: julia --color=yes {0} | |
id: setup_testutils | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
run: | | |
using Pkg | |
Pkg.develop([PackageSpec(; path) for path in (".",)]) | |
Pkg.instantiate() | |
env: | |
JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager | |
- name: Run the tests | |
if: matrix.version != 'nightly' || steps.setup_testutils.outcome == 'success' | |
continue-on-error: ${{ matrix.version == 'nightly' }} | |
id: run_tests | |
shell: julia --color=yes {0} | |
run: | | |
using Pkg | |
Pkg.test("EnzymeCore"; coverage=true) | |
- uses: julia-actions/julia-processcoverage@v1 | |
if: matrix.version != 'nightly' || steps.run_tests.outcome == 'success' | |
with: | |
directories: lib/EnzymeCore/src | |
- uses: codecov/codecov-action@v4 | |
if: matrix.version != 'nightly' || steps.run_tests.outcome == 'success' | |
with: | |
files: lcov.info | |
token: ${{ secrets.CODECOV_TOKEN }} | |
fail_ci_if_error: false # or true if you want CI to fail when Codecov fails | |
integration: | |
name: Integration Tests - ${{ matrix.test }} | |
runs-on: ${{ matrix.os }} | |
env: | |
JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager | |
strategy: | |
fail-fast: false | |
matrix: | |
version: | |
- '1.10' | |
os: | |
- ubuntu-latest | |
test: | |
- DynamicExpressions | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: julia-actions/setup-julia@v2 | |
with: | |
version: ${{ matrix.version }} | |
- uses: julia-actions/cache@v2 | |
- uses: julia-actions/julia-buildpkg@v1 | |
- name: "Run tests" | |
run: | | |
julia --color=yes --project=test/integration -e 'using Pkg; Pkg.develop([PackageSpec(; path) for path in (".", "lib/EnzymeCore")]); Pkg.instantiate()' | |
julia --color=yes --project=test/integration --threads=auto --check-bounds=yes test/integration/${{ matrix.test }}.jl | |
shell: bash | |
docs: | |
name: Documentation | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: julia-actions/setup-julia@v2 | |
with: | |
version: '1' | |
- uses: julia-actions/cache@v2 | |
- run: | | |
julia --project=docs -e ' | |
using Pkg | |
Pkg.develop([PackageSpec(path="lib/EnzymeCore"), PackageSpec(path="lib/EnzymeTestUtils"), PackageSpec(path=pwd())]) | |
Pkg.instantiate()' | |
env: | |
JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager | |
- run: | | |
julia --project=docs -e ' | |
using Documenter: DocMeta, doctest | |
using Enzyme | |
DocMeta.setdocmeta!(Enzyme, :DocTestSetup, :(using Enzyme); recursive=true) | |
doctest(Enzyme)' | |
- run: julia --project=docs docs/make.jl | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} |