| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- name: Build and Push Docker Images
- on:
- push:
- tags:
- - "v*" # 主项目版本
- - "mcp-v*" # MCP 版本
- workflow_dispatch:
- inputs:
- image:
- description: "选择要构建的镜像"
- required: true
- default: "all"
- type: choice
- options:
- - all
- - crawler
- - mcp
- env:
- REGISTRY: docker.io
- jobs:
- build-crawler:
- runs-on: ubuntu-latest
- # 条件:v* 标签(排除 mcp-v*)或手动触发选择 all/crawler
- if: |
- (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && !startsWith(github.ref, 'refs/tags/mcp-v')) ||
- (github.event_name == 'workflow_dispatch' && (github.event.inputs.image == 'all' || github.event.inputs.image == 'crawler'))
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- with:
- driver-opts: |
- network=host
- - name: Login to Docker Hub
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Extract metadata
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: wantcat/trendradar
- tags: |
- type=semver,pattern={{version}}
- type=semver,pattern={{major}}.{{minor}}
- type=raw,value=latest
- - name: Build and push
- uses: docker/build-push-action@v5
- env:
- BUILDKIT_PROGRESS: plain
- with:
- context: .
- file: ./docker/Dockerfile
- platforms: linux/amd64,linux/arm64
- push: true
- tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
- build-mcp:
- runs-on: ubuntu-latest
- # 条件:mcp-v* 标签 或手动触发选择 all/mcp
- if: |
- (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/mcp-v')) ||
- (github.event_name == 'workflow_dispatch' && (github.event.inputs.image == 'all' || github.event.inputs.image == 'mcp'))
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- with:
- driver-opts: |
- network=host
- - name: Login to Docker Hub
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Extract version from tag
- id: version
- run: |
- if [[ "${{ github.ref }}" == refs/tags/mcp-v* ]]; then
- VERSION="${GITHUB_REF#refs/tags/mcp-v}"
- echo "version=${VERSION}" >> $GITHUB_OUTPUT
- echo "major_minor=$(echo $VERSION | cut -d. -f1,2)" >> $GITHUB_OUTPUT
- else
- echo "version=latest" >> $GITHUB_OUTPUT
- echo "major_minor=latest" >> $GITHUB_OUTPUT
- fi
- - name: Extract metadata
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: wantcat/trendradar-mcp
- tags: |
- type=raw,value=${{ steps.version.outputs.version }}
- type=raw,value=${{ steps.version.outputs.major_minor }}
- type=raw,value=latest
- - name: Build and push
- uses: docker/build-push-action@v5
- env:
- BUILDKIT_PROGRESS: plain
- with:
- context: .
- file: ./docker/Dockerfile.mcp
- platforms: linux/amd64,linux/arm64
- push: true
- tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
|