From 5ab92d8e71a13a6b81ad7a5b7d635f8af8e5c31d Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Feb 2023 10:11:29 -0500 Subject: gitlab-ci: add pre-build and post-build steps to macOS Apply the approach from commit 372ce5bffe (ci: add pre-build and post-build steps to Linux, 2022-12-05, v3.26.0-rc1~225^2~1) to build jobs on macOS. --- .gitlab/os-macos.yml | 2 ++ 1 file changed, 2 insertions(+) (limited to '.gitlab') diff --git a/.gitlab/os-macos.yml b/.gitlab/os-macos.yml index 9cdc8d49cf..ff77e1d2b3 100644 --- a/.gitlab/os-macos.yml +++ b/.gitlab/os-macos.yml @@ -154,8 +154,10 @@ # Allow the server to already be running. - "sccache --start-server || :" - sccache --show-stats + - .gitlab/ci/pre_build.sh - ctest -VV -S .gitlab/ci/ctest_configure.cmake - ctest -VV -S .gitlab/ci/ctest_build.cmake + - .gitlab/ci/post_build.sh - sccache --show-stats interruptible: true -- cgit v1.2.1 From 05531a7c4e499847b7d174fb7697e840c223bc98 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Feb 2023 09:59:39 -0500 Subject: gitlab-ci: add pre-build and post-build steps to Windows Apply the approach from commit 372ce5bffe (ci: add pre-build and post-build steps to Linux, 2022-12-05, v3.26.0-rc1~225^2~1) to build jobs on Windows. --- .gitlab/ci/post_build.ps1 | 4 ++++ .gitlab/ci/pre_build.ps1 | 4 ++++ .gitlab/os-windows.yml | 2 ++ 3 files changed, 10 insertions(+) create mode 100755 .gitlab/ci/post_build.ps1 create mode 100755 .gitlab/ci/pre_build.ps1 (limited to '.gitlab') diff --git a/.gitlab/ci/post_build.ps1 b/.gitlab/ci/post_build.ps1 new file mode 100755 index 0000000000..fbd8ae891c --- /dev/null +++ b/.gitlab/ci/post_build.ps1 @@ -0,0 +1,4 @@ +$pwsh = [System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName +if (Test-Path -Path ".gitlab/ci/post_build_$env:CMAKE_CONFIGURATION.ps1" -PathType Leaf) { + . ".gitlab/ci/post_build_$env:CMAKE_CONFIGURATION.ps1" +} diff --git a/.gitlab/ci/pre_build.ps1 b/.gitlab/ci/pre_build.ps1 new file mode 100755 index 0000000000..3a566877be --- /dev/null +++ b/.gitlab/ci/pre_build.ps1 @@ -0,0 +1,4 @@ +$pwsh = [System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName +if (Test-Path -Path ".gitlab/ci/pre_build_$env:CMAKE_CONFIGURATION.ps1" -PathType Leaf) { + . ".gitlab/ci/pre_build_$env:CMAKE_CONFIGURATION.ps1" +} diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml index 24db8023ce..ca5af43fb9 100644 --- a/.gitlab/os-windows.yml +++ b/.gitlab/os-windows.yml @@ -358,8 +358,10 @@ - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1 - sccache --start-server - sccache --show-stats + - (& "$pwsh" -File ".gitlab/ci/pre_build.ps1") - ctest -VV -S .gitlab/ci/ctest_configure.cmake - ctest -VV -S .gitlab/ci/ctest_build.cmake + - (& "$pwsh" -File ".gitlab/ci/post_build.ps1") - sccache --show-stats - sccache --stop-server -- cgit v1.2.1 From ce2e8253069fa1e5750b800a19f85c6e3b359bd8 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Feb 2023 10:15:24 -0500 Subject: gitlab-ci: Simplify macOS packaging jobs Run cpack in a post-build step instead of duplicating the job script. --- .gitlab/ci/package_macos.sh | 3 +++ .gitlab/ci/post_build_macos10.10_package.sh | 1 + .gitlab/ci/post_build_macos_package.sh | 1 + .gitlab/os-macos.yml | 13 ------------- 4 files changed, 5 insertions(+), 13 deletions(-) create mode 100644 .gitlab/ci/package_macos.sh create mode 100644 .gitlab/ci/post_build_macos10.10_package.sh create mode 100644 .gitlab/ci/post_build_macos_package.sh (limited to '.gitlab') diff --git a/.gitlab/ci/package_macos.sh b/.gitlab/ci/package_macos.sh new file mode 100644 index 0000000000..f5c178c20d --- /dev/null +++ b/.gitlab/ci/package_macos.sh @@ -0,0 +1,3 @@ +cd build +cpack -G TGZ +cpack -G DragNDrop diff --git a/.gitlab/ci/post_build_macos10.10_package.sh b/.gitlab/ci/post_build_macos10.10_package.sh new file mode 100644 index 0000000000..3b7bc72f38 --- /dev/null +++ b/.gitlab/ci/post_build_macos10.10_package.sh @@ -0,0 +1 @@ +. .gitlab/ci/package_macos.sh diff --git a/.gitlab/ci/post_build_macos_package.sh b/.gitlab/ci/post_build_macos_package.sh new file mode 100644 index 0000000000..3b7bc72f38 --- /dev/null +++ b/.gitlab/ci/post_build_macos_package.sh @@ -0,0 +1 @@ +. .gitlab/ci/package_macos.sh diff --git a/.gitlab/os-macos.yml b/.gitlab/os-macos.yml index ff77e1d2b3..652a67abb0 100644 --- a/.gitlab/os-macos.yml +++ b/.gitlab/os-macos.yml @@ -162,19 +162,6 @@ interruptible: true -.cmake_build_macos_package: - stage: build - - script: - - *before_script_macos - - ctest -VV -S .gitlab/ci/ctest_configure.cmake - - ctest -VV -S .gitlab/ci/ctest_build.cmake - - cd build - - cpack -G TGZ - - cpack -G DragNDrop - - interruptible: true - .cmake_test_macos: stage: test -- cgit v1.2.1 From 0929221ca3641ed890b15fc9abd416a5311138cf Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Feb 2023 09:33:45 -0500 Subject: gitlab-ci: Simplify Windows packaging pipeline In commit 4c7c66dcf5 (gitlab-ci: Add jobs to make Windows x86_64 and i386 packages, 2022-05-19, v3.24.0-rc1~112^2) we used a separate Windows packaging job in nightly packaging pipelines. It did not run in release pipelines, where we need to run the final packaging step manually with signing. Simplify nightly packaging pipelines by running `cpack` at the end of the build job as we do for other platforms. For release packaging pipelines, create an archive of the files needed to build a package, and present this as the built "package" on Windows. --- .gitlab/artifacts.yml | 29 ---------------- .gitlab/ci/CMakeCPack.cmake | 3 ++ .gitlab/ci/configure_windows_package_common.cmake | 2 ++ .gitlab/ci/package_info.cmake.in | 1 + .gitlab/ci/package_windows.ps1 | 7 ++++ .gitlab/ci/package_windows_build.cmake | 40 +++++++++++++++++++++++ .gitlab/ci/post_build_windows_arm64_package.ps1 | 1 + .gitlab/ci/post_build_windows_i386_package.ps1 | 1 + .gitlab/ci/post_build_windows_x86_64_package.ps1 | 1 + .gitlab/os-windows.yml | 12 ------- .gitlab/rules.yml | 2 +- 11 files changed, 57 insertions(+), 42 deletions(-) create mode 100644 .gitlab/ci/CMakeCPack.cmake create mode 100644 .gitlab/ci/package_info.cmake.in create mode 100755 .gitlab/ci/package_windows.ps1 create mode 100644 .gitlab/ci/package_windows_build.cmake create mode 100755 .gitlab/ci/post_build_windows_arm64_package.ps1 create mode 100755 .gitlab/ci/post_build_windows_i386_package.ps1 create mode 100755 .gitlab/ci/post_build_windows_x86_64_package.ps1 (limited to '.gitlab') diff --git a/.gitlab/artifacts.yml b/.gitlab/artifacts.yml index 1b5384f2d8..3557596e15 100644 --- a/.gitlab/artifacts.yml +++ b/.gitlab/artifacts.yml @@ -63,35 +63,6 @@ - build/DartConfiguation.tcl - build/CTestCustom.cmake -.cmake_build_package_artifacts: - artifacts: - expire_in: 1d - name: "$CMAKE_CI_ARTIFACTS_NAME" - paths: - # Allow CPack to find CMAKE_ROOT. - - build/CMakeFiles/CMakeSourceDir.txt - - # Install rules. - - build/**/cmake_install.cmake - - # We need the main binaries. - - build/bin/ - - # Pass through the documentation. - - build/install-doc/ - - # CPack configuration. - - build/CPackConfig.cmake - - build/CMakeCPackOptions.cmake - - build/Source/QtDialog/QtDialogCPack.cmake - - # CPack/IFW packaging files. - - build/CMake*.qs - - # CPack/WIX packaging files. - - build/Utilities/Release/WiX/custom_action_dll*.wxs - - build/Utilities/Release/WiX/CustomAction/CMakeWiXCustomActions.* - .cmake_release_artifacts: artifacts: expire_in: 5d diff --git a/.gitlab/ci/CMakeCPack.cmake b/.gitlab/ci/CMakeCPack.cmake new file mode 100644 index 0000000000..971fe54dc4 --- /dev/null +++ b/.gitlab/ci/CMakeCPack.cmake @@ -0,0 +1,3 @@ +if(NOT "$ENV{CMAKE_CI_PACKAGE}" MATCHES "^(dev)?$") + configure_file(${CMAKE_CURRENT_LIST_DIR}/package_info.cmake.in ${CMake_BINARY_DIR}/ci_package_info.cmake @ONLY) +endif() diff --git a/.gitlab/ci/configure_windows_package_common.cmake b/.gitlab/ci/configure_windows_package_common.cmake index 46c0a3e75a..b3929a472a 100644 --- a/.gitlab/ci/configure_windows_package_common.cmake +++ b/.gitlab/ci/configure_windows_package_common.cmake @@ -19,4 +19,6 @@ set(CMake_TEST_Qt5 OFF CACHE BOOL "") set(CMake_TEST_Qt6 OFF CACHE BOOL "") set(Python_FIND_REGISTRY NEVER CACHE STRING "") +set(CMake_CPACK_CUSTOM_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/CMakeCPack.cmake" CACHE FILEPATH "") + include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake") diff --git a/.gitlab/ci/package_info.cmake.in b/.gitlab/ci/package_info.cmake.in new file mode 100644 index 0000000000..f9a5bb778b --- /dev/null +++ b/.gitlab/ci/package_info.cmake.in @@ -0,0 +1 @@ +set(CPACK_PACKAGE_FILE_NAME "@CPACK_PACKAGE_FILE_NAME@") diff --git a/.gitlab/ci/package_windows.ps1 b/.gitlab/ci/package_windows.ps1 new file mode 100755 index 0000000000..9ec2942eaf --- /dev/null +++ b/.gitlab/ci/package_windows.ps1 @@ -0,0 +1,7 @@ +if (Test-Path -Path "build/ci_package_info.cmake" -PathType Leaf) { + cmake -P .gitlab/ci/package_windows_build.cmake +} else { + cd build + cpack -G ZIP + cpack -G WIX +} diff --git a/.gitlab/ci/package_windows_build.cmake b/.gitlab/ci/package_windows_build.cmake new file mode 100644 index 0000000000..e6ff0a6f4e --- /dev/null +++ b/.gitlab/ci/package_windows_build.cmake @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.24) +include(build/ci_package_info.cmake) + +set(build "${CMAKE_CURRENT_BINARY_DIR}/build") + +file(GLOB paths RELATIVE "${CMAKE_CURRENT_BINARY_DIR}" + # Allow CPack to find CMAKE_ROOT. + "${build}/CMakeFiles/CMakeSourceDir.txt" + + # We need the main binaries. + "${build}/bin" + + # Pass through the documentation. + "${build}/install-doc" + + # CPack configuration. + "${build}/CPackConfig.cmake" + "${build}/CMakeCPackOptions.cmake" + "${build}/Source/QtDialog/QtDialogCPack.cmake" + + # CPack/IFW packaging files. + "${build}/CMake*.qs" + + # CPack/WIX packaging files. + "${build}/Utilities/Release/WiX/custom_action_dll*.wxs" + "${build}/Utilities/Release/WiX/CustomAction/CMakeWiXCustomActions.*" + ) + +file(GLOB_RECURSE paths_recurse RELATIVE "${CMAKE_CURRENT_BINARY_DIR}" + # Install rules. + "${build}/cmake_install.cmake" + "${build}/*/cmake_install.cmake" + ) + +# Create a "package" containing the build-tree files needed to build a package. +file(ARCHIVE_CREATE + OUTPUT build/${CPACK_PACKAGE_FILE_NAME}.build.zip + PATHS ${paths} ${paths_recurse} + FORMAT zip + ) diff --git a/.gitlab/ci/post_build_windows_arm64_package.ps1 b/.gitlab/ci/post_build_windows_arm64_package.ps1 new file mode 100755 index 0000000000..f98d99597d --- /dev/null +++ b/.gitlab/ci/post_build_windows_arm64_package.ps1 @@ -0,0 +1 @@ +. .gitlab/ci/package_windows.ps1 diff --git a/.gitlab/ci/post_build_windows_i386_package.ps1 b/.gitlab/ci/post_build_windows_i386_package.ps1 new file mode 100755 index 0000000000..f98d99597d --- /dev/null +++ b/.gitlab/ci/post_build_windows_i386_package.ps1 @@ -0,0 +1 @@ +. .gitlab/ci/package_windows.ps1 diff --git a/.gitlab/ci/post_build_windows_x86_64_package.ps1 b/.gitlab/ci/post_build_windows_x86_64_package.ps1 new file mode 100755 index 0000000000..f98d99597d --- /dev/null +++ b/.gitlab/ci/post_build_windows_x86_64_package.ps1 @@ -0,0 +1 @@ +. .gitlab/ci/package_windows.ps1 diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml index ca5af43fb9..ded3e659ff 100644 --- a/.gitlab/os-windows.yml +++ b/.gitlab/os-windows.yml @@ -367,18 +367,6 @@ interruptible: true -.cmake_package_windows: - stage: package - - script: - - *before_script_windows - - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1 - - cd build - - cpack -G ZIP - - cpack -G WIX - - interruptible: true - .cmake_test_windows: stage: test diff --git a/.gitlab/rules.yml b/.gitlab/rules.yml index 8fc40a7f02..8efa3040f7 100644 --- a/.gitlab/rules.yml +++ b/.gitlab/rules.yml @@ -70,7 +70,7 @@ when: on_success - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE == "prep"' when: manual - - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE != "package" && $CI_JOB_STAGE != "upload"' + - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE != "upload"' when: on_success - when: never -- cgit v1.2.1 From f73649823bb5062d7150ffc1e83458de2813d6a5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Feb 2023 12:05:25 -0500 Subject: gitlab-ci: Stage unsigned release package artifacts in a dedicated directory These artifacts need to be manually signed before distribution. Move them to a dedicated `unsigned/` directory to avoid accidental distribution without signing. --- .gitlab/artifacts.yml | 2 ++ .gitlab/ci/package_macos.sh | 9 +++++++++ .gitlab/ci/package_windows_build.cmake | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) (limited to '.gitlab') diff --git a/.gitlab/artifacts.yml b/.gitlab/artifacts.yml index 3557596e15..41f24ede94 100644 --- a/.gitlab/artifacts.yml +++ b/.gitlab/artifacts.yml @@ -80,6 +80,8 @@ # Any source packages made. - build/cmake-*.tar.gz - build/cmake-*.zip + # Any unsigned packages made. + - build/unsigned/cmake-* .cmake_junit_artifacts: artifacts: diff --git a/.gitlab/ci/package_macos.sh b/.gitlab/ci/package_macos.sh index f5c178c20d..7625c5d48a 100644 --- a/.gitlab/ci/package_macos.sh +++ b/.gitlab/ci/package_macos.sh @@ -1,3 +1,12 @@ cd build cpack -G TGZ cpack -G DragNDrop + +case "$CMAKE_CI_PACKAGE" in + dev) + ;; + *) + mkdir -p unsigned + mv cmake-*-macos*-universal.* unsigned/ + ;; +esac diff --git a/.gitlab/ci/package_windows_build.cmake b/.gitlab/ci/package_windows_build.cmake index e6ff0a6f4e..feb379c9be 100644 --- a/.gitlab/ci/package_windows_build.cmake +++ b/.gitlab/ci/package_windows_build.cmake @@ -33,8 +33,9 @@ file(GLOB_RECURSE paths_recurse RELATIVE "${CMAKE_CURRENT_BINARY_DIR}" ) # Create a "package" containing the build-tree files needed to build a package. +file(MAKE_DIRECTORY build/unsigned) file(ARCHIVE_CREATE - OUTPUT build/${CPACK_PACKAGE_FILE_NAME}.build.zip + OUTPUT build/unsigned/${CPACK_PACKAGE_FILE_NAME}.build.zip PATHS ${paths} ${paths_recurse} FORMAT zip ) -- cgit v1.2.1 From fc8a9818935d69368bf13901dc9f043067054b70 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 27 Feb 2023 11:17:59 -0500 Subject: gitlab-ci: Generalize package and help upload URLs --- .gitlab/rules.yml | 8 ++++---- .gitlab/upload.yml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to '.gitlab') diff --git a/.gitlab/rules.yml b/.gitlab/rules.yml index 8efa3040f7..f5306221d9 100644 --- a/.gitlab/rules.yml +++ b/.gitlab/rules.yml @@ -66,7 +66,7 @@ rules: - if: '$CMAKE_CI_PACKAGE == "dev"' variables: - RSYNC_DESTINATION: "dev" + RSYNC_DESTINATION: "kitware@cmake.org:dev/" when: on_success - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE == "prep"' when: manual @@ -78,19 +78,19 @@ rules: - if: '$CMAKE_CI_PACKAGE =~ /v[0-9]+\.[0-9]+/' variables: - RSYNC_DESTINATION: "$CMAKE_CI_PACKAGE" + RSYNC_DESTINATION: "kitware@cmake.org:$CMAKE_CI_PACKAGE/" CMAKE_CI_SPHINX_QTHELP: "ON" CMAKE_CI_VERSION_NO_GIT: "ON" when: manual - if: '$CMAKE_CI_PROJECT_MAIN_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_MAIN_BRANCH == $CI_COMMIT_BRANCH' variables: - RSYNC_DESTINATION: "git-master" + RSYNC_DESTINATION: "kitware@cmake.org:git-master/" CMAKE_CI_SPHINX_QTHELP: "OFF" CMAKE_CI_VERSION_NO_GIT: "OFF" when: on_success - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH' variables: - RSYNC_DESTINATION: "git-stage" + RSYNC_DESTINATION: "kitware@cmake.org:git-stage/" CMAKE_CI_SPHINX_QTHELP: "OFF" CMAKE_CI_VERSION_NO_GIT: "OFF" when: on_success diff --git a/.gitlab/upload.yml b/.gitlab/upload.yml index 745b078a0e..114808f1f2 100644 --- a/.gitlab/upload.yml +++ b/.gitlab/upload.yml @@ -17,7 +17,7 @@ - chmod 400 $RSYNC_BINARY_KEY - ssh-keygen -y -f $RSYNC_BINARY_KEY > $RSYNC_BINARY_KEY.pub - test -n "$RSYNC_DESTINATION" - - rsync -tv --recursive -e "ssh -i $RSYNC_BINARY_KEY -o StrictHostKeyChecking=no -o LogLevel=ERROR" build/ kitware@cmake.org:$RSYNC_DESTINATION/ + - rsync -tv --recursive -e "ssh -i $RSYNC_BINARY_KEY -o StrictHostKeyChecking=no -o LogLevel=ERROR" build/ "$RSYNC_DESTINATION" .rsync_upload_help: stage: upload @@ -36,4 +36,4 @@ - chmod 400 $RSYNC_HELP_KEY - ssh-keygen -y -f $RSYNC_HELP_KEY > $RSYNC_HELP_KEY.pub - test -n "$RSYNC_DESTINATION" - - rsync -tv --recursive --delete -e "ssh -i $RSYNC_HELP_KEY -o StrictHostKeyChecking=no -o LogLevel=ERROR" build/html/ kitware@cmake.org:$RSYNC_DESTINATION/ + - rsync -tv --recursive --delete -e "ssh -i $RSYNC_HELP_KEY -o StrictHostKeyChecking=no -o LogLevel=ERROR" build/html/ "$RSYNC_DESTINATION" -- cgit v1.2.1 From 7c60a2625d8940cff786e6c6d432fca3fedacc00 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Feb 2023 10:58:47 -0500 Subject: gitlab-ci: Optionally upload release packages to custom URL --- .gitlab/rules.yml | 4 ++++ 1 file changed, 4 insertions(+) (limited to '.gitlab') diff --git a/.gitlab/rules.yml b/.gitlab/rules.yml index f5306221d9..b85b7280e5 100644 --- a/.gitlab/rules.yml +++ b/.gitlab/rules.yml @@ -72,6 +72,10 @@ when: manual - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE != "upload"' when: on_success + - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE == "upload" && $CMAKE_CI_PACKAGE_URL != null' + variables: + RSYNC_DESTINATION: "$CMAKE_CI_PACKAGE_URL" + when: on_success - when: never .run_cmake_org_help: -- cgit v1.2.1