Skip to content

Restructure CI to use reusable steps, and add new checks #2290

Restructure CI to use reusable steps, and add new checks

Restructure CI to use reusable steps, and add new checks #2290

Workflow file for this run

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) Contributors to the OpenEXR Project.
# The CI workflow uses steps defined in ci_steps.yml, via the "uses:"
# directive. Linux, macOS, and Windows all share a common set of
# configure/build/validate steps.
name: CI
# Run on all changes except:
# - markdown/doc changes
# - changes to the website, *except* for "website/src", since that
# code needs validation. The website has a separate workflow
# - changes to the bazel config (it has its own workflow
# - changes to the python bindings (they have their own workflow)
# - changes to workflows other than this one
on:
push:
paths:
- '**'
- '!**.md'
- '!website/**'
- 'website/src/**'
- '!bazel/**'
- '!src/wrappers/**'
- '!.github/workflows/**'
- '.github/workflows/ci_workflow.yml'
- '.github/workflows/ci_steps.yml'
pull_request:
paths:
- '**'
- '!**.md'
- '!website/**'
- 'website/src/**'
- '!bazel/**'
- '!src/wrappers/**'
- '!.github/workflows/**'
- '.github/workflows/ci_workflow.yml'
- '.github/workflows/ci_steps.yml'
permissions:
contents: read
# NOTE: All jobs have a "build" number that appears in the "jobs"
# listing on the GitHub actions page. This build number also
# identifies the reference install manifest in
# share/ci/install_manifest. The validate_install.py script compares
# the job's generated install_manifest.txt to the reference file to
# validate that the proper files have been installed.
#
# If you add jobs, you must add a corresponding
# share/ci/install_manifest file.
jobs:
linux:
name: 'Linux.${{ matrix.build}}: ${{ matrix.label }}'
uses: ./.github/workflows/ci_steps.yml
with:
# Set values for the "inputs:" as defined in ci_steps.yml
# Note the defaults provided here for the builds that don't specify
# values.
os: ubuntu-latest
build: ${{ matrix.build }}
# DockerHub: https://hub.docker.com/u/aswf
# Source: https://github.com/AcademySoftwareFoundation/aswf-docker
container: aswf/ci-openexr:${{ matrix.vfx-cy || '2024' }}
cxx-standard: ${{ matrix.cxx-standard || '17' }}
cxx-compiler: ${{ matrix.cxx-compiler || 'g++' }}
cc-compiler: ${{ matrix.cc-compiler || 'gcc' }}
build-type: ${{ matrix.build-type || 'Release' }}
BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS || 'ON' }}
OPENEXR_ENABLE_THREADING: ${{ matrix.OPENEXR_ENABLE_THREADING || 'ON' }}
OPENEXR_INSTALL_PKG_CONFIG: ${{ matrix.OPENEXR_INSTALL_PKG_CONFIG || 'ON' }}
OPENEXR_INSTALL_DOCS: ${{ matrix.OPENEXR_INSTALL_DOCS || 'ON' }}
OPENEXR_BUILD_EXAMPLES: ${{ matrix.OPENEXR_BUILD_EXAMPLES || 'ON' }}
OPENEXR_BUILD_TOOLS: ${{ matrix.OPENEXR_BUILD_TOOLS || 'ON' }}
OPENEXR_FORCE_INTERNAL_IMATH: ${{ matrix.OPENEXR_FORCE_INTERNAL_IMATH || 'OFF' }}
OPENEXR_FORCE_INTERNAL_DEFLATE: ${{ matrix.OPENEXR_FORCE_INTERNAL_DEFLATE || 'OFF' }}
BUILD_TESTING: ${{ matrix.BUILD_TESTING || 'ON' }}
namespace: ${{ matrix.namespace }}
validate_install: ${{ matrix.validate_install || 'ON' }}
strategy:
matrix:
include:
- build: 1
label: Release
- build: 2
label: Debug
build-type: Debug
- build: 3
label: static
BUILD_SHARED_LIBS: 'OFF'
- build: 4
label: threads=OFF
OPENEXR_ENABLE_THREADING: 'OFF'
- build: 5
label: pkgconfig=OFF, examples=OFF, tools=OFF, docs=OFF, internal deflate
OPENEXR_INSTALL_PKG_CONFIG: 'OFF'
OPENEXR_INSTALL_DOCS: 'OFF'
OPENEXR_BUILD_EXAMPLES: 'OFF'
OPENEXR_BUILD_TOOLS: 'OFF'
OPENEXR_FORCE_INTERNAL_IMATH: 'ON'
OPENEXR_FORCE_INTERNAL_DEFLATE: 'ON'
BUILD_TESTING: 'OFF'
- build: 6
label: custom namespace
namespace: 'TEST_NAMESPACE'
- build: 7
label: clang
cxx-compiler: clang++
cc-compiler: clang
- build: 8
label: vfx2023
vfx-cy: 2023
- build: 9
label: vfx2022
vfx-cy: 2022
- build: 10
label: vfx2021
vfx-cy: 2021
macOS:
name: 'macOS.${{ matrix.build}}: ${{ matrix.label }}'
uses: ./.github/workflows/ci_steps.yml
with:
# Set values for the "inputs:" as defined in ci_steps.yml
# Note the defaults provided here for the builds that don't specify
# values.
os: ${{ matrix.os || 'macos-14' }}
build: ${{ matrix.build }}
cxx-standard: ${{ matrix.cxx-standard || '17' }}
build-type: ${{ matrix.build-type || 'Release' }}
BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS || 'ON' }}
OPENEXR_ENABLE_THREADING: ${{ matrix.OPENEXR_ENABLE_THREADING || 'ON' }}
OPENEXR_INSTALL_PKG_CONFIG: ${{ matrix.OPENEXR_INSTALL_PKG_CONFIG || 'ON' }}
OPENEXR_INSTALL_DOCS: ${{ matrix.OPENEXR_INSTALL_DOCS || 'ON' }}
OPENEXR_BUILD_EXAMPLES: ${{ matrix.OPENEXR_BUILD_EXAMPLES || 'ON' }}
OPENEXR_BUILD_TOOLS: ${{ matrix.OPENEXR_BUILD_TOOLS || 'ON' }}
OPENEXR_FORCE_INTERNAL_IMATH: ${{ matrix.OPENEXR_FORCE_INTERNAL_IMATH || 'OFF' }}
OPENEXR_FORCE_INTERNAL_DEFLATE: ${{ matrix.OPENEXR_FORCE_INTERNAL_DEFLATE || 'OFF' }}
BUILD_TESTING: ${{ matrix.BUILD_TESTING || 'ON' }}
validate_install: ${{ matrix.validate_install || 'ON' }}
strategy:
matrix:
include:
- build: 1
label: Release
- build: 2
label: Debug
build-type: Debug
- build: 3
label: static
BUILD_SHARED_LIBS: 'OFF'
- build: 4
label: threads=OFF
OPENEXR_ENABLE_THREADING: 'OFF'
- build: 5
label: pkgconfig=OFF, examples=OFF, tools=OFF, docs=OFF, internal imath+deflate
OPENEXR_INSTALL_PKG_CONFIG: 'OFF'
OPENEXR_INSTALL_DOCS: 'OFF'
OPENEXR_BUILD_EXAMPLES: 'OFF'
OPENEXR_BUILD_TOOLS: 'OFF'
OPENEXR_FORCE_INTERNAL_IMATH: 'ON'
OPENEXR_FORCE_INTERNAL_DEFLATE: 'ON'
BUILD_TESTING: 'OFF'
- build: 6
label: macos-13
os: macos-13
windows:
name: 'Windows.${{ matrix.build}}: ${{ matrix.label }}'
uses: ./.github/workflows/ci_steps.yml
with:
# Set values for the "inputs:" as defined in ci_steps.yml
# Note the defaults provided here for the builds that don't specify
# values.
os: ${{ matrix.os || 'windows-2022' }}
build: ${{ matrix.build }}
cxx-standard: ${{ matrix.cxx-standard || '17' }}
build-type: ${{ matrix.build-type || 'Release' }}
BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS || 'ON' }}
OPENEXR_ENABLE_THREADING: ${{ matrix.OPENEXR_ENABLE_THREADING || 'ON' }}
OPENEXR_INSTALL_PKG_CONFIG: ${{ matrix.OPENEXR_INSTALL_PKG_CONFIG || 'ON' }}
OPENEXR_INSTALL_DOCS: ${{ matrix.OPENEXR_INSTALL_DOCS || 'OFF' }}
OPENEXR_BUILD_EXAMPLES: ${{ matrix.OPENEXR_BUILD_EXAMPLES || 'ON' }}
OPENEXR_BUILD_TOOLS: ${{ matrix.OPENEXR_BUILD_TOOLS || 'ON' }}
OPENEXR_FORCE_INTERNAL_IMATH: ${{ matrix.OPENEXR_FORCE_INTERNAL_IMATH || 'OFF' }}
OPENEXR_FORCE_INTERNAL_DEFLATE: ${{ matrix.OPENEXR_FORCE_INTERNAL_DEFLATE || 'OFF' }}
BUILD_TESTING: ${{ matrix.BUILD_TESTING || 'ON' }}
validate_install: ${{ matrix.validate_install || 'ON' }}
strategy:
matrix:
include:
- build: 1
label: Release
- build: 2
label: Debug
build-type: Debug
- build: 3
label: static
BUILD_SHARED_LIBS: 'OFF'
- build: 4
label: threads=OFF
# TODO: this currently fails to compile; switch to OFF once the fix is in.
OPENEXR_ENABLE_THREADING: 'ON'
- build: 5
label: pkgconfig=OFF, examples=OFF, tools=OFF, docs=OFF, internal imath+deflate
OPENEXR_INSTALL_PKG_CONFIG: 'OFF'
OPENEXR_INSTALL_DOCS: 'OFF'
OPENEXR_BUILD_EXAMPLES: 'OFF'
OPENEXR_BUILD_TOOLS: 'OFF'
OPENEXR_FORCE_INTERNAL_IMATH: 'ON'
OPENEXR_FORCE_INTERNAL_DEFLATE: 'ON'
BUILD_TESTING: 'OFF'
- build: 6
label: vfx2022
os: windows-2019