Publish to PyPI #3
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Publish to PyPI | |
| on: | |
| push: | |
| tags: | |
| - "v*.*.*" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: publish-${{ github.ref }} | |
| cancel-in-progress: false | |
| jobs: | |
| test: | |
| name: Test | |
| runs-on: blacksmith-4vcpu-ubuntu-2404 | |
| strategy: | |
| matrix: | |
| python-version: ["3.11", "3.12"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v3 | |
| - name: Install dspy-cli with dev dependencies | |
| run: uv sync --extra dev | |
| - name: Lint with ruff | |
| run: uv run ruff check . | |
| - name: Verify tag matches pyproject version | |
| if: matrix.python-version == '3.11' | |
| run: | | |
| python - << 'PY' | |
| import os, sys | |
| tag = os.environ["GITHUB_REF_NAME"] | |
| if not tag.startswith("v"): | |
| print(f"Unexpected tag format: {tag}", file=sys.stderr) | |
| sys.exit(1) | |
| tag_ver = tag[1:] # Strip 'v' prefix | |
| import tomllib | |
| with open("pyproject.toml", "rb") as f: | |
| data = tomllib.load(f) | |
| proj_ver = data["project"]["version"] | |
| if proj_ver != tag_ver: | |
| print(f"❌ Version mismatch: pyproject.toml={proj_ver} tag={tag_ver}", file=sys.stderr) | |
| sys.exit(1) | |
| print(f"✅ Version verified: {proj_ver}") | |
| PY | |
| - name: Run tests | |
| env: | |
| PYTEST_ADDOPTS: -v | |
| run: uv run pytest | |
| build: | |
| name: Build distributions | |
| runs-on: blacksmith-4vcpu-ubuntu-2404 | |
| needs: [test] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v3 | |
| - name: Set up Python | |
| run: uv python install 3.11 | |
| - name: Build sdist and wheel | |
| run: uv build | |
| - name: Upload distributions | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-${{ github.ref_name }} | |
| path: dist/ | |
| if-no-files-found: error | |
| publish: | |
| name: Publish to PyPI | |
| runs-on: blacksmith-4vcpu-ubuntu-2404 | |
| needs: [build] | |
| environment: | |
| name: pypi | |
| url: https://pypi.org/project/dspy-cli/ | |
| permissions: | |
| id-token: write | |
| contents: read | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| steps: | |
| - name: Download distributions | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-${{ github.ref_name }} | |
| path: dist | |
| - name: Publish to PyPI | |
| uses: pypa/gh-action-pypi-publish@v1.10.3 | |
| with: | |
| print-hash: true |