diff --git a/ansible_base/__init__.py b/ansible_base/__init__.py index 3bc99b1d4..63822573f 100644 --- a/ansible_base/__init__.py +++ b/ansible_base/__init__.py @@ -1,15 +1,18 @@ try: - from ._version import version -except ImportError: - version = 'Unknown' + from ._version import __version__, __version_tuple__ # noqa: F401 +except Exception: + import datetime + import subprocess + from typing import Tuple, Union -from typing import Tuple, Union + calver_now = datetime.datetime.now().strftime("%Y.%m.%d") + shaw = subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD']).decode('ascii').strip() -VERSION_TUPLE = Tuple[Union[int, str], ...] + VERSION_TUPLE = Tuple[Union[int, str], ...] -__version__: str -__version_tuple__: VERSION_TUPLE -version_tuple: VERSION_TUPLE + __version__: str + __version_tuple__: VERSION_TUPLE + version_tuple: VERSION_TUPLE -__version__ = version -__version_tuple__ = version_tuple = tuple(version.split('.')) + __version__ = f'{calver_now}-{shaw}' + __version_tuple__ = version_tuple = tuple(__version__.split('.')) diff --git a/ansible_base/_version.py b/ansible_base/_version.py deleted file mode 100644 index 9ecf7ca65..000000000 --- a/ansible_base/_version.py +++ /dev/null @@ -1,6 +0,0 @@ -import datetime -import subprocess - -calver_now = datetime.datetime.now().strftime("%Y.%m.%d") -shaw = subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD']).decode('ascii').strip() -version = f'{calver_now}-{shaw}' diff --git a/pyproject.toml b/pyproject.toml index aa425ffe0..f9d27e7f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,9 +29,6 @@ classifiers = [ ] dynamic = ["version", "dependencies", "optional-dependencies"] -[tool.setuptools] -include-package-data = false - [tool.setuptools.packages.find] include = ["ansible_base*"] @@ -51,14 +48,15 @@ optional-dependencies.rest_filters = { file = [ "requirements/requirements_rest_ optional-dependencies.channel_auth = { file = [ "requirements/requirements_channels.in" ] } optional-dependencies.jwt_consumer = { file = [ "requirements/requirements_jwt_consumer.in" ] } optional-dependencies.testing = { file = [ "requirements/requirements_testing.in" ] } -version = {attr = "ansible_base.__version__"} [build-system] -requires = ["setuptools>=64"] +requires = ["setuptools>=64", "setuptools_scm>=8"] build-backend = 'setuptools.build_meta' [tool.setuptools_scm] version_scheme = "calver-by-date" +version_file = 'ansible_base/_version.py' +local_scheme = 'no-local-version' [tool.black] line-length = 160 diff --git a/tools/ansible/release.yml b/tools/ansible/release.yml index 1e0456b31..272094363 100644 --- a/tools/ansible/release.yml +++ b/tools/ansible/release.yml @@ -13,19 +13,30 @@ tasks: - name: Generate calver release number set_fact: - release_number: "{{ ansible_date_time.year }}.{{ ansible_date_time.month }}.{{ ansible_date_time.day }}" + # setuptools-scm will strip leading 0's off the date format so we need to do that too + release_number: "{{ (ansible_date_time.date | to_datetime('%Y-%m-%d')).strftime('%Y.%m.%d') | regex_replace('\\.0', '.') }}" - - name: "Update version file with {{ release_number }}" - ansible.builtin.lineinfile: - create: True - line: "version = '{{ release_number }}'" - path: "../../ansible_base/_version.py" - regex: "^version = .*" + - name: Tag the repo + command: + cmd: "git tag -f {{ release_number }}" + + - name: Get the build number from setuptools-scm + command: + cmd: python -m setuptools_scm + register: setuptools_command_version + + - debug: + var: setuptools_command_version + + - name: Make sure the selected release number and setuptools_scm agree + assert: + that: + release_number == setuptools_command_version.stdout + msg: "We expected the release number to be {{ release_number }} but setuptools-scm wanted it to be {{ setuptools_command_version.stdout }}" - name: Build django-ansible-base command: cmd: make build - creates: 'dist/django-ansible-base-{{ release_number }}.tar.gz' args: chdir: '../../' tags: