Skip to content

fix(deps): lock file maintenance python dependency updates for next (next) #20879

fix(deps): lock file maintenance python dependency updates for next (next)

fix(deps): lock file maintenance python dependency updates for next (next) #20879

---
# A lighter-weight version of CI specifically for pull requests
name: "CI - Pull Request"
concurrency: # Cancel any existing runs of this workflow for this same PR
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true
on: # yamllint disable
pull_request:
workflow_call:
jobs:
security-tooling:
name: "Security Tooling"
runs-on: "ubuntu-22.04"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Security checks"
uses: "./.github/actions/security-checks"
ruff:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only linting"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Linting: ruff"
run: "poetry run invoke ruff --output-format github"
yamllint:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only linting"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Linting: yamllint"
run: "poetry run invoke yamllint"
markdownlint:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only linting"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Linting: pymarkdownlnt"
run: "poetry run invoke markdownlint"
docs:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only docs"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Linting: docs build and validation"
run: "poetry run invoke build-and-check-docs"
compress-images:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "" # override default "--only dev"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Linting: check for images needing compression"
run: "poetry run invoke compress-images"
djhtml:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only linting"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Linting: djhtml"
run: "poetry run invoke djhtml"
djlint:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only linting"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Linting: djlint"
run: "poetry run invoke djlint"
hadolint:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Run Hadolint"
uses: "hadolint/hadolint-action@d7b38582334d9ac11c12021c16f21d63015fa250" # v1.6.0
with:
dockerfile: "docker/Dockerfile"
check-migrations:
name: "Run 'nautobot-server makemigrations --dry-run --check'"
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_DB_USER: "nautobot"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.postgresql"
services:
postgres:
image: "postgres:13-alpine"
env:
POSTGRES_USER: "nautobot"
POSTGRES_PASSWORD: "decinablesprewad"
POSTGRES_DB: "nautobot"
ports:
- "5432:5432"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "" # override default "--only dev"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Run check migrations"
run: "poetry run invoke check-migrations"
check-schema:
name: "Run REST API schema checks"
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_DB_USER: "nautobot"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.postgresql"
NAUTOBOT_CONFIG: "nautobot/core/tests/nautobot_config.py"
services:
postgres:
image: "postgres:13-alpine"
env:
POSTGRES_USER: "nautobot"
POSTGRES_PASSWORD: "decinablesprewad"
POSTGRES_DB: "nautobot"
ports:
- "5432:5432"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "" # override default "--only dev"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Run check-schema"
# REST API schema generation currently includes GraphQL schema generation, which is dependent on the DB :-(
run: "poetry run invoke migrate check-schema"
pylint:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_DB_USER: "nautobot"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.postgresql"
NAUTOBOT_CONFIG: "nautobot/core/tests/nautobot_config.py"
services:
postgres:
image: "postgres:13-alpine"
env:
POSTGRES_USER: "nautobot"
POSTGRES_PASSWORD: "decinablesprewad"
POSTGRES_DB: "nautobot"
ports:
- "5432:5432"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "" # override default "--only dev"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Run pylint"
run: "poetry run invoke pylint"
ui-code-check:
name: "Check UI code style and formatting"
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only linting"
poetry-version: "1.8.5"
python-version: "3.13"
- name: "Setup Node.js"
uses: "actions/setup-node@v4"
with:
node-version: "22"
- name: "Install npm dependencies"
run: "poetry run invoke npm --command ci"
- name: "Run ui-code-check"
run: "poetry run invoke ui-code-check"
ui-build-check:
name: "Check UI src and dist files validity and integrity"
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev --only linting"
poetry-version: "1.8.5"
python-version: "3.13"
- name: "Setup Node.js"
uses: "actions/setup-node@v4"
with:
node-version: "22"
- name: "Install npm dependencies"
run: "poetry run invoke npm --command ci"
- name: "Calculate checksum of originally committed UI dist files"
shell: bash
run: |
original_checksum=$(find nautobot/project-static/dist -type f -exec md5sum {} + | sort -k 2 | md5sum)
echo "original_checksum=$original_checksum" >> "$GITHUB_ENV"
- name: "Build UI from source"
run: "poetry run invoke ui-build"
- name: "Re-calculate checksum of UI dist files after the build"
shell: bash
run: |
updated_checksum=$(find nautobot/project-static/dist -type f -exec md5sum {} + | sort -k 2 | md5sum)
echo "updated_checksum=$updated_checksum" >> "$GITHUB_ENV"
- name: "Compare calculated checksums"
run: |
echo "Comparing UI dist files checksums: \"$original_checksum\" and \"$updated_checksum\"."
if [ "$original_checksum" = "$updated_checksum" ]; then
echo "Checksums match."
else
>&2 echo "ERROR: Checksums do not match. Please verify build."
exit 1
fi
tests-postgres:
name: "Unit tests (PostgreSQL and Python 3.10)"
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_DB_USER: "nautobot"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.postgresql"
services:
postgres:
image: "postgres:13-alpine"
env:
POSTGRES_USER: "nautobot"
POSTGRES_PASSWORD: "decinablesprewad"
POSTGRES_DB: "nautobot"
ports:
- "5432:5432"
redis:
image: "redis:6-alpine"
ports:
- "6379:6379"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "" # override default "--only dev"
poetry-version: "2.1.4"
python-version: "3.10"
- name: "Run unittest"
run: "poetry run invoke tests --failfast --no-keepdb --no-cache-test-fixtures --parallel"
needs:
- "check-migrations"
- "check-schema"
- "compress-images"
- "docs"
- "hadolint"
- "markdownlint"
- "ruff"
- "yamllint"
- "ui-code-check"
- "djhtml"
- "djlint"
tests-mysql-plus-coverage:
name: "Unit tests (MySQL and Python 3.13) plus test coverage reporting"
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_DB_USER: "root"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_HOST: "127.0.0.1"
NAUTOBOT_DB_PORT: "3306"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.mysql"
permissions:
pull-requests: "write"
contents: "write"
services:
mysql:
image: "mysql:8"
env:
MYSQL_ROOT_PASSWORD: "decinablesprewad"
MYSQL_PASSWORD: "decinablesprewad"
MYSQL_DATABASE: "nautobot"
ports:
- "3306:3306"
redis:
image: "redis:6-alpine"
ports:
- "6379:6379"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Install Required Dependencies for MySQL Client"
run: "sudo apt-get update && sudo apt-get install --no-install-recommends -y default-libmysqlclient-dev gcc"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--extras mysql"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Run unittest"
run: "poetry run invoke tests --failfast --no-keepdb --no-cache-test-fixtures --parallel --coverage"
- name: "Generate coverage comment"
if: >
contains(fromJson('["ltm-1.6","develop","next"]'), github.base_ref) &&
(github.head_ref != 'main') && (!startsWith(github.head_ref, 'release'))
id: "coverage_comment"
uses: "py-cov-action/python-coverage-comment-action@d1ff8fbb5ff80feedb3faa0f6d7b424f417ad0e1" # v3.30
with:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
MINIMUM_GREEN: 90
MINIMUM_ORANGE: 80
ANNOTATE_MISSING_LINES: true
ANNOTATION_TYPE: "warning"
- name: "Store Pull Request comment to be posted"
if: >
contains(fromJson('["ltm-1.6","develop","next"]'), github.base_ref) &&
(github.head_ref != 'main') && (!startsWith(github.head_ref, 'release'))
uses: "actions/upload-artifact@v4"
with:
name: "python-coverage-comment-action"
path: "python-coverage-comment-action.txt"
needs:
- "check-migrations"
- "check-schema"
- "compress-images"
- "docs"
- "hadolint"
- "markdownlint"
- "ruff"
- "yamllint"
- "ui-code-check"
- "djhtml"
- "djlint"
# tests-doltsql:
# name: "Unit tests (DoltSQL and Python 3.13)"
# runs-on: "ubuntu-24.04"
# env:
# INVOKE_NAUTOBOT_LOCAL: "True"
# NAUTOBOT_DB_USER: "root"
# NAUTOBOT_DB_PASSWORD: "decinablesprewad"
# NAUTOBOT_DB_HOST: "127.0.0.1"
# NAUTOBOT_DB_PORT: "3306"
# NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.mysql"
# services:
# redis:
# image: "redis:6-alpine"
# ports:
# - "6379:6379"
# steps:
# - name: "Check out repository code"
# uses: "actions/checkout@v4"
# - name: "Build custom DoltSQL Docker image"
# run: docker build -f development/Dockerfile-dolt -t custom-dolt .
# - name: "Run DoltSQL container"
# run: |
# docker run -d --name doltsql \
# -p 3306:3306 \
# custom-dolt \
# /bin/sh -c "dolt --ignore-lock-file sql-server --config=/var/lib/nautobot/dolt-config.yaml"
# - name: "Install Required Dependencies for MySQL Client"
# run: "sudo apt-get update && sudo apt-get install --no-install-recommends -y default-libmysqlclient-dev gcc"
# - name: "Setup environment"
# uses: "networktocode/gh-action-setup-poetry-environment@v6"
# with:
# poetry-install-options: "--extras mysql"
# poetry-version: "1.8.5"
# python-version: "3.13"
# - name: "Run unittest"
# run: "poetry run invoke tests --no-keepdb --no-cache-test-fixtures --no-parallel"
# needs:
# - "check-migrations"
# - "check-schema"
# - "hadolint"
# - "markdownlint"
# - "ruff"
# - "yamllint"
# - "ui-code-check"
# - "djhtml"
# - "djlint"
migration-tests-mysql:
name: "Run migrations against test dataset (MySQL and Python 3.10)"
runs-on: "ubuntu-24.04"
env:
MIGRATION_TEST_DATASET: "development/datasets/nautobot_1.5.16_mysql.tar.gz"
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_CONFIG: "nautobot/core/tests/nautobot_config.py"
NAUTOBOT_DB_USER: "root"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_HOST: "127.0.0.1"
NAUTOBOT_DB_PORT: "3306"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.mysql"
services:
mysql:
image: "mysql:8"
env:
MYSQL_ROOT_PASSWORD: "decinablesprewad"
MYSQL_PASSWORD: "decinablesprewad"
MYSQL_DATABASE: "nautobot"
ports:
- "3306:3306"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Install Required Dependencies for MySQL Client"
run: "sudo apt-get update && sudo apt-get install --no-install-recommends -y default-libmysqlclient-dev gcc"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--extras mysql"
poetry-version: "2.1.4"
python-version: "3.10"
- name: "Run migration test"
run: "poetry run invoke migration-test --db-engine mysql --dataset $MIGRATION_TEST_DATASET"
needs:
- "check-migrations"
- "check-schema"
- "compress-images"
- "docs"
- "hadolint"
- "markdownlint"
- "ruff"
- "yamllint"
- "ui-code-check"
- "djhtml"
- "djlint"
migration-tests-postgres:
name: "Run migrations against test dataset (PostgreSQL and Python 3.13)"
runs-on: "ubuntu-24.04"
env:
MIGRATION_TEST_DATASET: "development/datasets/nautobot_1.5.16_postgres.tar.gz"
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_CONFIG: "nautobot/core/tests/nautobot_config.py"
NAUTOBOT_DB_USER: "nautobot"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.postgresql"
PGPASSWORD: "decinablesprewad"
services:
postgres:
image: "postgres:13-alpine"
env:
POSTGRES_USER: "nautobot"
POSTGRES_PASSWORD: "decinablesprewad"
POSTGRES_DB: "nautobot"
ports:
- "5432:5432"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "" # override default "--only dev"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Run migration test"
run: "poetry run invoke migration-test --db-engine postgres --dataset $MIGRATION_TEST_DATASET"
needs:
- "check-migrations"
- "check-schema"
- "compress-images"
- "docs"
- "hadolint"
- "markdownlint"
- "ruff"
- "yamllint"
- "ui-code-check"
- "djhtml"
- "djlint"
integration-test:
runs-on: "ubuntu-24.04"
env:
INVOKE_NAUTOBOT_LOCAL: "True"
NAUTOBOT_DB_USER: "nautobot"
NAUTOBOT_DB_PASSWORD: "decinablesprewad"
NAUTOBOT_DB_ENGINE: "django_prometheus.db.backends.postgresql"
NAUTOBOT_SELENIUM_URL: "http://localhost:4444/wd/hub"
services:
postgres:
image: "postgres:13-alpine"
env:
POSTGRES_USER: "nautobot"
POSTGRES_PASSWORD: "decinablesprewad"
POSTGRES_DB: "nautobot"
ports:
- "5432:5432"
redis:
image: "redis:6-alpine"
ports:
- "6379:6379"
selenium:
image: "selenium/standalone-firefox:4.27"
ports:
- "4444:4444"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "" # override default "--only dev"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Run Integration Tests"
# If NAUTOBOT_SELENIUM_HOST is set to 'localhost' or '127.0.0.1' the connection does not work
run: "NAUTOBOT_SELENIUM_HOST=`hostname -f` poetry run invoke tests --tag integration --no-keepdb"
needs:
- "check-migrations"
- "check-schema"
- "compress-images"
- "docs"
- "hadolint"
- "markdownlint"
- "ruff"
- "yamllint"
- "ui-code-check"
- "djhtml"
- "djlint"
changelog:
if: ${{ (contains(fromJson('["develop","next"]'), github.base_ref)) || (startsWith(github.base_ref, 'ltm')) }}
runs-on: "ubuntu-24.04"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
with:
fetch-depth: "0"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v6"
with:
poetry-install-options: "--only dev"
poetry-version: "2.1.4"
python-version: "3.13"
- name: "Check for changelog entry"
run: |
git fetch --no-tags origin +refs/heads/${{ github.base_ref }}:refs/remotes/origin/${{ github.base_ref }}
poetry run towncrier check --compare-with origin/${{ github.base_ref }}
container-build-test:
name: "Test Container Build (amd64 only on Python 3.13)"
runs-on: "ubuntu-24.04"
needs:
- "check-migrations"
- "check-schema"
- "compress-images"
- "docs"
- "hadolint"
- "markdownlint"
- "ruff"
- "yamllint"
- "ui-code-check"
- "djhtml"
- "djlint"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Set up QEMU"
uses: "docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7" # v2
- name: "Set up Docker Buildx"
uses: "docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55" # v2
- name: "Login to GitHub Container Registry"
uses: "docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc" # v2
with:
registry: "ghcr.io"
username: "${{ github.actor }}"
password: "${{ secrets.GITHUB_TOKEN }}"
- name: "Build `final`"
uses: "./.github/actions/build-nautobot-image"
with:
branch: "${{ github.head_ref }}"
image: "ghcr.io/nautobot/nautobot"
platforms: "linux/amd64"
push: "false"
python-version: "3.13"
tag-latest: "false"
tag-latest-for-branch: "false"
tag-latest-for-py: "false"
target: "final"
all-tests-passed:
runs-on: "ubuntu-24.04"
steps:
- run: "echo 'All tests succeeded'"
needs:
- "container-build-test"
- "integration-test"
- "migration-tests-mysql"
- "migration-tests-postgres"
- "pylint"
- "tests-mysql-plus-coverage"
- "tests-postgres"
- "ui-build-check"