Skip to content

Commit c73f2bb

Browse files
committed
ci: Fix broken CI for ASWF 2021 and 2022 containers
The background here takes some explaining... The ASWF's prepared Docker containers that reproduce a CentOS7-based environment corresponding to VFX Platform 2021 and 2022 years contain a glibc that is too old to run a newer version of "node" -- which GitHub Actions themselves use. The old one is no longer receiving support, and GitHub finally changed the policy that was allowing its GHA runners to still run the old version that worked with those ASWF containers. The new node version that is happy on the GHA runners requires a glibc newer than the one in the containers. So that breaks all our CI runs in 2021 and 2022 VFX Platform configurations. See this thread, if you dare: https://academysoftwarefdn.slack.com/archives/C0169RX7MMK/p1732574400981949 Anyway, Jean-Francois Panisset proposed and tested a fix, which lets us continue working (for now) by downloading an old node implemenation (which is happy with the old glibc) and installing it atop the conainers, so it's this old one that the GH actions will use. It feels like it's all held together by chewing gum and duct tape, but it unbreaks our CI and hopefully it will keep working until all the studios have switched fully to RHEL/Alma/Rocky 9.x and we no longer care about testing on CentOS-7 based containers or supporting the VFX Platform years that are too old to be relevant to the new OS that the studios are using. Signed-off-by: Larry Gritz <[email protected]>
1 parent ff0861f commit c73f2bb

File tree

2 files changed

+293
-143
lines changed

2 files changed

+293
-143
lines changed
Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
# Copyright Contributors to the OpenImageIO project.
2+
# SPDX-License-Identifier: Apache-2.0
3+
# https://github.com/AcademySoftwareFoundation/OpenImageIO
4+
5+
name: CI-old-containers
6+
7+
on:
8+
push:
9+
# Skip jobs when only documentation files are changed
10+
paths-ignore:
11+
- '**.md'
12+
- '**.rst'
13+
- '**/analysis.yml'
14+
- '**/docs.yml'
15+
- '**.properties'
16+
- 'docs/**'
17+
pull_request:
18+
paths-ignore:
19+
- '**.md'
20+
- '**.rst'
21+
- 'docs/**'
22+
schedule:
23+
# Full nightly build
24+
- cron: "0 8 * * *"
25+
if: github.repository == 'AcademySoftwareFoundation/OpenImageIO'
26+
workflow_dispatch:
27+
# This allows manual triggering of the workflow from the web
28+
29+
permissions: read-all
30+
31+
32+
jobs:
33+
34+
# Tests using the old (pre-2023) ASWF containers that take some special care
35+
# to run on GHA these days. We need to download an older version of "node"
36+
# because the ones on GHA runners now are incompatible with the glibc
37+
# version in the old ASWF containers.
38+
old_aswf:
39+
name: "OLD VFX${{matrix.vfxyear}} ${{matrix.desc}}"
40+
strategy:
41+
fail-fast: false
42+
matrix:
43+
include:
44+
- desc: gcc9/C++17 py3.7 exr3.1 ocio2.0
45+
nametag: linux-vfx2021
46+
runner: ubuntu-latest
47+
container: aswf/ci-osl:2021
48+
vfxyear: 2021
49+
old_node: 1
50+
cxx_std: 17
51+
openexr_ver: v3.1.13
52+
python_ver: 3.7
53+
simd: "avx2,f16c"
54+
fmt_ver: 7.1.0
55+
pybind11_ver: v2.7.0
56+
setenvs: export PUGIXML_VERSION=v1.9 WEBP_VERSION=v1.1.0 USE_OPENVDB=0
57+
FREETYPE_VERSION=VER-2-10-0
58+
- desc: clang10/C++17 avx2 exr3.1 ocio2.0
59+
nametag: linux-clang10-cpp14
60+
runner: ubuntu-latest
61+
container: aswf/ci-osl:2021-clang10
62+
vfxyear: 2021
63+
old_node: 1
64+
cc_compiler: clang
65+
cxx_compiler: clang++
66+
cxx_std: 17
67+
openexr_ver: v3.1.13
68+
pybind11_ver: v2.7.0
69+
python_ver: 3.7
70+
simd: "avx2,f16c"
71+
fmt_ver: 8.1.1
72+
setenvs: export USE_OPENVDB=0
73+
FREETYPE_VERSION=VER-2-11-0
74+
- desc: gcc9/C++17 py39 exr3.1 ocio2.1
75+
nametag: linux-vfx2022
76+
runner: ubuntu-latest
77+
container: aswf/ci-osl:2022-clang11
78+
vfxyear: 2022
79+
old_node: 1
80+
cxx_std: 17
81+
python_ver: 3.9
82+
simd: "avx2,f16c"
83+
fmt_ver: 8.1.1
84+
pybind11_ver: v2.9.0
85+
setenvs: export FREETYPE_VERSION=VER-2-12-0
86+
- desc: clang13/C++17 py39 avx2 exr3.1 ocio2.1
87+
nametag: linux-vfx2022-clang13
88+
runner: ubuntu-latest
89+
container: aswf/ci-osl:2022-clang13
90+
vfxyear: 2022
91+
old_node: 1
92+
cc_compiler: clang
93+
cxx_compiler: clang++
94+
cxx_std: 17
95+
python_ver: 3.9
96+
simd: "avx2,f16c"
97+
fmt_ver: 9.1.0
98+
pybind11_ver: v2.8.1
99+
setenvs: export FREETYPE_VERSION=VER-2-12-0
100+
- desc: icc/C++17 py3.9 exr3.1 ocio2.1 qt5.15
101+
nametag: linux-vfx2022-icc
102+
runner: ubuntu-latest
103+
container: aswf/ci-osl:2022
104+
vfxyear: 2022
105+
old_node: 1
106+
cxx_std: 17
107+
opencolorio_ver: v2.2.1
108+
python_ver: 3.9
109+
# simd: "avx2,f16c"
110+
fmt_ver: 7.1.3
111+
# icc MUST use this older FMT version
112+
pybind11_ver: v2.9.0
113+
setenvs: export USE_ICC=1 USE_OPENVDB=0
114+
OIIO_EXTRA_CPP_ARGS="-fp-model=precise"
115+
FREETYPE_VERSION=VER-2-13-0
116+
DISABLE_libuhdr=1
117+
# For icc, use fp-model precise to eliminate needless LSB errors
118+
# that make test results differ from other platforms.
119+
- desc: icx/C++17 py3.9 exr3.1 ocio2.2 qt5.15
120+
nametag: linux-vfx2022-icx
121+
runner: ubuntu-latest
122+
container: aswf/ci-osl:2022
123+
vfxyear: 2022
124+
old_node: 1
125+
cc_compiler: icx
126+
cxx_compiler: icpx
127+
cxx_std: 17
128+
opencolorio_ver: v2.3.2
129+
python_ver: 3.9
130+
pybind11_ver: v2.9.0
131+
simd: "avx2,f16c"
132+
setenvs: export USE_OPENVDB=0
133+
OPENCOLORIO_CXX=g++
134+
UHDR_CMAKE_C_COMPILER=gcc
135+
UHDR_CMAKE_CXX_COMPILER=g++
136+
# OCIO doesn't build with icx, so we have to force the ocio build
137+
# to use g++.
138+
# Building libuhdr with icx results in test failures
139+
# so we force using gcc/g++.
140+
- desc: oldest gcc9.3/C++17 py3.7 exr-3.1
141+
# Oldest versions of the dependencies that we support.
142+
nametag: linux-oldest
143+
runner: ubuntu-latest
144+
container: aswf/ci-osl:2021
145+
vfxyear: 2021
146+
old_node: 1
147+
cxx_std: 17
148+
fmt_ver: 7.0.1
149+
opencolorio_ver: v2.2.1
150+
openexr_ver: v3.1.0
151+
pybind11_ver: v2.7.0
152+
python_ver: 3.7
153+
setenvs: export CMAKE_VERSION=3.18.2
154+
PTEX_VERSION=v2.3.2
155+
WEBP_VERSION=v1.1.0
156+
depcmds: sudo rm -rf /usr/local/include/OpenEXR
157+
- desc: hobbled gcc9.3/C++17 py3.7 exr-3.1 no-sse
158+
# Use the oldest supported versions of required dependencies, and
159+
# disable most optional dependencies and features (no SSE or
160+
# OpenCV, don't embed plugins).
161+
nametag: linux-disabled
162+
runner: ubuntu-latest
163+
container: aswf/ci-osl:2021
164+
vfxyear: 2021
165+
old_node: 1
166+
cxx_std: 17
167+
fmt_ver: 7.0.1
168+
opencolorio_ver: v2.2.1
169+
openexr_ver: v3.1.0
170+
pybind11_ver: v2.4.2
171+
python_ver: 3.7
172+
simd: 0
173+
setenvs: export EMBEDPLUGINS=0
174+
CMAKE_VERSION=3.18.2
175+
PTEX_VERSION=v2.3.2
176+
WEBP_VERSION=v1.1.0
177+
USE_JPEGTURBO=0
178+
USE_OPENCV=0
179+
FREETYPE_VERSION=VER-2-10-0
180+
depcmds: sudo rm -rf /usr/local/include/OpenEXR
181+
182+
183+
runs-on: ${{ matrix.runner }}
184+
container:
185+
image: ${{ matrix.container }}
186+
volumes:
187+
- /node20217:/node20217:rw,rshared
188+
- /node20217:/__e/node20:ro,rshared
189+
env:
190+
CXX: ${{matrix.cxx_compiler}}
191+
CC: ${{matrix.cc_compiler}}
192+
CMAKE_CXX_STANDARD: ${{matrix.cxx_std}}
193+
USE_SIMD: ${{matrix.simd}}
194+
FMT_VERSION: ${{matrix.fmt_ver}}
195+
OPENCOLORIO_VERSION: ${{matrix.opencolorio_ver}}
196+
OPENEXR_VERSION: ${{matrix.openexr_ver}}
197+
PYBIND11_VERSION: ${{matrix.pybind11_ver}}
198+
PYTHON_VERSION: ${{matrix.python_ver}}
199+
ABI_CHECK: ${{matrix.abi_check}}
200+
ACTIONS_RUNNER_FORCE_ACTIONS_NODE_VERSION: node16
201+
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
202+
steps:
203+
- name: install nodejs20glibc2.17
204+
if: matrix.old_node == '1'
205+
run: |
206+
curl --silent https://unofficial-builds.nodejs.org/download/release/v20.18.1/node-v20.18.1-linux-x64-glibc-217.tar.xz | tar -xJ --strip-components 1 -C /node20217 -f -
207+
# We would like to use harden-runner, but it flags too many false
208+
# positives, every time we download a dependency. We should use it only
209+
# on CI runs where we are producing artifacts that users might rely on.
210+
# - name: Harden Runner
211+
# uses: step-security/harden-runner@248ae51c2e8cc9622ecf50685c8bf7150c6e8813 # v1.4.3
212+
# with:
213+
# egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
214+
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
215+
# Note: can't upgrade to actions/checkout 4.0 because it needs newer
216+
# glibc than these containers have.
217+
- name: Prepare ccache timestamp
218+
id: ccache_cache_keys
219+
run: echo "date=`date -u +'%Y-%m-%dT%H:%M:%SZ'`" >> $GITHUB_OUTPUT
220+
- name: ccache
221+
id: ccache
222+
uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.3
223+
# Note: can't upgrade to actions/cache 4.0 because it needs newer
224+
# glibc than these containers have.
225+
with:
226+
path: /tmp/ccache
227+
key: ${{github.job}}-${{matrix.nametag}}-${{steps.ccache_cache_keys.outputs.date}}
228+
restore-keys: ${{github.job}}-
229+
- name: Build setup
230+
run: |
231+
${{matrix.setenvs}}
232+
src/build-scripts/ci-startup.bash
233+
- name: Dependencies
234+
run: |
235+
${{matrix.depcmds}}
236+
src/build-scripts/gh-installdeps.bash
237+
- name: Build
238+
if: matrix.skip_build != '1'
239+
run: src/build-scripts/ci-build.bash
240+
- name: Testsuite
241+
if: matrix.skip_tests != '1'
242+
run: src/build-scripts/ci-test.bash
243+
- name: Check out ABI standard
244+
if: matrix.abi_check != ''
245+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
246+
with:
247+
ref: ${{matrix.abi_check}}
248+
path: abi_standard
249+
- name: Build ABI standard
250+
if: matrix.abi_check != ''
251+
run: |
252+
mkdir -p abi_standard/build
253+
pushd abi_standard
254+
src/build-scripts/ci-build.bash
255+
popd
256+
- name: Check ABI
257+
if: matrix.abi_check != ''
258+
run: |
259+
src/build-scripts/ci-abicheck.bash ./build abi_standard/build libOpenImageIO libOpenImageIO_Util
260+
- name: Build Docs
261+
if: matrix.build_docs == '1'
262+
run: |
263+
cd src/doc
264+
time make doxygen
265+
time make sphinx
266+
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
267+
# Note: versions of upload-artifact >= 4.0 can't run on the ASWF
268+
# containers because they need a newer glibc than they have.
269+
if: ${{ failure() || matrix.build_docs == '1'}}
270+
with:
271+
name: oiio-${{github.job}}-${{matrix.nametag}}
272+
path: |
273+
build/cmake-save
274+
build/compat_reports
275+
build/sphinx
276+
build/testsuite/*/*.*
277+
!build/testsuite/oiio-images
278+
!build/testsuite/openexr-images
279+
!build/testsuite/fits-images
280+
!build/testsuite/j2kp4files_v1_5

0 commit comments

Comments
 (0)