diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 63784e39..7c678403 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,14 +3,14 @@ "isRoot": true, "tools": { "docfx": { - "version": "2.78.3", + "version": "2.78.4", "commands": [ "docfx" ], "rollForward": false }, "dotnet-reportgenerator-globaltool": { - "version": "5.4.8", + "version": "5.5.1", "commands": [ "reportgenerator" ], diff --git a/.editorconfig b/.editorconfig index 8d9f7541..281847bd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,7 +7,7 @@ ] # File header -file_header_template = \n Copyright (c) 2025, Salesforce, Inc.\n SPDX-License-Identifier: Apache-2\n \n Licensed under the Apache License, Version 2.0 (the "License") \n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n +file_header_template = \n Copyright (c) 2026, Salesforce, Inc.\n SPDX-License-Identifier: Apache-2\n \n Licensed under the Apache License, Version 2.0 (the "License") \n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n #### Naming styles #### diff --git a/.github/.secrets.default b/.github/.secrets.default new file mode 100644 index 00000000..a667d75d --- /dev/null +++ b/.github/.secrets.default @@ -0,0 +1,6 @@ +# This file is used to test github actions locally using act (https://github.com/nektos/act?tab=readme-ov-file) +# Copy/Paste and rename to .secrets and fill in the values +# Then use it via act cli or VSCode extension https://sanjulaganepola.github.io/github-local-actions-docs/ + +NUGET_PUBLISH_API_KEY= +PYPI_PUBLISH_USER_PASS= \ No newline at end of file diff --git a/.github/.vars.default b/.github/.vars.default new file mode 100644 index 00000000..c08725df --- /dev/null +++ b/.github/.vars.default @@ -0,0 +1,38 @@ +# This file is used to test github actions locally using act (https://github.com/nektos/act?tab=readme-ov-file) + +# Github repository scoped variables. +ACT="true" # Used to let actions know they're being run locally. +BUILD_CONFIGURATIONS="[\"Release\"]" +BASE_OS="ubuntu-latest" +BUILD_OS="[\"ubuntu-latest\"]" +BUILD_PROJECT="./src/Tableau.Migration/Tableau.Migration.csproj" +NUGET_PACKAGE_FOLDER="Tableau.Migration" +PUBLISH_OS="ubuntu-latest" +DOCS_OS="ubuntu-latest" +PYTHON_NETPACKAGE_FRAMEWORK="net8.0" +PYTHON_PUBLISH_DOCS_VERSION="3.11" +PUBLISH_CONFIGURATION="Release" +PUBLISH_PACKAGE_OS="ubuntu-latest" + +# These are github environment scoped variables. +# Development +NUGET_PACKAGE_REPOSITORY="https://artifactory.dev.tableautools.com/artifactory/api/nuget/pqt-tuk/Tableau.Migration" +PYPI_PUBLISH_USER="svc_cmt" +NUGET_PUBLISH_USER="svc_cmt" +PYPI_PACKAGE_REPOSITORY="https://artifactory.dev.tableautools.com/artifactory/api/pypi/tab-pypi-local-tuk/" + +# Staging +#NUGET_PACKAGE_REPOSITORY="https://artifactory.prod.tableautools.com/artifactory/api/nuget/power-tools-nuget-local/Tableau.Migration" +#PYPI_PUBLISH_USER="svc_cmt" +NUGET_PUBLISH_USER="svc_cmt" +#PYPI_PACKAGE_REPOSITORY="https://artifactory.prod.tableautools.com/artifactory/api/pypi/tabpypi" + +# Public Test +# NUGET_PACKAGE_REPOSITORY="https://apiint.nugettest.org/v3/index.json" +# PYPI_PACKAGE_REPOSITORY="https://test.pypi.org/legacy/" +# PYPI_PUBLISH_USER="__token__" + +# Public Prod +# NUGET_PACKAGE_REPOSITORY="https://api.nuget.org/v3/index.json" +# PYPI_PACKAGE_REPOSITORY="https://upload.pypi.org/legacy/" +# PYPI_PUBLISH_USER="__token__" \ No newline at end of file diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index d819110a..49f8a0fa 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -19,7 +19,7 @@ jobs: name: Build Docs (.NET ${{ inputs.dotnet-sdk-version }}) # Updated name steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup .NET environment - name: Setup .NET ${{ inputs.dotnet-sdk-version }} @@ -29,7 +29,7 @@ jobs: # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ inputs.python-version }} @@ -41,7 +41,7 @@ jobs: # Upload Docs Artifact - name: Upload Docs Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: docs path: ./docs diff --git a/.github/workflows/build-dotnet.yml b/.github/workflows/build-dotnet.yml index cee9adda..a623f5f2 100644 --- a/.github/workflows/build-dotnet.yml +++ b/.github/workflows/build-dotnet.yml @@ -35,7 +35,7 @@ jobs: ## SETUP # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup .NET environment - name: Setup .NET ${{ inputs.dotnet-sdk-version }} @@ -45,7 +45,7 @@ jobs: # Cache NuGet packages based on the lock file and .NET version - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ inputs.dotnet-sdk-version }}-${{ hashFiles('**/packages.lock.json') }} @@ -109,17 +109,16 @@ jobs: # Upload product artifacts - name: Upload product artifacts for python library if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: product-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: "./src/Python/src/tableau_migration/bin/**" retention-days: 15 # This is not required to stick around very long as it's not pushed to production. # Upload test artifacts - # TODO: [W-18497981: CI/CD Improvements: Python tests should test final package | Work](https://gus.lightning.force.com/lightning/r/ADM_Work__c/a07EE00002EIUwKYAX/view) - name: Upload Tests Artifacts if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: tests-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: "./dist/tests/**" @@ -128,7 +127,7 @@ jobs: # Upload NuGet package artifact - name: Upload NuGet Artifact if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: nuget-package-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: "./src/${{ vars.NUGET_PACKAGE_FOLDER }}/bin/${{ matrix.config }}/*.nupkg" @@ -137,7 +136,7 @@ jobs: # Upload build output for tests - name: Upload Build Output if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: build-output-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: | diff --git a/.github/workflows/build-python-package.yml b/.github/workflows/build-python-package.yml index 9e8be609..1f6500db 100644 --- a/.github/workflows/build-python-package.yml +++ b/.github/workflows/build-python-package.yml @@ -30,11 +30,11 @@ jobs: name: Build Python Package with ${{ inputs.build-config }} configuration steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ vars.PYTHON_TEST_VERSIONS }} cache: "pip" # caching pip dependencies @@ -44,11 +44,11 @@ jobs: shell: pwsh run: | python -m pip install --upgrade pip - python -m pip install hatch + python -m pip install hatch click==8.2 # Cache Hatch environments - name: Cache Hatch environments - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Default Hatch env location relative to working-directory. path: ./.hatch @@ -58,7 +58,7 @@ jobs: ${{ runner.os }}-py${{ vars.PYTHON_TEST_VERSIONS }}-hatch- # Download the product artifact - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: product-${{ inputs.build-config }}-net${{ inputs.dotnet-build-version }} path: ./src/Python/src/tableau_migration/bin/ @@ -82,7 +82,7 @@ jobs: # Upload PyPI artifact - name: Upload Pypi Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: pypi-package-bundle path: ${{ env.WORKING_DIRECTORY }}/tableau_migration-pypi.zip @@ -90,7 +90,7 @@ jobs: # Upload PyPI artifact - name: Upload Pypi Artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: pypi-package path: ${{ env.WORKING_DIRECTORY }}/dist/* diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 10db3618..c71bfb62 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -24,6 +24,10 @@ on: description: "The github environment that has the variables and secrets" required: true type: string + dotnet-build-version: + description: "The .NET version used for building" + required: true + type: string jobs: create-release: @@ -34,7 +38,7 @@ jobs: # Create Release - name: Create Release id: create-release - uses: actions/github-script@v7 + uses: actions/github-script@v8 env: RELEASE_VERSION: ${{ inputs.release-version }} with: @@ -67,31 +71,31 @@ jobs: # Download Docs - name: Download Docs - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: docs # Download NuGet Package - name: Download NuGet Package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: - name: nuget-package + name: nuget-package-Release-net${{ inputs.dotnet-build-version }} # Download PyPI Package - name: Download PyPI Package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: pypi-package-bundle # Generate Bundle - name: Generate Bundle run: | - zip -r bundle.zip ./Tableau.Migration.${{ inputs.release-version }}.nupkg docs.zip tableau_migration-pypi.zip + zip -r bundle.zip Tableau.Migration.${{ inputs.release-version }}.nupkg docs.zip tableau_migration-pypi.zip # Attach Release Artifacts - name: Attach Artifacts to Github Release id: upload-docs - uses: actions/github-script@v7 + uses: actions/github-script@v8 env: RELEASE_VERSION: ${{ inputs.release-version }} RELEASE_ID: ${{ steps.create-release.outputs.result }} diff --git a/.github/workflows/deploy-all.yml b/.github/workflows/deploy-all.yml index dcdb1c18..4e458f0d 100644 --- a/.github/workflows/deploy-all.yml +++ b/.github/workflows/deploy-all.yml @@ -91,6 +91,7 @@ jobs: runs-on-config: ${{ vars.PUBLISH_OS }} release-version: ${{ inputs.release-version }} publish-environment: ${{ inputs.publish-environment }} + dotnet-build-version: ${{ inputs.dotnet-build-version }} deploy-docs: name: Deploy Docs diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index b8e1a53f..9dfed6f5 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -32,7 +32,7 @@ jobs: steps: # Download Docs - name: Download Docs - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: docs path: ./docs @@ -43,7 +43,7 @@ jobs: # Upload to GitHub Pages - name: Upload Github Pages - uses: actions/upload-pages-artifact@v3.0.1 + uses: actions/upload-pages-artifact@v4.0.0 with: path: "./docs" diff --git a/.github/workflows/deploy-dotnet.yml b/.github/workflows/deploy-dotnet.yml index 6758ff12..7fc7edf4 100644 --- a/.github/workflows/deploy-dotnet.yml +++ b/.github/workflows/deploy-dotnet.yml @@ -53,7 +53,7 @@ jobs: } # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup .NET environment - name: Setup .NET @@ -65,7 +65,7 @@ jobs: uses: ./.github/actions/setup-dotnet # Download the NuGet package artifact - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: nuget-package-Release-net${{ inputs.dotnet-build-version }} @@ -80,21 +80,15 @@ jobs: if ("${{ vars.NUGET_PUBLISH_USER }}" -ne "") { Write-Host "Using username and API key authentication for environment: $publishEnv" - # Use unique source name based on GitHub run ID - $uniqueSourceName = "$publishEnv-${{ github.run_id }}" - - # Add the NuGet source configuration + # Add the NuGet source configuration (ignore if already exists) dotnet nuget add source ${{ env.NUGET_PACKAGE_REPOSITORY }} ` - --name $uniqueSourceName ` + --name $publishEnv ` --username ${{ vars.NUGET_PUBLISH_USER }} ` --password ${{ secrets.NUGET_PUBLISH_API_KEY }} ` - --store-password-in-clear-text - - # Push the package - dotnet nuget push Tableau.Migration.*.nupkg -s $uniqueSourceName + --store-password-in-clear-text 2>$null - # Clean up temporary source - dotnet nuget remove source $uniqueSourceName + # Push the package using the configured source + dotnet nuget push Tableau.Migration.*.nupkg -s $publishEnv } else { Write-Host "Using API key only authentication for environment: $publishEnv" diff --git a/.github/workflows/deploy-python.yml b/.github/workflows/deploy-python.yml index 75700502..73473b65 100644 --- a/.github/workflows/deploy-python.yml +++ b/.github/workflows/deploy-python.yml @@ -55,11 +55,11 @@ jobs: } # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 # Only setup python if the runs-on-config is not self-hosted. # Self-hosted runners already have python installed. # This workflow needs to run in github on self-hosted runners to have access to artifactory. @@ -70,22 +70,22 @@ jobs: cache: "pip" # caching pip dependencies # Install dependencies - # TODO: [W-18497996: CI/CD Improvements: deploy-python should run via ...pdated more easily | Work](https://gus.lightning.force.com/lightning/r/ADM_Work__c/a07EE00002EIZBPYA5/view) - name: Install dependencies shell: pwsh run: | - python -m pip install --upgrade pip - python -m pip install hatch twine>=6.1.0 + python -m pip install --upgrade pip hatch # Download python package artifact - name: Download Python Package Artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: pypi-package path: ./dist # Publish Python package - name: Deploy Python Package + shell: pwsh + working-directory: ./src/Python env: # Twine uses env variables to set the username, password, and repository url. TWINE_USERNAME: ${{ env.PYPI_PUBLISH_USER }} @@ -94,4 +94,4 @@ jobs: TWINE_REPOSITORY_URL: ${{ env.PYPI_PACKAGE_REPOSITORY }} run: | - python -m twine upload dist/* + hatch run deploy:twine upload ../../dist/* diff --git a/.github/workflows/lint-python.yml b/.github/workflows/lint-python.yml index b4508328..d30b5a25 100644 --- a/.github/workflows/lint-python.yml +++ b/.github/workflows/lint-python.yml @@ -27,18 +27,18 @@ jobs: name: Lint Python in ${{ inputs.working-directory }} on ${{ matrix.os }} steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ vars.PYTHON_TEST_VERSIONS }} cache: "pip" # caching pip dependencies # Cache Hatch environments - name: Cache Hatch environments - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Default Hatch env location relative to working-directory. path: ${{ inputs.working-directory }}/.hatch @@ -51,7 +51,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install hatch + python -m pip install hatch click==8.2 # Lint with ruff - name: Lint with ruff diff --git a/.github/workflows/sdk-workflow.yml b/.github/workflows/sdk-workflow.yml index 82695dfc..1e11daa0 100644 --- a/.github/workflows/sdk-workflow.yml +++ b/.github/workflows/sdk-workflow.yml @@ -51,7 +51,7 @@ on: env: DOTNET_NOLOGO: "true" # Centralized .NET version for building and deploying - DOTNET_BUILD_VERSION: '9.0.x' + DOTNET_BUILD_VERSION: '10.0.x' jobs: # Define version job @@ -64,7 +64,7 @@ jobs: dotnet-build-version: ${{ steps.set-versions.outputs.dotnet-build-version }} if: github.event.pull_request.draft == false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Get Beta Version id: get-beta-version shell: bash diff --git a/.github/workflows/test-dotnet.yml b/.github/workflows/test-dotnet.yml index e9a8c4a1..c6ba8df9 100644 --- a/.github/workflows/test-dotnet.yml +++ b/.github/workflows/test-dotnet.yml @@ -28,7 +28,7 @@ jobs: name: Test .NET (${{ matrix.os }}, ${{ matrix.config }}, .NET ${{ matrix.dotnet-version }}) steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Clean all existing .NET installations - name: Clean existing .NET installations @@ -40,15 +40,15 @@ jobs: with: dotnet-version: ${{ matrix.dotnet-version }} - # Setup .NET 9 SDK (Needed to run dotnet test in any matrix) - - name: Setup .NET 9 SDK (for build compatibility) - uses: actions/setup-dotnet@v4 + # Setup .NET global.json SDK (Needed to run dotnet test in any matrix) + - name: Setup .NET ${{ inputs.dotnet-build-version }} SDK (for build compatibility) + uses: actions/setup-dotnet@v5 with: - dotnet-version: '9.0.x' + dotnet-version: ${{ inputs.dotnet-build-version }} # Use the input for .NET version # Cache NuGet packages based on the lock file and .NET version - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ matrix.dotnet-version }}-${{ hashFiles('**/packages.lock.json') }} @@ -68,7 +68,7 @@ jobs: # Download built binaries - name: Download Build Output - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: build-output-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} path: ./ @@ -101,7 +101,7 @@ jobs: # Upload test results - name: Upload Test Results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: dotnet-results-${{ matrix.os }}-${{ matrix.config }}-net${{ matrix.dotnet-version }} path: TestResults-${{ matrix.os }}-${{ matrix.config }}-net${{ matrix.dotnet-version }} diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index b519674f..011c83ce 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -34,7 +34,7 @@ jobs: name: Test Python ${{ inputs.test-name }} (${{ matrix.os }}, ${{ matrix.config }}, .NET ${{ matrix.dotnet-version }}) steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Clean all existing .NET installations - name: Clean existing .NET installations @@ -46,6 +46,18 @@ jobs: with: dotnet-version: ${{ matrix.dotnet-version }} # Pass the .NET version from the matrix + # Setup global.json .NET environment + - name: Setup global.json .NET ${{ inputs.dotnet-build-version }} + uses: ./.github/actions/setup-dotnet + with: + dotnet-version: ${{ inputs.dotnet-build-version }} # Use the input for .NET version + + # Setup .NET global.json SDK (Needed to run dotnet test in any matrix) + - name: Setup .NET ${{ inputs.dotnet-build-version }} SDK (for build compatibility) + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ inputs.dotnet-build-version }} # Use the input for .NET version + # Restore Tools (i.e. report generator) - skip for .NET 8 # Code coverage report generation is only supported on the latest .NET version - name: Restore .NET Tools @@ -54,14 +66,14 @@ jobs: # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ vars.PYTHON_TEST_VERSIONS }} cache: "pip" # caching pip dependencies # Cache Hatch environments - name: Cache Hatch environments - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Default Hatch env location relative to working-directory. path: ./.hatch @@ -74,17 +86,22 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install hatch + python -m pip install hatch click==8.2 - # Download the published test artifacts - # This step is only needed when builing the main python project, but it left in this - # reuseable workflow for simplicity. - # TODO: [W-18497981: CI/CD Improvements: Python tests should test final package | Work](https://gus.lightning.force.com/lightning/r/ADM_Work__c/a07EE00002EIUwKYAX/view) - - uses: actions/download-artifact@v4 + # Download the product binaries + - name: Download product binaries + uses: actions/download-artifact@v7 with: - name: tests-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} + name: product-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} path: ./src/Python/src/tableau_migration/bin/ + # Download the test binaries + - name: Download test binaries + uses: actions/download-artifact@v7 + with: + name: tests-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} + path: ./dist/tests/ + # Test with pytest - name: Test with pytest run: python -m hatch --data-dir=.hatch --cache-dir=.hatch_cache run test:testcov @@ -103,7 +120,7 @@ jobs: # Upload test results - name: Upload Test Results if: ${{ !(matrix.dotnet-version == '8.0.x') }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: ${{ inputs.test-name }}-results-${{ matrix.os }}-${{ matrix.config }}-net${{ matrix.dotnet-version }} path: ${{ inputs.working-directory }}/TestResults diff --git a/Directory.Build.props b/Directory.Build.props index a808b66a..26b8702f 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,12 +4,12 @@ enable true true - 5.3.1 + 6.0.0 Salesforce, Inc. Salesforce, Inc. - Copyright (c) 2025, Salesforce, Inc. and its licensors + Copyright (c) 2026, Salesforce, Inc. and its licensors Apache-2.0 - 11.3.2 + 11.3.9