Skip to content

Commit 2ed6d19

Browse files
committed
ENH: Add cxx composite build action
Adds a composite action to drive common cxx build+test CI actions for ITK remote module repositories. Partially addresses InsightSoftwareConsortium/ITKModuleTemplate#131.
1 parent 04f7525 commit 2ed6d19

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

action.yml

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
name: 'Build, test, package'
2+
description: 'Build, test, and package distributions for an ITK external module.'
3+
inputs:
4+
cmake-build-type:
5+
required: false
6+
default: 'MinSizeRel'
7+
cmake-options:
8+
description: 'Additional CMake arguments to use in building and testing the current remote module.'
9+
required: false
10+
default: ''
11+
itk-cmake-options:
12+
description: 'Additional CMake arguments to use in building ITK, such as enabling certain remote modules.'
13+
required: false
14+
default: ''
15+
itk-git-tag:
16+
required: false
17+
default: '835dc01388d22c4b4c9a46b01dbdfe394ec23511' # v5.3rc04.post2
18+
19+
runs:
20+
using: "composite"
21+
steps:
22+
- name: Define OS-dependent environment variables
23+
if: runner.os == 'Windows'
24+
shell: bash
25+
run: |
26+
echo "C_COMPILER=cl.exe" >> $GITHUB_ENV # defines env.C_COMPILER
27+
echo "CXX_COMPILER=cl.exe" >> $GITHUB_ENV # defines env.CXX_COMPILER
28+
echo "Set env.C_COMPILER=${{ env.C_COMPILER}} and env.CXX_COMPILER=${{ env.CXX_COMPILER }}"
29+
30+
- name: Define OS-dependent environment variables
31+
if: runner.os == 'macOS'
32+
shell: bash
33+
run: |
34+
echo "C_COMPILER=clang" >> $GITHUB_ENV
35+
echo "CXX_COMPILER=clang++" >> $GITHUB_ENV
36+
echo "Set env.C_COMPILER=${{ env.C_COMPILER}} and env.CXX_COMPILER=${{ env.CXX_COMPILER }}"
37+
38+
- name: Define OS-dependent environment variables
39+
if: runner.os == 'Linux'
40+
shell: bash
41+
run: |
42+
echo "C_COMPILER=gcc" >> $GITHUB_ENV
43+
echo "CXX_COMPILER=g++" >> $GITHUB_ENV
44+
echo "Set env.C_COMPILER=${{ env.C_COMPILER}} and env.CXX_COMPILER=${{ env.CXX_COMPILER }}"
45+
46+
- name: Set up Python 3.8
47+
uses: actions/setup-python@v2
48+
with:
49+
python-version: 3.8
50+
51+
- name: Install build dependencies
52+
shell: bash
53+
run: |
54+
python -m pip install --upgrade pip
55+
python -m pip install ninja
56+
python -m pip install cookiecutter
57+
58+
- name: Get specific version of CMake, Ninja
59+
uses: lukka/[email protected]
60+
61+
- name: Download ITK
62+
shell: bash
63+
run: |
64+
cd ..
65+
git clone https://github.com/InsightSoftwareConsortium/ITK.git
66+
cd ITK
67+
git checkout ${{ inputs.itk-git-tag }}
68+
pwd
69+
70+
- name: Build ITK
71+
if: runner.os != 'Windows'
72+
shell: bash
73+
run: |
74+
cd ..
75+
mkdir ITK-build
76+
cd ITK-build
77+
cmake -DCMAKE_C_COMPILER:FILEPATH="${{ env.C_COMPILER }}" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_COMPILER="${{ env.CXX_COMPILER }}" -DCMAKE_BUILD_TYPE:STRING=${{ inputs.cmake-build-type }} -DBUILD_TESTING:BOOL=OFF ${{ inputs.itk-cmake-options }} -GNinja ../ITK
78+
ninja
79+
80+
- name: Build ITK
81+
if: runner.os == 'Windows'
82+
shell: cmd
83+
run: |
84+
cd ..
85+
mkdir ITK-build
86+
cd ITK-build
87+
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
88+
cmake -DCMAKE_C_COMPILER:FILEPATH="${{ env.C_COMPILER }}" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_COMPILER="${{ env.CXX_COMPILER }}" -DCMAKE_BUILD_TYPE:STRING=${{ inputs.cmake-build-type }} -DBUILD_TESTING:BOOL=OFF ${{ inputs.itk-cmake-options }} -GNinja ../ITK
89+
ninja
90+
91+
- name: Fetch CTest driver script
92+
shell: bash
93+
run: |
94+
curl -L https://raw.githubusercontent.com/InsightSoftwareConsortium/ITK/dashboard/itk_common.cmake -O
95+
96+
- name: Configure CTest script
97+
shell: bash
98+
run: |
99+
operating_system="${{ runner.os }}_${{ env.RUNNER_ARCH }}"
100+
echo "CTest dashboard root is at ${{ env.GITHUB_WORKSPACE }}/.."
101+
cat > dashboard.cmake << EOF
102+
set(CTEST_SITE "GitHubActions")
103+
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/.." CTEST_DASHBOARD_ROOT)
104+
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/" CTEST_SOURCE_DIRECTORY)
105+
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/../build" CTEST_BINARY_DIRECTORY)
106+
set(dashboard_source_name "${GITHUB_REPOSITORY}")
107+
if(ENV{GITHUB_REF} MATCHES "master")
108+
set(branch "-master")
109+
set(dashboard_model "Continuous")
110+
else()
111+
set(branch "-${GITHUB_REF}")
112+
set(dashboard_model "Experimental")
113+
endif()
114+
set(CTEST_BUILD_NAME "${GITHUB_REPOSITORY}-${operating_system}-\${branch}")
115+
set(CTEST_UPDATE_VERSION_ONLY 1)
116+
set(CTEST_TEST_ARGS \${CTEST_TEST_ARGS} PARALLEL_LEVEL \${PARALLEL_LEVEL})
117+
set(CTEST_BUILD_CONFIGURATION "Release")
118+
set(CTEST_CMAKE_GENERATOR "Ninja")
119+
set(CTEST_CUSTOM_WARNING_EXCEPTION
120+
\${CTEST_CUSTOM_WARNING_EXCEPTION}
121+
# macOS Azure VM Warning
122+
"ld: warning: text-based stub file"
123+
)
124+
set(dashboard_no_clean 1)
125+
set(ENV{CC} ${{ env.C_COMPILER }})
126+
set(ENV{CXX} ${{ env.CXX_COMPILER }})
127+
if(WIN32)
128+
set(ENV{PATH} "\${CTEST_DASHBOARD_ROOT}/ITK-build/bin;\$ENV{PATH}")
129+
endif()
130+
set(dashboard_cache "
131+
ITK_DIR:PATH=\${CTEST_DASHBOARD_ROOT}/ITK-build
132+
Module_SplitComponents_BUILD_EXAMPLES:BOOL=ON
133+
BUILD_TESTING:BOOL=ON
134+
${{ inputs.cmake-options }}
135+
")
136+
string(TIMESTAMP build_date "%Y-%m-%d")
137+
message("CDash Build Identifier: \${build_date} \${CTEST_BUILD_NAME}")
138+
message("CTEST_SITE = \${CTEST_SITE}")
139+
include(\${CTEST_SCRIPT_DIRECTORY}/itk_common.cmake)
140+
EOF
141+
cat dashboard.cmake
142+
143+
- name: Build and test
144+
if: runner.os != 'Windows'
145+
shell: bash
146+
run: |
147+
ctest --output-on-failure -j 2 -V -S dashboard.cmake
148+
149+
- name: Build and test
150+
if: runner.os == 'Windows'
151+
shell: cmd
152+
run: |
153+
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
154+
ctest --output-on-failure -j 2 -V -S dashboard.cmake

0 commit comments

Comments
 (0)