BUG: Force ITKPythonPackage script checkout #33
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build, test, package | |
on: [push,pull_request] | |
env: | |
itk-git-tag: "v5.4rc02" | |
itk-wheel-tag: "v5.4rc02" | |
ITKPythonPackage-git-tag: "v5.4rc02" | |
ctest-options: "" | |
jobs: | |
build-test-cxx: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
max-parallel: 3 | |
matrix: | |
os: [ubuntu-22.04, windows-2022, macos-12] | |
include: | |
- os: ubuntu-22.04 | |
c-compiler: "gcc" | |
cxx-compiler: "g++" | |
cmake-build-type: "MinSizeRel" | |
- os: windows-2022 | |
c-compiler: "cl.exe" | |
cxx-compiler: "cl.exe" | |
cmake-build-type: "Release" | |
- os: macos-12 | |
c-compiler: "clang" | |
cxx-compiler: "clang++" | |
cmake-build-type: "MinSizeRel" | |
steps: | |
- uses: actions/checkout@v3 | |
- name: 'Specific XCode version' | |
if: matrix.os == 'macos-12' | |
run: | | |
sudo xcode-select -s "/Applications/Xcode_13.2.1.app" | |
- name: Set up Python 3.9 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.9" | |
- uses: shogo82148/actions-setup-perl@v1 | |
- uses: ilammy/setup-nasm@v1 | |
- name: Get specific version of CMake, Ninja | |
uses: lukka/[email protected] | |
- name: Download ITK | |
run: | | |
cd .. | |
git clone https://github.com/InsightSoftwareConsortium/ITK.git | |
cd ITK | |
git checkout ${{ env.itk-git-tag }} | |
- name: Build ITK | |
if: matrix.os != 'windows-2022' | |
run: | | |
cd .. | |
mkdir ITK-build | |
cd ITK-build | |
cmake -DCMAKE_C_COMPILER:FILEPATH="${{ matrix.c-compiler }}" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_COMPILER="${{ matrix.cxx-compiler }}" -DCMAKE_BUILD_TYPE:STRING=${{ matrix.cmake-build-type }} -DBUILD_TESTING:BOOL=OFF -GNinja ../ITK | |
ninja | |
- name: Build ITK | |
if: matrix.os == 'windows-2022' | |
run: | | |
cd .. | |
mkdir ITK-build | |
cd ITK-build | |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" | |
cmake -DCMAKE_C_COMPILER:FILEPATH="${{ matrix.c-compiler }}" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_COMPILER="${{ matrix.cxx-compiler }}" -DCMAKE_BUILD_TYPE:STRING=${{ matrix.cmake-build-type }} -DBUILD_TESTING:BOOL=OFF -GNinja ../ITK | |
ninja | |
shell: cmd | |
- name: Fetch CTest driver script | |
run: | | |
curl -L https://raw.githubusercontent.com/InsightSoftwareConsortium/ITK/dashboard/itk_common.cmake -O | |
- name: Configure CTest script | |
shell: bash | |
run: | | |
operating_system="${{ matrix.os }}" | |
cat > dashboard.cmake << EOF | |
set(CTEST_SITE "GitHubActions") | |
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/.." CTEST_DASHBOARD_ROOT) | |
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/" CTEST_SOURCE_DIRECTORY) | |
file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/../build" CTEST_BINARY_DIRECTORY) | |
set(dashboard_source_name "${GITHUB_REPOSITORY}") | |
if(ENV{GITHUB_REF} MATCHES "master") | |
set(branch "-master") | |
set(dashboard_model "Continuous") | |
else() | |
set(branch "-${GITHUB_REF}") | |
set(dashboard_model "Experimental") | |
endif() | |
set(CTEST_BUILD_NAME "${GITHUB_REPOSITORY}-${operating_system}-\${branch}") | |
set(CTEST_UPDATE_VERSION_ONLY 1) | |
set(CTEST_TEST_ARGS \${CTEST_TEST_ARGS} PARALLEL_LEVEL \${PARALLEL_LEVEL}) | |
set(CTEST_BUILD_CONFIGURATION "Release") | |
set(CTEST_CMAKE_GENERATOR "Ninja") | |
set(CTEST_CUSTOM_WARNING_EXCEPTION | |
\${CTEST_CUSTOM_WARNING_EXCEPTION} | |
# macOS Azure VM Warning | |
"ld: warning: text-based stub file" | |
"Wunused-result" | |
"file: .+ has no symbols" | |
"Wpointer-bool-conversion" | |
"note: prefix with the address-of operator to silence this warning" | |
"warning C4722: 'riegeli::internal::UnreachableStream::~UnreachableStream': destructor never returns, potential memory leak" | |
"warning C4722: 'riegeli::internal::CheckFailed::~CheckFailed': destructor never returns, potential memory leak" | |
"_deps[/\\\\].+-src[/\\\\]" # disable all warnings from external projects | |
"_deps[/\\\\].+-build[/\\\\]" # disable all warnings from external projects | |
# the following warnings escape the above filter | |
"warning: Import validate/validate.proto is unused" | |
"warning:.+__builtin___memcpy_chk" | |
"warning:.+__builtin_memchr" | |
"warning:.+__builtin_memcpy" | |
"cc1plus: warning: writing 16 bytes into a region of size 0" | |
"note: source object allocated here" | |
) | |
set(dashboard_no_clean 1) | |
set(ENV{CC} ${{ matrix.c-compiler }}) | |
set(ENV{CXX} ${{ matrix.cxx-compiler }}) | |
if(WIN32) | |
set(ENV{PATH} "\${CTEST_DASHBOARD_ROOT}/ITK-build/bin;\$ENV{PATH}") | |
endif() | |
set(dashboard_cache " | |
ITK_DIR:PATH=\${CTEST_DASHBOARD_ROOT}/ITK-build | |
BUILD_TESTING:BOOL=ON | |
") | |
string(TIMESTAMP build_date "%Y-%m-%d") | |
message("CDash Build Identifier: \${build_date} \${CTEST_BUILD_NAME}") | |
message("CTEST_SITE = \${CTEST_SITE}") | |
include(\${CTEST_SCRIPT_DIRECTORY}/itk_common.cmake) | |
EOF | |
cat dashboard.cmake | |
- name: Build and test | |
if: matrix.os != 'windows-2022' | |
run: | | |
ctest --output-on-failure -j 2 -V -S dashboard.cmake ${{ env.ctest-options }} | |
- name: Build and test | |
if: matrix.os == 'windows-2022' | |
run: | | |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" | |
ctest --output-on-failure -j 2 -V -S dashboard.cmake ${{ env.ctest-options }} | |
shell: cmd | |
build-linux-py: | |
runs-on: ubuntu-22.04 | |
strategy: | |
max-parallel: 2 | |
matrix: | |
python-version: ["38", "39", "310", "311"] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: 'Fetch build script' | |
run: | | |
curl -L https://raw.githubusercontent.com/InsightSoftwareConsortium/ITKPythonPackage/${{ env.ITKPythonPackage-git-tag }}/scripts/dockcross-manylinux-download-cache-and-build-module-wheels.sh -O | |
chmod u+x dockcross-manylinux-download-cache-and-build-module-wheels.sh | |
- name: 'Build π Python π¦ package' | |
run: | | |
export ITK_PACKAGE_VERSION=${{ env.itk-wheel-tag }} | |
export ITKPYTHONPACKAGE_TAG=${{ env.ITKPythonPackage-git-tag }} | |
export MANYLINUX_VERSION="_2_28" | |
echo "Building for manylinux specialization ${MANYLINUX_VERSION}" | |
pwd | |
./dockcross-manylinux-download-cache-and-build-module-wheels.sh cp${{ matrix.python-version }} | |
- name: Publish Python package as GitHub Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: LinuxWheel${{ matrix.python-version }} | |
path: dist/*.whl | |
build-macos-py: | |
runs-on: macos-12 | |
strategy: | |
max-parallel: 2 | |
matrix: | |
python-version: ["3.8", "3.9", "3.10", "3.11"] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: 'Specific XCode version' | |
run: | | |
sudo xcode-select -s "/Applications/Xcode_13.2.1.app" | |
- name: Get specific version of CMake, Ninja | |
uses: lukka/[email protected] | |
- uses: shogo82148/actions-setup-perl@v1 | |
- uses: ilammy/setup-nasm@v1 | |
- name: 'Fetch build script' | |
run: | | |
curl -L https://raw.githubusercontent.com/InsightSoftwareConsortium/ITKPythonPackage/${{ env.ITKPythonPackage-git-tag }}/scripts/macpython-download-cache-and-build-module-wheels.sh -O | |
chmod u+x macpython-download-cache-and-build-module-wheels.sh | |
- name: 'Build π Python π¦ package' | |
run: | | |
export ITK_PACKAGE_VERSION=${{ env.itk-wheel-tag }} | |
export ITKPYTHONPACKAGE_TAG=${{ env.ITKPythonPackage-git-tag }} | |
export MACOSX_DEPLOYMENT_TARGET=10.15 | |
pwd | |
./macpython-download-cache-and-build-module-wheels.sh "${{ matrix.python-version }}" | |
- name: Set up Python 3.10 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Validate build output | |
shell: bash | |
run: | | |
python -m pip install twine | |
ls dist/ | |
WHEEL_PATTERN="dist/itk_*macosx*.whl" | |
EXPECTED_WHEEL_COUNT=1 | |
WHEEL_COUNT=`(ls ${WHEEL_PATTERN} | wc -l)` | |
if (( ${WHEEL_COUNT} != ${EXPECTED_WHEEL_COUNT} )); then | |
echo "Expected ${EXPECTED_WHEEL_COUNT} wheels but found ${WHEEL_COUNT}" | |
exit 1 | |
fi | |
python -m twine check ${WHEEL_PATTERN} | |
- name: Publish Python package as GitHub Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: MacOSWheels | |
path: dist/*.whl | |
build-windows-py: | |
runs-on: windows-2022 | |
strategy: | |
max-parallel: 2 | |
matrix: | |
python-version-minor: ["8", "9", "10", "11"] | |
steps: | |
- name: Get specific version of CMake, Ninja | |
uses: lukka/[email protected] | |
- uses: actions/checkout@v3 | |
with: | |
path: "im" | |
- name: 'Reduce source path length' | |
shell: bash | |
run: | | |
# Move checked-out source to a shorter path to avoid Windows path length issues | |
mv im ../../ | |
- name: 'Install Python' | |
run: | | |
$pythonArch = "64" | |
$pythonVersion = "3.${{ matrix.python-version-minor }}" | |
iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/scikit-build/scikit-ci-addons/master/windows/install-python.ps1')) | |
- uses: shogo82148/actions-setup-perl@v1 | |
- uses: ilammy/setup-nasm@v1 | |
- name: 'Fetch build dependencies' | |
shell: bash | |
run: | | |
cd ../../im | |
curl -L "https://github.com/InsightSoftwareConsortium/ITKPythonBuilds/releases/download/${{ env.itk-wheel-tag }}/ITKPythonBuilds-windows.zip" -o "ITKPythonBuilds-windows.zip" | |
7z x ITKPythonBuilds-windows.zip -o/c/P -aoa -r | |
curl -L "https://data.kitware.com/api/v1/file/5c0ad59d8d777f2179dd3e9c/download" -o "doxygen-1.8.11.windows.bin.zip" | |
7z x doxygen-1.8.11.windows.bin.zip -o/c/P/doxygen -aoa -r | |
curl -L "https://data.kitware.com/api/v1/file/5bbf87ba8d777f06b91f27d6/download/grep-win.zip" -o "grep-win.zip" | |
7z x grep-win.zip -o/c/P/grep -aoa -r | |
if [[ -n ${{ env.ITKPythonPackage-git-tag }} ]]; then | |
echo "Updating ITKPythonPackage build scripts to ${{ env.ITKPythonPackage-git-tag }}" | |
pushd /c/P/IPP | |
git remote add InsightSoftwareConsortium https://github.com/InsightSoftwareConsortium/ITKPythonPackage.git --tags | |
git fetch InsightSoftwareConsortium | |
git checkout --ours ${{ env.ITKPythonPackage-git-tag }} | |
git status | |
popd | |
else | |
echo "Using ITKPythonPackage scripts included with ITKPythonBuilds archive" | |
fi | |
- name: 'Build π Python π¦ package' | |
shell: cmd | |
run: | | |
cd ../../im | |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" | |
set PATH=C:\P\grep;%PATH% | |
set CC=cl.exe | |
set CXX=cl.exe | |
pwd | |
C:\Python3${{ matrix.python-version-minor }}-x64\python.exe C:\P\IPP\scripts\windows_build_module_wheels.py --py-envs "3${{ matrix.python-version-minor }}-x64" --no-cleanup | |
mkdir ${{ github.workspace }}\dist | |
copy dist\*.whl ${{ github.workspace }}\dist | |
- name: Publish Python package as GitHub Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: WindowsWheel3.${{ matrix.python-version-minor }} | |
path: dist/*.whl | |
publish-python-packages-to-pypi: | |
needs: | |
- build-linux-py | |
- build-macos-py | |
- build-windows-py | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Download Python Packages | |
uses: actions/download-artifact@v3 | |
- name: Prepare packages for upload | |
run: | | |
ls -R | |
for d in */; do | |
mv ${d}/*.whl . | |
done | |
mkdir dist | |
mv *.whl dist/ | |
ls dist | |
- name: Publish π Python π¦ package to PyPI | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') | |
uses: pypa/gh-action-pypi-publish@master | |
with: | |
user: __token__ | |
password: ${{ secrets.pypi_password }} |