From be510bf2e9f4bdfdc7e299018c552c6aa5a8e5a5 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:57:23 -0700 Subject: [PATCH 01/16] chore: never modify the COPYRIGHT template and guard .github templates Align the self-contained copyright hook with NVIDIA Legal header guidance: compute the header's copyright year in memory instead of rewriting tools/COPYRIGHT on every run, and exclude .github/ so GitHub issue/PR templates keep their YAML frontmatter first. TRI-1100 --- .pre-commit-config.yaml | 3 +++ tools/add_copyright.py | 23 +++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9beacaac4..52dd9e1f8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -50,6 +50,9 @@ repos: entry: python tools/add_copyright.py language: python require_serial: true + # GitHub issue/PR templates must start with YAML frontmatter; keep + # license headers out of them. + exclude: ^\.github/ # More details about these pre-commit hooks here: # https://pre-commit.com/hooks.html - repo: https://github.com/pre-commit/pre-commit-hooks diff --git a/tools/add_copyright.py b/tools/add_copyright.py index 07d90bd21..c9dcb0043 100755 --- a/tools/add_copyright.py +++ b/tools/add_copyright.py @@ -54,19 +54,26 @@ def update_copyright_year( f.write(updated_content) -def update_and_get_license() -> str: +def get_license() -> str: """ - Updates the copyright year in the LICENSE file if necessary and then - returns its contents. + Returns the license header template with its copyright year set to the + current year. The template file itself is never modified — headers are + always inserted with the current year, computed in memory. """ - # License file should always have the current year. - update_copyright_year(LICENSE_PATH, disallow_range=True) - with open(LICENSE_PATH) as license_file: - return license_file.read() + content = license_file.read() + + match = COPYRIGHT_YEAR_PAT.search(content) + assert match is not None, f"File {LICENSE_PATH} does not contain a valid copyright." + + new_copyright = ( + f"SPDX-FileCopyrightText: Copyright{match.group(1) or ''} " + f"{current_year} NVIDIA CORPORATION" + ) + return COPYRIGHT_YEAR_PAT.sub(new_copyright, content) -LICENSE_TEXT = update_and_get_license() +LICENSE_TEXT = get_license() # # Header manipulation helpers From 880da897de92385bd223393f0fdf05e6ecdf1800 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Fri, 17 Jul 2026 19:01:12 -0700 Subject: [PATCH 02/16] ci: run pre-commit only on files modified in the PR A full --all-files run bumps the copyright year of every file with a stale year, failing CI for any PR at year rollover. Check only the files the PR modifies, mirroring the other triton-inference-server repositories. TRI-1100 --- .github/workflows/pre-commit.yml | 43 ++++++-------------------------- .pre-commit-config.yaml | 2 +- tools/add_copyright.py | 2 +- 3 files changed, 9 insertions(+), 38 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 6d5265c10..3df878200 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -1,28 +1,5 @@ -# Copyright 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 name: pre-commit @@ -35,17 +12,11 @@ jobs: steps: - uses: actions/checkout@v5.0.0 with: - fetch-depth: 1 - - - name: Fetch base commit - run: | - git remote add base "${{ github.event.pull_request.base.repo.clone_url }}" - git fetch --no-tags --depth=1 base ${{ github.event.pull_request.base.sha }} - + fetch-depth: 2 + - name: Get modified files + id: modified-files + run: echo "modified_files=$(git diff --name-only -r HEAD^1 HEAD | xargs)" >> $GITHUB_OUTPUT - uses: actions/setup-python@v6.0.0 - - uses: pre-commit/action@v3.0.1 with: - extra_args: >- - --from-ref ${{ github.event.pull_request.base.sha }} - --to-ref ${{ github.sha }} + extra_args: --files ${{ steps.modified-files.outputs.modified_files }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 52dd9e1f8..cebd6ed6c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 exclude: monitor/dcgm/ diff --git a/tools/add_copyright.py b/tools/add_copyright.py index c9dcb0043..6c920f3f5 100755 --- a/tools/add_copyright.py +++ b/tools/add_copyright.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 import argparse From df384a4d063a90d902aba56a8f692032de397f3f Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Fri, 17 Jul 2026 23:28:13 -0700 Subject: [PATCH 03/16] ci: adopt the standard PR template Same simplified pull_request_template.md used across all triton-inference-server repositories. TRI-1100 --- .github/pull_request_template.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..a79d3bddc --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,18 @@ +#### What does the PR do? + + +#### Related Issues / PRs + + +#### Test plan + + +#### Caveats + + +#### Checklist +- [ ] PR title follows `: ` (conventional commit — enforced by the `conventional-pre-commit` hook) +- [ ] I ran `pre-commit install && pre-commit run --all-files` locally and it passes +- [ ] Copyright header is correct on all changed files +- [ ] External contributors: I have read the [Contribution guidelines](../CONTRIBUTING.md) and signed the [Contributor License Agreement](https://github.com/NVIDIA/triton-inference-server/blob/master/Triton-CCLA-v1.pdf) From cd4cf1c4d96b6f8035dbfc5f83d1f38d4787b357 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Fri, 17 Jul 2026 23:33:33 -0700 Subject: [PATCH 04/16] ci: share the server repository's PR templates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adopt the canonical PR template set from triton-inference-server/server (default chooser plus internal/external contribution templates) so every repository presents the same PR experience. The manual "Commit Type" checkbox section is dropped — the conventional-pre-commit hook (commit-msg stage) enforces it automatically. TRI-1100 --- .../pull_request_template_external_contrib.md | 36 +++++++++++++++++++ .../pull_request_template_internal_contrib.md | 36 +++++++++++++++++++ .github/pull_request_template.md | 23 +++++------- 3 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md new file mode 100644 index 000000000..4a9e6b653 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md @@ -0,0 +1,36 @@ +#### What does the PR do? +<!-- Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.--> + +#### Checklist +- [ ] I have read the [Contribution guidelines](#../../CONTRIBUTING.md) and signed the [Contributor License +Agreement](https://github.com/NVIDIA/triton-inference-server/blob/master/Triton-CCLA-v1.pdf) +- [ ] PR title reflects the change and is of format `<commit_type>: <Title>` +- [ ] Changes are described in the pull request. +- [ ] Related issues are referenced. +- [ ] Populated [github labels](https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels) field +- [ ] Added [test plan](#test-plan) and verified test passes. +- [ ] Verified that the PR passes existing CI. +- [ ] I ran pre-commit locally (`pre-commit install, pre-commit run --all`) +- [ ] Verified copyright is correct on all changed files. +- [ ] Added _succinct_ git squash message before merging [ref](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +- [ ] All template sections are filled out. +- [ ] Optional: Additional screenshots for behavior/output changes with before/after. + +#### Related PRs: +<!-- Related PRs from other Repositories --> + +#### Where should the reviewer start? +<!-- call out specific files that should be looked at closely --> + +#### Test plan: +<!-- list steps to verify feature works --> +<!-- were e2e tests added?--> + +#### Caveats: +<!-- any limitations or possible things missing from this PR --> + +#### Background +<!-- e.g. what led to this change being made. this is optional extra information to help the reviewer --> + +#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) +- closes GitHub issue: #xxx diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md new file mode 100644 index 000000000..42b1bb96d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md @@ -0,0 +1,36 @@ +#### What does the PR do? +<!-- Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.--> + +#### Checklist +- [ ] PR title reflects the change and is of format `<commit_type>: <Title>` +- [ ] Changes are described in the pull request. +- [ ] Related issues are referenced. +- [ ] Populated [github labels](https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels) field +- [ ] Added [test plan](#test-plan) and verified test passes. +- [ ] Verified that the PR passes existing CI. +- [ ] Verified copyright is correct on all changed files. +- [ ] Added _succinct_ git squash message before merging [ref](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +- [ ] All template sections are filled out. +- [ ] Optional: Additional screenshots for behavior/output changes with before/after. + +#### Related PRs: +<!-- Related PRs from other Repositories --> + +#### Where should the reviewer start? +<!-- call out specific files that should be looked at closely --> + +#### Test plan: +<!-- list steps to verify --> +<!-- were e2e tests added?--> + +- CI Pipeline ID: +<!-- Only Pipeline ID and no direct link here --> + +#### Caveats: +<!-- any limitations or possible things missing from this PR --> + +#### Background +<!-- e.g. what led to this change being made. this is optional extra information to help the reviewer --> + +#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) +- closes GitHub issue: #xxx diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a79d3bddc..0787dcbc6 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,18 +1,13 @@ -#### What does the PR do? -<!-- Describe the change and the motivation behind it. --> +Thanks for submitting a PR to Triton! +Please go the the `Preview` tab above this description box and select the appropriate sub-template: -#### Related Issues / PRs -<!-- Use "Closes #xxx" / "Fixes #xxx" / "Resolves #xxx" for issues. - Link related PRs from other triton-inference-server repositories. --> +* [PR description template for Triton Engineers](?expand=1&template=pull_request_template_internal_contrib.md) +* [PR description template for External Contributors](?expand=1&template=pull_request_template_external_contrib.md) -#### Test plan -<!-- How was this change verified? List steps, tests added, or CI evidence. --> +If you already created the PR, please replace this message with one of +* [External contribution template](https://raw.githubusercontent.com/triton-inference-server/server/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md) +* [Internal contribution template](https://raw.githubusercontent.com/triton-inference-server/server/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md) + +and fill it out. -#### Caveats -<!-- Optional: known limitations or follow-ups. --> -#### Checklist -- [ ] PR title follows `<commit_type>: <Title>` (conventional commit — enforced by the `conventional-pre-commit` hook) -- [ ] I ran `pre-commit install && pre-commit run --all-files` locally and it passes -- [ ] Copyright header is correct on all changed files -- [ ] External contributors: I have read the [Contribution guidelines](../CONTRIBUTING.md) and signed the [Contributor License Agreement](https://github.com/NVIDIA/triton-inference-server/blob/master/Triton-CCLA-v1.pdf) From 8692cb508c49fbe85ff52df0d090921b6d0460c0 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:48:04 -0700 Subject: [PATCH 05/16] ci: adopt org-wide GitHub defaults PR templates are inherited from triton-inference-server/.github instead of local copies; add the caller stub for the org-wide conventional-pr reusable workflow (PR title validation + type labeling). TRI-1100 --- .../pull_request_template_external_contrib.md | 36 ---------------- .../pull_request_template_internal_contrib.md | 36 ---------------- .github/pull_request_template.md | 13 ------ .github/workflows/conventional-pr.yml | 41 +++++++++++++++++++ 4 files changed, 41 insertions(+), 85 deletions(-) delete mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md delete mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/conventional-pr.yml diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md deleted file mode 100644 index 4a9e6b653..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md +++ /dev/null @@ -1,36 +0,0 @@ -#### What does the PR do? -<!-- Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.--> - -#### Checklist -- [ ] I have read the [Contribution guidelines](#../../CONTRIBUTING.md) and signed the [Contributor License -Agreement](https://github.com/NVIDIA/triton-inference-server/blob/master/Triton-CCLA-v1.pdf) -- [ ] PR title reflects the change and is of format `<commit_type>: <Title>` -- [ ] Changes are described in the pull request. -- [ ] Related issues are referenced. -- [ ] Populated [github labels](https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels) field -- [ ] Added [test plan](#test-plan) and verified test passes. -- [ ] Verified that the PR passes existing CI. -- [ ] I ran pre-commit locally (`pre-commit install, pre-commit run --all`) -- [ ] Verified copyright is correct on all changed files. -- [ ] Added _succinct_ git squash message before merging [ref](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). -- [ ] All template sections are filled out. -- [ ] Optional: Additional screenshots for behavior/output changes with before/after. - -#### Related PRs: -<!-- Related PRs from other Repositories --> - -#### Where should the reviewer start? -<!-- call out specific files that should be looked at closely --> - -#### Test plan: -<!-- list steps to verify feature works --> -<!-- were e2e tests added?--> - -#### Caveats: -<!-- any limitations or possible things missing from this PR --> - -#### Background -<!-- e.g. what led to this change being made. this is optional extra information to help the reviewer --> - -#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) -- closes GitHub issue: #xxx diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md deleted file mode 100644 index 42b1bb96d..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md +++ /dev/null @@ -1,36 +0,0 @@ -#### What does the PR do? -<!-- Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.--> - -#### Checklist -- [ ] PR title reflects the change and is of format `<commit_type>: <Title>` -- [ ] Changes are described in the pull request. -- [ ] Related issues are referenced. -- [ ] Populated [github labels](https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels) field -- [ ] Added [test plan](#test-plan) and verified test passes. -- [ ] Verified that the PR passes existing CI. -- [ ] Verified copyright is correct on all changed files. -- [ ] Added _succinct_ git squash message before merging [ref](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). -- [ ] All template sections are filled out. -- [ ] Optional: Additional screenshots for behavior/output changes with before/after. - -#### Related PRs: -<!-- Related PRs from other Repositories --> - -#### Where should the reviewer start? -<!-- call out specific files that should be looked at closely --> - -#### Test plan: -<!-- list steps to verify --> -<!-- were e2e tests added?--> - -- CI Pipeline ID: -<!-- Only Pipeline ID and no direct link here --> - -#### Caveats: -<!-- any limitations or possible things missing from this PR --> - -#### Background -<!-- e.g. what led to this change being made. this is optional extra information to help the reviewer --> - -#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) -- closes GitHub issue: #xxx diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 0787dcbc6..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,13 +0,0 @@ -Thanks for submitting a PR to Triton! -Please go the the `Preview` tab above this description box and select the appropriate sub-template: - -* [PR description template for Triton Engineers](?expand=1&template=pull_request_template_internal_contrib.md) -* [PR description template for External Contributors](?expand=1&template=pull_request_template_external_contrib.md) - -If you already created the PR, please replace this message with one of -* [External contribution template](https://raw.githubusercontent.com/triton-inference-server/server/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template_external_contrib.md) -* [Internal contribution template](https://raw.githubusercontent.com/triton-inference-server/server/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template_internal_contrib.md) - -and fill it out. - - diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml new file mode 100644 index 000000000..d96bb1361 --- /dev/null +++ b/.github/workflows/conventional-pr.yml @@ -0,0 +1,41 @@ +# Copyright 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Thin caller: the logic lives in the org-wide reusable workflow, pinned by +# tag. Workflow changes ship as a new tag in the .github repository plus a +# one-line rev bump here (tags are write-once, never moved). + +name: conventional-pr + +on: + pull_request: + types: [opened, edited, synchronize, reopened] + +jobs: + conventional-pr: + permissions: + pull-requests: write + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.0.0 From db91bb4adc2adbdf1362f9f4fbf8e1bde0dacae5 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:58:03 -0700 Subject: [PATCH 06/16] ci: bump conventional-pr workflow to v1.1.0 Org-wide label color scheme and cherry-pick detection. TRI-1100 --- .github/workflows/conventional-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index d96bb1361..0871567f0 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -38,4 +38,4 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.0.0 + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.1.0 From 0eeee498e329d3d3732e8f289c0f846ce786d34e Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Mon, 20 Jul 2026 15:30:46 -0700 Subject: [PATCH 07/16] ci: bump conventional-pr workflow to v1.2.1 Human-readable type labels with enforced descriptions and colors. TRI-1100 --- .github/workflows/conventional-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 0871567f0..dab9232af 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -38,4 +38,4 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.1.0 + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.2.1 From e22f9d3d8ea3b8fc187d2f753159372887453a29 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Mon, 20 Jul 2026 15:37:11 -0700 Subject: [PATCH 08/16] ci: bump conventional-pr workflow to v1.2.2 TRI-1100 --- .github/workflows/conventional-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index dab9232af..594e1ec12 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -38,4 +38,4 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.2.1 + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.2.2 From ef505c8919d6286da1b9239168d01c9f22a2bbee Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Mon, 20 Jul 2026 15:43:18 -0700 Subject: [PATCH 09/16] ci: bump conventional-pr workflow to v1.3.0 TRI-1100 --- .github/workflows/conventional-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 594e1ec12..503ddca22 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -38,4 +38,4 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.2.2 + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.3.0 From e7baa0bd98faa1cd4a18f0212c0c010007977765 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Mon, 20 Jul 2026 15:57:25 -0700 Subject: [PATCH 10/16] ci: bump conventional-pr workflow to v1.3.1 TRI-1100 --- .github/workflows/conventional-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 503ddca22..1866f8514 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -38,4 +38,4 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.3.0 + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.3.1 From cbde39058a2a0423f27c71f91942cb1f365161ae Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:17:27 -0700 Subject: [PATCH 11/16] ci: bump org .github hooks and workflow to v1.4.0 The add-license hook now fails when the LICENSE copyright year is stale. TRI-1100 --- .github/workflows/conventional-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 1866f8514..922aaa5ef 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -38,4 +38,4 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.3.1 + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.4.0 From df849dc938f5a17d42f7ecb26003409e2f8423e0 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:31:05 -0700 Subject: [PATCH 12/16] ci: bump org .github hooks and workflow to v1.4.1 Workflow files are license-processed again (only templates excluded); refresh the stale copyright year this repo's pre-commit workflow carried. TRI-1100 --- .github/workflows/conventional-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 922aaa5ef..7f6b096d2 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -38,4 +38,4 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.4.0 + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.4.1 From 4144c12ae0cda55d748c617a8445f16f83e6577d Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:58:27 -0700 Subject: [PATCH 13/16] ci: use this repo's Apache SPDX headers in workflows and narrow the add-copyright exclude The conventional-pr stub carried a BSD long-form header - the wrong license assertion in this Apache-2.0 repository - and codeql.yml / python-package.yaml had the same pre-existing issue. Convert all three to the repo's SPDX Apache two-line convention (start years preserved as ranges). Narrow the add-copyright exclude to template paths only so .github/workflows is under header enforcement. TRI-1100 --- .github/workflows/codeql.yml | 27 ++------------------------- .github/workflows/conventional-pr.yml | 27 ++------------------------- .github/workflows/python-package.yaml | 27 ++------------------------- .pre-commit-config.yaml | 2 +- 4 files changed, 7 insertions(+), 76 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 5d7173cf3..1ec7ba9d3 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,28 +1,5 @@ -# Copyright 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 name: "CodeQL" diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 7f6b096d2..1b79af87a 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -1,28 +1,5 @@ -# Copyright 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # Thin caller: the logic lives in the org-wide reusable workflow, pinned by # tag. Workflow changes ship as a new tag in the .github repository plus a diff --git a/.github/workflows/python-package.yaml b/.github/workflows/python-package.yaml index 675f4e866..1b54bb8d0 100644 --- a/.github/workflows/python-package.yaml +++ b/.github/workflows/python-package.yaml @@ -1,28 +1,5 @@ -# Copyright 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # This workflow will install Python dependencies and run unit tests. # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cebd6ed6c..132eed630 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: require_serial: true # GitHub issue/PR templates must start with YAML frontmatter; keep # license headers out of them. - exclude: ^\.github/ + exclude: ^\.github/(ISSUE_TEMPLATE/|PULL_REQUEST_TEMPLATE/|pull_request_template) # More details about these pre-commit hooks here: # https://pre-commit.com/hooks.html - repo: https://github.com/pre-commit/pre-commit-hooks From ad61ed29b92589ea83c9c56c4f0b4e65dbd173cd Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Tue, 21 Jul 2026 17:21:11 -0700 Subject: [PATCH 14/16] ci: bump org .github hooks and workflow to v1.4.2 Grant issues:write to the labeling job (review feedback). TRI-1100 --- .github/workflows/conventional-pr.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 1b79af87a..829232001 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -15,4 +15,5 @@ jobs: conventional-pr: permissions: pull-requests: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.4.1 + issues: write + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.4.2 From 79fbb70d5fef683cce8df7e3f802e3628587c460 Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Wed, 22 Jul 2026 11:31:17 -0700 Subject: [PATCH 15/16] ci: harden CI workflows and configs per fleet-wide review feedback - conventional-pr stub: dual pull_request/pull_request_target triggers so fork PRs from external contributors get labeled too (the reusable workflow never checks out PR code); explicit contents:read; pinned v1.4.3. - pre-commit workflow: robust modified-files runner (null-delimited paths, deletion-only PRs handled, deleted paths filtered, no undocumented -r flag, cache keyed on config hash). - flake8 args quoted correctly (the flow-scalar form split at commas and silently reduced the select list). - hooks pinned to .github v1.4.3. TRI-1100 --- .github/workflows/conventional-pr.yml | 41 +++++++++++++++++++++++++-- .github/workflows/pre-commit.yml | 19 +++++++++---- .pre-commit-config.yaml | 2 +- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index 829232001..d3348b778 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -1,5 +1,28 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 +# Copyright 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Thin caller: the logic lives in the org-wide reusable workflow, pinned by # tag. Workflow changes ship as a new tag in the .github repository plus a @@ -10,10 +33,22 @@ name: conventional-pr on: pull_request: types: [opened, edited, synchronize, reopened] + pull_request_target: + types: [opened, edited, synchronize, reopened] jobs: conventional-pr: + # Same-repo PRs run on the safe pull_request event; fork PRs run on + # pull_request_target so the labeling job gets a writable token (safe + # here: the reusable workflow never checks out PR code - it only reads + # PR metadata via the API and manages labels). + if: >- + (github.event_name == 'pull_request' && + github.event.pull_request.head.repo.full_name == github.repository) || + (github.event_name == 'pull_request_target' && + github.event.pull_request.head.repo.full_name != github.repository) permissions: pull-requests: write issues: write - uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.4.2 + contents: read + uses: triton-inference-server/.github/.github/workflows/conventional-pr.yml@v1.4.3 diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 3df878200..b543793bb 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -9,14 +9,23 @@ on: jobs: pre-commit: runs-on: ubuntu-latest + permissions: + contents: read steps: - uses: actions/checkout@v5.0.0 with: fetch-depth: 2 - - name: Get modified files - id: modified-files - run: echo "modified_files=$(git diff --name-only -r HEAD^1 HEAD | xargs)" >> $GITHUB_OUTPUT - uses: actions/setup-python@v6.0.0 - - uses: pre-commit/action@v3.0.1 + - uses: actions/cache@v4 with: - extra_args: --files ${{ steps.modified-files.outputs.modified_files }} + path: ~/.cache/pre-commit + key: pre-commit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }} + - name: Run pre-commit on the files modified by the PR + # Null-delimited so paths with spaces survive; --no-run-if-empty + # handles deletion-only PRs; deleted paths are filtered out before + # being handed to pre-commit. + run: | + python -m pip install --quiet pre-commit + git diff --name-only -z --diff-filter=d HEAD^1 HEAD \ + | xargs -0 --no-run-if-empty \ + pre-commit run --show-diff-on-failure --color=always --files diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 132eed630..0fc7d1fc1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: require_serial: true # GitHub issue/PR templates must start with YAML frontmatter; keep # license headers out of them. - exclude: ^\.github/(ISSUE_TEMPLATE/|PULL_REQUEST_TEMPLATE/|pull_request_template) + exclude: ^\.github/(ISSUE_TEMPLATE/|PULL_REQUEST_TEMPLATE|pull_request_template) # More details about these pre-commit hooks here: # https://pre-commit.com/hooks.html - repo: https://github.com/pre-commit/pre-commit-hooks From b52d86976dd60d8231e994a247f659233b413a4b Mon Sep 17 00:00:00 2001 From: Misha Chornyi <99709299+mc-nv@users.noreply.github.com> Date: Wed, 22 Jul 2026 11:44:03 -0700 Subject: [PATCH 16/16] ci: keep this repo's Apache SPDX header on the conventional-pr stub The fleet stub refresh reintroduced the BSD long-form header; this repository's convention is the two-line SPDX Apache header and its add-copyright hook enforces it. TRI-1100 --- .github/workflows/conventional-pr.yml | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/.github/workflows/conventional-pr.yml b/.github/workflows/conventional-pr.yml index d3348b778..ef36a43ec 100644 --- a/.github/workflows/conventional-pr.yml +++ b/.github/workflows/conventional-pr.yml @@ -1,28 +1,5 @@ -# Copyright 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of NVIDIA CORPORATION nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # Thin caller: the logic lives in the org-wide reusable workflow, pinned by # tag. Workflow changes ship as a new tag in the .github repository plus a