From 2cd01a5fa6d1dead6294f051874b92fe615c16ff Mon Sep 17 00:00:00 2001 From: "Xinwei Xiong(cubxxw-openim)" <3293172751nss@gmail.com> Date: Thu, 3 Aug 2023 17:17:45 +0800 Subject: [PATCH] feat: add sub images actions build Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> --- .github/workflows/build-docker-image.yml | 51 +++- .github/workflows/docker-buildx.yml | 320 +++++++++++++++++++++++ 2 files changed, 364 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/docker-buildx.yml diff --git a/.github/workflows/build-docker-image.yml b/.github/workflows/build-docker-image.yml index 3dd64c930..f9fb42500 100644 --- a/.github/workflows/build-docker-image.yml +++ b/.github/workflows/build-docker-image.yml @@ -23,16 +23,20 @@ on: - v* workflow_dispatch: +env: + # Common versions + GO_VERSION: "1.20" + jobs: - build: + build-dockerhub: runs-on: ubuntu-latest steps: - - name: Check out the repo + - name: Checkout uses: actions/checkout@v3 - - - name: Build OpenIM Server - run: | - sudo make build + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 # docker.io/openim/openim-server:latest - name: Extract metadata (tags, labels) for Docker @@ -40,6 +44,15 @@ jobs: uses: docker/metadata-action@v4.6.0 with: images: openim/openim-server + # generate Docker tags based on the following events/attributes + tags: | + type=schedule + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha - name: Log in to Docker Hub uses: docker/login-action@v2 @@ -51,10 +64,21 @@ jobs: 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.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + build-aliyun: + 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 # registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server:latest - name: Extract metadata (tags, labels) for Docker id: meta2 @@ -73,10 +97,21 @@ jobs: 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-server:latest - name: Extract metadata (tags, labels) for Docker id: meta3 @@ -88,13 +123,15 @@ jobs: uses: docker/login-action@v2 with: registry: ghcr.io - username: ${{ github.actor }} + username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_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.meta3.outputs.tags }} labels: ${{ steps.meta3.outputs.labels }} diff --git a/.github/workflows/docker-buildx.yml b/.github/workflows/docker-buildx.yml new file mode 100644 index 000000000..3d1b3015f --- /dev/null +++ b/.github/workflows/docker-buildx.yml @@ -0,0 +1,320 @@ +# Copyright © 2023 OpenIM open source community. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Docker Buildx Images CI + +on: + schedule: + - cron: '30 1 * * *' + push: + branches: + - release-* + tags: + - v* + workflow_dispatch: + +jobs: + 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 + with: + install: true + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + +################################################ +# build/ +# └── docker +# ├── openim-api +# │ └── Dockerfile +# ├── openim-cmdutils +# │ └── Dockerfile +# ├── openim-crontask +# │ └── Dockerfile +# ├── openim-msggateway +# │ └── Dockerfile +# ├── openim-msgtransfer +# │ └── Dockerfile +# ├── openim-push +# │ └── Dockerfile +# ├── openim-rpc-auth +# │ └── Dockerfile +# ├── openim-rpc-conversation +# │ └── Dockerfile +# ├── openim-rpc-friend +# │ └── Dockerfile +# ├── openim-rpc-group +# │ └── Dockerfile +# ├── openim-rpc-msg +# │ └── Dockerfile +# ├── openim-rpc-third +# │ └── Dockerfile +# └── openim-rpc-user +# └── Dockerfile +############################################# + + - name: Extract metadata (tags, labels) for Docker openim-api + id: meta1 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-api + + - name: Build and push Docker image for openim-api + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-api/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta1.outputs.tags }} + labels: ${{ steps.meta1.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-cmdutils + id: meta2 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-cmdutils + + - name: Build and push Docker image for openim-cmdutils + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-cmdutils/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta2.outputs.tags }} + labels: ${{ steps.meta2.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-crontask + id: meta3 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-crontask + + - name: Build and push Docker image for openim-crontask + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-crontask/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta3.outputs.tags }} + labels: ${{ steps.meta3.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-msggateway + id: meta4 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-msggateway + + - name: Build and push Docker image for openim-msggateway + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-msggateway/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta4.outputs.tags }} + labels: ${{ steps.meta4.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-msgtransfer + id: meta5 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-msgtransfer + + - name: Build and push Docker image for openim-msgtransfer + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-msgtransfer/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta5.outputs.tags }} + labels: ${{ steps.meta5.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-push + id: meta6 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-push + + - name: Build and push Docker image for openim-push + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-push/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta6.outputs.tags }} + labels: ${{ steps.meta6.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-rpc-auth + id: meta7 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-rpc-auth + + - name: Build and push Docker image for openim-rpc-auth + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-rpc-auth/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta7.outputs.tags }} + labels: ${{ steps.meta7.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-rpc-conversation + id: meta8 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-rpc-conversation + + - name: Build and push Docker image for openim-rpc-conversation + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-rpc-conversation/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta8.outputs.tags }} + labels: ${{ steps.meta8.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-rpc-friend + id: meta9 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-rpc-friend + + - name: Build and push Docker image for openim-rpc-friend + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-rpc-friend/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta9.outputs.tags }} + labels: ${{ steps.meta9.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-rpc-group + id: meta10 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-rpc-group + + - name: Build and push Docker image for openim-rpc-group + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-rpc-group/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta10.outputs.tags }} + labels: ${{ steps.meta10.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-rpc-msg + id: meta11 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-rpc-msg + + - name: Build and push Docker image for openim-rpc-msg + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-rpc-msg/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta11.outputs.tags }} + labels: ${{ steps.meta11.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-rpc-third + id: meta12 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-rpc-third + + - name: Build and push Docker image for openim-rpc-third + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-rpc-third/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta12.outputs.tags }} + labels: ${{ steps.meta12.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Extract metadata (tags, labels) for Docker openim-rpc-user + id: meta13 + uses: docker/metadata-action@v4.6.0 + with: + images: ghcr.io/openimsdk/openim-rpc-user + + - name: Build and push Docker image for openim-rpc-user + uses: docker/build-push-action@v4 + with: + context: . + file: ./build/docker/openim-rpc-user/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta13.outputs.tags }} + labels: ${{ steps.meta13.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache \ No newline at end of file