From d2f70fff9a3570095c1a309d7608e3768bcc4bcd Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Fri, 17 Jan 2025 16:32:33 +0800 Subject: [PATCH] update image build logic. --- .github/workflows/build-docker-image.yml | 159 +++++++++--------- ...cker-build-and-release-services-images.yml | 10 +- Dockerfile | 9 +- 3 files changed, 86 insertions(+), 92 deletions(-) diff --git a/.github/workflows/build-docker-image.yml b/.github/workflows/build-docker-image.yml index 64d5d0c5..e28a527b 100644 --- a/.github/workflows/build-docker-image.yml +++ b/.github/workflows/build-docker-image.yml @@ -3,143 +3,134 @@ name: Publish Docker image on: push: branches: - - main + # - main - release-* - tags: - - v* + # tags: + # - v* workflow_dispatch: + inputs: + tag: + description: "Tag version to be used for Docker image" + required: true + default: "v3.8.0" env: - # Common versions - GO_VERSION: "1.20" + GO_VERSION: "1.22" jobs: - build-dockerhub: + build-amd64-image: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: actions/checkout@v4 + - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3.8.0 + + - name: Log in to Docker Hub + uses: docker/login-action@v3.3.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3.3.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log in to Aliyun Container Registry + uses: docker/login-action@v3.3.0 + with: + registry: registry.cn-hangzhou.aliyuncs.com + username: ${{ secrets.ALIREGISTRY_USERNAME }} + password: ${{ secrets.ALIREGISTRY_TOKEN }} -# docker.io/openim/openim-chat:latest - name: Extract metadata (tags, labels) for Docker id: meta - uses: docker/metadata-action@v4.6.0 + uses: docker/metadata-action@v5.6.0 with: - images: openim/openim-chat - # generate Docker tags based on the following events/attributes + images: | + openim/openim-chat + ghcr.io/openimsdk/openim-chat + registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-chat tags: | type=ref,event=tag type=schedule type=ref,event=branch - type=ref,event=pr + # type=ref,event=pr type=semver,pattern={{version}} type=semver,pattern=v{{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} + type=semver,pattern=release-{{raw}} type=sha - - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + type=raw,value=${{ github.event.inputs.tag }} - name: Build and push Docker image uses: docker/build-push-action@v4 with: context: . - # linux/ppc64le,linux/s390x - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - build-aliyun: + build-arm64-image: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: actions/checkout@v4 + + - name: Docker Setup QEMU + uses: docker/setup-qemu-action@v3.3.0 + - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 -# registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-chat:latest - - name: Extract metadata (tags, labels) for Docker - id: meta2 - uses: docker/metadata-action@v4.6.0 + uses: docker/setup-buildx-action@v3.8.0 + + - name: Log in to Docker Hub + uses: docker/login-action@v3.3.0 with: - images: registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-chat - tags: | - type=ref,event=tag - type=schedule - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - type=semver,pattern=v{{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=sha + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - - name: Log in to AliYun Docker Hub - uses: docker/login-action@v2 + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3.3.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log in to Aliyun Container Registry + uses: docker/login-action@v3.3.0 with: registry: registry.cn-hangzhou.aliyuncs.com username: ${{ secrets.ALIREGISTRY_USERNAME }} password: ${{ secrets.ALIREGISTRY_TOKEN }} - - - name: Build and push Docker image - uses: docker/build-push-action@v4 - with: - context: . - # linux/ppc64le,linux/s390x - platforms: linux/amd64,linux/arm64 - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta2.outputs.tags }} - labels: ${{ steps.meta2.outputs.labels }} - build-ghcr: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 -# ghcr.io/openimsdk/openim-chat:latest - name: Extract metadata (tags, labels) for Docker - id: meta3 - uses: docker/metadata-action@v4.6.0 + id: meta + uses: docker/metadata-action@v5.6.0 with: - images: ghcr.io/openimsdk/openim-chat + images: | + openim/openim-chat + ghcr.io/openimsdk/openim-chat + registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-chat tags: | type=ref,event=tag type=schedule type=ref,event=branch - type=ref,event=pr + # type=ref,event=pr type=semver,pattern={{version}} type=semver,pattern=v{{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} + type=semver,pattern=release-{{raw}} type=sha - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} + type=raw,value=${{ github.event.inputs.tag }} - name: Build and push Docker image uses: docker/build-push-action@v4 with: context: . - # linux/ppc64le,linux/s390x - platforms: linux/amd64,linux/arm64 + platforms: linux/arm64 push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta3.outputs.tags }} - labels: ${{ steps.meta3.outputs.labels }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/docker-build-and-release-services-images.yml b/.github/workflows/docker-build-and-release-services-images.yml index ed4c7ad3..8ccbfff4 100644 --- a/.github/workflows/docker-build-and-release-services-images.yml +++ b/.github/workflows/docker-build-and-release-services-images.yml @@ -19,26 +19,26 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3.8.0 - name: Log in to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3.3.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log in to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3.3.0 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Log in to Aliyun Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3.3.0 with: registry: registry.cn-hangzhou.aliyuncs.com username: ${{ secrets.ALIREGISTRY_USERNAME }} diff --git a/Dockerfile b/Dockerfile index 8751beac..dd103803 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Use Go 1.21 Alpine as the base image for building the application -FROM golang:1.22-alpine as builder +FROM golang:1.22-alpine AS builder # Define the base directory for the application as an environment variable ENV SERVER_DIR=/openim-chat @@ -8,12 +8,15 @@ ENV SERVER_DIR=/openim-chat WORKDIR $SERVER_DIR # Set the Go proxy to improve dependency resolution speed -ENV GOPROXY=https://goproxy.io,direct +# ENV GOPROXY=https://goproxy.io,direct + +COPY go.mod go.sum ./ + +RUN go mod download # Copy all files from the current directory into the container COPY . . -RUN go mod download # Install Mage to use for building the application RUN go install github.com/magefile/mage@v1.15.0