add branch for latest build test #12
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build-docker | |
on: | |
push: | |
branches: | |
- master | |
- feature/docker-commonize-hash-of-same-feature-image-latest | |
release: | |
types: | |
- created | |
workflow_dispatch: | |
inputs: | |
version: | |
description: "バージョン情報(A.BB.C / A.BB.C-preview.D)" | |
required: true | |
env: | |
IMAGE_NAME: ${{ vars.DOCKERHUB_USERNAME }}/voicevox_engine | |
VOICEVOX_RESOURCE_VERSION: "0.22-preview.0" | |
VOICEVOX_CORE_VERSION: "0.15.5" | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
config: # 全 jobs で利用する定数の定義. `env` が利用できないコンテキストでも利用できる. | |
runs-on: ubuntu-latest | |
outputs: | |
version_or_latest: ${{ steps.vars.outputs.version_or_latest }} | |
steps: | |
- name: <Setup> Declare variables | |
id: vars | |
run: | | |
: # releaseタグ名か、workflow_dispatchでのバージョン名か、latestが入る | |
echo "version_or_latest=${{ github.event.release.tag_name || github.event.inputs.version || 'latest' }}" >> "$GITHUB_OUTPUT" | |
build-docker: | |
needs: [config] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
# 各変数の説明 | |
# tags: カンマ区切りのタグ名(バージョン文字列の前のプレフィックス)。空文字列の場合、バージョン文字列のみのタグ名になる | |
# buildcache_tag: ビルドキャッシュのタグ名(latestの前のプレフィックス)。空文字列やカンマは使用不可 | |
# target: Dockerfile のビルドステージ名 | |
# base_image: Dockerfile のビルド変数 BASE_IMAGE に渡すベースイメージ | |
# base_runtime_image: Dockerfile のビルド変数 BASE_RUNTIME_IMAGE に渡す実行ステージ用のベースイメージ | |
# onnxruntime_version: Dockerfile のビルド変数 ONNXRUNTIME_VERSION に渡すONNX Runtimeのバージョン | |
# platforms: docker build コマンドのオプション --platform に渡すプラットフォーム | |
include: | |
# Ubuntu 20.04 | |
- tags: ",cpu,cpu-ubuntu20.04" | |
buildcache_tag: "cpu-ubuntu20.04" | |
target: runtime-env | |
base_image: ubuntu:20.04 | |
base_runtime_image: ubuntu:20.04 | |
onnxruntime_version: 1.13.1 | |
platforms: linux/amd64,linux/arm64/v8 | |
- tags: "nvidia,nvidia-ubuntu20.04" | |
buildcache_tag: "nvidia-ubuntu20.04" | |
target: runtime-nvidia-env | |
base_image: ubuntu:20.04 | |
base_runtime_image: nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04 | |
onnxruntime_version: 1.13.1 | |
platforms: linux/amd64 | |
# Ubuntu 22.04 | |
- tags: "cpu-ubuntu22.04" | |
buildcache_tag: "cpu-ubuntu22.04" | |
target: runtime-env | |
base_image: ubuntu:22.04 | |
base_runtime_image: ubuntu:22.04 | |
onnxruntime_version: 1.13.1 | |
platforms: linux/amd64,linux/arm64/v8 | |
- tags: "nvidia-ubuntu22.04" | |
buildcache_tag: "nvidia-ubuntu22.04" | |
target: runtime-nvidia-env | |
base_image: ubuntu:22.04 | |
base_runtime_image: nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 | |
onnxruntime_version: 1.13.1 | |
platforms: linux/amd64 | |
steps: | |
- name: <Setup> Check out the repository | |
uses: actions/checkout@v4 | |
- name: <Setup> Prepare Python version | |
id: prepare-python | |
uses: ./.github/actions/prepare_python | |
with: | |
only-export-python-version: true | |
- name: <Setup> Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: <Setup> Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: <Setup> Login to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ vars.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: <Setup> Prepare VOICEVOX RESOURCE cache | |
uses: actions/cache@v4 | |
id: voicevox-resource-cache | |
with: | |
key: voicevox-resource-${{ env.VOICEVOX_RESOURCE_VERSION }} | |
path: download/resource | |
- name: <Setup> Check out the VOICEVOX RESOURCE repository | |
if: steps.voicevox-resource-cache.outputs.cache-hit != 'true' | |
uses: actions/checkout@v4 | |
with: | |
repository: VOICEVOX/voicevox_resource | |
ref: ${{ env.VOICEVOX_RESOURCE_VERSION }} | |
path: download/resource | |
- name: <Build> Merge VOICEVOX RESOURCE | |
env: | |
DOWNLOAD_RESOURCE_PATH: download/resource | |
run: bash tools/process_voicevox_resource.bash | |
# Matrixのtags(カンマ区切りのタグ名)から、バージョン文字列付きのタグ名を生成する | |
# | |
# 例1: tags=",cpu,cpu-ubuntu22.04", version="0.22.0" | |
# voicevox/voicevox_engine:0.22.0 | |
# voicevox/voicevox_engine:cpu-0.22.0 | |
# voicevox/voicevox_engine:cpu-ubuntu22.04-0.22.0 | |
# | |
# 例2: tags="nvidia,nvidia-ubuntu22.04", version="latest" | |
# voicevox/voicevox_engine:nvidia-latest | |
# voicevox/voicevox_engine:nvidia-ubuntu22.04-latest | |
- name: <Build> Generate Docker image names | |
id: generate-docker-image-names | |
run: | | |
# バージョン文字列付きのタグ名を steps.generate-docker-image-names.outputs.tags に改行区切りで格納する | |
{ | |
echo "tags<<EOF" | |
# Usage: $0 <repository> [version_or_latest] [comma_separated_prefixes] | |
bash tools/generate_docker_image_names.bash "${{ env.IMAGE_NAME }}" "${{ needs.config.outputs.version_or_latest }}" "${{ matrix.tags }}" | |
echo "EOF" | |
} >> "$GITHUB_OUTPUT" | |
# ビルドキャッシュ(docker build コマンドのオプション --cache-from と --cache-to)に指定するためのタグ名を生成する | |
# | |
# 例1: buildcache_tag="cpu-ubuntu22.04", version="latest" | |
# cache-from: type=registry,ref=voicevox/voicevox_engine:cpu-ubuntu22.04-latest-buildcache | |
# cache-to: type=registry,ref=voicevox/voicevox_engine:cpu-ubuntu22.04-latest-buildcache,mode=max | |
# | |
# 例2: buildcache_tag="nvidia-ubuntu22.04", version="0.22.0" | |
# cache-from: type=registry,ref=voicevox/voicevox_engine:nvidia-ubuntu22.04-latest-buildcache | |
# cache-to: (空文字列) | |
- name: <Build> Generate Docker buildcache image names | |
id: generate-docker-buildcache-image-names | |
run: | | |
# --cache-from に指定するためのタグ名を steps.generate-docker-buildcache-image-names.outputs.cache-from に格納する | |
# 常にデフォルトブランチのビルドキャッシュ(*-latest-buildcache)を使用する | |
# 例: type=registry,ref=voicevox/voicevox_engine:cpu-ubuntu22.04-latest-buildcache | |
echo "cache-from=type=registry,ref=${{ env.IMAGE_NAME }}:${{ matrix.buildcache_tag }}-latest-buildcache" >> "$GITHUB_OUTPUT" | |
# --cache-to に指定するためのタグ名を steps.generate-docker-buildcache-image-names.outputs.cache-to に格納する | |
# リリースの場合、ビルドキャッシュを作成しないため、空文字列を格納する | |
# 例: type=registry,ref=voicevox/voicevox_engine:cpu-ubuntu22.04-latest-buildcache,mode=max | |
{ | |
echo "cache-to<<EOF" | |
if [ "${{ needs.config.outputs.version_or_latest }}" = "latest" ]; then | |
# デフォルトブランチへのコミットの場合( needs.config.outputs.version_or_latest = "latest" )、ビルドキャッシュを作成する | |
echo "type=registry,ref=${{ env.IMAGE_NAME }}:${{ matrix.buildcache_tag }}-latest-buildcache,mode=max" | |
fi | |
echo "EOF" | |
} >> "$GITHUB_OUTPUT" | |
- name: <Build/Deploy> Build and Deploy Docker image | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
builder: ${{ steps.buildx.outputs.name }} | |
file: ./Dockerfile | |
build-args: | | |
BASE_IMAGE=${{ matrix.base_image }} | |
BASE_RUNTIME_IMAGE=${{ matrix.base_runtime_image }} | |
PYTHON_VERSION=${{ steps.prepare-python.outputs.python-version }} | |
VOICEVOX_ENGINE_VERSION=${{ needs.config.outputs.version_or_latest }} | |
VOICEVOX_CORE_VERSION=${{ env.VOICEVOX_CORE_VERSION }} | |
VOICEVOX_RESOURCE_VERSION=${{ env.VOICEVOX_RESOURCE_VERSION }} | |
USE_GPU=${{ matrix.target == 'runtime-nvidia-env' }} | |
ONNXRUNTIME_VERSION=${{ matrix.onnxruntime_version }} | |
target: ${{ matrix.target }} | |
push: true | |
tags: ${{ steps.generate-docker-image-names.outputs.tags }} | |
cache-from: ${{ steps.generate-docker-buildcache-image-names.outputs.cache-from }} | |
cache-to: ${{ steps.generate-docker-buildcache-image-names.outputs.cache-to }} | |
platforms: ${{ matrix.platforms }} | |
run-release-test-workflow: | |
# version が指定されている場合のみ実行する | |
if: needs.config.outputs.version_or_latest != 'latest' | |
needs: [config, build-docker] | |
uses: ./.github/workflows/test-engine-container.yml | |
with: | |
version: ${{ needs.config.outputs.version_or_latest }} | |
repo_url: ${{ format('{0}/{1}', github.server_url, github.repository) }} # このリポジトリのURL |