name: Build and Publish Python Package
on:
push:
branches: [ main, master ]
tags: [ 'v*' ]
pull_request:
branches: [ main, master ]
release:
types: [ published ]
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v2
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}
- name: Install dependencies
run: uv sync --all-extras --dev
- name: Lint with ruff
run: uv run ruff check .
- name: Type check with mypy
run: |
uv run mypy lodgify_server.py entrypoint.py > mypy_errors.log || echo "mypy exited with errors"
cat mypy_errors.log
- name: Test server import
run: uv run python -c "import lodgify_server; print('✓ lodgify_server import successful')"
- name: Test server info mode
run: |
export LODGIFY_API_KEY="test-key-for-import-only"
uv run python entrypoint.py --mode info
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v2
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
- name: Set up Python
run: uv python install
- name: Build package
run: uv build
- name: Check package contents
run: |
uv run python -m zipfile -l dist/*.whl
ls -la dist/
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/
publish:
needs: build
runs-on: ubuntu-latest
# Trigger the publish job when a new version tag is pushed (push event) or when a release is published (release event).
if: >-
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) ||
(github.event_name == 'release' && startsWith(github.event.release.tag_name, 'v'))
environment:
name: pypi
url: https://pypi.org/project/lodgify-mcp-server/
permissions:
id-token: write # For trusted publishing
steps:
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1