DocSpace-buildtools/.github/workflows/build-runtime-images.yml

138 lines
5.0 KiB
YAML

name: build docker runtime images
on:
push:
branches:
- 'hotfix/v**'
- 'release/v**'
- 'feature/docker-dev'
paths:
- '/build/install/docker/Dockerfile.runtime'
- '.github/workflows/build-runtime-images.yml'
- 'config/*'
- '/build/install/docker/config/nginx/**'
env:
REPOSITORY_NAME: "onlyoffice"
TAG: "v1.0.0"
DOTNET_RUNTIME_IMAGE: "4testing-docspace-dotnet-runtime"
NODEJS_RUNTIME_IMAGE: "4testing-docspace-nodejs-runtime"
PROXY_RUNTIME_IMAGE: "4testing-docspace-proxy-runtime"
DOCKERFILE_BUILD: "build/install/docker/Dockerfile.runtime"
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}
uses: docker/build-push-action@v4
id: build-dotnetrun
with:
context: .
file: ${{ env.DOCKERFILE_BUILD }}
platforms: ${{ matrix.platform}}
target: dotnetrun
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
-
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}
uses: docker/build-push-action@v4
id: build-noderun
with:
context: .
file: ${{ env.DOCKERFILE_BUILD }}
platforms: ${{ matrix.platform}}
target: noderun
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
-
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}
uses: docker/build-push-action@v4
id: build-proxy
with:
context: .
file: ${{ env.DOCKERFILE_BUILD }}
platforms: ${{ matrix.platform}}
target: proxy
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
-
name: Export digest
run: |
mkdir -p /tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}
digest="${{ steps.build-dotnetrun.outputs.digest }}"
touch "/tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}/${digest#sha256:}"
mkdir -p /tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}
digest="${{ steps.build-noderun.outputs.digest }}"
touch "/tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}/${digest#sha256:}"
mkdir -p /tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}
digest="${{ steps.build-proxy.outputs.digest }}"
touch "/tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}/${digest#sha256:}"
-
name: Upload digest
uses: actions/upload-artifact@v3
with:
name: digests
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- build
steps:
-
name: Download digests
uses: actions/download-artifact@v3
with:
name: digests
path: /tmp/digests
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Create ${{ env.DOTNET_RUNTIME_IMAGE }} list and push
working-directory: /tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}
run: |
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}:${{ env.TAG }} \
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}@sha256:%s ' *)
-
name: Create ${{ env.NODEJS_RUNTIME_IMAGE }} list and push
working-directory: /tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}
run: |
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}:${{ env.TAG }} \
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}@sha256:%s ' *)
-
name: Create ${{ env.PROXY_RUNTIME_IMAGE }} list and push
working-directory: /tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}
run: |
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}:${{ env.TAG }} \
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}@sha256:%s ' *)