name: Publish
on:
push:
tags:
- v*
workflow_dispatch:
jobs:
publish-pypi:
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version-file: .python-version
- uses: astral-sh/setup-uv@v6
- name: Install dependencies
run: uv sync --frozen
- name: Build package
run: uv build
- uses: pypa/gh-action-pypi-publish@release/v1
publish-ghcr:
runs-on: ubuntu-latest
strategy:
matrix:
platform:
- linux/amd64
- linux/arm64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version-file: .python-version
- uses: astral-sh/setup-uv@v6
- name: Install dependencies & Fetch metadata
run: |
uv sync --frozen
echo IMAGE_VERSION=v$(uv version --short) >> $GITHUB_ENV
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
labels: |
org.opencontainers.image.authors=Yang Sheng Han
org.opencontainers.image.documentation=https://github.com/${{ github.repository }}
org.opencontainers.image.title=wikipedia-mcp
org.opencontainers.image.vendor=https://github.com/${{ github.repository }}
org.opencontainers.image.version=${{ github.sha }}
tags: |
type=raw,value=latest
type=raw,value=${{ env.IMAGE_VERSION }}
type=sha
- id: build
uses: docker/build-push-action@v6
with:
labels: ${{ env.DOCKER_METADATA_OUTPUT_LABELS }}
outputs: type=image,name=ghcr.io/${{ github.repository }},name-canonical=true,push=true,push-by-digest=true
platforms: ${{ matrix.platform }}
- run: |
mkdir -p /tmp/image-digests
touch /tmp/image-digests/${IMAGE_DIGEST#sha256:}
env:
IMAGE_DIGEST: ${{ steps.build.outputs.digest }}
- run: |
docker buildx imagetools create \
$(jq --compact-output --raw-output '.tags | map("--tag " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf 'ghcr.io/${{ github.repository }}@sha256:%s ' *)
working-directory: /tmp/image-digests