From b322b80225f6bf06190cd8d7b86e6c05a69ba022 Mon Sep 17 00:00:00 2001 From: Catherine Date: Tue, 19 Mar 2024 00:33:19 +0000 Subject: [PATCH] pyproject: use `.dev{distance}`, not `+{node}`, for non-release builds. At the moment this uses a git URL for pdm-backend because required PDM functionality (pdm-project/pdm-backend#217) is not released yet. --- .github/workflows/main.yaml | 4 +++- pdm_build.py | 19 ++++++++++++++++--- pyproject.toml | 3 ++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 93909fbef..2f9994ea0 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -132,6 +132,8 @@ jobs: steps: - name: Check out source code uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Set up PDM uses: pdm-project/setup-pdm@v4 with: @@ -260,4 +262,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref_name }} - release_name: ${{ steps.metadata.outputs.name }} \ No newline at end of file + release_name: ${{ steps.metadata.outputs.name }} diff --git a/pdm_build.py b/pdm_build.py index bd0a54b35..3ad2682e4 100644 --- a/pdm_build.py +++ b/pdm_build.py @@ -1,11 +1,24 @@ +import os +from datetime import datetime +from pdm.backend.hooks.version import SCMVersion from pdm.backend._vendor.packaging.version import Version -# This is done in a PDM build hook without specifying `dynamic = [..., "version"]` to put all -# of the static metadata into pyproject.toml. Tools other than PDM will not execute this script -# and will use the generic version of the documentation URL (which redirects to /latest). +def format_version(version: SCMVersion) -> str: + major, minor, patch = (int(n) for n in str(version.version).split(".")[:3]) + dirty = f"+{datetime.utcnow():%Y%m%d.%H%M%S}" if version.dirty else "" + if version.distance is None: + return f"{major}.{minor}.{patch}{dirty}" + else: + return f"{major}.{minor}.{patch}.dev{version.distance}{dirty}" + + def pdm_build_initialize(context): version = Version(context.config.metadata["version"]) + + # This is done in a PDM build hook without specifying `dynamic = [..., "version"]` to put all + # of the static metadata into pyproject.toml. Tools other than PDM will not execute this script + # and will use the generic version of the documentation URL (which redirects to /latest). if version.is_prerelease: url_version = "latest" else: diff --git a/pyproject.toml b/pyproject.toml index 9e25f5010..599740ffe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,7 @@ [tool.pdm.version] source = "scm" +version_format = "pdm_build:format_version" [project] dynamic = ["version"] @@ -39,7 +40,7 @@ amaranth-rpc = "amaranth.rpc:main" # Build system configuration [build-system] -requires = ["pdm-backend"] +requires = ["pdm-backend @ git+https://github.com/pdm-project/pdm-backend@885bc8d9b75d068a34b2df86c6324c5fdf5c0cc8"] build-backend = "pdm.backend" [tool.pdm]