Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: docker-multiarch

on:
push:
branches: [ main, master ]
tags: [ 'v*' ]
workflow_dispatch:

env:
REGISTRY_DOCKERHUB: docker.io
REGISTRY_GHCR: ghcr.io
# 留空则使用 <owner>/<repo>
IMAGE_NAME: ${{ vars.IMAGE_NAME }}

jobs:
build-and-push:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
variant:
- name: release
dockerfile: Dockerfile.release.auto
context: .
build-args: |
GM_VERSION=${{ github.ref_type == 'tag' && startsWith(github.ref_name, 'v') && replace(github.ref_name, 'v', '') || '0.4.2' }}
- name: source
dockerfile: Dockerfile
context: .
build-args: |
GM_REF=master
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set image name
id: img
run: |
OWNER_REPO="${GITHUB_REPOSITORY,,}"
DEFAULT_IMAGE="$OWNER_REPO"
if [ -n "${IMAGE_NAME}" ]; then
echo "name=${IMAGE_NAME}" >> $GITHUB_OUTPUT
else
echo "name=${DEFAULT_IMAGE}" >> $GITHUB_OUTPUT
fi

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

# 登录 Docker Hub(可选)
- name: Login to DockerHub
if: ${{ secrets.DOCKERHUB_USERNAME && secrets.DOCKERHUB_TOKEN }}
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_DOCKERHUB }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

# 登录 GHCR(可选,没 token 也能用 GITHUB_TOKEN)
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_GHCR }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_TOKEN || github.token }}

- name: Docker meta (tags/labels)
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.REGISTRY_DOCKERHUB }}/${{ steps.img.outputs.name }}
${{ env.REGISTRY_GHCR }}/${{ steps.img.outputs.name }}
tags: |
type=ref,event=branch
type=sha
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' }}
type=semver,pattern={{version}},value=${{ github.ref_name }}
type=semver,pattern={{major}}.{{minor}},value=${{ github.ref_name }}
labels: |
org.opencontainers.image.source=${{ github.repositoryUrl }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.title=${{ steps.img.outputs.name }}-${{ matrix.variant.name }}

- name: Build & Push (${{ matrix.variant.name }})
uses: docker/build-push-action@v6
with:
context: ${{ matrix.variant.context }}
file: ${{ matrix.variant.dockerfile }}
platforms: linux/amd64,linux/arm64 #,linux/arm/v7
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: ${{ matrix.variant.build-args }}
cache-from: type=gha
cache-to: type=gha,mode=max
Loading