From 65e2779048a66c2ff3db040f2b01cf3ac9e4eeae Mon Sep 17 00:00:00 2001 From: Noe Gaumont Date: Wed, 17 Feb 2021 11:00:55 +0100 Subject: [PATCH 1/2] feat(release-new): add a release-new transformation --- README.rst | 6 ++++ cube_doctor/doctor_hg.py | 2 ++ cube_doctor/transforms/add_release_new.py | 44 +++++++++++++++++++++++ tests/data/add_release_new/in/tox.ini | 8 +++++ tests/data/add_release_new/out/tox.ini | 17 +++++++++ tests/test_release_new.py | 20 +++++++++++ 6 files changed, 97 insertions(+) create mode 100644 cube_doctor/transforms/add_release_new.py create mode 100644 tests/data/add_release_new/in/tox.ini create mode 100644 tests/data/add_release_new/out/tox.ini create mode 100644 tests/test_release_new.py diff --git a/README.rst b/README.rst index 19b969e..57fd692 100644 --- a/README.rst +++ b/README.rst @@ -57,6 +57,12 @@ This command will: - or if a dev-requirements.txt exist, add it into it instead - modify .gitlag-ci.yml "py3" section to add "py3-deprecated-warnings.json" has an artifact +release-new +~~~~~~~~~~~ + +This command will modify the base tox.ini to add `release-new`. +This tox rule eases the creation of tag version correctly. + add-tox ~~~~~~~ diff --git a/cube_doctor/doctor_hg.py b/cube_doctor/doctor_hg.py index 944fa53..ca22553 100644 --- a/cube_doctor/doctor_hg.py +++ b/cube_doctor/doctor_hg.py @@ -18,6 +18,7 @@ from cube_doctor.transforms.add_pytest_deprecated_warnings import ( from cube_doctor.transforms.readme_rst import READMERst from cube_doctor.transforms.update_cube_licence_dates import UpdateCubeLicenceDates from cube_doctor.transforms.add_yamllint import AddYamlLint +from cube_doctor.transforms.add_release_new import AddReleaseNew from cube_doctor.transforms.run_script import RunScript from cube_doctor.transforms.regenerate_gitlab_ci import RegenerateGitlabCI from cube_doctor.transforms.rebase_all import RebaseAllMyMRs @@ -92,6 +93,7 @@ commands = { "add-pypi-publish": AddPypiPublish().workflow, "add-deb-publish": AddDebPublish().workflow, "add-yamllint": AddYamlLint().workflow, + "add-release-new": AddReleaseNew().workflow, "replace-set-attributes": ReplaceSetAttributesWithSetCW().workflow, "update-licence-dates": UpdateCubeLicenceDates().workflow, "auto-upgrade-dependencies": AutoUpgradeDependencies().workflow, diff --git a/cube_doctor/transforms/add_release_new.py b/cube_doctor/transforms/add_release_new.py new file mode 100644 index 0000000..008a691 --- /dev/null +++ b/cube_doctor/transforms/add_release_new.py @@ -0,0 +1,44 @@ +from tox.config import parseconfig + +from cube_doctor import Command + + +RELEASE_NEW = """ + +[testenv:release-new] +basepython = python3 +skip_install = true +passenv = + EDITOR +deps = + release-new +commands = release-new {posargs:-r auto} +""" + + +class AddReleaseNew(Command): + BRANCH_NAME = "topic/default/add_release_new" + commit_message = "chore(tox): add release-new" + + base_query = "?project lgg:is_cube true . ?project lgg:has_tox true" + + AUTO_MR_AUTO_MERGE = False + + def pre_check(self, root_files): + if "tox.ini" in root_files: + return "continue" + + def modify_code(self, cube, repo, root_files, branches, other_args): + tox_ini_path = repo.path / "tox.ini" + tox = parseconfig(["-c", str(tox_ini_path)]) + + if "release-new" in tox.envconfigs: + return + + tox_content = repo.read_file("tox.ini") + + tox_content = tox_content.rstrip() + RELEASE_NEW + + repo.write_file("tox.ini", tox_content) + + yield {"branch_name": self.BRANCH_NAME, "commit_message": self.commit_message} diff --git a/tests/data/add_release_new/in/tox.ini b/tests/data/add_release_new/in/tox.ini new file mode 100644 index 0000000..0efebd8 --- /dev/null +++ b/tests/data/add_release_new/in/tox.ini @@ -0,0 +1,8 @@ +[tox] +envlist = py3 + +[testenv] +deps = + pytest +commands = + {envpython} -m pytest {posargs:test} diff --git a/tests/data/add_release_new/out/tox.ini b/tests/data/add_release_new/out/tox.ini new file mode 100644 index 0000000..8258740 --- /dev/null +++ b/tests/data/add_release_new/out/tox.ini @@ -0,0 +1,17 @@ +[tox] +envlist = py3 + +[testenv] +deps = + pytest +commands = + {envpython} -m pytest {posargs:test} + +[testenv:release-new] +basepython = python3 +skip_install = true +passenv = + EDITOR +deps = + release-new +commands = release-new {posargs:-r auto} diff --git a/tests/test_release_new.py b/tests/test_release_new.py new file mode 100644 index 0000000..ad5f047 --- /dev/null +++ b/tests/test_release_new.py @@ -0,0 +1,20 @@ +import unittest + +from cube_doctor.transforms.add_release_new import AddReleaseNew + +from . import BaseCommandTC, TEST_DATA + + +class AddReleaseNewTC(BaseCommandTC): + def test_addrelease_new(self): + data_input = TEST_DATA / "add_release_new" / "in" + data_output = TEST_DATA / "add_release_new" / "out" + self.base_execution(AddReleaseNew(), data_input, data_output) + + def test_addrelease_new_indempotent(self): + data_output = TEST_DATA / "add_release_new" / "out" + self.base_execution(AddReleaseNew(), data_output, data_output) + + +if __name__ == "__main__": + unittest.main() -- GitLab From 77ad22b6b15ded87970d30337faaed3270b28259 Mon Sep 17 00:00:00 2001 From: Noe Gaumont Date: Wed, 17 Feb 2021 11:01:42 +0100 Subject: [PATCH 2/2] revert: remove add_new_version --- cube_doctor/doctor_hg.py | 2 - cube_doctor/transforms/add_new_version.py | 65 ----------------------- 2 files changed, 67 deletions(-) delete mode 100644 cube_doctor/transforms/add_new_version.py diff --git a/cube_doctor/doctor_hg.py b/cube_doctor/doctor_hg.py index ca22553..924eccf 100644 --- a/cube_doctor/doctor_hg.py +++ b/cube_doctor/doctor_hg.py @@ -4,7 +4,6 @@ import subprocess from cube_doctor import EmptyCubeQueryResult -# from cube_doctor.transforms.add_new_version import AddNewVersion from cube_doctor.transforms.add_tox import AddTox # noqa from cube_doctor.transforms.add_pypi_publish import AddPypiPublish from cube_doctor.transforms.add_deb_publish import AddDebPublish @@ -100,7 +99,6 @@ commands = { "regenerate-gitlab-ci": RegenerateGitlabCI().workflow, "run-script": RunScript().workflow, "rebase-all-my-mrs": RebaseAllMyMRs().workflow, - # "add-new-version": AddNewVersion().workflow, } diff --git a/cube_doctor/transforms/add_new_version.py b/cube_doctor/transforms/add_new_version.py deleted file mode 100644 index a9a4d3c..0000000 --- a/cube_doctor/transforms/add_new_version.py +++ /dev/null @@ -1,65 +0,0 @@ -from tox.config import parseconfig - -from cube_doctor import Command - -NEW_VERSION = """ - -[testenv:new-version] -basepython = python3 -skip_install = true -passenv = DEBEMAIL DEBFULLNAME -whitelist_externals = - sh - dch -commands = - sh -c "while [ -z $CONTINUE ]; do read -p 'Make a new version ? [y/n]: ' -r CONTINUE; done; \\ - if [ $CONTINUE != 'y' ] && [ $CONTINUE != 'Y' ] ; \\ - then \\ - echo Exiting version creation ;\\ - exit 1 ; \\ - fi" - sh -c "if [ ! command -v dch &> /dev/null] ; \\ - then \\ - echo dch could not be found ; \\ - exit 1 ; \\ - fi" - sh -c "if [ -z $DEBEMAIL ] || [ -z $DEBFULLNAME ] ; \\ - then \\ - echo Define the env variable DEBEMAIL and DEBFULLNAME ;\\ - exit 1 ; \\ - fi" - sh -c "echo -c '\\n\\n\\n\\nPlease verify what should be committed'" - sh -c "VERSION=$(python3 setup.py --version) && \\ - dch -v $VERSION'-'1 -D unstable 'New upstream release' && \\ - hg commit -i -m '[pkg] version '$VERSION && \\ - hg tag -r . $VERSION debian/$VERSION" -""" - - -class AddNewVersion(Command): - BRANCH_NAME = "topic/default/new-version" - commit_message = "chore(tox): add new-version" - TARGETS = ("cubes",) - base_query = "?project lgg:has_new_version false . " "?project lgg:has_tox true" - - def pre_check(self, root_files): - if "tox.ini" not in root_files: - return "continue" - - if "setup.py" not in root_files: - return "continue" - - def modify_code(self, cube, repo, root_files, branches, other_args): - tox_ini_path = repo.path / "tox.ini" - tox = parseconfig(["-c", str(tox_ini_path)]) - - if "new-version" in tox.envconfigs: - return - - tox_content = repo.read_file("tox.ini") - - tox_content = tox_content.rstrip() + NEW_VERSION - - repo.write_file("tox.ini", tox_content) - - yield {"branch_name": self.BRANCH_NAME, "commit_message": self.commit_message} -- GitLab