blob: 0b8afe5568e62662dc9b449062f3643155f70baa [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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: Build-Images-Push-Docker
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USER }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
on:
push:
tags:
- "v*"
jobs:
build-and-push-builder:
name: Build and Push devlake builder
runs-on: ubuntu-latest
steps:
- 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
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_TOKEN }}
- name: Build and push lake image
uses: docker/build-push-action@v3
with:
context: ./backend
push: true
target: builder
tags: ${{ secrets.DOCKERHUB_OWNER }}/devlake:amd64-builder
platforms: linux/amd64
cache-from: ${{ secrets.DOCKERHUB_OWNER }}/devlake:amd64-builder
cache-to: ${{ secrets.DOCKERHUB_OWNER }}/devlake:amd64-builder
build-and-push-base:
name: Build and Push devlake base
runs-on: ubuntu-latest
steps:
- 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
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_TOKEN }}
- name: Build and push lake image
uses: docker/build-push-action@v3
with:
context: ./backend
push: true
target: base
tags: ${{ secrets.DOCKERHUB_OWNER }}/devlake:base
platforms: linux/amd64,linux/arm64
cache-from: ${{ secrets.DOCKERHUB_OWNER }}/devlake:base
cache-to: ${{ secrets.DOCKERHUB_OWNER }}/devlake:base
build-devlake:
needs: build-and-push-builder
name: Build and cache devlake
runs-on: ubuntu-latest
strategy:
matrix:
platform: ["arm64", "amd64"]
steps:
- uses: actions/checkout@v3
- name: Get short sha
id: get_short_sha
run: echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_TOKEN }}
- uses: actions/cache@v3
with:
path: /tmp/devlake-build-cache-${{ matrix.platform }}
key: buildx-devlake-build-cache-${{ github.run_id }}-${{ matrix.platform }}
- name: Build and cache lake build
uses: docker/build-push-action@v3
with:
context: ./backend
push: false
target: build
tags: ${{ secrets.DOCKERHUB_OWNER }}/devlake:build-cache-${{ matrix.platform }}
platforms: linux/${{ matrix.platform }}
cache-from: ${{ secrets.DOCKERHUB_OWNER }}/devlake:amd64-builder
cache-to: type=local,mode=min,dest=/tmp/devlake-build-cache-${{ matrix.platform }}
build-args: |
TAG=${{ github.ref_name }}
SHA=${{ steps.get_short_sha.outputs.SHORT_SHA }}
build-and-push-devlake:
needs: [build-devlake, build-and-push-base]
name: Build and Push devlake image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Get short sha
id: get_short_sha
run: echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_TOKEN }}
- uses: actions/cache@v3
with:
path: /tmp/devlake-build-cache-amd64
key: buildx-devlake-build-cache-${{ github.run_id }}-amd64
- uses: actions/cache@v3
with:
path: /tmp/devlake-build-cache-arm64
key: buildx-devlake-build-cache-${{ github.run_id }}-arm64
- name: Get push tags
id: get_push_tags
run: |
image_name=${{ secrets.DOCKERHUB_OWNER }}/devlake
if printf ${{ github.ref_name }} | grep -Pq '^v(\d+).(\d+).(\d+)$'; then
echo "TAGS=${image_name}:latest,${image_name}:${{ github.ref_name }}" >> $GITHUB_OUTPUT
else
echo "TAGS=${image_name}:${{ github.ref_name }}" >> $GITHUB_OUTPUT
fi
- name: Build and push lake image
uses: docker/build-push-action@v3
with:
context: ./backend
push: true
tags: ${{ steps.get_push_tags.outputs.TAGS }}
platforms: linux/amd64,linux/arm64
cache-from: |
${{ secrets.DOCKERHUB_OWNER }}/devlake:amd64-builder
${{ secrets.DOCKERHUB_OWNER }}/devlake:base
type=local,src=/tmp/devlake-build-cache-amd64
type=local,src=/tmp/devlake-build-cache-arm64
build-args: |
TAG=${{ github.ref_name }}
SHA=${{ steps.get_short_sha.outputs.SHORT_SHA }}
- name: Clear cache
uses: actions/github-script@v6
if: always()
with:
script: |
for (const arch of ['amd64', 'arm64']) {
try {
await github.rest.actions.deleteActionsCacheByKey({
owner: context.repo.owner,
repo: context.repo.repo,
key: `buildx-devlake-build-cache-${context.runId}-${arch}`,
})
console.log(`Clear cache buildx-devlake-build-cache-${context.runId}-${arch}`)
} catch (e) {
console.warn(`Error clear cache buildx-devlake-build-cache-${context.runId}-${arch}: ${e}`)
}
}
build-and-push-other-image:
name: Build and Push ${{ matrix.build.name }} image
runs-on: ubuntu-latest
strategy:
matrix:
build:
- name: config-ui
image: devlake-config-ui
context: config-ui
- name: grafana
image: devlake-dashboard
context: grafana
steps:
- 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
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_TOKEN }}
- name: Get push tags
id: get_push_tags
run: |
image_name=${{ secrets.DOCKERHUB_OWNER }}/${{ matrix.build.image }}
if printf ${{ github.ref_name }} | grep -Pq '^v(\d+).(\d+).(\d+)$'; then
echo "TAGS=${image_name}:latest,${image_name}:${{ github.ref_name }}" >> $GITHUB_OUTPUT
else
echo "TAGS=${image_name}:${{ github.ref_name }}" >> $GITHUB_OUTPUT
fi
- name: Build and push ${{ matrix.build.name }} image
uses: docker/build-push-action@v3
with:
context: ${{ matrix.build.context }}
push: true
tags: ${{ steps.get_push_tags.outputs.TAGS }}
platforms: linux/amd64,linux/arm64