|
name: "Docker build and push" |
|
on: |
|
pull_request: |
|
push: |
|
branches: |
|
- main |
|
- dev |
|
tags: |
|
- v* |
|
jobs: |
|
docker-build: |
|
name: "Build and push Docker image" |
|
runs-on: ubuntu-20.04 |
|
strategy: |
|
matrix: |
|
arch: ["amd64"] |
|
base: |
|
- "nvidia/cuda:11.8.0-base-ubuntu22.04" |
|
- "python:3.10.8-slim" |
|
steps: |
|
- uses: actions/checkout@v2 |
|
- name: Log in to the Container registry |
|
uses: docker/login-action@v1 |
|
with: |
|
registry: ghcr.io |
|
username: ${{ github.actor }} |
|
password: ${{ secrets.GITHUB_TOKEN }} |
|
- name: Compute Docker tags, check VERSION file matches tag |
|
id: compute-tag |
|
run: | |
|
set -ex |
|
base="ghcr.io/coqui-ai/tts" |
|
tags="" # PR build |
|
|
|
if [[ ${{ matrix.base }} = "python:3.10.8-slim" ]]; then |
|
base="ghcr.io/coqui-ai/tts-cpu" |
|
fi |
|
|
|
if [[ "${{ startsWith(github.ref, 'refs/heads/') }}" = "true" ]]; then |
|
|
|
github_ref="${{ github.ref }}" |
|
branch=${github_ref#*refs/heads/} |
|
tags="${base}:${branch},${base}:${{ github.sha }}," |
|
elif [[ "${{ startsWith(github.ref, 'refs/tags/') }}" = "true" ]]; then |
|
VERSION="v$(cat TTS/VERSION)" |
|
if [[ "${{ github.ref }}" != "refs/tags/${VERSION}" ]]; then |
|
echo "Pushed tag does not match VERSION file. Aborting push." |
|
exit 1 |
|
fi |
|
tags="${base}:${VERSION},${base}:latest,${base}:${{ github.sha }}" |
|
fi |
|
echo "::set-output name=tags::${tags}" |
|
- name: Set up QEMU |
|
uses: docker/setup-qemu-action@v1 |
|
- name: Set up Docker Buildx |
|
id: buildx |
|
uses: docker/setup-buildx-action@v1 |
|
- name: Build and push |
|
uses: docker/build-push-action@v2 |
|
with: |
|
context: . |
|
platforms: linux/${{ matrix.arch }} |
|
push: ${{ github.event_name == 'push' }} |
|
build-args: "BASE=${{ matrix.base }}" |
|
tags: ${{ steps.compute-tag.outputs.tags }} |
|
|