From 9b0997b6206c1a6d05ea094dc98b5cb8561909b6 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 11 Sep 2025 16:07:12 -0500 Subject: [PATCH 01/74] Add check_analyzers as a trial balloon --- workflows/check_analyzers.yml | 75 +++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 workflows/check_analyzers.yml diff --git a/workflows/check_analyzers.yml b/workflows/check_analyzers.yml new file mode 100644 index 0000000..dcf4419 --- /dev/null +++ b/workflows/check_analyzers.yml @@ -0,0 +1,75 @@ +name: Check analyzers + +on: + workflow_call: + inputs: + package-name: + description: 'The name of the package to check.' + default: '' + required: true + type: string + package-base-path: + description: 'The parent directory of the package to check. Defaults to packages.' + default: 'packages' + required: false + type: string + install-drivers: + description: 'Whether to install drivers extras' + default: false + required: false + type: boolean + +jobs: + check_analyzers: + name: Check analyzers for ${{ inputs.package-name }} + runs-on: ubuntu-latest + defaults: + run: + # Set the working-directory for all steps in this job. + working-directory: ${{ inputs.package-base-path != '' && format('./{0}/{1}', inputs.package-base-path, inputs.package-name) || format('.', '') }} + steps: + - name: Check out repo + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + submodules: true + - name: Set up Python + uses: ni/python-actions/setup-python@f0276f7f58868ec0d0d1a86377287c9e6fe0c6e7 # v0.5.0 + id: setup-python + - name: Set up Poetry + uses: ni/python-actions/setup-poetry@f0276f7f58868ec0d0d1a86377287c9e6fe0c6e7 # v0.5.0 + - name: Check for lock changes + run: poetry check --lock + - name: Cache virtualenv + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 + with: + path: ${{ inputs.package-base-path }}/${{ inputs.package-name }}/.venv + key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/{1}/poetry.lock', inputs.package-base-path, inputs.package-name)) }} + - name: Install ${{ inputs.package-name }} + run: | + if [ "${{ inputs.install-drivers }}" = "true" ]; then + poetry install -v --extras drivers + else + poetry install -v + fi + - name: Lint + run: poetry run ni-python-styleguide lint + - name: Mypy static analysis (Linux) + run: poetry run mypy + - name: Mypy static analysis (Windows) + run: poetry run mypy --platform win32 + - name: Bandit security checks + run: poetry run bandit -c pyproject.toml -r src/ + - name: Add virtualenv to the path for pyright-action + run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH + - name: Pyright static analysis (Linux) + uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 + with: + python-platform: Linux + version: PATH + working-directory: ${{ inputs.package-base-path != '' && format('./{0}/{1}', inputs.package-base-path, inputs.package-name) || format('.', '') }} + - name: Pyright static analysis (Windows) + uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 + with: + python-platform: Windows + version: PATH + working-directory: ${{ inputs.package-base-path != '' && format('./{0}/{1}', inputs.package-base-path, inputs.package-name) || format('.', '') }} From 156d9b4cfc56a5ac4751885e32bdbbfeae78e4a5 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Fri, 12 Sep 2025 16:45:54 -0500 Subject: [PATCH 02/74] Fix project-directory inputs, change name of .yml file. Update install-drivers to install-extras --- ...heck_analyzers.yml => analyze-package.yml} | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) rename workflows/{check_analyzers.yml => analyze-package.yml} (51%) diff --git a/workflows/check_analyzers.yml b/workflows/analyze-package.yml similarity index 51% rename from workflows/check_analyzers.yml rename to workflows/analyze-package.yml index dcf4419..fb3294e 100644 --- a/workflows/check_analyzers.yml +++ b/workflows/analyze-package.yml @@ -1,23 +1,21 @@ name: Check analyzers +description: > + This workflow checks the code quality of a Python package using various + analyzers like linters and type checkers, including ni-python-styleguide, + mypy, bandit, and pyright. It is designed to be reusable across different + projects and can be easily integrated into existing CI/CD pipelines. on: workflow_call: inputs: - package-name: - description: 'The name of the package to check.' + project-directory: + description: Path to the directory containing pyproject.toml. + default: ${{ github.workspace }} + install-extras: + description: 'List of Poetry extras to install (comma separated)' default: '' - required: true - type: string - package-base-path: - description: 'The parent directory of the package to check. Defaults to packages.' - default: 'packages' required: false type: string - install-drivers: - description: 'Whether to install drivers extras' - default: false - required: false - type: boolean jobs: check_analyzers: @@ -26,39 +24,47 @@ jobs: defaults: run: # Set the working-directory for all steps in this job. - working-directory: ${{ inputs.package-base-path != '' && format('./{0}/{1}', inputs.package-base-path, inputs.package-name) || format('.', '') }} + working-directory: ${{ inputs.project-directory }} steps: + - name: Get package name and version + id: get_package_info + run: | + result=$(poetry version -C "${{ inputs.project-directory }}") + name=$(echo "$result" | awk '{print $1}') + version=$(echo "$result" | awk '{print $2}') + echo "name=$name" >> $GITHUB_OUTPUT + echo "version=$version" >> $GITHUB_OUTPUT - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: submodules: true - name: Set up Python - uses: ni/python-actions/setup-python@f0276f7f58868ec0d0d1a86377287c9e6fe0c6e7 # v0.5.0 + uses: ./setup-python id: setup-python - name: Set up Poetry - uses: ni/python-actions/setup-poetry@f0276f7f58868ec0d0d1a86377287c9e6fe0c6e7 # v0.5.0 + uses: ./setup-poetry - name: Check for lock changes run: poetry check --lock - name: Cache virtualenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: - path: ${{ inputs.package-base-path }}/${{ inputs.package-name }}/.venv - key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/{1}/poetry.lock', inputs.package-base-path, inputs.package-name)) }} - - name: Install ${{ inputs.package-name }} + path: ${{ inputs.project-directory }}/.venv + key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} + - name: Install ${{ steps.get_package_info.outputs.name }} run: | - if [ "${{ inputs.install-drivers }}" = "true" ]; then - poetry install -v --extras drivers + if [ "${{ inputs.install-extras }}" != "" ]; then + poetry install -v --extras "${{ inputs.install-extras }}" else poetry install -v fi - name: Lint run: poetry run ni-python-styleguide lint - name: Mypy static analysis (Linux) - run: poetry run mypy + run: poetry run mypy - name: Mypy static analysis (Windows) - run: poetry run mypy --platform win32 + run: poetry run mypy --platform win32 - name: Bandit security checks - run: poetry run bandit -c pyproject.toml -r src/ + run: poetry run bandit -c pyproject.toml -r src/ - name: Add virtualenv to the path for pyright-action run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH - name: Pyright static analysis (Linux) @@ -66,10 +72,10 @@ jobs: with: python-platform: Linux version: PATH - working-directory: ${{ inputs.package-base-path != '' && format('./{0}/{1}', inputs.package-base-path, inputs.package-name) || format('.', '') }} + working-directory: ${{ inputs.project-directory }} - name: Pyright static analysis (Windows) uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 with: python-platform: Windows version: PATH - working-directory: ${{ inputs.package-base-path != '' && format('./{0}/{1}', inputs.package-base-path, inputs.package-name) || format('.', '') }} + working-directory: ${{ inputs.project-directory }} From 2c82d441f5a0b06c0e807056718553e7ad6e41eb Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 16 Sep 2025 16:42:43 -0500 Subject: [PATCH 03/74] Rename to analyze-project.yml and 'extras' --- .../{analyze-package.yml => analyze-project.yml} | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) rename workflows/{analyze-package.yml => analyze-project.yml} (85%) diff --git a/workflows/analyze-package.yml b/workflows/analyze-project.yml similarity index 85% rename from workflows/analyze-package.yml rename to workflows/analyze-project.yml index fb3294e..c75d3d4 100644 --- a/workflows/analyze-package.yml +++ b/workflows/analyze-project.yml @@ -1,6 +1,6 @@ name: Check analyzers description: > - This workflow checks the code quality of a Python package using various + This workflow checks the code quality of a Python project using various analyzers like linters and type checkers, including ni-python-styleguide, mypy, bandit, and pyright. It is designed to be reusable across different projects and can be easily integrated into existing CI/CD pipelines. @@ -11,8 +11,9 @@ on: project-directory: description: Path to the directory containing pyproject.toml. default: ${{ github.workspace }} - install-extras: - description: 'List of Poetry extras to install (comma separated)' + extras: + # E.g. "docs drivers" + description: 'List of Poetry extras to install (separated by spaces)' default: '' required: false type: string @@ -53,7 +54,11 @@ jobs: - name: Install ${{ steps.get_package_info.outputs.name }} run: | if [ "${{ inputs.install-extras }}" != "" ]; then - poetry install -v --extras "${{ inputs.install-extras }}" + EXTRAS_ARGS="" + for extra in ${{ inputs.extras }}; do + EXTRAS_ARGS="$EXTRAS_ARGS -E $extra" + done + poetry install -v $EXTRAS_ARGS else poetry install -v fi @@ -63,8 +68,9 @@ jobs: run: poetry run mypy - name: Mypy static analysis (Windows) run: poetry run mypy --platform win32 + # Assumes there are 'targets' in pyproject.toml for Bandit - name: Bandit security checks - run: poetry run bandit -c pyproject.toml -r src/ + run: poetry run bandit -c pyproject.toml -r - name: Add virtualenv to the path for pyright-action run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH - name: Pyright static analysis (Linux) From 04699523925058de40af06be28e425d763f11183 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 16 Sep 2025 16:56:16 -0500 Subject: [PATCH 04/74] Remove bandit checks. Will be covered by ni-python-styleguide soon --- workflows/analyze-project.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/workflows/analyze-project.yml b/workflows/analyze-project.yml index c75d3d4..0f328fa 100644 --- a/workflows/analyze-project.yml +++ b/workflows/analyze-project.yml @@ -68,9 +68,6 @@ jobs: run: poetry run mypy - name: Mypy static analysis (Windows) run: poetry run mypy --platform win32 - # Assumes there are 'targets' in pyproject.toml for Bandit - - name: Bandit security checks - run: poetry run bandit -c pyproject.toml -r - name: Add virtualenv to the path for pyright-action run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH - name: Pyright static analysis (Linux) From 5b8eb0487b6f687fd4daec96b7a8d18d905fdf5f Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 10:53:17 -0500 Subject: [PATCH 05/74] Switch to a composite action --- analyze-project/action.yml | 65 +++++++++++++++++++++++++++ workflows/analyze-project.yml | 84 ----------------------------------- 2 files changed, 65 insertions(+), 84 deletions(-) create mode 100644 analyze-project/action.yml delete mode 100644 workflows/analyze-project.yml diff --git a/analyze-project/action.yml b/analyze-project/action.yml new file mode 100644 index 0000000..9ee72f4 --- /dev/null +++ b/analyze-project/action.yml @@ -0,0 +1,65 @@ +name: Analyze Python Project +description: > + This workflow checks the code quality of a Python project using various + analyzers like linters and type checkers, including ni-python-styleguide, + mypy, bandit, and pyright. It is designed to be reusable across different + projects and can be easily integrated into existing CI/CD pipelines. + +inputs: + project-directory: + description: Path to the directory containing pyproject.toml. + default: ${{ github.workspace }} + extras: + # E.g. "docs drivers" + description: 'List of Poetry extras to install (separated by spaces)' + default: '' + required: false + type: string + +runs: + using: composite + steps: + - name: Get package name and version + id: get_package_info + run: | + result=$(poetry version -C "${{ inputs.project-directory }}") + name=$(echo "$result" | awk '{print $1}') + version=$(echo "$result" | awk '{print $2}') + echo "name=$name" >> $GITHUB_OUTPUT + echo "version=$version" >> $GITHUB_OUTPUT + working-directory: ${{ inputs.project-directory }} + - name: Check for lock changes + run: poetry check --lock + working-directory: ${{ inputs.project-directory }} + - name: Cache virtualenv + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 + with: + path: ${{ inputs.project-directory }}/.venv + key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} + working-directory: ${{ inputs.project-directory }} + - name: Install ${{ steps.get_package_info.outputs.name }} + run: | + if [ "${{ inputs.install-extras }}" != "" ]; then + EXTRAS_ARGS="" + for extra in ${{ inputs.extras }}; do + EXTRAS_ARGS="$EXTRAS_ARGS -E $extra" + done + poetry install -v $EXTRAS_ARGS + else + poetry install -v + fi + working-directory: ${{ inputs.project-directory }} + - name: Lint + run: poetry run ni-python-styleguide lint + working-directory: ${{ inputs.project-directory }} + - name: Mypy static analysis + run: poetry run mypy + working-directory: ${{ inputs.project-directory }} + - name: Add virtualenv to the path for pyright-action + run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH + working-directory: ${{ inputs.project-directory }} + - name: Pyright static analysis + uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 + with: + version: PATH + working-directory: ${{ inputs.project-directory }} \ No newline at end of file diff --git a/workflows/analyze-project.yml b/workflows/analyze-project.yml deleted file mode 100644 index 0f328fa..0000000 --- a/workflows/analyze-project.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: Check analyzers -description: > - This workflow checks the code quality of a Python project using various - analyzers like linters and type checkers, including ni-python-styleguide, - mypy, bandit, and pyright. It is designed to be reusable across different - projects and can be easily integrated into existing CI/CD pipelines. - -on: - workflow_call: - inputs: - project-directory: - description: Path to the directory containing pyproject.toml. - default: ${{ github.workspace }} - extras: - # E.g. "docs drivers" - description: 'List of Poetry extras to install (separated by spaces)' - default: '' - required: false - type: string - -jobs: - check_analyzers: - name: Check analyzers for ${{ inputs.package-name }} - runs-on: ubuntu-latest - defaults: - run: - # Set the working-directory for all steps in this job. - working-directory: ${{ inputs.project-directory }} - steps: - - name: Get package name and version - id: get_package_info - run: | - result=$(poetry version -C "${{ inputs.project-directory }}") - name=$(echo "$result" | awk '{print $1}') - version=$(echo "$result" | awk '{print $2}') - echo "name=$name" >> $GITHUB_OUTPUT - echo "version=$version" >> $GITHUB_OUTPUT - - name: Check out repo - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - with: - submodules: true - - name: Set up Python - uses: ./setup-python - id: setup-python - - name: Set up Poetry - uses: ./setup-poetry - - name: Check for lock changes - run: poetry check --lock - - name: Cache virtualenv - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 - with: - path: ${{ inputs.project-directory }}/.venv - key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} - - name: Install ${{ steps.get_package_info.outputs.name }} - run: | - if [ "${{ inputs.install-extras }}" != "" ]; then - EXTRAS_ARGS="" - for extra in ${{ inputs.extras }}; do - EXTRAS_ARGS="$EXTRAS_ARGS -E $extra" - done - poetry install -v $EXTRAS_ARGS - else - poetry install -v - fi - - name: Lint - run: poetry run ni-python-styleguide lint - - name: Mypy static analysis (Linux) - run: poetry run mypy - - name: Mypy static analysis (Windows) - run: poetry run mypy --platform win32 - - name: Add virtualenv to the path for pyright-action - run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH - - name: Pyright static analysis (Linux) - uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 - with: - python-platform: Linux - version: PATH - working-directory: ${{ inputs.project-directory }} - - name: Pyright static analysis (Windows) - uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 - with: - python-platform: Windows - version: PATH - working-directory: ${{ inputs.project-directory }} From 4063db796a3451d0a57e4751304b25a422659326 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:12:25 -0500 Subject: [PATCH 06/74] Add test for analyze-project --- .github/workflows/test_actions.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index d34394e..2cca996 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -212,6 +212,34 @@ jobs: project-directory: test-project expected-version: 1.0.2.dev1 + test_analyze_project: + name: Test analyze-project + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] + steps: + - name: Check out repo + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - name: Set up Python + uses: ./setup-python + with: + python-version: ${{ matrix.python-version }} + - name: Set up Poetry + uses: ./setup-poetry + - name: Check that the project was created + run: | + if [ ! -f test-project/pyproject.toml ]; then + echo "::error title=Test Failure::The project file does not exist." + exit 1 + fi + shell: bash + - name: Analyze Python Project + uses: ./analyze-project + with: + project-directory: test-project + # This job is intended to combine the test results so we don't have to list # each matrix combination in the required status check settings. There are a # lot of corner cases that make this harder than it should be; see See From 7e94081904178d16046553c5ab833e6f26f4fad3 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:14:16 -0500 Subject: [PATCH 07/74] Create project to analyze --- .github/workflows/test_actions.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 2cca996..dc21a9d 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -228,6 +228,8 @@ jobs: python-version: ${{ matrix.python-version }} - name: Set up Poetry uses: ./setup-poetry + - name: Create project + run: poetry new test-project - name: Check that the project was created run: | if [ ! -f test-project/pyproject.toml ]; then From 02918c9ef824bd54bb515ab02841366d46fae70e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:19:58 -0500 Subject: [PATCH 08/74] Add shell specification for actions --- analyze-project/action.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 9ee72f4..ff196f3 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -28,15 +28,16 @@ runs: echo "name=$name" >> $GITHUB_OUTPUT echo "version=$version" >> $GITHUB_OUTPUT working-directory: ${{ inputs.project-directory }} + shell: bash - name: Check for lock changes run: poetry check --lock working-directory: ${{ inputs.project-directory }} + shell: bash - name: Cache virtualenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ inputs.project-directory }}/.venv key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} - working-directory: ${{ inputs.project-directory }} - name: Install ${{ steps.get_package_info.outputs.name }} run: | if [ "${{ inputs.install-extras }}" != "" ]; then @@ -49,15 +50,19 @@ runs: poetry install -v fi working-directory: ${{ inputs.project-directory }} + shell: bash - name: Lint run: poetry run ni-python-styleguide lint working-directory: ${{ inputs.project-directory }} + shell: bash - name: Mypy static analysis run: poetry run mypy working-directory: ${{ inputs.project-directory }} + shell: bash - name: Add virtualenv to the path for pyright-action run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH working-directory: ${{ inputs.project-directory }} + shell: bash - name: Pyright static analysis uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 with: From dffb6d2dd483ee33ecd776a2c7d834794f5776af Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:24:08 -0500 Subject: [PATCH 09/74] Attempt to fix the project directory for analyze test --- .github/workflows/test_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index dc21a9d..a560128 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -240,7 +240,7 @@ jobs: - name: Analyze Python Project uses: ./analyze-project with: - project-directory: test-project + project-directory: ${{ github.workspace }}/test-project # This job is intended to combine the test results so we don't have to list # each matrix combination in the required status check settings. There are a From 0818b7ec383cd70c563817d8710e6bfbf7a1918b Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:33:18 -0500 Subject: [PATCH 10/74] Attempt to fix the project directory for analyze test --- analyze-project/action.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index ff196f3..7ae9302 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -27,11 +27,9 @@ runs: version=$(echo "$result" | awk '{print $2}') echo "name=$name" >> $GITHUB_OUTPUT echo "version=$version" >> $GITHUB_OUTPUT - working-directory: ${{ inputs.project-directory }} shell: bash - name: Check for lock changes - run: poetry check --lock - working-directory: ${{ inputs.project-directory }} + run: poetry check --lock -C "${{ inputs.project-directory }}" shell: bash - name: Cache virtualenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 From 02b50cc3f4899ee540d63b680b005d9e50fedba1 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:35:30 -0500 Subject: [PATCH 11/74] Produce poetry.lock before analyzing --- .github/workflows/test_actions.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index a560128..adb39aa 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,6 +230,8 @@ jobs: uses: ./setup-poetry - name: Create project run: poetry new test-project + - name: Create poetry.lock + run: poetry lock -C test-project - name: Check that the project was created run: | if [ ! -f test-project/pyproject.toml ]; then From 7746abc3cd1f2550a900f1ad833cf85c513e9a27 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:40:12 -0500 Subject: [PATCH 12/74] Add dependency on ni-python-styleguide --- .github/workflows/test_actions.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index adb39aa..8d0b40c 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -232,6 +232,8 @@ jobs: run: poetry new test-project - name: Create poetry.lock run: poetry lock -C test-project + - name: Add ni-python-styleguide to the project + run: poetry add ni-python-styleguide -C test-project - name: Check that the project was created run: | if [ ! -f test-project/pyproject.toml ]; then From 0b967dcb90e52af8c446cba22b09b3b4420f79bb Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:43:59 -0500 Subject: [PATCH 13/74] Use a compatible Python version --- .github/workflows/test_actions.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 8d0b40c..d7deb29 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,10 +230,12 @@ jobs: uses: ./setup-poetry - name: Create project run: poetry new test-project - - name: Create poetry.lock - run: poetry lock -C test-project + - name: Set compatible Python version in pyproject.toml + run: poetry env use 3.11 -C test-project - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project + - name: Create poetry.lock + run: poetry lock -C test-project - name: Check that the project was created run: | if [ ! -f test-project/pyproject.toml ]; then From 6afd6b726ec3fb1efdca06a2f833146c4b4a519f Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:46:37 -0500 Subject: [PATCH 14/74] Use matrix Python version --- .github/workflows/test_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index d7deb29..41c574b 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -231,7 +231,7 @@ jobs: - name: Create project run: poetry new test-project - name: Set compatible Python version in pyproject.toml - run: poetry env use 3.11 -C test-project + run: poetry env use ${{ matrix.python-version }} -C test-project - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project - name: Create poetry.lock From f5abcf73199ef7f38f0c740c33a2db368ada0b7e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:52:08 -0500 Subject: [PATCH 15/74] Another attempt at the correct python version --- .github/workflows/test_actions.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 41c574b..da59895 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,8 +230,10 @@ jobs: uses: ./setup-poetry - name: Create project run: poetry new test-project - - name: Set compatible Python version in pyproject.toml - run: poetry env use ${{ matrix.python-version }} -C test-project + - name: Restrict Python version in pyproject.toml + run: | + poetry run poetry env use ${{ matrix.python-version }} -C test-project + poetry run poetry add 'python@>=3.7,<4.0' --dev -C test-project - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project - name: Create poetry.lock From 47f290529c09738c6612fa3e0c0e60cde11d571e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:54:42 -0500 Subject: [PATCH 16/74] Tenth time is the charm --- .github/workflows/test_actions.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index da59895..0270bc5 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -232,8 +232,8 @@ jobs: run: poetry new test-project - name: Restrict Python version in pyproject.toml run: | - poetry run poetry env use ${{ matrix.python-version }} -C test-project - poetry run poetry add 'python@>=3.7,<4.0' --dev -C test-project + poetry env use ${{ matrix.python-version }} -C test-project + poetry add 'python@>=3.7,<4.0' --dev -C test-project - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project - name: Create poetry.lock From f9ab523566e9c8d4854470fac8f42c83a34626ae Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 11:59:12 -0500 Subject: [PATCH 17/74] Eleventh time is the charm --- .github/workflows/test_actions.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 0270bc5..660301c 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -233,7 +233,8 @@ jobs: - name: Restrict Python version in pyproject.toml run: | poetry env use ${{ matrix.python-version }} -C test-project - poetry add 'python@>=3.7,<4.0' --dev -C test-project + - name: Set compatible Python version in pyproject.toml + run: sed -i 's/^python = .*/python = ">=3.7,<4.0"/' test-project/pyproject.toml - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project - name: Create poetry.lock From 82c74e6152db448f656fc4290bb5ba22bef0e0c4 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 12:01:54 -0500 Subject: [PATCH 18/74] Twelfth time is the charm --- .github/workflows/test_actions.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 660301c..76fcba4 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -235,6 +235,8 @@ jobs: poetry env use ${{ matrix.python-version }} -C test-project - name: Set compatible Python version in pyproject.toml run: sed -i 's/^python = .*/python = ">=3.7,<4.0"/' test-project/pyproject.toml + - name: Show pyproject.toml + run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project - name: Create poetry.lock From 5311b248f11ac1e6962fd709d64ebd1ce44826da Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 12:08:05 -0500 Subject: [PATCH 19/74] Thirteenth time is the charm --- .github/workflows/test_actions.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 76fcba4..1a54902 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,11 +230,8 @@ jobs: uses: ./setup-poetry - name: Create project run: poetry new test-project - - name: Restrict Python version in pyproject.toml - run: | - poetry env use ${{ matrix.python-version }} -C test-project - name: Set compatible Python version in pyproject.toml - run: sed -i 's/^python = .*/python = ">=3.7,<4.0"/' test-project/pyproject.toml + run: poetry add 'python@>=3.7,<4.0' --lock --dev -C test-project || poetry add 'python@>=3.7,<4.0' -C test-project - name: Show pyproject.toml run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project From 078cfb737c01d61f056dae7299ffed24fb42044c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 12:10:49 -0500 Subject: [PATCH 20/74] Try try again --- .github/workflows/test_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 1a54902..b0617df 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -218,7 +218,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] + python-version: [3.12, 3.13] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 From bf0613b37654051d75593b8ca0516f92ce4226ab Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 12:55:02 -0500 Subject: [PATCH 21/74] Try try again --- .github/workflows/test_actions.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index b0617df..0924b2c 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -229,9 +229,7 @@ jobs: - name: Set up Poetry uses: ./setup-poetry - name: Create project - run: poetry new test-project - - name: Set compatible Python version in pyproject.toml - run: poetry add 'python@>=3.7,<4.0' --lock --dev -C test-project || poetry add 'python@>=3.7,<4.0' -C test-project + run: poetry new test-project --python ">=3.7,<4.0" - name: Show pyproject.toml run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project From bec5db6204e0f1cdf4f917ded1092190eefdb0f5 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:05:13 -0500 Subject: [PATCH 22/74] Add docstrings to .py files --- .github/workflows/test_actions.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 0924b2c..2ac1b0e 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,6 +230,14 @@ jobs: uses: ./setup-poetry - name: Create project run: poetry new test-project --python ">=3.7,<4.0" + - name: Add docstring to Python files + run: | + for file in test-project/src/test_project/*.py; do + echo '"""Module docstring."""' | cat - "$file" > temp && mv temp "$file" + sed -i '/def /a \ """Function docstring."""\n pass' "$file" + done + find test-project/tests -name "*.py" -exec sed -i '1i"""Test file."""' {} + + shell: bash - name: Show pyproject.toml run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project From 6cee457cccdcddc07f640eda110319437a8882ac Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:10:21 -0500 Subject: [PATCH 23/74] Try try again --- .github/workflows/test_actions.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 2ac1b0e..5555145 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,14 +230,27 @@ jobs: uses: ./setup-poetry - name: Create project run: poetry new test-project --python ">=3.7,<4.0" - - name: Add docstring to Python files + - name: Add docstring to source files run: | for file in test-project/src/test_project/*.py; do echo '"""Module docstring."""' | cat - "$file" > temp && mv temp "$file" - sed -i '/def /a \ """Function docstring."""\n pass' "$file" + sed -i '' '/def /a\ + """Function docstring.""" + pass + ' "$file" done find test-project/tests -name "*.py" -exec sed -i '1i"""Test file."""' {} + - shell: bash + shell: bash + - name: Add docstring to test files + run: | + if [[ "$RUNNER_OS" == "macOS" ]]; then + find test-project/tests -name "*.py" -exec sed -i '' '1i\ + """Test file.""" + ' {} + + else + find test-project/tests -name "*.py" -exec sed -i '1i"""Test file."""' {} + + fi + shell: bash - name: Show pyproject.toml run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project From afe9eec1b3e946b169b1c5c5957e44834f7d004c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:20:31 -0500 Subject: [PATCH 24/74] Whee! Let's try Python --- .github/workflows/test_actions.yml | 62 ++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 5555145..bda908a 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,27 +230,49 @@ jobs: uses: ./setup-poetry - name: Create project run: poetry new test-project --python ">=3.7,<4.0" - - name: Add docstring to source files - run: | - for file in test-project/src/test_project/*.py; do - echo '"""Module docstring."""' | cat - "$file" > temp && mv temp "$file" - sed -i '' '/def /a\ - """Function docstring.""" - pass - ' "$file" - done - find test-project/tests -name "*.py" -exec sed -i '1i"""Test file."""' {} + - shell: bash - - name: Add docstring to test files + - name: Add docstrings to source and test files + shell: python run: | - if [[ "$RUNNER_OS" == "macOS" ]]; then - find test-project/tests -name "*.py" -exec sed -i '' '1i\ - """Test file.""" - ' {} + - else - find test-project/tests -name "*.py" -exec sed -i '1i"""Test file."""' {} + - fi - shell: bash + import os + from pathlib import Path + + def add_docstring_to_file(filepath): + """Adds a module docstring to a Python file.""" + if filepath.suffix != '.py': + return + + with open(filepath, 'r+') as f: + content = f.read() + # Check if a docstring already exists + if not content.startswith(('"""', "'''")): + f.seek(0, 0) # Go to the start of the file + f.write('"""Module docstring."""\n') + f.write(content) + + # Walk through the project directory to find all Python files + for root, _, files in os.walk('.'): + for file in files: + file_path = Path(root) / file + add_docstring_to_file(file_path) + + def add_docstring_to_file(filepath): + """Adds a module docstring to a Python file.""" + if filepath.suffix != '.py': + return + + with open(filepath, 'r+') as f: + content = f.read() + # Check if a docstring already exists + if not content.startswith(('"""', "'''")): + f.seek(0, 0) # Go to the start of the file + f.write('"""Module docstring."""\n') + f.write(content) + + # Walk through the project directory to find all Python files + for root, _, files in os.walk('.'): + for file in files: + file_path = Path(root) / file + add_docstring_to_file(file_path) - name: Show pyproject.toml run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project From 46f076ee825d8f053ddb60aa5825863695fc0037 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:22:46 -0500 Subject: [PATCH 25/74] Add mypy dependency --- .github/workflows/test_actions.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index bda908a..66208f9 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -277,6 +277,8 @@ jobs: run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project + - name: Add mypy to the project + run: poetry add mypy -C test-project - name: Create poetry.lock run: poetry lock -C test-project - name: Check that the project was created From f2711b7eec84f33664819e2472c7e63eb75d8217 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:26:12 -0500 Subject: [PATCH 26/74] Further restrict the Python version for mypy to work --- .github/workflows/test_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 66208f9..9e9f16b 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -229,7 +229,7 @@ jobs: - name: Set up Poetry uses: ./setup-poetry - name: Create project - run: poetry new test-project --python ">=3.7,<4.0" + run: poetry new test-project --python ">=3.9,<4.0" - name: Add docstrings to source and test files shell: python run: | From 84271e000ae75c25a3739c027eab4f245a3dedaa Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:29:14 -0500 Subject: [PATCH 27/74] Show pyproject.toml after the addition of deps --- .github/workflows/test_actions.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 9e9f16b..3194b6f 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -273,12 +273,12 @@ jobs: for file in files: file_path = Path(root) / file add_docstring_to_file(file_path) - - name: Show pyproject.toml - run: cat test-project/pyproject.toml - name: Add ni-python-styleguide to the project run: poetry add ni-python-styleguide -C test-project - name: Add mypy to the project run: poetry add mypy -C test-project + - name: Show pyproject.toml + run: cat test-project/pyproject.toml - name: Create poetry.lock run: poetry lock -C test-project - name: Check that the project was created From b0f22e5014c218cb05ab79556f1476fa9513aa09 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:39:45 -0500 Subject: [PATCH 28/74] Attempt to use a template project for testing --- .github/workflows/test_actions.yml | 61 +- templates/test-project/README.md | 0 templates/test-project/poetry.lock | 544 ++++++++++++++++++ templates/test-project/pyproject.toml | 21 + .../test-project/src/test_project/__init__.py | 1 + templates/test-project/tests/__init__.py | 1 + 6 files changed, 569 insertions(+), 59 deletions(-) create mode 100644 templates/test-project/README.md create mode 100644 templates/test-project/poetry.lock create mode 100644 templates/test-project/pyproject.toml create mode 100644 templates/test-project/src/test_project/__init__.py create mode 100644 templates/test-project/tests/__init__.py diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 3194b6f..beb85ab 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -228,66 +228,9 @@ jobs: python-version: ${{ matrix.python-version }} - name: Set up Poetry uses: ./setup-poetry - - name: Create project - run: poetry new test-project --python ">=3.9,<4.0" - - name: Add docstrings to source and test files - shell: python - run: | - import os - from pathlib import Path - - def add_docstring_to_file(filepath): - """Adds a module docstring to a Python file.""" - if filepath.suffix != '.py': - return - - with open(filepath, 'r+') as f: - content = f.read() - # Check if a docstring already exists - if not content.startswith(('"""', "'''")): - f.seek(0, 0) # Go to the start of the file - f.write('"""Module docstring."""\n') - f.write(content) - - # Walk through the project directory to find all Python files - for root, _, files in os.walk('.'): - for file in files: - file_path = Path(root) / file - add_docstring_to_file(file_path) - - def add_docstring_to_file(filepath): - """Adds a module docstring to a Python file.""" - if filepath.suffix != '.py': - return - - with open(filepath, 'r+') as f: - content = f.read() - # Check if a docstring already exists - if not content.startswith(('"""', "'''")): - f.seek(0, 0) # Go to the start of the file - f.write('"""Module docstring."""\n') - f.write(content) - - # Walk through the project directory to find all Python files - for root, _, files in os.walk('.'): - for file in files: - file_path = Path(root) / file - add_docstring_to_file(file_path) - - name: Add ni-python-styleguide to the project - run: poetry add ni-python-styleguide -C test-project - - name: Add mypy to the project - run: poetry add mypy -C test-project - - name: Show pyproject.toml - run: cat test-project/pyproject.toml - - name: Create poetry.lock - run: poetry lock -C test-project - - name: Check that the project was created + - name: Copy test project files run: | - if [ ! -f test-project/pyproject.toml ]; then - echo "::error title=Test Failure::The project file does not exist." - exit 1 - fi - shell: bash + cp -r ./templates/test-project ./test-project - name: Analyze Python Project uses: ./analyze-project with: diff --git a/templates/test-project/README.md b/templates/test-project/README.md new file mode 100644 index 0000000..e69de29 diff --git a/templates/test-project/poetry.lock b/templates/test-project/poetry.lock new file mode 100644 index 0000000..4d879b8 --- /dev/null +++ b/templates/test-project/poetry.lock @@ -0,0 +1,544 @@ +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. + +[[package]] +name = "black" +version = "25.1.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, + {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, + {file = "black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7"}, + {file = "black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9"}, + {file = "black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0"}, + {file = "black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299"}, + {file = "black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096"}, + {file = "black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2"}, + {file = "black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b"}, + {file = "black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc"}, + {file = "black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f"}, + {file = "black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"}, + {file = "black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f"}, + {file = "black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3"}, + {file = "black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171"}, + {file = "black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"}, + {file = "black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0"}, + {file = "black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f"}, + {file = "black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e"}, + {file = "black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355"}, + {file = "black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717"}, + {file = "black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.10)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.8" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +groups = ["main"] +markers = "python_version < \"3.12\"" +files = [ + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click" +version = "8.3.0" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc"}, + {file = "click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main"] +markers = "platform_system == \"Windows\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "flake8" +version = "5.0.4" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.6.1" +groups = ["main"] +markers = "python_version < \"3.12\"" +files = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +groups = ["main"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "flake8-black" +version = "0.3.6" +description = "flake8 plugin to call black as a code style validator" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "flake8-black-0.3.6.tar.gz", hash = "sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34"}, + {file = "flake8_black-0.3.6-py3-none-any.whl", hash = "sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"}, +] + +[package.dependencies] +black = ">=22.1.0" +flake8 = ">=3" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +develop = ["build", "twine"] + +[[package]] +name = "flake8-docstrings" +version = "1.7.0" +description = "Extension for flake8 which uses pydocstyle to check docstrings" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"}, + {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"}, +] + +[package.dependencies] +flake8 = ">=3" +pydocstyle = ">=2.1" + +[[package]] +name = "flake8-import-order" +version = "0.18.2" +description = "Flake8 and pylama plugin that checks the ordering of import statements." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "flake8-import-order-0.18.2.tar.gz", hash = "sha256:e23941f892da3e0c09d711babbb0c73bc735242e9b216b726616758a920d900e"}, + {file = "flake8_import_order-0.18.2-py2.py3-none-any.whl", hash = "sha256:82ed59f1083b629b030ee9d3928d9e06b6213eb196fe745b3a7d4af2168130df"}, +] + +[package.dependencies] +pycodestyle = "*" +setuptools = "*" + +[[package]] +name = "isort" +version = "6.0.1" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.9.0" +groups = ["main"] +files = [ + {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, + {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, +] + +[package.extras] +colors = ["colorama"] +plugins = ["setuptools"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mypy" +version = "1.18.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "mypy-1.18.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2761b6ae22a2b7d8e8607fb9b81ae90bc2e95ec033fd18fa35e807af6c657763"}, + {file = "mypy-1.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b10e3ea7f2eec23b4929a3fabf84505da21034a4f4b9613cda81217e92b74f3"}, + {file = "mypy-1.18.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:261fbfced030228bc0f724d5d92f9ae69f46373bdfd0e04a533852677a11dbea"}, + {file = "mypy-1.18.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4dc6b34a1c6875e6286e27d836a35c0d04e8316beac4482d42cfea7ed2527df8"}, + {file = "mypy-1.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1cabb353194d2942522546501c0ff75c4043bf3b63069cb43274491b44b773c9"}, + {file = "mypy-1.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:738b171690c8e47c93569635ee8ec633d2cdb06062f510b853b5f233020569a9"}, + {file = "mypy-1.18.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6c903857b3e28fc5489e54042684a9509039ea0aedb2a619469438b544ae1961"}, + {file = "mypy-1.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2a0c8392c19934c2b6c65566d3a6abdc6b51d5da7f5d04e43f0eb627d6eeee65"}, + {file = "mypy-1.18.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f85eb7efa2ec73ef63fc23b8af89c2fe5bf2a4ad985ed2d3ff28c1bb3c317c92"}, + {file = "mypy-1.18.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:82ace21edf7ba8af31c3308a61dc72df30500f4dbb26f99ac36b4b80809d7e94"}, + {file = "mypy-1.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a2dfd53dfe632f1ef5d161150a4b1f2d0786746ae02950eb3ac108964ee2975a"}, + {file = "mypy-1.18.1-cp311-cp311-win_amd64.whl", hash = "sha256:320f0ad4205eefcb0e1a72428dde0ad10be73da9f92e793c36228e8ebf7298c0"}, + {file = "mypy-1.18.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:502cde8896be8e638588b90fdcb4c5d5b8c1b004dfc63fd5604a973547367bb9"}, + {file = "mypy-1.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7509549b5e41be279afc1228242d0e397f1af2919a8f2877ad542b199dc4083e"}, + {file = "mypy-1.18.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5956ecaabb3a245e3f34100172abca1507be687377fe20e24d6a7557e07080e2"}, + {file = "mypy-1.18.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8750ceb014a96c9890421c83f0db53b0f3b8633e2864c6f9bc0a8e93951ed18d"}, + {file = "mypy-1.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fb89ea08ff41adf59476b235293679a6eb53a7b9400f6256272fb6029bec3ce5"}, + {file = "mypy-1.18.1-cp312-cp312-win_amd64.whl", hash = "sha256:2657654d82fcd2a87e02a33e0d23001789a554059bbf34702d623dafe353eabf"}, + {file = "mypy-1.18.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d70d2b5baf9b9a20bc9c730015615ae3243ef47fb4a58ad7b31c3e0a59b5ef1f"}, + {file = "mypy-1.18.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b8367e33506300f07a43012fc546402f283c3f8bcff1dc338636affb710154ce"}, + {file = "mypy-1.18.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:913f668ec50c3337b89df22f973c1c8f0b29ee9e290a8b7fe01cc1ef7446d42e"}, + {file = "mypy-1.18.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a0e70b87eb27b33209fa4792b051c6947976f6ab829daa83819df5f58330c71"}, + {file = "mypy-1.18.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c378d946e8a60be6b6ede48c878d145546fb42aad61df998c056ec151bf6c746"}, + {file = "mypy-1.18.1-cp313-cp313-win_amd64.whl", hash = "sha256:2cd2c1e0f3a7465f22731987fff6fc427e3dcbb4ca5f7db5bbeaff2ff9a31f6d"}, + {file = "mypy-1.18.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ba24603c58e34dd5b096dfad792d87b304fc6470cbb1c22fd64e7ebd17edcc61"}, + {file = "mypy-1.18.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ed36662fb92ae4cb3cacc682ec6656208f323bbc23d4b08d091eecfc0863d4b5"}, + {file = "mypy-1.18.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:040ecc95e026f71a9ad7956fea2724466602b561e6a25c2e5584160d3833aaa8"}, + {file = "mypy-1.18.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:937e3ed86cb731276706e46e03512547e43c391a13f363e08d0fee49a7c38a0d"}, + {file = "mypy-1.18.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1f95cc4f01c0f1701ca3b0355792bccec13ecb2ec1c469e5b85a6ef398398b1d"}, + {file = "mypy-1.18.1-cp314-cp314-win_amd64.whl", hash = "sha256:e4f16c0019d48941220ac60b893615be2f63afedaba6a0801bdcd041b96991ce"}, + {file = "mypy-1.18.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e37763af63a8018308859bc83d9063c501a5820ec5bd4a19f0a2ac0d1c25c061"}, + {file = "mypy-1.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:51531b6e94f34b8bd8b01dee52bbcee80daeac45e69ec5c36e25bce51cbc46e6"}, + {file = "mypy-1.18.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbfdea20e90e9c5476cea80cfd264d8e197c6ef2c58483931db2eefb2f7adc14"}, + {file = "mypy-1.18.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99f272c9b59f5826fffa439575716276d19cbf9654abc84a2ba2d77090a0ba14"}, + {file = "mypy-1.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8c05a7f8c00300a52f3a4fcc95a185e99bf944d7e851ff141bae8dcf6dcfeac4"}, + {file = "mypy-1.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:2fbcecbe5cf213ba294aa8c0b8c104400bf7bb64db82fb34fe32a205da4b3531"}, + {file = "mypy-1.18.1-py3-none-any.whl", hash = "sha256:b76a4de66a0ac01da1be14ecc8ae88ddea33b8380284a9e3eae39d57ebcbe26e"}, + {file = "mypy-1.18.1.tar.gz", hash = "sha256:9e988c64ad3ac5987f43f5154f884747faf62141b7f842e87465b45299eea5a9"}, +] + +[package.dependencies] +mypy_extensions = ">=1.0.0" +pathspec = ">=0.9.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing_extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, +] + +[[package]] +name = "ni-python-styleguide" +version = "0.4.7" +description = "NI's internal and external Python linter rules and plugins" +optional = false +python-versions = "<4.0,>=3.7" +groups = ["main"] +files = [ + {file = "ni_python_styleguide-0.4.7-py3-none-any.whl", hash = "sha256:4b1ae36315a53d1ef0f996cf868cfca997e3a80b431808e46c632467eacd2d09"}, + {file = "ni_python_styleguide-0.4.7.tar.gz", hash = "sha256:b510bb6974bdb907d0d10f14e985e90304d5f02590f5bafab333ebbaa663ef81"}, +] + +[package.dependencies] +black = ">=23.1" +click = ">=7.1.2" +flake8 = [ + {version = ">=5.0,<6.0", markers = "python_version >= \"3.7\" and python_version < \"3.12\""}, + {version = ">=6.1,<7.0", markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, +] +flake8-black = ">=0.2.1" +flake8-docstrings = ">=1.5.0" +flake8-import-order = ">=0.18.1,<0.19.0" +isort = ">=5.10" +pathspec = ">=0.11.1" +pep8-naming = ">=0.11.1" +pycodestyle = [ + {version = ">=2.9,<3.0", markers = "python_version >= \"3.7\" and python_version < \"3.12\""}, + {version = ">=2.11,<3.0", markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, +] +toml = ">=0.10.1" + +[[package]] +name = "packaging" +version = "25.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pep8-naming" +version = "0.15.1" +description = "Check PEP-8 naming conventions, plugin for flake8" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pep8_naming-0.15.1-py3-none-any.whl", hash = "sha256:eb63925e7fd9e028c7f7ee7b1e413ec03d1ee5de0e627012102ee0222c273c86"}, + {file = "pep8_naming-0.15.1.tar.gz", hash = "sha256:f6f4a499aba2deeda93c1f26ccc02f3da32b035c8b2db9696b730ef2c9639d29"}, +] + +[package.dependencies] +flake8 = ">=5.0.0" + +[[package]] +name = "platformdirs" +version = "4.4.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85"}, + {file = "platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + +[[package]] +name = "pycodestyle" +version = "2.9.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.6" +groups = ["main"] +markers = "python_version < \"3.12\"" +files = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pydocstyle" +version = "6.3.0" +description = "Python docstring style checker" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, + {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, +] + +[package.dependencies] +snowballstemmer = ">=2.2.0" + +[package.extras] +toml = ["tomli (>=1.2.3) ; python_version < \"3.11\""] + +[[package]] +name = "pyflakes" +version = "2.5.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.6" +groups = ["main"] +markers = "python_version < \"3.12\"" +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, + {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + +[[package]] +name = "snowballstemmer" +version = "3.0.1" +description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" +groups = ["main"] +files = [ + {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, + {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.2.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +description = "Backported and Experimental Type Hints for Python 3.9+" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, +] + +[metadata] +lock-version = "2.1" +python-versions = ">=3.9,<4.0" +content-hash = "ba50e7cc78d9001393e79bb431e3b909091ea0bcd81923c8cda2fa2d8b012f20" diff --git a/templates/test-project/pyproject.toml b/templates/test-project/pyproject.toml new file mode 100644 index 0000000..3f4d963 --- /dev/null +++ b/templates/test-project/pyproject.toml @@ -0,0 +1,21 @@ +[project] +name = "test-project" +version = "0.1.0" +description = "" +authors = [ + {name = "Joel Dixon",email = "joel.dixon@ni.com"} +] +readme = "README.md" +requires-python = ">=3.9,<4.0" +dependencies = [ + "ni-python-styleguide (>=0.4.7,<0.5.0)", + "mypy (>=1.18.1,<2.0.0)" +] + +[tool.poetry] +packages = [{include = "test_project", from = "src"}] + + +[build-system] +requires = ["poetry-core>=2.0.0,<3.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/templates/test-project/src/test_project/__init__.py b/templates/test-project/src/test_project/__init__.py new file mode 100644 index 0000000..afd5eee --- /dev/null +++ b/templates/test-project/src/test_project/__init__.py @@ -0,0 +1 @@ +"""Docstring required.""" diff --git a/templates/test-project/tests/__init__.py b/templates/test-project/tests/__init__.py new file mode 100644 index 0000000..81b5053 --- /dev/null +++ b/templates/test-project/tests/__init__.py @@ -0,0 +1 @@ +"""Module docstring.""" From 7ce81477eb8f624eee1fcc7274110e2ed0a43350 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:43:18 -0500 Subject: [PATCH 29/74] Add mypy section --- templates/test-project/pyproject.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/templates/test-project/pyproject.toml b/templates/test-project/pyproject.toml index 3f4d963..93fd78e 100644 --- a/templates/test-project/pyproject.toml +++ b/templates/test-project/pyproject.toml @@ -15,6 +15,12 @@ dependencies = [ [tool.poetry] packages = [{include = "test_project", from = "src"}] +[tool.mypy] +mypy_path = "." +files = "." +namespace_packages = true +strict = true +explicit_package_bases = true [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] From e3a29bb91ba329421ea79cb3f541e9eb45fa484a Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:47:12 -0500 Subject: [PATCH 30/74] Add pyright dependencies --- templates/test-project/pyproject.toml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/templates/test-project/pyproject.toml b/templates/test-project/pyproject.toml index 93fd78e..ee34602 100644 --- a/templates/test-project/pyproject.toml +++ b/templates/test-project/pyproject.toml @@ -7,14 +7,16 @@ authors = [ ] readme = "README.md" requires-python = ">=3.9,<4.0" -dependencies = [ - "ni-python-styleguide (>=0.4.7,<0.5.0)", - "mypy (>=1.18.1,<2.0.0)" -] +dynamic = ["dependencies"] [tool.poetry] packages = [{include = "test_project", from = "src"}] +[tool.poetry.group.lint.dependencies] +ni-python-styleguide = ">=0.4.1" +mypy = ">=1.0" +pyright = { version = ">=1.1.400", extras = ["nodejs"] } + [tool.mypy] mypy_path = "." files = "." @@ -22,6 +24,9 @@ namespace_packages = true strict = true explicit_package_bases = true +[tool.pyright] +include = ["src/", "tests/"] + [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" From 6c724cff605b973cbef3b1c225787b591a1cdfa3 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 13:48:44 -0500 Subject: [PATCH 31/74] Update poetry .lock --- templates/test-project/poetry.lock | 111 +++++++++++++++++++++-------- 1 file changed, 82 insertions(+), 29 deletions(-) diff --git a/templates/test-project/poetry.lock b/templates/test-project/poetry.lock index 4d879b8..bce1ab5 100644 --- a/templates/test-project/poetry.lock +++ b/templates/test-project/poetry.lock @@ -6,7 +6,7 @@ version = "25.1.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["lint"] files = [ {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, @@ -53,7 +53,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["lint"] markers = "python_version < \"3.12\"" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, @@ -69,7 +69,7 @@ version = "8.3.0" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["lint"] markers = "python_version >= \"3.12\"" files = [ {file = "click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc"}, @@ -85,7 +85,7 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] +groups = ["lint"] markers = "platform_system == \"Windows\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, @@ -98,7 +98,7 @@ version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.6.1" -groups = ["main"] +groups = ["lint"] markers = "python_version < \"3.12\"" files = [ {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, @@ -116,7 +116,7 @@ version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" -groups = ["main"] +groups = ["lint"] markers = "python_version >= \"3.12\"" files = [ {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, @@ -134,7 +134,7 @@ version = "0.3.6" description = "flake8 plugin to call black as a code style validator" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["lint"] files = [ {file = "flake8-black-0.3.6.tar.gz", hash = "sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34"}, {file = "flake8_black-0.3.6-py3-none-any.whl", hash = "sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"}, @@ -154,7 +154,7 @@ version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["lint"] files = [ {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"}, {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"}, @@ -170,7 +170,7 @@ version = "0.18.2" description = "Flake8 and pylama plugin that checks the ordering of import statements." optional = false python-versions = "*" -groups = ["main"] +groups = ["lint"] files = [ {file = "flake8-import-order-0.18.2.tar.gz", hash = "sha256:e23941f892da3e0c09d711babbb0c73bc735242e9b216b726616758a920d900e"}, {file = "flake8_import_order-0.18.2-py2.py3-none-any.whl", hash = "sha256:82ed59f1083b629b030ee9d3928d9e06b6213eb196fe745b3a7d4af2168130df"}, @@ -186,7 +186,7 @@ version = "6.0.1" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.9.0" -groups = ["main"] +groups = ["lint"] files = [ {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, @@ -202,7 +202,7 @@ version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" -groups = ["main"] +groups = ["lint"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -214,7 +214,7 @@ version = "1.18.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["lint"] files = [ {file = "mypy-1.18.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2761b6ae22a2b7d8e8607fb9b81ae90bc2e95ec033fd18fa35e807af6c657763"}, {file = "mypy-1.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b10e3ea7f2eec23b4929a3fabf84505da21034a4f4b9613cda81217e92b74f3"}, @@ -275,7 +275,7 @@ version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["lint"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -287,7 +287,7 @@ version = "0.4.7" description = "NI's internal and external Python linter rules and plugins" optional = false python-versions = "<4.0,>=3.7" -groups = ["main"] +groups = ["lint"] files = [ {file = "ni_python_styleguide-0.4.7-py3-none-any.whl", hash = "sha256:4b1ae36315a53d1ef0f996cf868cfca997e3a80b431808e46c632467eacd2d09"}, {file = "ni_python_styleguide-0.4.7.tar.gz", hash = "sha256:b510bb6974bdb907d0d10f14e985e90304d5f02590f5bafab333ebbaa663ef81"}, @@ -312,13 +312,44 @@ pycodestyle = [ ] toml = ">=0.10.1" +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["lint"] +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "nodejs-wheel-binaries" +version = "22.19.0" +description = "unoffical Node.js package" +optional = false +python-versions = ">=3.7" +groups = ["lint"] +files = [ + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:43eca1526455a1fb4cb777095198f7ebe5111a4444749c87f5c2b84645aaa72a"}, + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-macosx_11_0_x86_64.whl", hash = "sha256:feb06709e1320790d34babdf71d841ec7f28e4c73217d733e7f5023060a86bfc"}, + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9f5777292491430457c99228d3a267decf12a09d31246f0692391e3513285e"}, + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1392896f1a05a88a8a89b26e182d90fdf3020b4598a047807b91b65731e24c00"}, + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:9164c876644f949cad665e3ada00f75023e18f381e78a1d7b60ccbbfb4086e73"}, + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6b4b75166134010bc9cfebd30dc57047796a27049fef3fc22316216d76bc0af7"}, + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-win_amd64.whl", hash = "sha256:3f271f5abfc71b052a6b074225eca8c1223a0f7216863439b86feaca814f6e5a"}, + {file = "nodejs_wheel_binaries-22.19.0-py2.py3-none-win_arm64.whl", hash = "sha256:666a355fe0c9bde44a9221cd543599b029045643c8196b8eedb44f28dc192e06"}, + {file = "nodejs_wheel_binaries-22.19.0.tar.gz", hash = "sha256:e69b97ef443d36a72602f7ed356c6a36323873230f894799f4270a853932fdb3"}, +] + [[package]] name = "packaging" version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["lint"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, @@ -330,7 +361,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["lint"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -342,7 +373,7 @@ version = "0.15.1" description = "Check PEP-8 naming conventions, plugin for flake8" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["lint"] files = [ {file = "pep8_naming-0.15.1-py3-none-any.whl", hash = "sha256:eb63925e7fd9e028c7f7ee7b1e413ec03d1ee5de0e627012102ee0222c273c86"}, {file = "pep8_naming-0.15.1.tar.gz", hash = "sha256:f6f4a499aba2deeda93c1f26ccc02f3da32b035c8b2db9696b730ef2c9639d29"}, @@ -357,7 +388,7 @@ version = "4.4.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["lint"] files = [ {file = "platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85"}, {file = "platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf"}, @@ -374,7 +405,7 @@ version = "2.9.1" description = "Python style guide checker" optional = false python-versions = ">=3.6" -groups = ["main"] +groups = ["lint"] markers = "python_version < \"3.12\"" files = [ {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, @@ -387,7 +418,7 @@ version = "2.11.1" description = "Python style guide checker" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["lint"] markers = "python_version >= \"3.12\"" files = [ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, @@ -400,7 +431,7 @@ version = "6.3.0" description = "Python docstring style checker" optional = false python-versions = ">=3.6" -groups = ["main"] +groups = ["lint"] files = [ {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, @@ -418,7 +449,7 @@ version = "2.5.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.6" -groups = ["main"] +groups = ["lint"] markers = "python_version < \"3.12\"" files = [ {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, @@ -431,20 +462,42 @@ version = "3.1.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["lint"] markers = "python_version >= \"3.12\"" files = [ {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, ] +[[package]] +name = "pyright" +version = "1.1.405" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +groups = ["lint"] +files = [ + {file = "pyright-1.1.405-py3-none-any.whl", hash = "sha256:a2cb13700b5508ce8e5d4546034cb7ea4aedb60215c6c33f56cec7f53996035a"}, + {file = "pyright-1.1.405.tar.gz", hash = "sha256:5c2a30e1037af27eb463a1cc0b9f6d65fec48478ccf092c1ac28385a15c55763"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" +nodejs-wheel-binaries = {version = "*", optional = true, markers = "extra == \"nodejs\""} +typing-extensions = ">=4.1" + +[package.extras] +all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] +nodejs = ["nodejs-wheel-binaries"] + [[package]] name = "setuptools" version = "80.9.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["lint"] files = [ {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, @@ -465,7 +518,7 @@ version = "3.0.1" description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" -groups = ["main"] +groups = ["lint"] files = [ {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, @@ -477,7 +530,7 @@ version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main"] +groups = ["lint"] files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -489,7 +542,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["lint"] markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, @@ -532,7 +585,7 @@ version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["lint"] files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -541,4 +594,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "ba50e7cc78d9001393e79bb431e3b909091ea0bcd81923c8cda2fa2d8b012f20" +content-hash = "48c59f6c4b96b9046b0cdf237c72168879ab7cd32b1199c65c970793ed7c6ff1" From 4b06b0eed7e967120cf4008474105a29b9094118 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 14:06:28 -0500 Subject: [PATCH 32/74] Try different working directory --- analyze-project/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 7ae9302..fe0d034 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -65,4 +65,4 @@ runs: uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 with: version: PATH - working-directory: ${{ inputs.project-directory }} \ No newline at end of file + working-directory: . \ No newline at end of file From fffe01915074dd179156d03ad17ece4a06ada43d Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 14:17:11 -0500 Subject: [PATCH 33/74] Try original working directory --- analyze-project/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index fe0d034..7ae9302 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -65,4 +65,4 @@ runs: uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 with: version: PATH - working-directory: . \ No newline at end of file + working-directory: ${{ inputs.project-directory }} \ No newline at end of file From 5671259e1e523f0b52baf89cf8b55f12ab183b44 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 14:27:57 -0500 Subject: [PATCH 34/74] Attempt to make it work on Windows --- analyze-project/action.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 7ae9302..0507b85 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -58,9 +58,15 @@ runs: working-directory: ${{ inputs.project-directory }} shell: bash - name: Add virtualenv to the path for pyright-action - run: echo "$(poetry env info --path)/bin" >> $GITHUB_PATH - working-directory: ${{ inputs.project-directory }} shell: bash + run: | + VENV_PATH="$(poetry env info --path)" + if [[ "$RUNNER_OS" == "Windows" ]]; then + echo "$VENV_PATH/Scripts" >> $GITHUB_PATH + else + echo "$VENV_PATH/bin" >> $GITHUB_PATH + fi + working-directory: ${{ inputs.project-directory }} - name: Pyright static analysis uses: jakebailey/pyright-action@b5d50e5cde6547546a5c4ac92e416a8c2c1a1dfe # v2.3.2 with: From b23c4a2aa8ad8c71655c4d1a4342d5fef958250e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 14:45:25 -0500 Subject: [PATCH 35/74] Test more Python versions --- .github/workflows/test_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index beb85ab..d29cb5d 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -218,7 +218,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.12, 3.13] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 From d2db7bd26abf7e4d9f3a440a9c50679dbeec11b1 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 15:33:12 -0500 Subject: [PATCH 36/74] Make mypy and pyright optional. --- analyze-project/action.yml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 0507b85..c4bb3e7 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -19,7 +19,25 @@ inputs: runs: using: composite steps: - - name: Get package name and version +- name: Check for mypy and pyright installation + id: check_tools + run: | + python - < Date: Thu, 18 Sep 2025 15:36:03 -0500 Subject: [PATCH 37/74] fix yml syntax --- analyze-project/action.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index c4bb3e7..86fb85e 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -19,25 +19,25 @@ inputs: runs: using: composite steps: -- name: Check for mypy and pyright installation - id: check_tools - run: | + - name: Check for mypy and pyright installation + id: check_tools + run: | python - < Date: Thu, 18 Sep 2025 15:43:22 -0500 Subject: [PATCH 38/74] Indent python code --- analyze-project/action.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 86fb85e..0359365 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -23,19 +23,19 @@ runs: id: check_tools run: | python - < Date: Thu, 18 Sep 2025 15:48:23 -0500 Subject: [PATCH 39/74] Check the outputs --- analyze-project/action.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 0359365..ed1990d 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -37,6 +37,11 @@ runs: print(f"::set-output name=pyright::{is_installed('pyright')}") EOF shell: bash + - name: Echo check_tools outputs + run: | + echo "mypy installed: ${{ steps.check_tools.outputs.mypy }}" + echo "pyright installed: ${{ steps.check_tools.outputs.pyright }}" + shell: bash - name: Get package name and version id: get_package_info run: | From c1db319a8f608dc8b5769c1cef6a26952cf49580 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Thu, 18 Sep 2025 15:53:36 -0500 Subject: [PATCH 40/74] Check packages after install --- analyze-project/action.yml | 48 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index ed1990d..5bce977 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -19,29 +19,6 @@ inputs: runs: using: composite steps: - - name: Check for mypy and pyright installation - id: check_tools - run: | - python - < Date: Thu, 18 Sep 2025 15:55:52 -0500 Subject: [PATCH 41/74] Use GITHUB_OUTPUT --- analyze-project/action.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 5bce977..f312b17 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -67,8 +67,9 @@ runs: except PackageNotFoundError: return "false" - print(f"::set-output name=mypy::{is_installed('mypy')}") - print(f"::set-output name=pyright::{is_installed('pyright')}") + with open(os.environ['GITHUB_OUTPUT'], 'a') as f: + f.write(f"mypy={is_installed('mypy')}\n") + f.write(f"pyright={is_installed('pyright')}\n") EOF shell: bash - name: Echo check_tools outputs From 9ef16d934d45deb321d61247e5e00190c4855315 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 10:58:51 -0500 Subject: [PATCH 42/74] Move minimal test project under .github to hide it --- .../test-project => .github/test_projects/minimal}/README.md | 0 .../test_projects/minimal}/poetry.lock | 0 .../test_projects/minimal}/pyproject.toml | 0 .../test_projects/minimal}/src/test_project/__init__.py | 0 .../test_projects/minimal}/tests/__init__.py | 0 .github/workflows/test_actions.yml | 4 ++-- 6 files changed, 2 insertions(+), 2 deletions(-) rename {templates/test-project => .github/test_projects/minimal}/README.md (100%) rename {templates/test-project => .github/test_projects/minimal}/poetry.lock (100%) rename {templates/test-project => .github/test_projects/minimal}/pyproject.toml (100%) rename {templates/test-project => .github/test_projects/minimal}/src/test_project/__init__.py (100%) rename {templates/test-project => .github/test_projects/minimal}/tests/__init__.py (100%) diff --git a/templates/test-project/README.md b/.github/test_projects/minimal/README.md similarity index 100% rename from templates/test-project/README.md rename to .github/test_projects/minimal/README.md diff --git a/templates/test-project/poetry.lock b/.github/test_projects/minimal/poetry.lock similarity index 100% rename from templates/test-project/poetry.lock rename to .github/test_projects/minimal/poetry.lock diff --git a/templates/test-project/pyproject.toml b/.github/test_projects/minimal/pyproject.toml similarity index 100% rename from templates/test-project/pyproject.toml rename to .github/test_projects/minimal/pyproject.toml diff --git a/templates/test-project/src/test_project/__init__.py b/.github/test_projects/minimal/src/test_project/__init__.py similarity index 100% rename from templates/test-project/src/test_project/__init__.py rename to .github/test_projects/minimal/src/test_project/__init__.py diff --git a/templates/test-project/tests/__init__.py b/.github/test_projects/minimal/tests/__init__.py similarity index 100% rename from templates/test-project/tests/__init__.py rename to .github/test_projects/minimal/tests/__init__.py diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index d29cb5d..c422451 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -230,11 +230,11 @@ jobs: uses: ./setup-poetry - name: Copy test project files run: | - cp -r ./templates/test-project ./test-project + cp -r ./.github/test_projects/minimal ./minimal - name: Analyze Python Project uses: ./analyze-project with: - project-directory: ${{ github.workspace }}/test-project + project-directory: ${{ github.workspace }}/minimal # This job is intended to combine the test results so we don't have to list # each matrix combination in the required status check settings. There are a From 4faa1d09453fe58e718ca35fc0d362a550a924be Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 11:06:43 -0500 Subject: [PATCH 43/74] Simplify Add virtualenv to the path for pyright-action --- analyze-project/action.yml | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index f312b17..8a14247 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -56,7 +56,6 @@ runs: - name: Check for mypy and pyright installation id: check_tools run: | - python - <> $GITHUB_PATH - else - echo "$VENV_PATH/bin" >> $GITHUB_PATH - fi + echo "$(dirname $(poetry env info --executable))" >> $GITHUB_PATH working-directory: ${{ inputs.project-directory }} - name: Pyright static analysis if: steps.check_tools.outputs.pyright == 'true' From 0020788d0631f214724131a1256728e5d11f5a1c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 12:20:12 -0500 Subject: [PATCH 44/74] Various PR feedback --- .github/workflows/test_actions.yml | 5 +---- analyze-project/action.yml | 20 ++++++++------------ 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index c422451..a5b5d93 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -228,13 +228,10 @@ jobs: python-version: ${{ matrix.python-version }} - name: Set up Poetry uses: ./setup-poetry - - name: Copy test project files - run: | - cp -r ./.github/test_projects/minimal ./minimal - name: Analyze Python Project uses: ./analyze-project with: - project-directory: ${{ github.workspace }}/minimal + project-directory: ./.github/test_projects/minimal # This job is intended to combine the test results so we don't have to list # each matrix combination in the required status check settings. There are a diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 8a14247..9a19808 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -1,9 +1,9 @@ -name: Analyze Python Project +name: Analyze project description: > - This workflow checks the code quality of a Python project using various - analyzers like linters and type checkers, including ni-python-styleguide, - mypy, bandit, and pyright. It is designed to be reusable across different - projects and can be easily integrated into existing CI/CD pipelines. + This workflow analyzes the code quality of a Python project using various + linters and type checkers including ni-python-styleguide, + mypy (if the 'mypy' package is installed), and pyright (if the 'pyright' + package is installed). inputs: project-directory: @@ -35,15 +35,11 @@ runs: uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ inputs.project-directory }}/.venv - key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} + key: ${{ steps.get_package_info.outputs.name }}-${{ runner.os }}-py${{ env.pythonVersion }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} - name: Install ${{ steps.get_package_info.outputs.name }} run: | - if [ "${{ inputs.extras }}" != "" ]; then - EXTRAS_ARGS="" - for extra in ${{ inputs.extras }}; do - EXTRAS_ARGS="$EXTRAS_ARGS -E $extra" - done - poetry install -v $EXTRAS_ARGS + if [ -n "${{ inputs.extras }}" ]; then + poetry install -v --extras '${{ inputs.extras }}' else poetry install -v fi From 2648d0c11b24e963f85c8a2213a62f040de4b836 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 13:15:52 -0500 Subject: [PATCH 45/74] Use poetry env info --path to get the venv path --- analyze-project/action.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 9a19808..5de7ce4 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -19,14 +19,16 @@ inputs: runs: using: composite steps: - - name: Get package name and version - id: get_package_info + - name: Get project name and version + id: get_project_info run: | result=$(poetry version -C "${{ inputs.project-directory }}") name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') echo "name=$name" >> $GITHUB_OUTPUT echo "version=$version" >> $GITHUB_OUTPUT + project_path=$(poetry env info --path) + echo "venv-path=$project_path" >> $GITHUB_OUTPUT shell: bash - name: Check for lock changes run: poetry check --lock -C "${{ inputs.project-directory }}" @@ -34,9 +36,9 @@ runs: - name: Cache virtualenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: - path: ${{ inputs.project-directory }}/.venv - key: ${{ steps.get_package_info.outputs.name }}-${{ runner.os }}-py${{ env.pythonVersion }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} - - name: Install ${{ steps.get_package_info.outputs.name }} + path: ${{ steps.get_project_info.outputs.venv-path }} + key: ${{ steps.get_project_info.outputs.name }}-${{ runner.os }}-py${{ env.pythonVersion }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} + - name: Install ${{ steps.get_project_info.outputs.name }} run: | if [ -n "${{ inputs.extras }}" ]; then poetry install -v --extras '${{ inputs.extras }}' From 45796683c3fc8e2db0c1033073280b6ad87181da Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 13:22:32 -0500 Subject: [PATCH 46/74] Add -C parameter to poetry env --info command --- analyze-project/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 5de7ce4..61b8786 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -27,7 +27,7 @@ runs: version=$(echo "$result" | awk '{print $2}') echo "name=$name" >> $GITHUB_OUTPUT echo "version=$version" >> $GITHUB_OUTPUT - project_path=$(poetry env info --path) + project_path=$(poetry env info --path -C "${{ inputs.project-directory }}") echo "venv-path=$project_path" >> $GITHUB_OUTPUT shell: bash - name: Check for lock changes From 4a8b3fa71cd181ae8d21a24c0970e25ad7a1aaf0 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 13:26:12 -0500 Subject: [PATCH 47/74] Attempt to use {{ github.workspace }} instead of ./ --- .github/workflows/test_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index a5b5d93..0d38ad5 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -231,7 +231,7 @@ jobs: - name: Analyze Python Project uses: ./analyze-project with: - project-directory: ./.github/test_projects/minimal + project-directory: ${{ github.workspace }}/.github/test_projects/minimal # This job is intended to combine the test results so we don't have to list # each matrix combination in the required status check settings. There are a From 228461bcf6e98cf6a3a2576144ac499e021d72c6 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 13:29:21 -0500 Subject: [PATCH 48/74] Attempt to use working-directory instead of -C --- analyze-project/action.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 61b8786..765e90c 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -22,14 +22,15 @@ runs: - name: Get project name and version id: get_project_info run: | - result=$(poetry version -C "${{ inputs.project-directory }}") + result=$(poetry version") name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') echo "name=$name" >> $GITHUB_OUTPUT echo "version=$version" >> $GITHUB_OUTPUT - project_path=$(poetry env info --path -C "${{ inputs.project-directory }}") + project_path=$(poetry env info --path) echo "venv-path=$project_path" >> $GITHUB_OUTPUT shell: bash + working-directory: ${{ inputs.project-directory }} - name: Check for lock changes run: poetry check --lock -C "${{ inputs.project-directory }}" shell: bash From d840da7fff6a98df01e313a417fbd8383cb8f99d Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 15:12:43 -0500 Subject: [PATCH 49/74] Remove stray quote --- analyze-project/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 765e90c..ec6d207 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -22,7 +22,7 @@ runs: - name: Get project name and version id: get_project_info run: | - result=$(poetry version") + result=$(poetry version) name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') echo "name=$name" >> $GITHUB_OUTPUT From c35bbb45da6d4950210030d3c06b135ddbbc2db2 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 16:17:36 -0500 Subject: [PATCH 50/74] Try quoting --- analyze-project/action.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index ec6d207..4bdd5b1 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -25,10 +25,10 @@ runs: result=$(poetry version) name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') - echo "name=$name" >> $GITHUB_OUTPUT - echo "version=$version" >> $GITHUB_OUTPUT + echo "name=$name" >> "$GITHUB_OUTPUT" + echo "version=$version" >> "$GITHUB_OUTPUT" project_path=$(poetry env info --path) - echo "venv-path=$project_path" >> $GITHUB_OUTPUT + echo "venv-path=$project_path" >> "$GITHUB_OUTPUT" shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From 94c19d641854fab7bc752106db720a7d811727d8 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 16:18:52 -0500 Subject: [PATCH 51/74] Remove some bash code to narrow down error --- analyze-project/action.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 4bdd5b1..32690a0 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -27,8 +27,6 @@ runs: version=$(echo "$result" | awk '{print $2}') echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - project_path=$(poetry env info --path) - echo "venv-path=$project_path" >> "$GITHUB_OUTPUT" shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From 6d628bc6b6830175b1576e00665a1102ed264310 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 16:21:58 -0500 Subject: [PATCH 52/74] Add back in path --- analyze-project/action.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 32690a0..95818b7 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -27,6 +27,8 @@ runs: version=$(echo "$result" | awk '{print $2}') echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" + path=$(poetry env info --path) + echo "venv=$path" >> "$GITHUB_OUTPUT" shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes @@ -35,7 +37,7 @@ runs: - name: Cache virtualenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: - path: ${{ steps.get_project_info.outputs.venv-path }} + path: ${{ steps.get_project_info.outputs.venv }} key: ${{ steps.get_project_info.outputs.name }}-${{ runner.os }}-py${{ env.pythonVersion }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} - name: Install ${{ steps.get_project_info.outputs.name }} run: | From 867661a710a039fce925d6a545b381120a22188a Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 16:25:12 -0500 Subject: [PATCH 53/74] Try another arrangement --- analyze-project/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 95818b7..7cdf1d1 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -25,10 +25,10 @@ runs: result=$(poetry version) name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') + path=$(poetry env info --path) echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - path=$(poetry env info --path) - echo "venv=$path" >> "$GITHUB_OUTPUT" + echo $path shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From d90f284caa4fd547b2b13fa082b5051fd4903b54 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 16:30:49 -0500 Subject: [PATCH 54/74] Try without echoing the path --- analyze-project/action.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 7cdf1d1..cb33f9c 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -28,7 +28,6 @@ runs: path=$(poetry env info --path) echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - echo $path shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From 34ee66bf4521fa6fec84549d1b7be3611ae1bac1 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 22 Sep 2025 16:32:05 -0500 Subject: [PATCH 55/74] Try some quotes, why not? --- analyze-project/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index cb33f9c..e86b92f 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -25,7 +25,7 @@ runs: result=$(poetry version) name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') - path=$(poetry env info --path) + path=$("poetry env info --path") echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" shell: bash From 86726462fc8d4493d76dc8958d23478e99e9ca76 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 23 Sep 2025 09:08:26 -0500 Subject: [PATCH 56/74] Try without --path, why not --- analyze-project/action.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index e86b92f..ca22c60 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -25,9 +25,11 @@ runs: result=$(poetry version) name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') - path=$("poetry env info --path") + echo $name + echo $version echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" + stuff=$(poetry env info) shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From a5a414d4d0eb648b9ab3e5a21dec3734784e81bf Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 23 Sep 2025 09:15:07 -0500 Subject: [PATCH 57/74] Try without Python 3.9 --- .github/workflows/test_actions.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 0d38ad5..4ab29f9 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -10,8 +10,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + os: [windows-latest] + python-version: [3.9] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -44,8 +44,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] + os: [windows-latest] + python-version: [3.9] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -71,8 +71,8 @@ jobs: needs: test_setup_poetry strategy: matrix: - os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] + os: [windows-latest] + python-version: [3.9] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -103,8 +103,8 @@ jobs: needs: test_setup_poetry strategy: matrix: - os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] + os: [windows-latest] + python-version: [3.9] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -218,7 +218,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] + python-version: [3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 From 10bad857ae78323be572e11bda8b9af3019630c0 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 23 Sep 2025 09:17:58 -0500 Subject: [PATCH 58/74] Echo the poetry env info --- analyze-project/action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index ca22c60..bb307d4 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -30,6 +30,7 @@ runs: echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" stuff=$(poetry env info) + echo $stuff shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From bcc1c1a193d82c834cce9f0324bcbbb1bc71dcb5 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 23 Sep 2025 09:34:24 -0500 Subject: [PATCH 59/74] Add back in path --- analyze-project/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index bb307d4..eb3c8a8 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -29,7 +29,7 @@ runs: echo $version echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - stuff=$(poetry env info) + stuff=$(poetry env info --path) echo $stuff shell: bash working-directory: ${{ inputs.project-directory }} From 9d3f040dee86e5c2bdc650e4f3380be0c2adeef8 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 23 Sep 2025 10:06:54 -0500 Subject: [PATCH 60/74] Try a different arrangement of quotes --- analyze-project/action.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index eb3c8a8..53c1b36 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -29,8 +29,9 @@ runs: echo $version echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - stuff=$(poetry env info --path) - echo $stuff + venv-path="$(poetry env info --path)" + echo $venv-path + echo "venv=$venv-path" >> "$GITHUB_OUTPUT" shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From 0899ce937737165f272376485c772f2b0e0df6ab Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 23 Sep 2025 10:11:18 -0500 Subject: [PATCH 61/74] Change variable name --- analyze-project/action.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 53c1b36..8a55165 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -29,9 +29,9 @@ runs: echo $version echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - venv-path="$(poetry env info --path)" - echo $venv-path - echo "venv=$venv-path" >> "$GITHUB_OUTPUT" + venv="$(poetry env info --path)" + echo $venv + echo "venv=$venv" >> "$GITHUB_OUTPUT" shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes From 3d89b417e020a920d708bef33f228de26e5b0fd1 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 23 Sep 2025 10:14:31 -0500 Subject: [PATCH 62/74] Change variable name --- analyze-project/action.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 8a55165..21287ec 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -29,9 +29,9 @@ runs: echo $version echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - venv="$(poetry env info --path)" - echo $venv - echo "venv=$venv" >> "$GITHUB_OUTPUT" + dude="$(poetry env info --path)" + echo $dude + echo "venv=$dude" >> "$GITHUB_OUTPUT" shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes @@ -40,7 +40,7 @@ runs: - name: Cache virtualenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: - path: ${{ steps.get_project_info.outputs.venv }} + path: ${{ steps.get_project_info.outputs.dude }} key: ${{ steps.get_project_info.outputs.name }}-${{ runner.os }}-py${{ env.pythonVersion }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} - name: Install ${{ steps.get_project_info.outputs.name }} run: | From 359640cb78aee3715e584ad8042b6c8607fd0db0 Mon Sep 17 00:00:00 2001 From: mshafer-NI <23644905+mshafer-NI@users.noreply.github.com> Date: Tue, 23 Sep 2025 13:48:45 -0500 Subject: [PATCH 63/74] print some debug info --- analyze-project/action.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 21287ec..644b75d 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -29,6 +29,8 @@ runs: echo $version echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" + echo "What options do we have?" + poetry env info --help dude="$(poetry env info --path)" echo $dude echo "venv=$dude" >> "$GITHUB_OUTPUT" From 3fa2cfbea5acc2927b09bba584964de3d834db3a Mon Sep 17 00:00:00 2001 From: mshafer-NI <23644905+mshafer-NI@users.noreply.github.com> Date: Tue, 23 Sep 2025 13:53:27 -0500 Subject: [PATCH 64/74] don't stop on help --- analyze-project/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 644b75d..6f8db2f 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -30,7 +30,7 @@ runs: echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" echo "What options do we have?" - poetry env info --help + (poetry env info --help; exit 0) dude="$(poetry env info --path)" echo $dude echo "venv=$dude" >> "$GITHUB_OUTPUT" From 17a40c39db89da4fbe6c4fb9ad63d1bff6bf7866 Mon Sep 17 00:00:00 2001 From: mshafer-NI <23644905+mshafer-NI@users.noreply.github.com> Date: Tue, 23 Sep 2025 13:59:09 -0500 Subject: [PATCH 65/74] don't fail fast --- .github/workflows/test_actions.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 4ab29f9..b9e49e8 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -216,6 +216,7 @@ jobs: name: Test analyze-project runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: os: [windows-latest, ubuntu-latest, macos-latest] python-version: [3.11] From a3778a61a1099a0da1ae2a2c4c2b82bb8a2a8f24 Mon Sep 17 00:00:00 2001 From: mshafer-NI <23644905+mshafer-NI@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:00:26 -0500 Subject: [PATCH 66/74] ok, let's print it out without exiting first --- analyze-project/action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 6f8db2f..1658f63 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -31,6 +31,7 @@ runs: echo "version=$version" >> "$GITHUB_OUTPUT" echo "What options do we have?" (poetry env info --help; exit 0) + (poetry env info --path; exit 0) dude="$(poetry env info --path)" echo $dude echo "venv=$dude" >> "$GITHUB_OUTPUT" From 640e8061d8459c8412d0b706e76f13ebb03cef13 Mon Sep 17 00:00:00 2001 From: mshafer-NI <23644905+mshafer-NI@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:07:52 -0500 Subject: [PATCH 67/74] ok, use or --- analyze-project/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 1658f63..762596c 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -30,8 +30,8 @@ runs: echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" echo "What options do we have?" - (poetry env info --help; exit 0) - (poetry env info --path; exit 0) + (poetry env info --help || exit 0) + (poetry env info --path || exit 0) dude="$(poetry env info --path)" echo $dude echo "venv=$dude" >> "$GITHUB_OUTPUT" From 3acc52c1177ba430a12378b8253e7d6983fe62b4 Mon Sep 17 00:00:00 2001 From: mshafer-NI <23644905+mshafer-NI@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:31:15 -0500 Subject: [PATCH 68/74] ok, try this... --- analyze-project/action.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 762596c..448ed0a 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -30,8 +30,9 @@ runs: echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" echo "What options do we have?" + (poetry env info || exit 0) (poetry env info --help || exit 0) - (poetry env info --path || exit 0) + (poetry env info --path || true) dude="$(poetry env info --path)" echo $dude echo "venv=$dude" >> "$GITHUB_OUTPUT" From 96c1e976dcae9c5970021fd7148c9bc412616af5 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Wed, 24 Sep 2025 08:55:18 -0500 Subject: [PATCH 69/74] analyze-project: Fix venv caching (#28) * analyze-project: Fix venv caching * analyze-project: Update prints --------- Co-authored-by: Joel Dixon <38357562+dixonjoel@users.noreply.github.com> --- analyze-project/action.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/analyze-project/action.yml b/analyze-project/action.yml index 448ed0a..a8d4c59 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -25,17 +25,14 @@ runs: result=$(poetry version) name=$(echo "$result" | awk '{print $1}') version=$(echo "$result" | awk '{print $2}') - echo $name - echo $version + echo "Name: $name" + echo "Version: $version" echo "name=$name" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" - echo "What options do we have?" - (poetry env info || exit 0) - (poetry env info --help || exit 0) - (poetry env info --path || true) - dude="$(poetry env info --path)" - echo $dude - echo "venv=$dude" >> "$GITHUB_OUTPUT" + poetry env activate + venv_path="$(poetry env info --path)" + echo "venv path: $venv_path" + echo "venv-path=$venv_path" >> "$GITHUB_OUTPUT" shell: bash working-directory: ${{ inputs.project-directory }} - name: Check for lock changes @@ -44,7 +41,7 @@ runs: - name: Cache virtualenv uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: - path: ${{ steps.get_project_info.outputs.dude }} + path: ${{ steps.get_project_info.outputs.venv-path }} key: ${{ steps.get_project_info.outputs.name }}-${{ runner.os }}-py${{ env.pythonVersion }}-${{ hashFiles(format('{0}/poetry.lock', inputs.project-directory)) }} - name: Install ${{ steps.get_project_info.outputs.name }} run: | From 082363c5a5fc29687a666ff7da73d61f33202a4c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 24 Sep 2025 09:11:56 -0500 Subject: [PATCH 70/74] Restore all the matrix of python versions and OSs --- .github/workflows/test_actions.yml | 18 ++++++------ analyze-project/README.md | 45 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 analyze-project/README.md diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 4ab29f9..7ba1dca 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -10,8 +10,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [windows-latest] - python-version: [3.9] + os: [windows-latest, ubuntu-latest, macos-latest] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -44,8 +44,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [windows-latest] - python-version: [3.9] + os: [windows-latest, ubuntu-latest, macos-latest] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -71,8 +71,8 @@ jobs: needs: test_setup_poetry strategy: matrix: - os: [windows-latest] - python-version: [3.9] + os: [windows-latest, ubuntu-latest, macos-latest] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -103,8 +103,8 @@ jobs: needs: test_setup_poetry strategy: matrix: - os: [windows-latest] - python-version: [3.9] + os: [windows-latest, ubuntu-latest, macos-latest] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -218,7 +218,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 diff --git a/analyze-project/README.md b/analyze-project/README.md new file mode 100644 index 0000000..9922316 --- /dev/null +++ b/analyze-project/README.md @@ -0,0 +1,45 @@ +# `ni/python-actions/analyze-project` + +The `ni/python-actions/update-project-version` action analyzes the code quality +of a Python project using various linters and type checkers including +ni-python-styleguide, mypy (if the 'mypy' package is installed), and pyright +(if the 'pyright' package is installed).uses Poetry to update the version of a Python +project and creates a pull request to modify its `pyproject.toml` file. Publish workflows can use +this to update the version in `pyproject.toml` for the next build. + +This action requires Poetry, so you must call `ni/python-actions/setup-python` and +`ni/python-actions/setup-poetry` first. + +## Usage + +```yaml +steps: +- uses: ni/python-actions/setup-python@v0.2 +- uses: ni/python-actions/setup-poetry@v0.2 +- uses: ni/python-actions/analyze-project@v0.2 +``` + +## Inputs + +### `project-directory` + +You can specify `project-directory` to indicate the location of the pyproject.toml +file associated with the Python project you are analyzing. + +```yaml +- uses: ni/python-actions/update-project-version@v0.2 + with: + project-directory: ${{ github.workspace }}/packages/myproject +``` + +### `extras` + +If there are extras you need to install from your pyproject.toml, specify a space-separated list +of extra groups to install. For example, + +```yaml +- uses: ni/python-actions/analyze-project@v0.2 + with: + project-directory: ${{ github.workspace }}/packages/myproject + extras: 'docs drivers' +``` From 4dd93759c00c090b0170541b503d8b26ac03948a Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 24 Sep 2025 09:14:33 -0500 Subject: [PATCH 71/74] Fix copy and paste error in test_actions.yml --- .github/workflows/test_actions.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index c5f51ee..257b329 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -45,7 +45,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -72,7 +72,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -104,7 +104,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -219,7 +219,7 @@ jobs: fail-fast: false matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 From 218753348bad81920a7535ee220d88a60ccdda87 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 24 Sep 2025 12:41:41 -0500 Subject: [PATCH 72/74] Minor PR feedback --- .github/workflows/test_actions.yml | 14 +++++++------- analyze-project/README.md | 8 +++----- analyze-project/action.yml | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index 257b329..b040da9 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -45,7 +45,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -72,7 +72,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -104,7 +104,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -216,10 +216,9 @@ jobs: name: Test analyze-project runs-on: ${{ matrix.os }} strategy: - fail-fast: false matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -247,7 +246,8 @@ jobs: test_setup_poetry_cache_hit, test_setup_poetry_no_cache, test_check_project_version, - test_update_project_version + test_update_project_version, + test_analyze_project, ] if: ${{ !cancelled() }} steps: diff --git a/analyze-project/README.md b/analyze-project/README.md index 9922316..027a1e1 100644 --- a/analyze-project/README.md +++ b/analyze-project/README.md @@ -3,9 +3,7 @@ The `ni/python-actions/update-project-version` action analyzes the code quality of a Python project using various linters and type checkers including ni-python-styleguide, mypy (if the 'mypy' package is installed), and pyright -(if the 'pyright' package is installed).uses Poetry to update the version of a Python -project and creates a pull request to modify its `pyproject.toml` file. Publish workflows can use -this to update the version in `pyproject.toml` for the next build. +(if the 'pyright' package is installed). This action requires Poetry, so you must call `ni/python-actions/setup-python` and `ni/python-actions/setup-poetry` first. @@ -27,7 +25,7 @@ You can specify `project-directory` to indicate the location of the pyproject.to file associated with the Python project you are analyzing. ```yaml -- uses: ni/python-actions/update-project-version@v0.2 +- uses: ni/python-actions/update-project-version@v0 with: project-directory: ${{ github.workspace }}/packages/myproject ``` @@ -38,7 +36,7 @@ If there are extras you need to install from your pyproject.toml, specify a spac of extra groups to install. For example, ```yaml -- uses: ni/python-actions/analyze-project@v0.2 +- uses: ni/python-actions/analyze-project@v0 with: project-directory: ${{ github.workspace }}/packages/myproject extras: 'docs drivers' diff --git a/analyze-project/action.yml b/analyze-project/action.yml index a8d4c59..c1446f2 100644 --- a/analyze-project/action.yml +++ b/analyze-project/action.yml @@ -19,7 +19,7 @@ inputs: runs: using: composite steps: - - name: Get project name and version + - name: Get project info id: get_project_info run: | result=$(poetry version) From dd965b241d9d9ac48f2c56d523af283bc9a04bde Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 24 Sep 2025 13:02:03 -0500 Subject: [PATCH 73/74] Remove 3.13t Python from some spots --- .github/workflows/test_actions.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_actions.yml b/.github/workflows/test_actions.yml index b040da9..881d5e9 100644 --- a/.github/workflows/test_actions.yml +++ b/.github/workflows/test_actions.yml @@ -45,7 +45,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -72,7 +72,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -104,7 +104,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -218,7 +218,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] - python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.13t, pypy3.10, pypy3.11] + python-version: [3.9, '3.10', 3.11, 3.12, 3.13, pypy3.10, pypy3.11] steps: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 From 87ed5072b06cc069802d8f7b65de19d6c11b95c8 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 24 Sep 2025 13:07:13 -0500 Subject: [PATCH 74/74] Use v0 for actions in README --- analyze-project/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/analyze-project/README.md b/analyze-project/README.md index 027a1e1..0af04f6 100644 --- a/analyze-project/README.md +++ b/analyze-project/README.md @@ -12,9 +12,9 @@ This action requires Poetry, so you must call `ni/python-actions/setup-python` a ```yaml steps: -- uses: ni/python-actions/setup-python@v0.2 -- uses: ni/python-actions/setup-poetry@v0.2 -- uses: ni/python-actions/analyze-project@v0.2 +- uses: ni/python-actions/setup-python@v0 +- uses: ni/python-actions/setup-poetry@v0 +- uses: ni/python-actions/analyze-project@v0 ``` ## Inputs