diff --git a/.github/actions/version-update/action.yml b/.github/actions/version-update/action.yml new file mode 100644 index 00000000000..7b084a5726a --- /dev/null +++ b/.github/actions/version-update/action.yml @@ -0,0 +1,132 @@ +name: "Branch Version Update" +description: "Creates a PR to update the version of a specific branch." + +# The target branch when starting this workflow should be: +# "branch/{major}.{minor}.x" if it exists, or "main" + +inputs: + new_version: + description: "Version 'X.Y.Z' for the release branch." + type: string + required: true + default: "0.0.0" + target_branch: + description: "Target branch for the version update" + type: string + required: false + default: "main" + force: + description: "Enable overwriting existing PR branches (this does not force overwrite the target branch or skip creating a PR)" + type: boolean + required: true + default: false + +runs: + using: "composite" + steps: + + - name: Checkout the repository + uses: actions/checkout@v4 + with: + ref: ${{ inputs.target_branch }} + + - name: Prepare environment + id: prepare-env + shell: bash --noprofile --norc -euo pipefail {0} + run: | + log_and_export_vars() { + for var in "$@"; do + printf "%-15s %s\n" "$var:" "${!var}" | tee -a $GITHUB_STEP_SUMMARY + echo "${var}=${!var}" | tee -a $GITHUB_ENV | tee -a $GITHUB_OUTPUT + done + } + + full_version=${{ inputs.new_version }} + major_version=$(echo ${full_version} | cut -d. -f1) + minor_version=$(echo ${full_version} | cut -d. -f2) + patch_version=$(echo ${full_version} | cut -d. -f3) + branch_name=${{ inputs.target_branch }} + enable_force_push="${{ inputs.force }}" + pr_title="[Version] Update ${branch_name} to v${full_version}" + pr_body="Bump ${branch_name} to ${full_version}." + pr_branch="pr/ver/${branch_name}-v${full_version}" + + log_and_export_vars \ + full_version major_version minor_version patch_version \ + branch_name pr_title pr_branch pr_body enable_force_push + + echo "Branch ref: $GITHUB_REF" | tee -a $GITHUB_STEP_SUMMARY + echo "Branch SHA: $GITHUB_SHA" | tee -a $GITHUB_STEP_SUMMARY + echo "Branch commit: $(git show --oneline --no-patch ${GITHUB_SHA})" | tee -a $GITHUB_STEP_SUMMARY + + - name: Verify environment + id: verify-env + shell: bash --noprofile --norc -euo pipefail {0} + run: | + # Target branch must already exist + if ! git ls-remote --exit-code origin ${branch_name}; then + echo " Target branch must already exist" | tee -a $GITHUB_STEP_SUMMARY + exit 1 + fi + + #Ensure that target branch version is compatible. + if [[ "${branch_name}" =~ ^branch/[0-9]+\.[0-9]+\.x$ ]]; then + branch_version=$(echo ${branch_name} | cut -d/ -f1 --complement) + branch_major=$(echo ${branch_version} | cut -d. -f1) + branch_minor=$(echo ${branch_version} | cut -d. -f2) + if [ "${branch_major}" != "${major_version}" ]; then + echo " Target branch major version mismatch" + exit 1 + fi; + if [ "${branch_minor}" != "${minor_version}" ]; then + echo " Target branch minor version mismatch" + exit 1 + fi + fi + + # PR branch must *not* exist + if [ "${enable_force_push}" == "false" ]; then + if git ls-remote --exit-code origin ${pr_branch}; then + echo " PR branch cannot already exist - Delete branch and retry workflow or enable 'force'" | tee -a $GITHUB_STEP_SUMMARY + exit 1 + fi + fi + + if [[ ! $full_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Invalid version number: $full_version" + exit 1 + fi + + - name: Update version numbers in target branch + id: create-pr-branch + shell: bash --noprofile --norc -euo pipefail {0} + run: | + git checkout -b ${pr_branch} + echo "::group::Running update_version.sh" + ./ci/update_version.sh ${major_version} ${minor_version} ${patch_version} + echo "::endgroup::" + + if ! git diff --quiet; then + echo "::group::Diff" + git diff + echo "::endgroup::" + + git add . + + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git commit -m "${pr_body}" + + # Push the changes to the release branch: + git push --force origin ${pr_branch} + fi + + - name: Create pull request for target branch + id: create-pr + shell: bash --noprofile --norc -euo pipefail {0} + run: | + gh pr create \ + -B "${branch_name}" \ + -b "${pr_body}" \ + -t "${pr_title}" \ + -H "${pr_branch}" diff --git a/.github/workflows/release-create-new.yml b/.github/workflows/release-create-new.yml new file mode 100644 index 00000000000..c79e04ea6d7 --- /dev/null +++ b/.github/workflows/release-create-new.yml @@ -0,0 +1,146 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: "Release: 1. Begin Release Cycle" + +# The branch or tag selected when starting the workflow should be: +# 1. "branch/{major}.{minor}.x" if it exists, or +# 2. The ref to use when branching the release branch. + +on: + workflow_dispatch: + inputs: + main_version: + description: "Next version of main. (x.y.z)" + type: string + required: true + +defaults: + run: + shell: bash --noprofile --norc -euo pipefail {0} + +jobs: + create-release-branch: + env: + GH_TOKEN: ${{ github.token }} + permissions: + actions: write + contents: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Prepare environment + id: prepare-env + run: | + log_and_export_vars() { + for var in "$@"; do + printf "%-15s %s\n" "$var:" "${!var}" | tee -a $GITHUB_STEP_SUMMARY + echo "${var}=${!var}" | tee -a $GITHUB_ENV | tee -a $GITHUB_OUTPUT + done + } + + repo_version=$(jq -r .full cccl-version.json) + main_version=${{ inputs.main_version }} + + if [[ ! $repo_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Invalid version number: $repo_version" + exit 1 + fi + + if [[ ! $main_version =~ ^[0-9]+\.[0-9]+\.[0-9]*$ ]]; then + echo "Invalid main version number: $main_version" + exit 1 + fi + + major_version=$(echo ${repo_version} | cut -d. -f1) + minor_version=$(echo ${repo_version} | cut -d. -f2) + patch_version=$(echo ${repo_version} | cut -d. -f3) + branch_name="branch/${major_version}.${minor_version}.x" + + main_major_version=$(echo ${main_version} | cut -d. -f1) + main_minor_version=$(echo ${main_version} | cut -d. -f2) + main_patch_version=$(echo ${main_version} | cut -d. -f3) + + log_and_export_vars \ + repo_version major_version minor_version patch_version \ + main_version main_major_version main_minor_version main_patch_version \ + branch_name + + echo "Branch ref: $GITHUB_REF" | tee -a $GITHUB_STEP_SUMMARY + echo "Branch SHA: $GITHUB_SHA" | tee -a $GITHUB_STEP_SUMMARY + echo "Branch commit: $(git show --oneline --no-patch ${GITHUB_SHA})" | tee -a $GITHUB_STEP_SUMMARY + + - name: Verify environment + run: | + # If the release branch already exists, it must match the branch point: + if git ls-remote --exit-code origin $branch_name; then + echo "Branch $branch_name already exists" | tee -a $GITHUB_STEP_SUMMARY + echo " GITHUB_REF: $GITHUB_REF" | tee -a $GITHUB_STEP_SUMMARY + echo " branch_name: $branch_name" | tee -a $GITHUB_STEP_SUMMARY + exit 1 + fi + + - name: Create release branch + id: create_branch + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + + git push origin ${GITHUB_SHA}:"refs/heads/$branch_name" + echo "Created branch $branch_name at:" | tee -a $GITHUB_STEP_SUMMARY + + git show --oneline --no-patch HEAD | tee -a $GITHUB_STEP_SUMMARY + + - name: Update version numbers in main + uses: ./.github/actions/version-update + with: + new_version: ${{ inputs.main_version }} + target_branch: "main" + + - name: Notify Slack + if: ${{ success()}} + uses: slackapi/slack-github-action@v1.26.0 + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFIER_BOT_TOKEN }} + SUMMARY_URL: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} + BRANCH_NAME: ${{ steps.prepare-env.outputs.branch_name }} + BRANCH_VERSION: ${{ inputs.branch_version }} + MAIN_VERSION: ${{ inputs.main_version }} + MAIN_PR_URL: ${{ steps.create_pr.outputs.pull-request-url }} + with: + channel-id: ${{ secrets.SLACK_CHANNEL_RELEASE_LOG }} + slack-message: | + A new release cycle has started for `v${{ env.BRANCH_VERSION }}` on `${{ env.BRANCH_NAME }}`. + + If requested, a PR to update `main` to `v${{ env.MAIN_VERSION }}` has been created: ${{ env.MAIN_PR_URL }}. + + Workflow summary: ${{ env.SUMMARY_URL }} + + - name: Notify Slack (failure) + if: ${{ failure() }} + uses: slackapi/slack-github-action@v1.26.0 + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFIER_BOT_TOKEN }} + SUMMARY_URL: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} + BRANCH_VERSION: ${{ inputs.branch_version }} + with: + channel-id: ${{ secrets.SLACK_CHANNEL_RELEASE_LOG }} + slack-message: | + An error has occurred while initiating a new release cycle for `v${{ env.BRANCH_VERSION }}`. + + Details: ${{ env.SUMMARY_URL }} diff --git a/.github/workflows/release-finalize.yml b/.github/workflows/release-finalize.yml index 67e2aad6015..a68c3587c4d 100644 --- a/.github/workflows/release-finalize.yml +++ b/.github/workflows/release-finalize.yml @@ -142,8 +142,8 @@ jobs: - name: Tag run: | - git config user.name github-actions - git config user.email github-actions@github.com + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git tag -a -m "CCCL Release ${release_tag}" ${release_tag} ${rc_tag} git push origin ${release_tag} diff --git a/.github/workflows/update-branch-version.yml b/.github/workflows/update-branch-version.yml index 08f5d7359f5..e2c3b585fbe 100644 --- a/.github/workflows/update-branch-version.yml +++ b/.github/workflows/update-branch-version.yml @@ -16,8 +16,7 @@ name: "Release: 0. Update version in target branch" # The target branch when starting this workflow should be: -# 1. "branch/{major}.{minor}.x" if it exists, or -# 2. "main" +# "branch/{major}.{minor}.x" if it exists, or "main" on: workflow_dispatch: @@ -56,108 +55,9 @@ jobs: with: ref: ${{ inputs.target_branch }} - - name: Verify run from main - id: verify-main - run: | - # This action can only be run from main. - if [[ $GITHUB_REF != refs/heads/main ]]; then - echo " This action may only be run fom main" | tee -a $GITHUB_STEP_SUMMARY - exit 1 - fi - - - name: Prepare environment - id: prepare-env - run: | - log_and_export_vars() { - for var in "$@"; do - printf "%-15s %s\n" "$var:" "${!var}" | tee -a $GITHUB_STEP_SUMMARY - echo "${var}=${!var}" | tee -a $GITHUB_ENV | tee -a $GITHUB_OUTPUT - done - } - - full_version=${{ inputs.new_version }} - major_version=$(echo ${full_version} | cut -d. -f1) - minor_version=$(echo ${full_version} | cut -d. -f2) - patch_version=$(echo ${full_version} | cut -d. -f3) - branch_name=${{ inputs.target_branch }} - enable_force_push="${{ inputs.force }}" - pr_title="[Version] Update ${branch_name} to v${full_version}" - pr_body="Bump ${branch_name} to ${full_version}." - pr_branch="pr/ver/${branch_name}-v${full_version}" - - log_and_export_vars \ - full_version major_version minor_version patch_version \ - branch_name pr_title pr_branch pr_body enable_force_push - - echo "Branch ref: $GITHUB_REF" | tee -a $GITHUB_STEP_SUMMARY - echo "Branch SHA: $GITHUB_SHA" | tee -a $GITHUB_STEP_SUMMARY - echo "Branch commit: $(git show --oneline --no-patch ${GITHUB_SHA})" | tee -a $GITHUB_STEP_SUMMARY - - - name: Verify environment - id: verify-env - run: | - # Target branch must already exist - if ! git ls-remote --exit-code origin ${branch_name}; then - echo " Target branch must already exist" | tee -a $GITHUB_STEP_SUMMARY - exit 1 - fi - - #Ensure that target branch version is compatible. - if [[ "${branch_name}" =~ ^branch/[0-9]+\.[0-9]+\.x$ ]]; then - branch_version=$(echo ${branch_name} | cut -d/ -f1 --complement) - branch_major=$(echo ${branch_version} | cut -d. -f1) - branch_minor=$(echo ${branch_version} | cut -d. -f2) - if [ "${branch_major}" != "${major_version}" ]; then - echo " Target branch major version mismatch" - exit 1 - fi; - if [ "${branch_minor}" != "${minor_version}" ]; then - echo " Target branch minor version mismatch" - exit 1 - fi - fi - - # PR branch must *not* exist - if [ "${enable_force_push}" == "false" ]; then - if git ls-remote --exit-code origin ${pr_branch}; then - echo " PR branch cannot already exist - Delete branch and retry workflow or enable 'force'" | tee -a $GITHUB_STEP_SUMMARY - exit 1 - fi - fi - - if [[ ! $full_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo "Invalid version number: $full_version" - exit 1 - fi - - - name: Update version numbers in target branch - id: create-pr-branch - run: | - git checkout -b ${pr_branch} - echo "::group::Running update_version.sh" - ./ci/update_version.sh ${major_version} ${minor_version} ${patch_version} - echo "::endgroup::" - - if ! git diff --quiet; then - echo "::group::Diff" - git diff - echo "::endgroup::" - - git add . - - git config user.name github-actions - git config user.email github-actions@github.com - git commit -m "${pr_body}" - - # Push the changes to the release branch: - git push --force origin ${pr_branch} - fi - - - name: Create pull request for target branch - id: create-pr - run: | - gh pr create \ - -B "${branch_name}" \ - -b "${pr_body}" \ - -t "${pr_title}" \ - -H "${pr_branch}" + - name: Update version + uses: ./.github/actions/version-update + with: + new_version: ${{ inputs.new_version }} + target_branch: ${{ inputs.target_branch }} + force: ${{ inputs.force }} diff --git a/cccl-version.json b/cccl-version.json index fc6b155463e..a07ae98e6fd 100644 --- a/cccl-version.json +++ b/cccl-version.json @@ -1,6 +1,6 @@ { - "full": "2.8.0", + "full": "2.9.0", "major": 2, - "minor": 8, + "minor": 9, "patch": 0 } diff --git a/cub/cub/version.cuh b/cub/cub/version.cuh index 2d5232939c8..ee57e435e69 100644 --- a/cub/cub/version.cuh +++ b/cub/cub/version.cuh @@ -58,7 +58,7 @@ * CUB_VERSION / 100 % 1000 is the minor version. * CUB_VERSION / 100000 is the major version. */ -#define CUB_VERSION 200800 // macro expansion with ## requires this to be a single value +#define CUB_VERSION 200900 // macro expansion with ## requires this to be a single value /*! \def CUB_MAJOR_VERSION * \brief The preprocessor macro \p CUB_MAJOR_VERSION encodes the diff --git a/lib/cmake/cccl/cccl-config-version.cmake b/lib/cmake/cccl/cccl-config-version.cmake index e19e23cc7f1..ddc74d7e577 100644 --- a/lib/cmake/cccl/cccl-config-version.cmake +++ b/lib/cmake/cccl/cccl-config-version.cmake @@ -1,5 +1,5 @@ set(CCCL_VERSION_MAJOR 2) -set(CCCL_VERSION_MINOR 8) +set(CCCL_VERSION_MINOR 9) set(CCCL_VERSION_PATCH 0) set(CCCL_VERSION_TWEAK 0) diff --git a/lib/cmake/cub/cub-config-version.cmake b/lib/cmake/cub/cub-config-version.cmake index 684d81af37f..ff8252252e2 100644 --- a/lib/cmake/cub/cub-config-version.cmake +++ b/lib/cmake/cub/cub-config-version.cmake @@ -2,7 +2,7 @@ include("${CMAKE_CURRENT_LIST_DIR}/cub-header-search.cmake") set(CUB_VERSION_MAJOR 2) -set(CUB_VERSION_MINOR 8) +set(CUB_VERSION_MINOR 9) set(CUB_VERSION_PATCH 0) set(CUB_VERSION_TWEAK 0) set(CUB_VERSION "${CUB_VERSION_MAJOR}.${CUB_VERSION_MINOR}.${CUB_VERSION_PATCH}.${CUB_VERSION_TWEAK}") diff --git a/lib/cmake/cudax/cudax-config-version.cmake b/lib/cmake/cudax/cudax-config-version.cmake index 18de91cf056..7b7ab9a9621 100644 --- a/lib/cmake/cudax/cudax-config-version.cmake +++ b/lib/cmake/cudax/cudax-config-version.cmake @@ -1,5 +1,5 @@ set(cudax_VERSION_MAJOR 2) -set(cudax_VERSION_MINOR 8) +set(cudax_VERSION_MINOR 9) set(cudax_VERSION_PATCH 0) set(cudax_VERSION_TWEAK 0) diff --git a/lib/cmake/libcudacxx/libcudacxx-config-version.cmake b/lib/cmake/libcudacxx/libcudacxx-config-version.cmake index 09af8c9cdd9..8fa72039f70 100644 --- a/lib/cmake/libcudacxx/libcudacxx-config-version.cmake +++ b/lib/cmake/libcudacxx/libcudacxx-config-version.cmake @@ -2,7 +2,7 @@ include("${CMAKE_CURRENT_LIST_DIR}/libcudacxx-header-search.cmake") set(libcudacxx_VERSION_MAJOR 2) -set(libcudacxx_VERSION_MINOR 8) +set(libcudacxx_VERSION_MINOR 9) set(libcudacxx_VERSION_PATCH 0) set(libcudacxx_VERSION_TWEAK 0) diff --git a/lib/cmake/thrust/thrust-config-version.cmake b/lib/cmake/thrust/thrust-config-version.cmake index 5e206f1c78a..812e5637553 100644 --- a/lib/cmake/thrust/thrust-config-version.cmake +++ b/lib/cmake/thrust/thrust-config-version.cmake @@ -2,7 +2,7 @@ include("${CMAKE_CURRENT_LIST_DIR}/thrust-header-search.cmake") set(THRUST_VERSION_MAJOR 2) -set(THRUST_VERSION_MINOR 8) +set(THRUST_VERSION_MINOR 9) set(THRUST_VERSION_PATCH 0) # Thrust: "subminor" CMake: "patch" set(THRUST_VERSION_TWEAK 0) set(THRUST_VERSION "${THRUST_VERSION_MAJOR}.${THRUST_VERSION_MINOR}.${THRUST_VERSION_PATCH}.${THRUST_VERSION_TWEAK}") diff --git a/libcudacxx/include/cuda/std/__cccl/version.h b/libcudacxx/include/cuda/std/__cccl/version.h index 9bf8b38d625..f82ecae48d3 100644 --- a/libcudacxx/include/cuda/std/__cccl/version.h +++ b/libcudacxx/include/cuda/std/__cccl/version.h @@ -14,7 +14,7 @@ #ifndef __CCCL_VERSION_H #define __CCCL_VERSION_H -#define CCCL_VERSION 2008000 +#define CCCL_VERSION 2009000 #define CCCL_MAJOR_VERSION (CCCL_VERSION / 1000000) #define CCCL_MINOR_VERSION (((CCCL_VERSION / 1000) % 1000)) #define CCCL_PATCH_VERSION (CCCL_VERSION % 1000) diff --git a/python/cuda_cooperative/cuda/cooperative/_version.py b/python/cuda_cooperative/cuda/cooperative/_version.py index 63cedf944ad..35a9805ab0a 100644 --- a/python/cuda_cooperative/cuda/cooperative/_version.py +++ b/python/cuda_cooperative/cuda/cooperative/_version.py @@ -4,4 +4,4 @@ # This file is generated by ci/update_version.sh # Do not edit this file manually. -__version__ = "0.1.2.8.0" +__version__ = "0.1.2.9.0" diff --git a/python/cuda_parallel/cuda/parallel/_version.py b/python/cuda_parallel/cuda/parallel/_version.py index 63cedf944ad..35a9805ab0a 100644 --- a/python/cuda_parallel/cuda/parallel/_version.py +++ b/python/cuda_parallel/cuda/parallel/_version.py @@ -4,4 +4,4 @@ # This file is generated by ci/update_version.sh # Do not edit this file manually. -__version__ = "0.1.2.8.0" +__version__ = "0.1.2.9.0" diff --git a/thrust/thrust/version.h b/thrust/thrust/version.h index 93fef258747..05cab6a1566 100644 --- a/thrust/thrust/version.h +++ b/thrust/thrust/version.h @@ -61,7 +61,7 @@ * THRUST_VERSION / 100 % 1000 is the minor version. * THRUST_VERSION / 100000 is the major version. */ -#define THRUST_VERSION 200800 // macro expansion with ## requires this to be a single value +#define THRUST_VERSION 200900 // macro expansion with ## requires this to be a single value /*! \def THRUST_MAJOR_VERSION * \brief The preprocessor macro \p THRUST_MAJOR_VERSION encodes the