diff --git a/.dockerignore b/.dockerignore index 505d68c..c92523a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,6 +3,7 @@ !install.sh !build-dist.sh !check.sh +!test.sh !requirements_dev.txt !.isort.cfg !pylintrc diff --git a/.gitignore b/.gitignore index 71be08f..79420be 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ dist/ .venv/ *.wav *.spec + +/samples diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 0000000..f88f377 --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,40 @@ +# Copyright 2022 Mycroft AI Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# ----------------------------------------------------------------------------- +# Dockerfile for Mimic 3 (https://github.com/MycroftAI/mimic3) +# +# Runs code checks and creates source code distributions for PyPI. +# +# Requires Docker buildx: https://docs.docker.com/buildx/working-with-buildx/ +# ----------------------------------------------------------------------------- +FROM python:3.9 + +ARG TARGETARCH +ARG TARGETVARIANT + +ENV LANG C.UTF-8 +ENV DEBIAN_FRONTEND=noninteractive + +WORKDIR /build/mimic3 +COPY ./ ./ + +# Install mimic3 +RUN --mount=type=cache,id=pip-venv,target=/root/.cache/pip \ + ./install.sh + +# Run tests +RUN --mount=type=cache,id=voices,target=/root/.local/share/mimic3 \ + ./test.sh diff --git a/Makefile b/Makefile index 6b47101..670cc30 100644 --- a/Makefile +++ b/Makefile @@ -36,10 +36,15 @@ docker-gpu: binaries: echo "$(DOCKER_PLATFORM)" | sed -e 's/,/\n/g' | \ while read -r platform; do \ - echo "$${platform}"; \ rm -rf "dist/$${platform}"; \ docker buildx build . -f Dockerfile.binary --platform "$${platform}" --output "type=local,dest=dist/$${platform}"; \ done debian: debian/build-debian.sh + +test: + echo "$(DOCKER_PLATFORM)" | sed -e 's/,/\n/g' | \ + while read -r platform; do \ + docker buildx build . -f Dockerfile.test --platform "$${platform}"; \ + done diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..f0f22ad --- /dev/null +++ b/test.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# Copyright 2022 Mycroft AI Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# ----------------------------------------------------------------------------- +# +# Generate samples and compare hashes +# +set -eo pipefail + +# Directory of *this* script +this_dir="$( cd "$( dirname "$0" )" && pwd )" + +expected_hashes="${this_dir}/tests/sample_hashes.txt" +if [ ! -s "${expected_hashes}" ]; then + echo "Missing ${expected_hashes}"; + exit 1; +fi + +# Path to virtual environment +: "${venv:=${this_dir}/.venv}" + +if [ -d "${venv}" ]; then + # Activate virtual environment if available + source "${venv}/bin/activate" +fi + +diff "${expected_hashes}" <(python3 tests/get_sample_hashes.py) diff --git a/tests/get_sample_hashes.py b/tests/get_sample_hashes.py index 116f844..db04dd0 100644 --- a/tests/get_sample_hashes.py +++ b/tests/get_sample_hashes.py @@ -33,6 +33,9 @@ from mimic3_tts import Mimic3Settings, Mimic3TextToSpeechSystem, Voice # ----------------------------------------------------------------------------- _TEST_SENTENCES = { + "af": """'n Reënboog is 'n boog van gekleurde lig wat ontstaan wanneer die + son teen 'n waterdruppel skyn en die wit lig dan deur middel van + ligbreking in die volledige kleurspektrum opgebreek word.""", "de": """Der Regenbogen ist ein atmosphärisch-optisches Phänomen, das als kreisbogenförmiges farbiges Lichtband in einer von der Sonne beschienenen Regenwand oder -wolke wahrgenommen wird.""", diff --git a/tests/sample_hashes.txt b/tests/sample_hashes.txt index 7746a1b..c79cdd8 100644 --- a/tests/sample_hashes.txt +++ b/tests/sample_hashes.txt @@ -1,3 +1,4 @@ +af_ZA/google_nwu 292fa486a38b96a3e3d1b071e58377620953da12f49b2427cdff82969b933b9b de_DE/m-ailabs_low eafcf586b582c5ffb58c373a62e34c2e35d3b4b5d9d49288dabfacb50bc4fa8c de_DE/thorsten-emotion_low d7b765c4cc18364023b1e50d4cef1fc6b6d5a780ea1713d2a6ed60459dcbd02e de_DE/thorsten_low 60967155b319d1a78c2dade56a4f484cf6996c506f2d24b95dad717fafdad302 diff --git a/tests/update-hashes.sh b/tests/update-hashes.sh new file mode 100755 index 0000000..1728b6c --- /dev/null +++ b/tests/update-hashes.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# Copyright 2022 Mycroft AI Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# ----------------------------------------------------------------------------- +# +# Updates sample hashes and puts WAVs in samples/ directory. +# These should be manually verified. +# +set -eo pipefail + +# Directory of *this* script +this_dir="$( cd "$( dirname "$0" )" && pwd )" +base_dir="$(realpath "${this_dir}/..")" + +samples_dir="${base_dir}/samples" +expected_hashes="${base_dir}/tests/sample_hashes.txt" + +# Path to virtual environment +: "${venv:=${base_dir}/.venv}" + +if [ -d "${venv}" ]; then + # Activate virtual environment if available + source "${venv}/bin/activate" +fi + +rm -rf "${samples_dir}" +python3 tests/get_sample_hashes.py \ + --output-dir "${samples_dir}" \ + > "${expected_hashes}"