feat(#1): Delineate release vs dev package versions in CI
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- 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 <noreply@anthropic.com>
This commit is contained in:
@@ -63,25 +63,48 @@ steps:
|
|||||||
from_secret: gitea_username
|
from_secret: gitea_username
|
||||||
GITEA_TOKEN:
|
GITEA_TOKEN:
|
||||||
from_secret: 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:
|
commands:
|
||||||
- |
|
- |
|
||||||
uv sync --all-extras --frozen
|
uv sync --all-extras --frozen
|
||||||
uv pip install twine
|
uv pip install twine
|
||||||
CURRENT=$$(uv run python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
BASE_VERSION=$$(uv run python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
||||||
echo "Building version $$CURRENT..."
|
|
||||||
|
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
|
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 [ "$$CI_COMMIT_BRANCH" = "develop" ]; then
|
||||||
if echo "$$INDEX_PAGE" | grep -q "mosaicstack_telemetry-$$CURRENT"; then
|
echo "Publishing dev version $$VERSION..."
|
||||||
echo "Version $$CURRENT already published, skipping upload"
|
|
||||||
else
|
|
||||||
echo "Publishing $$CURRENT..."
|
|
||||||
uv run twine upload \
|
uv run twine upload \
|
||||||
--repository-url "https://git.mosaicstack.dev/api/packages/mosaic/pypi" \
|
--repository-url "https://git.mosaicstack.dev/api/packages/mosaic/pypi" \
|
||||||
--username "$$GITEA_USER" \
|
--username "$$GITEA_USER" \
|
||||||
--password "$$GITEA_TOKEN" \
|
--password "$$GITEA_TOKEN" \
|
||||||
dist/*
|
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
|
fi
|
||||||
when:
|
when:
|
||||||
- branch: [main, develop]
|
- branch: [main, develop]
|
||||||
|
|||||||
Reference in New Issue
Block a user