From dc772253afe8c61a5e750c1f4da2138f80f1aedd Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sat, 14 Feb 2026 22:58:56 -0600 Subject: [PATCH] feat(#1): Delineate release vs dev package versions in CI - main/tags: publish release version as-is from pyproject.toml (e.g. 0.1.0), with simple index check to skip already-published versions - develop: publish PEP 440 dev version using pipeline number suffix (e.g. 0.1.0.dev42), patching pyproject.toml before build. Every develop push produces a unique version, always uploaded. Consumers install stable releases by default. To install dev builds: pip install mosaicstack-telemetry --pre --index-url ... Refs #1 Co-Authored-By: Claude Opus 4.6 --- .woodpecker.yml | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index b91aa66..6c009d4 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -63,25 +63,48 @@ steps: from_secret: gitea_username GITEA_TOKEN: from_secret: gitea_token + CI_COMMIT_BRANCH: ${CI_COMMIT_BRANCH} + CI_COMMIT_TAG: ${CI_COMMIT_TAG} + CI_PIPELINE_NUMBER: ${CI_PIPELINE_NUMBER} commands: - | uv sync --all-extras --frozen uv pip install twine - CURRENT=$$(uv run python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])") - echo "Building version $$CURRENT..." + BASE_VERSION=$$(uv run python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])") + + if [ -n "$$CI_COMMIT_TAG" ] || [ "$$CI_COMMIT_BRANCH" = "main" ]; then + VERSION="$$BASE_VERSION" + echo "Release build: $$VERSION" + elif [ "$$CI_COMMIT_BRANCH" = "develop" ]; then + VERSION="$${BASE_VERSION}.dev$${CI_PIPELINE_NUMBER}" + echo "Dev build: $$VERSION" + sed -i "s/version = \"$$BASE_VERSION\"/version = \"$$VERSION\"/" pyproject.toml + fi + uv build - echo "Checking if $$CURRENT is already published..." - INDEX_PAGE=$$(curl -sf "https://git.mosaicstack.dev/api/packages/mosaic/pypi/simple/mosaicstack-telemetry/" 2>/dev/null || echo "") - if echo "$$INDEX_PAGE" | grep -q "mosaicstack_telemetry-$$CURRENT"; then - echo "Version $$CURRENT already published, skipping upload" - else - echo "Publishing $$CURRENT..." + + if [ "$$CI_COMMIT_BRANCH" = "develop" ]; then + echo "Publishing dev version $$VERSION..." uv run twine upload \ --repository-url "https://git.mosaicstack.dev/api/packages/mosaic/pypi" \ --username "$$GITEA_USER" \ --password "$$GITEA_TOKEN" \ dist/* - echo "Published mosaicstack-telemetry $$CURRENT" + echo "Published mosaicstack-telemetry $$VERSION" + else + echo "Checking if release $$VERSION is already published..." + INDEX_PAGE=$$(curl -sf "https://git.mosaicstack.dev/api/packages/mosaic/pypi/simple/mosaicstack-telemetry/" 2>/dev/null || echo "") + if echo "$$INDEX_PAGE" | grep -q "mosaicstack_telemetry-$$VERSION"; then + echo "Version $$VERSION already published, skipping upload" + else + echo "Publishing release $$VERSION..." + uv run twine upload \ + --repository-url "https://git.mosaicstack.dev/api/packages/mosaic/pypi" \ + --username "$$GITEA_USER" \ + --password "$$GITEA_TOKEN" \ + dist/* + echo "Published mosaicstack-telemetry $$VERSION" + fi fi when: - branch: [main, develop]