name: Release on: push: tags: - "v*" permissions: contents: write jobs: test: name: Test before release runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install dependencies run: pip install -e ".[dev]" - name: Run tests run: pytest tests/ -v --tb=short - name: Check formatting run: black --check . - name: Lint run: ruff check . pypi: name: Publish to PyPI needs: test runs-on: ubuntu-latest environment: release steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install build tools run: pip install build twine - name: Build package run: python -m build - name: Publish to PyPI env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} run: twine upload dist/* docker: name: Publish to Docker Hub needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Extract version from tag id: version run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v6 with: context: . push: true tags: | mcphub/mcphub:latest mcphub/mcphub:${{ steps.version.outputs.VERSION }} platforms: linux/amd64,linux/arm64 github-release: name: Create GitHub Release needs: [pypi, docker] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Create Release uses: softprops/action-gh-release@v2 with: generate_release_notes: true