# 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: Publish Docker image on: push: branches: - main - release-* tags: - v* pull_request: types: [closed] branches: - main - release-* workflow_dispatch: env: # Common versions GO_VERSION: "1.20" jobs: build-and-push: runs-on: ubuntu-latest if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true) steps: - name: Checkout main repository uses: actions/checkout@v4 with: path: main-repo - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: ./main-repo load: true tags: 'openim/openim-server:local' - name: Checkout compose repository uses: actions/checkout@v4 with: repository: 'openimsdk/openim-docker' path: 'compose-repo' - name: Update .env to use the local image run: | sed -i 's|OPENIM_SERVER_IMAGE=.*|OPENIM_SERVER_IMAGE=openim/openim-server:local|' ${{ github.workspace }}/compose-repo/.env - name: Start services using Docker Compose run: | cd ${{ github.workspace }}/compose-repo docker compose up -d sleep 30 - name: Check openim-server health run: | docker ps docker exec openim-server mage check status=$? if [ $status -ne 0 ]; then echo "Health check failed" exit 1 fi - name: Check openim-chat health if: success() run: | docker exec openim-chat mage check status=$? if [ $status -ne 0 ]; then echo "Health check failed" exit 1 fi - name: Extract metadata (tags, labels) for Docker if: success() id: meta uses: docker/metadata-action@v5.5.1 with: images: | openim/openim-server ghcr.io/openimsdk/openim-server registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server # generate Docker tags based on the following events/attributes 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 - name: Log in to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Log in to Aliyun Container Registry uses: docker/login-action@v2 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@v5 with: context: ./main-repo push: true # linux/ppc64le,linux/s390x platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}