Skip to content

Add LB side panels under IP Address detail view (#8299) #3202

Add LB side panels under IP Address detail view (#8299)

Add LB side panels under IP Address detail view (#8299) #3202

---
# Full CI for commits to the integration branches (main, develop, next)
name: "CI - Integration Branch"
on: # yamllint disable
push:
branches:
- "main"
- "develop"
- "next"
workflow_call:
workflow_dispatch:
jobs:
security-tooling:
name: "Security Tooling"
runs-on: "ubuntu-24.04"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v4"
- name: "Security checks"
uses: "./.github/actions/security-checks"
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"
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.13)"
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.13"
- name: "Run unittest"
run: "poetry run invoke tests --failfast --no-keepdb --no-cache-test-fixtures --parallel"
tests-mysql:
name: "Unit tests (MySQL and Python 3.10)"
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:
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.10"
- name: "Run unittest"
run: "poetry run invoke tests --failfast --no-keepdb --no-cache-test-fixtures --parallel"
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"
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"
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"
container-build:
name: "Build Container Images (GHCR Only)"
runs-on: "ubuntu-24.04"
if: |
github.event_name == 'push' &&
(github.ref_name == 'develop' || github.ref_name == 'next' || github.ref_name == 'ltm-1.6')
needs:
- "check-schema"
- "integration-test"
- "migration-tests-mysql"
- "migration-tests-postgres"
- "tests-mysql"
- "tests-postgres"
- "ui-build-check"
strategy:
fail-fast: true
matrix:
python-version: [ "3.10", "3.11", "3.12", "3.13" ]
steps:
- name: "Configuration"
id: "config"
shell: "bash"
run: |
export BRANCH="${{ github.ref_name }}"
export TAG_LATEST="false"
export TAG_LATEST_FOR_BRANCH="false"
export TAG_LATEST_FOR_PY="false"
if [[ "${{ matrix.python-version }}" == "3.13" ]]; then
export TAG_LATEST_FOR_BRANCH="true"
fi
echo "branch=$BRANCH" >> $GITHUB_OUTPUT
echo "tag-latest=$TAG_LATEST" >> $GITHUB_OUTPUT
echo "tag-latest-for-branch=$TAG_LATEST_FOR_BRANCH" >> $GITHUB_OUTPUT
echo "tag-latest-for-py=$TAG_LATEST_FOR_PY" >> $GITHUB_OUTPUT
- 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` (amd64 only)"
if: |
steps.config.outputs.tag-latest-for-branch == 'true'
uses: "./.github/actions/build-nautobot-image"
with:
branch: "${{ steps.config.outputs.branch }}"
image: "ghcr.io/nautobot/nautobot"
platforms: "linux/amd64"
push: "false"
python-version: "${{ matrix.python-version }}"
tag-latest: "${{ steps.config.outputs.tag-latest }}"
tag-latest-for-branch: "${{ steps.config.outputs.tag-latest-for-branch }}"
tag-latest-for-py: "${{ steps.config.outputs.tag-latest-for-py }}"
target: "final"
- name: "Build and Push `final-dev` (amd64 only)"
if:
steps.config.outputs.tag-latest-for-branch != 'true' ||
steps.config.outputs.branch != 'next'
uses: "./.github/actions/build-nautobot-image"
with:
branch: "${{ steps.config.outputs.branch }}"
image: "ghcr.io/nautobot/nautobot-dev"
platforms: "linux/amd64"
push: "true"
python-version: "${{ matrix.python-version }}"
tag-latest: "${{ steps.config.outputs.tag-latest }}"
tag-latest-for-branch: "${{ steps.config.outputs.tag-latest-for-branch }}"
tag-latest-for-py: "${{ steps.config.outputs.tag-latest-for-py }}"
target: "final-dev"
- name: "Build and Push `final-dev` (amd64 + arm64) for 3.13 + next"
if:
steps.config.outputs.tag-latest-for-branch == 'true' &&
steps.config.outputs.branch == 'next'
uses: "./.github/actions/build-nautobot-image"
with:
branch: "${{ steps.config.outputs.branch }}"
image: "ghcr.io/nautobot/nautobot-dev"
platforms: "linux/amd64,linux/arm64"
push: "true"
python-version: "${{ matrix.python-version }}"
tag-latest: "${{ steps.config.outputs.tag-latest }}"
tag-latest-for-branch: "${{ steps.config.outputs.tag-latest-for-branch }}"
tag-latest-for-py: "${{ steps.config.outputs.tag-latest-for-py }}"
target: "final-dev"