Skip to content

Nightly VTK master #946

Nightly VTK master

Nightly VTK master #946

name: Nightly VTK master
on:
schedule:
- cron: "0 0 * * *"
jobs:
#----------------------------------------------------------------------------
# Check nightly: Checkout VTK and check if the last merged commit is less than 24 hours old
#----------------------------------------------------------------------------
check_nightly:
if: github.repository == 'f3d-app/f3d'
runs-on: ubuntu-24.04
name: Check nightly
outputs:
should_run: ${{ steps.should_run.outputs.should_run }}
vtk_sha: ${{ steps.vtk_sha_recover.outputs.vtk_sha }}
steps:
- name: Checkout VTK
uses: actions/checkout@v7
with:
repository: Kitware/VTK
submodules: false
fetch-depth: 0
ref: master
- name: Check latest commit age is less than 24 hours
id: should_run
run: test -n "$(git rev-list --no-merges HEAD --not $(git rev-list -n1 --before=24hours --first-parent HEAD))" && echo "should_run=true" >> $GITHUB_OUTPUT || echo "should_run=false" >> $GITHUB_OUTPUT
- name: Set VTK sha env var
id: vtk_sha_recover
shell: bash
run: echo "vtk_sha=$(git log -n 1 --pretty=format:%H)" >> $GITHUB_OUTPUT
#----------------------------------------------------------------------------
# Cache LFS: Checkout LFS data and update the cache to limit LFS bandwidth
#----------------------------------------------------------------------------
cache_lfs:
needs: check_nightly
if: ${{ needs.check_nightly.outputs.should_run == 'true' }}
runs-on: ubuntu-24.04
name: Update LFS data cache
outputs:
lfs_sha: ${{ steps.lfs_sha_recover.outputs.lfs_sha }}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
path: "source"
fetch-depth: 1
lfs: false
- name: Cache LFS Data
id: lfs_sha_recover
uses: f3d-app/lfs-data-cache-action@v2
with:
cache_postfix: cache-0
#----------------------------------------------------------------------------
# Cross-platform CI: Build and test
#----------------------------------------------------------------------------
cross-platform:
needs: [cache_lfs, check_nightly]
if: ${{ needs.check_nightly.outputs.should_run == 'true' }}
strategy:
fail-fast: false
matrix:
build_type: [standard]
os: [ubuntu-24.04, windows-2022, macos-15, macos-15-intel]
include:
- rendering_backend: auto
- build_type: egl
os: ubuntu-24.04
rendering_backend: egl
- build_type: osmesa
os: ubuntu-24.04
rendering_backend: osmesa
runs-on: ${{matrix.os}}
container: ${{ matrix.os == 'ubuntu-24.04' && 'ghcr.io/f3d-app/f3d-ci' || null }}
env:
CMAKE_POLICY_VERSION_MINIMUM: 3.5
DISPLAY: :0
steps:
- name: Checkout
uses: actions/checkout@v7
with:
path: "source"
fetch-depth: 0
lfs: false
- name: Generic CI
uses: ./source/.github/actions/generic-ci
with:
build_type: ${{matrix.build_type}}
vtk_version: ${{needs.check_nightly.outputs.vtk_sha}}
rendering_backend: ${{matrix.rendering_backend}}
lfs_sha: ${{ needs.cache_lfs.outputs.lfs_sha}}
versions_file: ./source/.github/workflows/versions.json
cpu: ${{ matrix.os == 'macos-15' && 'arm64' || 'x86_64' }}
#----------------------------------------------------------------------------
# Sanitizer: Build and test on linux with last VTK with sanitizer options
#----------------------------------------------------------------------------
# "leak" is run by default with "address" so we do not need to run it in CI
# "memory" returns false positives in VTK:
# https://stackoverflow.com/questions/60097307/memory-sanitizer-reports-use-of-uninitialized-value-in-global-object-constructio
sanitizer:
needs: [cache_lfs, check_nightly]
if: ${{ needs.check_nightly.outputs.should_run == 'true' }}
strategy:
fail-fast: false
matrix:
sanitizer_type: [address, thread, undefined]
runs-on: ubuntu-24.04
container: ghcr.io/f3d-app/f3d-ci
env:
CMAKE_POLICY_VERSION_MINIMUM: 3.5
DISPLAY: :0
CC: clang
CXX: clang++
VTK_SMP_BACKEND_IN_USE: Sequential
steps:
- name: Checkout
uses: actions/checkout@v7
with:
path: "source"
fetch-depth: 0
lfs: false
- name: Sanitizer CI
uses: ./source/.github/actions/sanitizer-ci
with:
versions_file: ./source/.github/workflows/versions.json
vtk_version: ${{needs.check_nightly.outputs.vtk_sha}}
sanitizer_type: ${{matrix.sanitizer_type}}
lfs_sha: ${{ needs.cache_lfs.outputs.lfs_sha}}
#----------------------------------------------------------------------------
# Build android/wasm docker images
#----------------------------------------------------------------------------
build_docker_images:
name: Build docker images
needs: check_nightly
if: ${{ needs.check_nightly.outputs.should_run == 'true' }}
runs-on: ubuntu-latest
steps:
# This require a F3D_DOCKER_CI_DISPATCH secret contain a PAT with read and write admin access
- name: Trigger docker images build
uses: convictional/trigger-workflow-and-wait@v1.6.5
with:
owner: f3d-app
repo: f3d-docker-images
github_token: ${{ secrets.F3D_DOCKER_CI_DISPATCH }}
workflow_file_name: build_docker_image.yml
wait_interval: 60
client_payload: '{"vtk_version_override": "${{needs.check_nightly.outputs.vtk_sha}}"}'
propagate_failure: true
trigger_workflow: true
wait_workflow: true
#----------------------------------------------------------------------------
# Recover docker timestamp
#----------------------------------------------------------------------------
recover_docker_timestamp:
runs-on: ubuntu-24.04
name: Recover docker timestamp
needs: check_nightly
if: ${{ needs.check_nightly.outputs.should_run == 'true' }}
outputs:
docker_timestamp: ${{steps.docker_timestamp.outputs.extract}}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
path: "source"
fetch-depth: 0
lfs: false
- name: Extract docker timestamp
id: docker_timestamp
uses: f3d-app/extract-version-action@main
with:
file: ./source/.github/workflows/versions.json
special_name: docker_timestamp
#----------------------------------------------------------------------------
# android: Check build of F3D for android
#----------------------------------------------------------------------------
android:
needs: [check_nightly, build_docker_images, recover_docker_timestamp]
strategy:
fail-fast: false
matrix:
arch: [armeabi-v7a, arm64-v8a, x86, x86_64]
runs-on: ubuntu-24.04
container: ghcr.io/f3d-app/f3d-android-${{ matrix.arch }}:${{needs.recover_docker_timestamp.outputs.docker_timestamp}}_${{needs.check_nightly.outputs.vtk_sha}}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
path: "source"
fetch-depth: 0
lfs: false
- name: Android CI
uses: ./source/.github/actions/android-ci
with:
arch: ${{matrix.arch}}
#----------------------------------------------------------------------------
# webassembly: Build webassembly artifacts
#----------------------------------------------------------------------------
webassembly:
needs:
[cache_lfs, check_nightly, build_docker_images, recover_docker_timestamp]
strategy:
fail-fast: false
runs-on: ubuntu-24.04
env:
CMAKE_BUILD_PARALLEL_LEVEL: 4
F3D_DOCKER_TIMESTAMP: ${{needs.recover_docker_timestamp.outputs.docker_timestamp}}_${{needs.check_nightly.outputs.vtk_sha}}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
path: "source"
fetch-depth: 0
lfs: false
- name: WebAssembly CI
uses: ./source/.github/actions/wasm-ci
with:
lfs_sha: ${{ needs.cache_lfs.outputs.lfs_sha}}