From c7f4d61b82e084a10eeb2cdee2947ca741b1914c Mon Sep 17 00:00:00 2001
From: Clark Boylan <clark.boylan@gmail.com>
Date: Tue, 24 Jan 2023 10:33:12 -0800
Subject: [PATCH] Switch from tox to nox

Recent tox releases have put us on a config treadmill. Avoid these
issues entirely by using nox. Nox is a tox alternative that uses
standard tools like pip and should be simpler to use for us.

Change-Id: Ifce288808f535b5ee071dddc597ef54a6d3d03bb
Depends-On: https://review.opendev.org/883664
---
 .gitignore |  1 +
 .zuul.yaml |  4 ++--
 noxfile.py | 34 ++++++++++++++++++++++++++++++++++
 setup.cfg  |  7 +++++++
 tox.ini    | 24 ------------------------
 5 files changed, 44 insertions(+), 26 deletions(-)
 create mode 100644 noxfile.py
 delete mode 100644 tox.ini

diff --git a/.gitignore b/.gitignore
index d1c5cdb..305a3af 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 .tox
+.nox
 build/*
 *.pyc
 jeepyb/versioninfo
diff --git a/.zuul.yaml b/.zuul.yaml
index 6107d2f..0e78370 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -2,8 +2,8 @@
     check:
       jobs:
         - gerritlib-jeepyb-integration
-        - tox-pep8
+        - nox-linters
     gate:
       jobs:
         - gerritlib-jeepyb-integration
-        - tox-pep8
+        - nox-linters
diff --git a/noxfile.py b/noxfile.py
new file mode 100644
index 0000000..c6a7079
--- /dev/null
+++ b/noxfile.py
@@ -0,0 +1,34 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.  You may obtain
+# a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import nox
+
+
+nox.options.error_on_external_run = True
+nox.options.reuse_existing_virtualenvs = True
+nox.options.sessions = ["linters"]
+
+
+@nox.session(python="3")
+def linters(session):
+    session.install("-r", "requirements.txt")
+    session.install("-r", "test-requirements.txt")
+    session.install(".")
+    session.run("flake8")
+
+
+@nox.session(python="3")
+def venv(session):
+    session.install("-r", "requirements.txt")
+    session.install("-r", "test-requirements.txt")
+    session.install(".")
+    session.run(*session.posargs)
diff --git a/setup.cfg b/setup.cfg
index 73ab438..e14db8b 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -32,3 +32,10 @@ console_scripts =
     update-blueprint = jeepyb.cmd.update_blueprint:main
     update-bug = jeepyb.cmd.update_bug:main
     welcome-message = jeepyb.cmd.welcome_message:main
+
+[flake8]
+# E125 and H are intentionally ignored
+# W503 is a mistake in flake8
+ignore = E125,H,W503,W504
+show-source = True
+exclude = .venv,.tox,.nox,dist,doc,build,*.egg
diff --git a/tox.ini b/tox.ini
deleted file mode 100644
index 46bd1ce..0000000
--- a/tox.ini
+++ /dev/null
@@ -1,24 +0,0 @@
-[tox]
-envlist = pep8
-
-[testenv]
-setenv = VIRTUAL_ENV={envdir}
-deps = -r{toxinidir}/requirements.txt
-       -r{toxinidir}/test-requirements.txt
-basepython = python3
-
-[testenv:pep8]
-commands = flake8
-
-[testenv:pyflakes]
-commands = flake8
-
-[testenv:venv]
-commands = {posargs}
-
-[flake8]
-# E125 and H are intentionally ignored
-# W503 is a mistake in flake8
-ignore = E125,H,W503,W504
-show-source = True
-exclude = .venv,.tox,dist,doc,build,*.egg