
* Add release tool - Add tool for release managers to use to generate commits - I'm trying to only use stdlib so we have no depdencies ... - Default is to change date strings in hard coded documentation files + CHANGES.md - I write directly to files cause we have SCM to fix any screw ups ... - We hackily convert calver to ints to sort (all for better ideas here) - If we hit a ValueError we just set to 0 for sorting - This is alhpa + beta release we can safely ignore these days - Add new CI to only run release unittests in 3.12 only on all platforms - Update release docs - Checked with `mypy --strict` + ensure we are `black --preview` formatted :D Tests: - Run it to generate template PR - `python3.12 release.py --debug --add-changes-template` - Run it to cleanup CHANGE.md + change version in specified doc files ``` crl-m1:black cooper$ python3.12 release.py -d [2023-10-23 23:39:38,414] INFO: Current version detected to be 23.10.1 (release.py:221) [2023-10-23 23:39:38,414] INFO: Next version will be 23.10.2 (release.py:222) [2023-10-23 23:39:38,414] INFO: Cleaning up /Users/cooper/repos/black/CHANGES.md (release.py:127) [2023-10-23 23:39:38,416] DEBUG: Finished Cleaning up /Users/cooper/repos/black/CHANGES.md (release.py:147) [2023-10-23 23:39:38,416] INFO: Updating black version to 23.10.2 in /Users/cooper/repos/black/docs/integrations/source_version_control.md (release.py:173) [2023-10-23 23:39:38,416] DEBUG: Finished updating black version to 23.10.2 in /Users/cooper/repos/black/docs/integrations/source_version_control.md (release.py:185) [2023-10-23 23:39:38,416] INFO: Updating black version to 23.10.2 in /Users/cooper/repos/black/docs/usage_and_configuration/the_basics.md (release.py:173) [2023-10-23 23:39:38,417] DEBUG: Finished updating black version to 23.10.2 in /Users/cooper/repos/black/docs/usage_and_configuration/the_basics.md (release.py:185) ``` - Add tests around some key logic * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix lints + add git to release CI - Remove black + mypy as linting already runs it ... - Ignore delete param to TemporaryDirectory as we can't set mypy to 3.12 :D * Only run CI on linux/ubuntu for now * Add lots of debug printing + directly run unitests (not via coverage) * Overloading __str__ is bad on a TestCase * Add more logging around git tag * Print where git is in a step * Rollback creating a fake black repo as we were not using it - I did plan to but I can't get it working on GitHub actions * Do a deep checkout * Add noqa for E701,E761 ... maybe we need this in our flake8 config now? * Fix action to have correct workflow yaml to action on - Also add fix to not double run when we push directly to psf/black * All jelle suggestions - Fix bug missing lines ending with --> in CHANGES.md to delete ... - Update ci to run out of scripts dir too - Update test_tuple_calver --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import unittest
|
|
from pathlib import Path
|
|
from shutil import rmtree
|
|
from tempfile import TemporaryDirectory
|
|
from typing import Any
|
|
from unittest.mock import Mock, patch
|
|
|
|
from release import SourceFiles, tuple_calver # type: ignore
|
|
|
|
|
|
class FakeDateTime:
|
|
"""Used to mock the date to test generating next calver function"""
|
|
|
|
def today(*args: Any, **kwargs: Any) -> "FakeDateTime": # noqa
|
|
return FakeDateTime()
|
|
|
|
# Add leading 0 on purpose to ensure we remove it
|
|
def strftime(*args: Any, **kwargs: Any) -> str: # noqa
|
|
return "69.01"
|
|
|
|
|
|
class TestRelease(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
# We only test on >= 3.12
|
|
self.tempdir = TemporaryDirectory(delete=False) # type: ignore
|
|
self.tempdir_path = Path(self.tempdir.name)
|
|
self.sf = SourceFiles(self.tempdir_path)
|
|
|
|
def tearDown(self) -> None:
|
|
rmtree(self.tempdir.name)
|
|
return super().tearDown()
|
|
|
|
@patch("release.get_git_tags")
|
|
def test_get_current_version(self, mocked_git_tags: Mock) -> None:
|
|
mocked_git_tags.return_value = ["1.1.0", "69.1.0", "69.1.1", "2.2.0"]
|
|
self.assertEqual("69.1.1", self.sf.get_current_version())
|
|
|
|
@patch("release.get_git_tags")
|
|
@patch("release.datetime", FakeDateTime)
|
|
def test_get_next_version(self, mocked_git_tags: Mock) -> None:
|
|
# test we handle no args
|
|
mocked_git_tags.return_value = []
|
|
self.assertEqual(
|
|
"69.1.0",
|
|
self.sf.get_next_version(),
|
|
"Unable to get correct next version with no git tags",
|
|
)
|
|
|
|
# test we handle
|
|
mocked_git_tags.return_value = ["1.1.0", "69.1.0", "69.1.1", "2.2.0"]
|
|
self.assertEqual(
|
|
"69.1.2",
|
|
self.sf.get_next_version(),
|
|
"Unable to get correct version with 2 previous versions released this"
|
|
" month",
|
|
)
|
|
|
|
def test_tuple_calver(self) -> None:
|
|
first_month_release = tuple_calver("69.1.0")
|
|
second_month_release = tuple_calver("69.1.1")
|
|
self.assertEqual((69, 1, 0), first_month_release)
|
|
self.assertEqual((0, 0, 0), tuple_calver("69.1.1a0")) # Hack for alphas/betas
|
|
self.assertTrue(first_month_release < second_month_release)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|