| name: Build All Languages
|
|
|
| on:
|
| push:
|
| pull_request:
|
|
|
| jobs:
|
| build:
|
| name: Build
|
| runs-on: ubuntu-latest
|
| timeout-minutes: 60
|
|
|
| env:
|
|
|
| CARGO_HOME: ${{ github.workspace }}/.cargo
|
| RUSTUP_HOME: ${{ github.workspace }}/.rustup
|
| JULIA_DEPOT_PATH: ${{ github.workspace }}/.julia
|
| R_LIBS_USER: ${{ github.workspace }}/.Rpackages
|
|
|
| steps:
|
| - name: Checkout repository
|
| uses: actions/checkout@v4
|
| with:
|
| submodules: recursive
|
|
|
| - name: Install system dependencies (gfortran, cmake, etc.)
|
| run: |
|
| sudo apt-get update
|
| sudo apt-get install -y gfortran cmake libssl-dev pkg-config
|
|
|
| - name: Setup Rust
|
| uses: dtolnay/rust-toolchain@stable
|
| with:
|
| toolchain: stable
|
| components: rustfmt, clippy
|
|
|
| - name: Cache Cargo registry
|
| uses: actions/cache@v4
|
| with:
|
| path: |
|
| ~/.cargo/registry
|
| ~/.cargo/git
|
| target
|
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
| restore-keys: |
|
| ${{ runner.os }}-cargo-
|
|
|
| - name: Setup Julia
|
| uses: julia-actions/setup-julia@v1
|
| with:
|
| version: '1.10'
|
| arch: x64
|
|
|
| - name: Cache Julia depot
|
| uses: actions/cache@v4
|
| with:
|
| path: ${{ env.JULIA_DEPOT_PATH }}
|
| key: ${{ runner.os }}-julia-${{ hashFiles('**/Project.toml', '**/Manifest.toml') }}
|
| restore-keys: |
|
| ${{ runner.os }}-julia-
|
|
|
| - name: Setup Elixir (and Erlang)
|
| uses: erlef/setup-beam@v1
|
| with:
|
| elixir-version: '1.16'
|
| otp-version: '26.2'
|
|
|
| - name: Setup R
|
| uses: r-lib/actions/setup-r@v2
|
| with:
|
| r-version: 'release'
|
| use-public-rspm: true
|
|
|
| - name: Cache R packages
|
| uses: actions/cache@v4
|
| with:
|
| path: ${{ env.R_LIBS_USER }}
|
| key: ${{ runner.os }}-r-${{ hashFiles('**/DESCRIPTION') }}
|
| restore-keys: |
|
| ${{ runner.os }}-r-
|
|
|
| - name: Install Lake via Elan (Lean 4)
|
| run: |
|
| curl https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh -sSf | sh -s -- -y
|
| echo "$HOME/.elan/bin" >> $GITHUB_PATH
|
| elan component add lake
|
|
|
| - name: Setup Go
|
| uses: actions/setup-go@v5
|
| with:
|
| go-version: '1.22'
|
| cache: true
|
|
|
| - name: CMake Build (C/C++/Fortran)
|
| run: |
|
| cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
|
| cmake --build build --config Release --parallel $(nproc)
|
|
|
| - name: Cargo Build (Rust)
|
| run: cargo build --release --workspace --all-targets
|
|
|
| - name: FPM Test (Fortran)
|
| run: |
|
| if command -v fpm &> /dev/null; then
|
| fpm test --profile release
|
| else
|
| echo "fpm not found, skipping Fortran tests."
|
| echo "Install fpm via: curl -fsSL https://fpm.fortran-lang.org/install.sh | bash"
|
| fi
|
|
|
| - name: Julia Test
|
| run: |
|
| julia --project -e 'using Pkg; Pkg.test()'
|
|
|
| - name: Mix Test (Elixir)
|
| run: |
|
| mix deps.get
|
| mix test
|
|
|
| - name: R CMD Check
|
| uses: r-lib/actions/check-r-package@v2
|
| with:
|
| upload-snapshots: true
|
|
|
| - name: Lake Build (Lean 4)
|
| run: lake build |