Skip to content

Commit

Permalink
Merge branch 'develop' into ab_contract_type_ltm
Browse files Browse the repository at this point in the history
  • Loading branch information
qduk authored Oct 20, 2023
2 parents ad4e181 + f9506c1 commit f2ddee4
Show file tree
Hide file tree
Showing 81 changed files with 4,174 additions and 4,722 deletions.
151 changes: 91 additions & 60 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
---
name: "CI"
on: # yamllint disable-line rule:truthy
on: # yamllint disable-line rule:truthy rule:comments
- "push"
- "pull_request"

concurrency: # Cancel any existing runs of this workflow for this same PR
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true
env:
PLUGIN_NAME: "nautobot-device-lifecycle-mgmt"

Expand All @@ -30,8 +32,6 @@ jobs:
uses: "networktocode/gh-action-setup-poetry-environment@v2"
- name: "Linting: bandit"
run: "poetry run invoke bandit"
needs:
- "black"
pydocstyle:
runs-on: "ubuntu-20.04"
env:
Expand All @@ -43,8 +43,6 @@ jobs:
uses: "networktocode/gh-action-setup-poetry-environment@v2"
- name: "Linting: pydocstyle"
run: "poetry run invoke pydocstyle"
needs:
- "black"
flake8:
runs-on: "ubuntu-20.04"
env:
Expand All @@ -56,8 +54,6 @@ jobs:
uses: "networktocode/gh-action-setup-poetry-environment@v2"
- name: "Linting: flake8"
run: "poetry run invoke flake8"
needs:
- "black"
yamllint:
runs-on: "ubuntu-20.04"
env:
Expand All @@ -69,18 +65,22 @@ jobs:
uses: "networktocode/gh-action-setup-poetry-environment@v2"
- name: "Linting: yamllint"
run: "poetry run invoke yamllint"
pylint:
needs:
- "bandit"
- "pydocstyle"
- "flake8"
- "yamllint"
- "black"
build:
runs-on: "ubuntu-20.04"
strategy:
fail-fast: true
matrix:
python-version: ["3.8", "3.9", "3.10"]
nautobot-version: ["1.4.10", "stable"]
python-version: ["3.11"]
nautobot-version: ["2.0.0"]
env:
INVOKE_NAUTOBOT_DEVICE_LIFECYCLE_MGMT_PYTHON_VER: "${{ matrix.python-version }}"
INVOKE_NAUTOBOT_DEVICE_LIFECYCLE_MGMT_NAUTOBOT_VER: "${{ matrix.nautobot-version }}"
runs-on: "ubuntu-20.04"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v2"
Expand All @@ -95,59 +95,37 @@ jobs:
builder: "${{ steps.buildx.outputs.name }}"
context: "./"
push: false
load: true
tags: "${{ env.PLUGIN_NAME }}/nautobot:${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
file: "./development/Dockerfile"
cache-from: "type=gha,scope=${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
cache-to: "type=gha,scope=${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
outputs: "type=docker,dest=/tmp/${{ env.PLUGIN_NAME }}-${{ matrix.nautobot-version }}-py${{ matrix.python-version }}.tar"
build-args: |
NAUTOBOT_VER=${{ matrix.nautobot-version }}
PYTHON_VER=${{ matrix.python-version }}
- name: "Upload the docker image"
uses: "actions/upload-artifact@v2"
with:
name: "${{ env.PLUGIN_NAME }}-${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
path: "/tmp/${{ env.PLUGIN_NAME }}-${{ matrix.nautobot-version }}-py${{ matrix.python-version }}.tar"
retention-days: 1
needs:
- "bandit"
- "pydocstyle"
- "flake8"
- "yamllint"
pylint:
strategy:
fail-fast: true
matrix:
python-version: ["3.8"]
nautobot-version: ["1.4.10"]
env:
INVOKE_NAUTOBOT_DEVICE_LIFECYCLE_MGMT_PYTHON_VER: "${{ matrix.python-version }}"
INVOKE_NAUTOBOT_DEVICE_LIFECYCLE_MGMT_NAUTOBOT_VER: "${{ matrix.nautobot-version }}"
runs-on: "ubuntu-20.04"
steps:
- name: "Check out repository code"
uses: "actions/checkout@v2"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v2"
- name: "Download the docker image"
uses: "actions/download-artifact@v2"
with:
name: "${{ env.PLUGIN_NAME }}-${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
path: "/tmp"
- name: "Load the image"
run: "docker load < /tmp/${{ env.PLUGIN_NAME }}-${{ matrix.nautobot-version }}-py${{ matrix.python-version }}.tar"
- name: "Copy credentials"
run: "cp development/creds.example.env development/creds.env"
- name: "Linting: pylint"
run: "poetry run invoke pylint"
needs:
- "build"
unittest:
needs:
- "pylint"
strategy:
fail-fast: true
matrix:
python-version: ["3.8", "3.9", "3.10"]
nautobot-version: ["1.4.10", "stable"]
python-version: ["3.8"]
db-backend: ["postgresql"]
nautobot-version: ["2.0.0"]
# The include is a method to limit the amount of jobs ran. This essentially
# means that in addition to standard postgres and stable, also the lowest
# supported version and with mysql
include:
- python-version: "3.11"
db-backend: "postgresql"
nautobot-version: "2.0.0"
- python-version: "3.11"
db-backend: "postgresql"
nautobot-version: "stable"
runs-on: "ubuntu-20.04"
env:
INVOKE_NAUTOBOT_DEVICE_LIFECYCLE_MGMT_PYTHON_VER: "${{ matrix.python-version }}"
Expand All @@ -157,20 +135,33 @@ jobs:
uses: "actions/checkout@v2"
- name: "Setup environment"
uses: "networktocode/gh-action-setup-poetry-environment@v2"
- name: "Download the docker image"
uses: "actions/download-artifact@v2"
- name: "Set up Docker Buildx"
id: "buildx"
uses: "docker/setup-buildx-action@v1"
- name: "Build"
uses: "docker/build-push-action@v2"
with:
name: "${{ env.PLUGIN_NAME }}-${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
path: "/tmp"
- name: "Load the image"
run: "docker load < /tmp/${{ env.PLUGIN_NAME }}-${{ matrix.nautobot-version }}-py${{ matrix.python-version }}.tar"
builder: "${{ steps.buildx.outputs.name }}"
context: "./"
push: false
load: true
tags: "${{ env.PLUGIN_NAME }}/nautobot:${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
file: "./development/Dockerfile"
cache-from: "type=gha,scope=${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
cache-to: "type=gha,scope=${{ matrix.nautobot-version }}-py${{ matrix.python-version }}"
build-args: |
NAUTOBOT_VER=${{ matrix.nautobot-version }}
PYTHON_VER=${{ matrix.python-version }}
- name: "Copy credentials"
run: "cp development/creds.example.env development/creds.env"
- name: "Use Mysql invoke settings when needed"
run: "cp invoke.mysql.yml invoke.yml"
if: "${{ matrix.db-backend == 'mysql' }}"
- name: "Run Tests"
run: "poetry run invoke unittest"
needs:
- "pylint"
publish_gh:
needs:
- "unittest"
name: "Publish to GitHub"
runs-on: "ubuntu-20.04"
if: "startsWith(github.ref, 'refs/tags/v')"
Expand All @@ -187,6 +178,10 @@ jobs:
run: "echo RELEASE_VERSION=${GITHUB_REF:10} >> $GITHUB_ENV"
- name: "Run Poetry Version"
run: "poetry version $RELEASE_VERSION"
- name: "Install Dependencies (needed for mkdocs)"
run: "poetry install"
- name: "Build Documentation"
run: "poetry run mkdocs build --no-directory-urls --strict"
- name: "Run Poetry Build"
run: "poetry build"
- name: "Upload binaries to release"
Expand All @@ -197,9 +192,9 @@ jobs:
tag: "${{ github.ref }}"
overwrite: true
file_glob: true
publish_pypi:
needs:
- "unittest"
publish_pypi:
name: "Push Package to PyPI"
runs-on: "ubuntu-20.04"
if: "startsWith(github.ref, 'refs/tags/v')"
Expand All @@ -216,12 +211,48 @@ jobs:
run: "echo RELEASE_VERSION=${GITHUB_REF:10} >> $GITHUB_ENV"
- name: "Run Poetry Version"
run: "poetry version $RELEASE_VERSION"
- name: "Install Dependencies (needed for mkdocs)"
run: "poetry install"
- name: "Build Documentation"
run: "poetry run mkdocs build --no-directory-urls --strict"
- name: "Run Poetry Build"
run: "poetry build"
- name: "Push to PyPI"
uses: "pypa/gh-action-pypi-publish@release/v1"
with:
user: "__token__"
password: "${{ secrets.PYPI_API_TOKEN }}"
slack-notify:
needs:
- "unittest"
- "publish_gh"
- "publish_pypi"
runs-on: "ubuntu-20.04"
env:
SLACK_WEBHOOK_URL: "${{ '{{ secrets.SLACK_WEBHOOK_URL }}' }}"
SLACK_MESSAGE: >-
*NOTIFICATION: NEW-RELEASE-PUBLISHED*\n
Repository: <${{ github.server_url }}/${{ github.repository }}|${{ github.repository }}>\n
Release: <${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ github.ref_name }}|${{ github.ref_name }}>\n
Published by: <${{ github.server_url }}/${{ github.actor }}|${{ github.actor }}>
steps:
- name: "Send a notification to Slack"
# ENVs cannot be used directly in job.if. This is a workaround to check
# if SLACK_WEBHOOK_URL is present.
if: "${{ env.SLACK_WEBHOOK_URL != '' }}"
uses: "slackapi/[email protected]"
with:
payload: |
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "${{ env.SLACK_MESSAGE }}"
}
}
]
}
env:
SLACK_WEBHOOK_URL: "${{ secrets.SLACK_WEBHOOK_URL }}"
SLACK_WEBHOOK_TYPE: "INCOMING_WEBHOOK"
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -285,3 +285,6 @@ docker-compose.override.yml
override.env
invoke.yml
*.dccache

# MKDocs Build
nautobot_device_lifecycle_mgmt/static/nautobot_device_lifecycle_mgmt/docs
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
# CHANGELOG

## [v2.0.0] - 2023-09-29

### Added

- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Add support for Python 3.11.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Add uniqueness constraints to `ValidatedSoftwareLCM` and `VulnerabilityLCM` models.

### Changed

- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Metric `hw_end_of_support_site_gauge` has been renamed to `hw_end_of_support_location_gauge`. This now uses `location` label instead of `site`.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - `CVELCM` to `SoftwareLCM` relationship is now represented by `affected_softwares` M2M field on the `CVELCM` model. Reverse relationships on the `SoftwareLCM` model is accessed via `corresponding_cves` field.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - `ContractLCM` to `Device` relationship is now represented by `devices` M2M field on the `ContractLCM` model. Reverse relationships on the `Device` model is accessed via `device_contracts` field.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Replace all references to `slug` field with the primary key for each relevant model.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Replace all references to `device_role` field with `role` when working with `Device` model.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Replace references to `Site` model with `Location` model.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Simplify serializers. All serializers now inherit from `NautobotModelSerializer`.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - All forms now inherit from `NautobotModelForm`.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Migrate jobs to Nautobot 2.0 standard.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Update tests for Nautobot 2.0.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Migrate `View` classes to use `ViewSet`.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Model fields of type `TextField` and `CharField` that allowed Null values no longer do so and default to an empty string "".
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - `ContractLCM` to `InventoryItem` relationship key renamed from `contractlcm-to-inventoryitem` to `contractlcm_to_inventoryitem`. This is enforced by Nautobot 2.0.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Validated Software Device report url changed from `validated-software/device-report/` to `validated-software-device-report/` due to viewset routing changes.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Validated Software Inventory Items report url changed from `validated-software/inventoryitem-report/` to `validated-software-inventoryitem-report/` due to viewset routing changes.

### Removed

- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Remove support for Python 3.7.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Remove nested serializers.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Remove `to_csv()` csv export method from model classes. Rely on default csv export provided by Nautobot 2.0.
- [#207](https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/pull/207) - Remove unused dry-run option from jobs.


## [v1.3.3] - 2023-09-29

### Changed
Expand Down
13 changes: 8 additions & 5 deletions development/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
# -------------------------------------------------------------------------------------
# !!! USE CAUTION WHEN MODIFYING LINES BELOW

# Accepts a desired Nautobot version as build argument, default to 1.4
ARG NAUTOBOT_VER="1.4"
# Accepts a desired Nautobot version as build argument, default to 2.0.0
ARG NAUTOBOT_VER="2.0.0"

# Accepts a desired Python version as build argument, default to 3.8
ARG PYTHON_VER="3.8"
# Accepts a desired Python version as build argument, default to 3.10
ARG PYTHON_VER="3.10"

# Retrieve published development image of Nautobot base which should include most CI dependencies
FROM ghcr.io/nautobot/nautobot-dev:${NAUTOBOT_VER}-py${PYTHON_VER}
Expand All @@ -32,7 +32,7 @@ RUN curl -sSL https://install.python-poetry.org | python3 - && \
# !!! USE CAUTION WHEN MODIFYING LINES ABOVE
# -------------------------------------------------------------------------------------
# App-specifc system build/test dependencies.
#
#
# Example: LDAP requires `libldap2-dev` to be apt-installed before the Python package.
# -------------------------------------------------------------------------------------
# --> Start safe to modify section
Expand Down Expand Up @@ -76,3 +76,6 @@ RUN pip install -c constraints.txt -r poetry_freeze_dev.txt

COPY development/nautobot_config.py ${NAUTOBOT_ROOT}/nautobot_config.py
# !!! USE CAUTION WHEN MODIFYING LINES ABOVE

# With USER nautobot Coverage is unable to write to /source which is a locally mounted volume
USER root
8 changes: 2 additions & 6 deletions development/dev.env
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,15 @@
# Nautobot Configuration Environment Variables
ALLOWED_HOSTS=*
BANNER_TOP="Local"
CHANGELOG_RETENTION=0
MAX_PAGE_SIZE=0
METRICS_ENABLED=True
NAPALM_TIMEOUT=5
NAUTOBOT_CHANGELOG_RETENTION=0
NAUTOBOT_ROOT=/opt/nautobot

NAUTOBOT_DEBUG=True
NAUTOBOT_DJANGO_EXTENSIONS_ENABLED=True
NAUTOBOT_DJANGO_TOOLBAR_ENABLED=True
NAUTOBOT_LOG_LEVEL=DEBUG
NAUTOBOT_MAX_PAGE_SIZE=1000
NAUTOBOT_METRICS_ENABLED=True
NAUTOBOT_NAPALM_TIMEOUT=5
NAUTOBOT_MAX_PAGE_SIZE=0

# Redis Configuration Environment Variables
REDIS_HOST=redis
Expand Down
4 changes: 2 additions & 2 deletions development/docker-compose.base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ services:
celery_worker:
entrypoint:
- "sh"
- "-c" # this is to evaluate the $NAUTOBOT_LOG_LEVEL from the env
- "-c" # this is to evaluate the $NAUTOBOT_LOG_LEVEL from the env
- "watchmedo auto-restart --directory './' --pattern '*.py' --recursive -- nautobot-server celery worker -l $$NAUTOBOT_LOG_LEVEL --events"
depends_on:
- "nautobot"
Expand All @@ -51,7 +51,7 @@ services:
entrypoint:
- "sh"
- "-c"
- "nautobot-server celery beat -l $$NAUTOBOT_LOG_LEVEL" # this is to evaluate the $NAUTOBOT_LOG_LEVEL from the env
- "nautobot-server celery beat -l $$NAUTOBOT_LOG_LEVEL" # this is to evaluate the $NAUTOBOT_LOG_LEVEL from the env
healthcheck:
disable: true
depends_on:
Expand Down
Loading

0 comments on commit f2ddee4

Please sign in to comment.