Merge pull request #1843 from coqui-ai/windows-ci

Windows base CI
This commit is contained in:
Reuben Morais 2021-04-19 12:44:12 +02:00 committed by GitHub
commit 9c7003d77d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 1855 additions and 1370 deletions

1
.gitattributes vendored
View File

@ -1 +1,2 @@
data/lm/kenlm.scorer filter=lfs diff=lfs merge=lfs -text data/lm/kenlm.scorer filter=lfs diff=lfs merge=lfs -text
.github/actions/check_artifact_exists/dist/index.js binary

View File

@ -35,3 +35,9 @@ Hacking:
For hacking into the action, please follow the [GitHub JavaScript For hacking into the action, please follow the [GitHub JavaScript
Actions](https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action#commit-tag-and-push-your-action-to-github) Actions](https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action#commit-tag-and-push-your-action-to-github)
and specifically the usage of `ncc`. and specifically the usage of `ncc`.
```
$ npm install
$ npx ncc build main.js --license licenses.txt
$ git add dist/
```

View File

@ -160,6 +160,31 @@ The above copyright notice and this permission notice (including the next paragr
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@octokit/plugin-throttling
MIT
The MIT License
Copyright (c) 2018 Octokit contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@octokit/request @octokit/request
MIT MIT
The MIT License The MIT License
@ -450,6 +475,30 @@ Apache-2.0
limitations under the License. limitations under the License.
bottleneck
MIT
The MIT License (MIT)
Copyright (c) 2014 Simon Grondin
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
deprecation deprecation
ISC ISC
The ISC License The ISC License

View File

@ -4,6 +4,8 @@ const AdmZip = require('adm-zip');
const filesize = require('filesize'); const filesize = require('filesize');
const pathname = require('path'); const pathname = require('path');
const fs = require('fs'); const fs = require('fs');
const { throttling } = require('@octokit/plugin-throttling');
const { GitHub } = require('@actions/github/lib/utils');
async function getGoodArtifacts(client, owner, repo, name) { async function getGoodArtifacts(client, owner, repo, name) {
const goodWorkflowArtifacts = await client.paginate( const goodWorkflowArtifacts = await client.paginate(
@ -57,8 +59,29 @@ async function main() {
const path = core.getInput("path", { required: true }); const path = core.getInput("path", { required: true });
const name = core.getInput("name"); const name = core.getInput("name");
const download = core.getInput("download"); const download = core.getInput("download");
const client = github.getOctokit(token) const OctokitWithThrottling = GitHub.plugin(throttling);
const client = new OctokitWithThrottling({
auth: token,
throttle: {
onRateLimit: (retryAfter, options) => {
console.log(
`Request quota exhausted for request ${options.method} ${options.url}`
);
// Retry twice after hitting a rate limit error, then give up
if (options.request.retryCount <= 2) {
console.log(`Retrying after ${retryAfter} seconds!`);
return true;
}
},
onAbuseLimit: (retryAfter, options) => {
// does not retry, only logs a warning
console.log(
`Abuse detected for request ${options.method} ${options.url}`
);
},
},
});
console.log("==> Repo:", owner + "/" + repo); console.log("==> Repo:", owner + "/" + repo);
const goodArtifacts = await getGoodArtifacts(client, owner, repo, name); const goodArtifacts = await getGoodArtifacts(client, owner, repo, name);
@ -116,4 +139,11 @@ async function main() {
return; return;
} }
// We have to manually wrap the main function with a try-catch here because
// GitHub will ignore uncatched exceptions and continue running the workflow,
// leading to harder to diagnose errors downstream from this action.
try {
main(); main();
} catch (error) {
core.setFailed(error.message);
}

220
.github/actions/check_artifact_exists/package-lock.json generated vendored Normal file
View File

@ -0,0 +1,220 @@
{
"name": "check_artifact_exists",
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@actions/core": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.6.tgz",
"integrity": "sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==",
"dev": true
},
"@actions/github": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-4.0.0.tgz",
"integrity": "sha512-Ej/Y2E+VV6sR9X7pWL5F3VgEWrABaT292DRqRU6R4hnQjPtC/zD3nagxVdXWiRQvYDh8kHXo7IDmG42eJ/dOMA==",
"dev": true,
"requires": {
"@actions/http-client": "^1.0.8",
"@octokit/core": "^3.0.0",
"@octokit/plugin-paginate-rest": "^2.2.3",
"@octokit/plugin-rest-endpoint-methods": "^4.0.0"
}
},
"@actions/http-client": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz",
"integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==",
"dev": true,
"requires": {
"tunnel": "0.0.6"
}
},
"@octokit/auth-token": {
"version": "2.4.5",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz",
"integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==",
"dev": true,
"requires": {
"@octokit/types": "^6.0.3"
}
},
"@octokit/core": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.4.0.tgz",
"integrity": "sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg==",
"dev": true,
"requires": {
"@octokit/auth-token": "^2.4.4",
"@octokit/graphql": "^4.5.8",
"@octokit/request": "^5.4.12",
"@octokit/request-error": "^2.0.5",
"@octokit/types": "^6.0.3",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/endpoint": {
"version": "6.0.11",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz",
"integrity": "sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==",
"dev": true,
"requires": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/graphql": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.1.tgz",
"integrity": "sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA==",
"dev": true,
"requires": {
"@octokit/request": "^5.3.0",
"@octokit/types": "^6.0.3",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/openapi-types": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-6.0.0.tgz",
"integrity": "sha512-CnDdK7ivHkBtJYzWzZm7gEkanA7gKH6a09Eguz7flHw//GacPJLmkHA3f3N++MJmlxD1Fl+mB7B32EEpSCwztQ=="
},
"@octokit/plugin-paginate-rest": {
"version": "2.13.3",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.3.tgz",
"integrity": "sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg==",
"dev": true,
"requires": {
"@octokit/types": "^6.11.0"
}
},
"@octokit/plugin-rest-endpoint-methods": {
"version": "4.15.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.15.0.tgz",
"integrity": "sha512-1AF9GM/Ywk8ukUM5seDRj286GdFpdfsHeOrOPBV2rVtRN7MQNzRIcw8W5sb4JPerjQ0WcRRwAwQyufg64BxJkA==",
"dev": true,
"requires": {
"@octokit/types": "^6.13.0",
"deprecation": "^2.3.1"
}
},
"@octokit/plugin-throttling": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.4.1.tgz",
"integrity": "sha512-qCQ+Z4AnL9OrXvV59EH3GzPxsB+WyqufoCjiCJXJxTbnt3W+leXbXw5vHrMp4NG9ltw00McFWIxIxNQAzLNoTA==",
"requires": {
"@octokit/types": "^6.0.1",
"bottleneck": "^2.15.3"
}
},
"@octokit/request": {
"version": "5.4.15",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.15.tgz",
"integrity": "sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag==",
"dev": true,
"requires": {
"@octokit/endpoint": "^6.0.1",
"@octokit/request-error": "^2.0.0",
"@octokit/types": "^6.7.1",
"is-plain-object": "^5.0.0",
"node-fetch": "^2.6.1",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/request-error": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz",
"integrity": "sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==",
"dev": true,
"requires": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
}
},
"@octokit/types": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.13.0.tgz",
"integrity": "sha512-W2J9qlVIU11jMwKHUp5/rbVUeErqelCsO5vW5PKNb7wAXQVUz87Rc+imjlEvpvbH8yUb+KHmv8NEjVZdsdpyxA==",
"requires": {
"@octokit/openapi-types": "^6.0.0"
}
},
"@vercel/ncc": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.27.0.tgz",
"integrity": "sha512-DllIJQapnU2YwewIhh/4dYesmMQw3h2cFtabECc/zSJHqUbNa0eJuEkRa6DXbZvh1YPWBtYQoPV17NlDpBw1Vw==",
"dev": true
},
"adm-zip": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz",
"integrity": "sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w==",
"dev": true
},
"before-after-hook": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.1.tgz",
"integrity": "sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw==",
"dev": true
},
"bottleneck": {
"version": "2.19.5",
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
},
"deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
"dev": true
},
"filesize": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
"integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==",
"dev": true
},
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true
},
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
"dev": true
},
"universal-user-agent": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
"dev": true
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

View File

@ -4,6 +4,7 @@
"devDependencies": { "devDependencies": {
"@actions/core": "^1.2.6", "@actions/core": "^1.2.6",
"@actions/github": "^4.0.0", "@actions/github": "^4.0.0",
"@octokit/plugin-throttling": "^3.4.1",
"@vercel/ncc": "^0.27.0", "@vercel/ncc": "^0.27.0",
"adm-zip": "^0.5.2", "adm-zip": "^0.5.2",
"filesize": "^6.1.0" "filesize": "^6.1.0"

View File

@ -62,8 +62,7 @@ runs:
esac esac
;; ;;
# TODO: 'Windows*' might not be good ${CI_MSYS_VERSION}:x86_64)
MSYS_NT-10.0-17763:x86_64)
case "${{ inputs.pyver }}" in case "${{ inputs.pyver }}" in
3.5*) 3.5*)
NUMPY_BUILD_VERSION="==1.11.0" NUMPY_BUILD_VERSION="==1.11.0"

1442
.github/workflows/build-and-test.yml vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,686 +0,0 @@
name: "macOS amd64"
on:
pull_request:
push:
branches:
- master
env:
CI_TASK_DIR: ${{ github.workspace }}
CI_ARTIFACTS_DIR: ${{ github.workspace }}/artifacts
CI_NODE_MODULES_NTH: 1
MACOSX_DEPLOYMENT_TARGET: "10.10"
jobs:
swig_macOS:
name: "Build SWIG for macOS"
runs-on: macos-10.15
env:
swig_hash: "90cdbee6a69d13b39d734083b9f91069533b0d7b"
steps:
- uses: actions/checkout@v2
with:
repository: "swig/swig"
ref: ${{ env.swig_hash }}
- run: |
mkdir -p build-static/
- uses: actions/cache@v2
id: swig-build-cache
with:
path: build-static/
key: swig-${{ runner.os }}-${{ env.swig_hash }}
- run: |
brew install automake
if: steps.swig-build-cache.outputs.cache-hit != 'true'
- run: |
curl -sSL https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz > pcre-8.43.tar.gz
if: steps.swig-build-cache.outputs.cache-hit != 'true'
- run: |
./Tools/pcre-build.sh
if: steps.swig-build-cache.outputs.cache-hit != 'true'
- run: |
sh autogen.sh
./configure \
--prefix=${{ github.workspace }}/build-static/ \
--program-prefix=ds-
if: steps.swig-build-cache.outputs.cache-hit != 'true'
- run: |
make -j
if: steps.swig-build-cache.outputs.cache-hit != 'true'
- run: |
make install
if: steps.swig-build-cache.outputs.cache-hit != 'true'
- uses: actions/upload-artifact@v2
with:
name: ${{ github.job }}
path: ${{ github.workspace }}/build-static/
build-ctc-decoder:
name: "Build CTC decoder Python package for testing"
needs: [ swig_macOS ]
runs-on: macos-10.15
strategy:
matrix:
python-version: [3.6.8]
if: ${{ github.event_name == 'pull_request' }}
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: ./.github/actions/install-python-upstream
with:
version: ${{ matrix.python-version }}
- run: |
python --version
pip --version
- uses: actions/download-artifact@v2
with:
name: "swig_macOS"
path: ${{ github.workspace }}/native_client/ds-swig/
- run: |
ls -hal ${{ github.workspace }}/native_client/ds-swig/bin
ln -s ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
chmod +x ${{ github.workspace }}/native_client/ds-swig/bin/ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
- id: get_numpy
uses: ./.github/actions/numpy_vers
with:
pyver: ${{ matrix.python-version }}
- run: |
NUMPY_BUILD_VERSION=${{ steps.get_numpy.outputs.build_version }} \
NUMPY_DEP_VERSION=${{ steps.get_numpy.outputs.dep_version }} \
make -C native_client/ctcdecode/ \
NUM_PROCESSES=$(sysctl hw.ncpu |cut -d' ' -f2) \
bindings
- uses: actions/upload-artifact@v2
with:
name: "ds_ctcdecoder-test.whl"
path: ${{ github.workspace }}/native_client/ctcdecode/dist/*.whl
- run: |
make -C native_client/ctcdecode clean-keep-third-party
train-test-model:
name: "Train a test model"
needs: [ "build-ctc-decoder" ]
runs-on: macos-10.15
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
bitrate: ["8k", "16k"]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-python@v2
with:
python-version: 3.6
- uses: actions/download-artifact@v2
with:
name: "ds_ctcdecoder-test.whl"
- run: |
python --version
pip --version
- run: |
pip install --upgrade pip==19.3.1 setuptools==45.0.0 wheel==0.33.6
- run: |
pip install ds_ctcdecoder-*-cp36-cp36m-*_x86_64.whl
DS_NODECODER=y pip install --upgrade .
- run: |
bits=""
if [ "${{ matrix.bitrate }}" = "8k" ]; then
bits=8000
fi
if [ "${{ matrix.bitrate }}" = "16k" ]; then
bits=16000
fi
# Easier to rename to that we can exercize the LDC93S1 importer code to
# generate the CSV file.
echo "Moving ${bits} to LDC93S1.wav"
mv data/smoke_test/LDC93S1_pcms16le_1_${bits}.wav data/smoke_test/LDC93S1.wav
./bin/run-ci-ldc93s1_new.sh 249 ${bits}
./bin/run-ci-ldc93s1_tflite.sh ${bits}
- name: Download convert_graphdef_memmapped_format tool
run: |
set -ex
wget -O temp.zip https://github.com/coqui-ai/STT/releases/download/v0.9.3/convert_graphdef_memmapped_format.macOS.amd64.zip
unzip temp.zip
rm temp.zip
mv convert_graphdef_memmapped_format /tmp
chmod +x /tmp/convert_graphdef_memmapped_format
/tmp/convert_graphdef_memmapped_format --in_graph=/tmp/train/output_graph.pb --out_graph=/tmp/train/output_graph.pbmm
- run: |
tar -cf - \
-C /tmp/ckpt/ . \
| xz -9 -T0 > /tmp/checkpoint.tar.xz
- run: |
mkdir -p ${{ github.workspace }}/tmp/
cp /tmp/train*/output_graph.* /tmp/checkpoint.tar.xz ${{ github.workspace }}/tmp/
- run: |
ls -hal /tmp/ ${{ github.workspace }}/tmp/
- uses: actions/upload-artifact@v2
with:
name: "test-model.tf-${{ matrix.bitrate }}.zip"
path: ${{ github.workspace }}/tmp/output_graph.pb*
- uses: actions/upload-artifact@v2
with:
name: "test-model.tflite-${{ matrix.bitrate }}.zip"
path: ${{ github.workspace }}/tmp/output_graph.tflite
- uses: actions/upload-artifact@v2
with:
name: "test-checkpoint.${{ matrix.bitrate }}.zip"
path: ${{ github.workspace }}/tmp/checkpoint.tar.xz
tensorflow_opt-macOS:
name: "Check cache for TensorFlow"
runs-on: ubuntu-20.04
outputs:
status: ${{ steps.check_artifact_exists.outputs.status }}
cache_key: ${{ steps.get_cache_key.outputs.key }}
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- id: get_cache_key
uses: ./.github/actions/get_cache_key
with:
extras: "2"
- id: check_artifact_exists
uses: ./.github/actions/check_artifact_exists
with:
name: ${{ steps.get_cache_key.outputs.key }}
build-tensorflow-macOS:
name: "Build TensorFlow (opt) for macOS"
needs: tensorflow_opt-macOS
runs-on: macos-10.15
steps:
- run: true
if: needs.tensorflow_opt-macOS.outputs.status == 'found'
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: 'recursive'
if: needs.tensorflow_opt-macOS.outputs.status == 'missing'
- uses: ./.github/actions/select-xcode
with:
version: "12.1.1"
if: needs.tensorflow_opt-macOS.outputs.status == 'missing'
- uses: ./.github/actions/setup-tensorflow
if: needs.tensorflow_opt-macOS.outputs.status == 'missing'
- uses: ./.github/actions/build-tensorflow
with:
flavor: "--darwin-cpu"
if: needs.tensorflow_opt-macOS.outputs.status == 'missing'
- uses: ./.github/actions/package-tensorflow
if: needs.tensorflow_opt-macOS.outputs.status == 'missing'
- uses: actions/upload-artifact@v2
with:
name: ${{ needs.tensorflow_opt-macOS.outputs.cache_key }}
path: ${{ github.workspace }}/artifacts/home.tar.xz
if: needs.tensorflow_opt-macOS.outputs.status == 'missing'
build-lib_macOS:
name: "Build libstt+client"
runs-on: macos-10.15
needs: [ build-tensorflow-macOS, tensorflow_opt-macOS ]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/download-artifact@v2
with:
name: ${{ needs.tensorflow_opt-macOS.outputs.cache_key }}
path: ${{ github.workspace }}/
if: needs.tensorflow_opt-macOS.outputs.status == 'missing'
- uses: ./.github/actions/check_artifact_exists
with:
name: ${{ needs.tensorflow_opt-macOS.outputs.cache_key }}
path: ${{ github.workspace }}/
download: true
if: needs.tensorflow_opt-macOS.outputs.status == 'found'
- run: |
tar xkf ${{ github.workspace }}/home.tar.xz
rm ${{ github.workspace }}/home.tar.xz
- run: |
git status
- uses: ./.github/actions/select-xcode
with:
version: "12.1.1"
- uses: ./.github/actions/host-build
with:
flavor: ${{ matrix.build-flavor }}
- uses: ./.github/actions/package
- uses: actions/upload-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ github.workspace }}/artifacts/native_client.tar.xz
- uses: actions/upload-artifact@v2
with:
name: "libstt.${{ matrix.build-flavor }}.zip"
path: ${{ github.workspace }}/artifacts/libstt.zip
build-python-macOS:
name: "Build python bindings for macOS"
runs-on: macos-10.15
needs: [ build-lib_macOS, swig_macOS ]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
python-version: [3.6.8, 3.7.9, 3.8.8, 3.9.2]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/download-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ github.workspace }}/tensorflow/bazel-bin/native_client/
- run: |
cd ${{ github.workspace }}/tensorflow/bazel-bin/native_client/
tar xf native_client.tar.xz
ls -hal
cd ${{ github.workspace }}/
- uses: actions/download-artifact@v2
with:
name: "swig_macOS"
path: ${{ github.workspace }}/native_client/ds-swig/
- run: |
ls -hal ${{ github.workspace }}/native_client/ds-swig/bin
ln -s ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
chmod +x ${{ github.workspace }}/native_client/ds-swig/bin/ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
- uses: ./.github/actions/install-python-upstream
with:
version: ${{ matrix.python-version }}
# GitHub packaged version are limited to macOS deployment target 10.14
#- uses: actions/setup-python@v2
# with:
# python-version: ${{ matrix.python-version }}
- id: get_numpy
uses: ./.github/actions/numpy_vers
with:
pyver: ${{ matrix.python-version }}
- uses: ./.github/actions/python-build
with:
build_flavor: ${{ matrix.build-flavor }}
numpy_build: "${{ steps.get_numpy.outputs.build_version }}"
numpy_dep: "${{ steps.get_numpy.outputs.dep_version }}"
- uses: actions/upload-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}-${{ matrix.python-version }}.whl"
path: ${{ github.workspace }}/wheels/*.whl
build-nodejs-macOS:
name: "Build NodeJS and ElectronJS for macOS"
runs-on: macos-10.15
needs: [ build-lib_macOS, swig_macOS ]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/download-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ github.workspace }}/tensorflow/bazel-bin/native_client/
- run: |
cd ${{ github.workspace }}/tensorflow/bazel-bin/native_client/
tar xf native_client.tar.xz
ls -hal
cd ${{ github.workspace }}/
- uses: actions/download-artifact@v2
with:
name: "swig_macOS"
path: ${{ github.workspace }}/native_client/ds-swig/
- run: |
ls -hal ${{ github.workspace }}/native_client/ds-swig/bin
ln -s ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
chmod +x ${{ github.workspace }}/native_client/ds-swig/bin/ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
- uses: actions/setup-node@v2
with:
node-version: 12
- uses: actions/cache@v2
id: node-headers-cache
with:
path: native_client/javascript/headers/nodejs/
key: node-headers-10.0.0_15.0.0
- uses: actions/cache@v2
id: electron-headers-cache
with:
path: native_client/javascript/headers/electronjs/
key: electron-headers-5.0.13_12.0.0
- uses: ./.github/actions/node-build
with:
nodejs_versions: "10.0.0 11.0.0 12.7.0 13.0.0 14.0.0 15.0.0"
electronjs_versions: "5.0.13 6.0.12 6.1.7 7.0.1 7.1.8 8.0.1 9.0.1 9.1.0 9.2.0 10.0.0 10.1.0 11.0.0 12.0.0"
- uses: actions/upload-artifact@v2
with:
name: "nodewrapper-${{ matrix.build-flavor }}-macOS_amd64.tar.gz"
path: ${{ github.workspace }}/native_client/javascript/wrapper.tar.gz
- uses: actions/upload-artifact@v2
with:
name: "stt_intermediate-${{ matrix.build-flavor }}.tgz"
path: ${{ github.workspace }}/native_client/javascript/stt-*.tgz
test-cpp-macOS:
name: "Test C++ binary on macOS"
runs-on: macos-10.15
needs: [ build-lib_macOS, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
build-flavor: ["tf", "tflite"]
models: ["test", "prod"]
bitrate: ["8k", "16k"]
env:
CI_TMP_DIR: ${{ github.workspace }}/tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: ${{ github.workspace }}/tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/download-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ env.CI_TMP_DIR }}
- run: |
cd ${{ env.CI_TMP_DIR }}
mkdir ds && cd ds && tar xf ../native_client.tar.xz
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.CI_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
if: matrix.models == 'test'
- uses: ./.github/actions/run-tests
with:
runtime: "cpp"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
test-py-macOS:
name: "Test Python bindings on macOS"
runs-on: macos-10.15
needs: [ build-python-macOS, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
python-version: [3.6.8, 3.7.9, 3.8.8, 3.9.2]
build-flavor: ["tf", "tflite"]
models: ["test", "prod"]
bitrate: ["8k", "16k"]
env:
CI_TMP_DIR: ${{ github.workspace }}/tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: ${{ github.workspace }}/tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- uses: actions/download-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}-${{ matrix.python-version }}.whl"
path: ${{ env.CI_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.CI_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
pip3 install --only-binary :all: --upgrade ${{ env.CI_TMP_DIR }}/stt*.whl
- uses: ./.github/actions/run-tests
with:
runtime: "python"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
repackage-nodejs-allplatforms:
name: "Repackage NodeJS / ElectronJS for multiplatforms"
runs-on: ubuntu-20.04
needs: [ build-nodejs-macOS ]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- run: |
mkdir -p /tmp/nodewrapper-${{ matrix.build-flavor }}-macOS_amd64/
- uses: actions/download-artifact@v2
with:
name: "nodewrapper-${{ matrix.build-flavor }}-macOS_amd64.tar.gz"
path: /tmp/nodewrapper-macOS_amd64/
- run: |
tar -C ${{ github.workspace }}/native_client/javascript -xzvf /tmp/nodewrapper-macOS_amd64/wrapper.tar.gz
- run: |
PROJECT_NAME="deepspeech"
if [ "${{ matrix.build-flavor }}" = "tflite" ]; then
PROJECT_NAME="deepspeech-tflite"
fi
make -C native_client/javascript clean npm-pack PROJECT_NAME=$PROJECT_NAME
- uses: actions/upload-artifact@v2
with:
name: "deepspeech-${{ matrix.build-flavor }}.tgz"
path: ${{ github.workspace }}/native_client/javascript/deepspeech-*.tgz
test-nodejs-macOS:
name: "Test NodeJS bindings on macOS"
runs-on: macos-10.15
needs: [ build-nodejs-macOS, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
# https://nodejs.org/en/about/releases/
nodejs-version: [10, 12, 14, 15]
build-flavor: ["tf", "tflite"]
models: ["test"]
bitrate: ["16k"]
env:
CI_TMP_DIR: ${{ github.workspace }}/tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: ${{ github.workspace }}/tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-node@v2
with:
node-version: ${{ matrix.nodejs-version }}
- uses: actions/download-artifact@v2
with:
name: "stt_intermediate-${{ matrix.build-flavor }}.tgz"
path: ${{ env.CI_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.CI_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
if: matrix.models == 'test'
- uses: actions/cache@v2
id: node-modules-cache
with:
path: ~/.npm/
key: node-modules-${{ matrix.build-flavor }}-${{ runner.os }}-${{ env.CI_NODE_MODULES_NTH }}
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
npm install --verbose ${{ env.CI_TMP_DIR }}/stt*.tgz
- run: |
ls -hal node_modules/deepspeech* node_modules/.bin/
- uses: ./.github/actions/run-tests
with:
runtime: "node"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
test-electronjs-macOS:
name: "Test ElectronJS bindings on macOS"
runs-on: macos-10.15
needs: [ build-nodejs-macOS, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
electronjs-version: [5.0.13, 6.1.7, 7.1.8, 8.0.1, 9.2.0, 10.1.0, 11.0.0, 12.0.0]
build-flavor: ["tf", "tflite"]
models: ["test"]
bitrate: ["16k"]
env:
CI_TMP_DIR: ${{ github.workspace }}/tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: ${{ github.workspace }}/tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-node@v2
with:
node-version: 12
- uses: actions/download-artifact@v2
with:
name: "stt_intermediate-${{ matrix.build-flavor }}.tgz"
path: ${{ env.CI_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.CI_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
if: matrix.models == 'test'
- uses: actions/cache@v2
id: electron-modules-cache
with:
path: ~/.npm/
key: electron-modules-${{ matrix.build-flavor }}-${{ runner.os }}-${{ env.CI_NODE_MODULES_NTH }}
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
npm install ${{ env.CI_TMP_DIR }}/stt*.tgz
- run: |
npm install electron@${{ matrix.electronjs-version }}
- uses: ./.github/actions/run-tests
with:
runtime: "electronjs"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
timeout-minutes: 5
test-nodejs_all-macOS:
name: "Test MultiArchPlatform NodeJS bindings on macOS"
runs-on: macos-10.15
needs: [ repackage-nodejs-allplatforms, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
# https://nodejs.org/en/about/releases/
nodejs-version: [10, 15]
build-flavor: ["tf", "tflite"]
models: ["test", "prod"]
bitrate: ["8k", "16k"]
env:
CI_TMP_DIR: ${{ github.workspace }}/tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: ${{ github.workspace }}/tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-node@v2
with:
node-version: ${{ matrix.nodejs-version }}
- uses: actions/download-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}.tgz"
path: ${{ env.CI_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.CI_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
if: matrix.models == 'test'
- uses: actions/cache@v2
id: node-modules-cache
with:
path: ~/.npm/
key: node-modules-${{ matrix.build-flavor }}-${{ runner.os }}-${{ env.CI_NODE_MODULES_NTH }}
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
npm install --verbose ${{ env.CI_TMP_DIR }}/stt*.tgz
- run: |
ls -hal node_modules/deepspeech* node_modules/.bin/
- uses: ./.github/actions/run-tests
with:
runtime: "node"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
test-electronjs_all-macOS:
name: "Test MultiArchPlatform ElectronJS bindings on macOS"
runs-on: macos-10.15
needs: [ repackage-nodejs-allplatforms, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
electronjs-version: [5.0.13, 12.0.0]
build-flavor: ["tf", "tflite"]
models: ["test", "prod"]
bitrate: ["8k", "16k"]
env:
CI_TMP_DIR: ${{ github.workspace }}/tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: ${{ github.workspace }}/tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-node@v2
with:
node-version: 12
- uses: actions/download-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}.tgz"
path: ${{ env.CI_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.CI_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
if: matrix.models == 'test'
- uses: actions/cache@v2
id: electron-modules-cache
with:
path: ~/.npm/
key: electron-modules-${{ matrix.build-flavor }}-${{ runner.os }}-${{ env.CI_NODE_MODULES_NTH }}
- run: |
ls -hal ${{ env.CI_TMP_DIR }}/
npm install ${{ env.CI_TMP_DIR }}/stt*.tgz
- run: |
npm install electron@${{ matrix.electronjs-version }}
- uses: ./.github/actions/run-tests
with:
runtime: "electronjs"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
timeout-minutes: 5

View File

@ -1,660 +0,0 @@
name: "Windows amd64"
on:
pull_request:
push:
branches:
- main
env:
TASKCLUSTER_TASK_DIR: ${{ github.workspace }}
TASKCLUSTER_ARTIFACTS: ${{ github.workspace }}/artifacts
TC_MSYS_VERSION: MSYS_NT-10.0-17763
defaults:
run:
shell: bash
jobs:
swig_Windows:
name: "Build SWIG for Windows"
runs-on: windows-2019
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
update: true
install: >-
autoconf
automake
bison
gcc
git
make
pcre-devel
- uses: actions/checkout@v2
with:
repository: "swig/swig"
ref: "90cdbee6a69d13b39d734083b9f91069533b0d7b"
- run: |
mkdir -p build-static/
- run: |
sh autogen.sh
./configure \
--prefix=`pwd`/build-static/ \
--program-prefix=ds-
- run: |
make -j
- run: |
make install
- uses: actions/upload-artifact@v2
with:
name: ${{ github.job }}
path: ${{ github.workspace }}/build-static/
swig_Linux:
name: "Build SWIG for Linux"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
repository: "swig/swig"
ref: "90cdbee6a69d13b39d734083b9f91069533b0d7b"
- run: |
sudo apt-get install -y --no-install-recommends autoconf automake build-essential bison libpcre2-dev
- run: |
mkdir -p build-static/
- run: |
sh autogen.sh
./configure \
--prefix=${{ github.workspace }}/build-static/ \
--program-prefix=ds-
- run: |
make -j
- run: |
make install
- uses: actions/upload-artifact@v2
with:
name: ${{ github.job }}
path: ${{ github.workspace }}/build-static/
build-ctc-decoder-windows:
name: "Build CTC decoder Windows Python package for testing"
needs: [swig_Windows]
runs-on: windows-2019
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
update: true
install: >-
git
make
- uses: ilammy/msvc-dev-cmd@v1
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-python@v2
with:
python-version: 3.7.9
- run: |
python --version
python -m pip --version
- uses: actions/download-artifact@v2
with:
name: "swig_Windows"
path: ${{ github.workspace }}/native_client/ds-swig/
- name: Link ds-swig into swig
run: |
set -ex
ls -hal native_client/ds-swig/bin
ln -s ds-swig.exe native_client/ds-swig/bin/swig.exe
chmod +x native_client/ds-swig/bin/ds-swig.exe native_client/ds-swig/bin/swig.exe
- name: Remove /usr/bin/link conflicting with MSVC link.exe
run: |
rm /usr/bin/link
- run: |
make -C native_client/ctcdecode/ \
NUM_PROCESSES=$(nproc) \
bindings
- uses: actions/upload-artifact@v2
with:
name: "ds_ctcdecoder-windows-test.whl"
path: ${{ github.workspace }}/native_client/ctcdecode/dist/*.whl
- run: |
make -C native_client/ctcdecode clean-keep-third-party
build-ctc-decoder-linux:
name: "Build CTC decoder Linux Python package for testing"
needs: [swig_Linux]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-python@v2
with:
python-version: 3.6
- run: |
python --version
pip --version
- uses: actions/download-artifact@v2
with:
name: "swig_Linux"
path: ${{ github.workspace }}/native_client/ds-swig/
- run: |
ls -hal ${{ github.workspace }}/native_client/ds-swig/bin
ln -s ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
chmod +x ${{ github.workspace }}/native_client/ds-swig/bin/ds-swig ${{ github.workspace }}/native_client/ds-swig/bin/swig
- run: |
make -C native_client/ctcdecode/ \
NUM_PROCESSES=$(nproc) \
bindings
- uses: actions/upload-artifact@v2
with:
name: "ds_ctcdecoder-linux-test.whl"
path: ${{ github.workspace }}/native_client/ctcdecode/dist/*.whl
- run: |
make -C native_client/ctcdecode clean-keep-third-party
train-test-model:
name: "Train a test model"
needs: ["build-ctc-decoder-linux"]
runs-on: ubuntu-20.04
strategy:
matrix:
build-flavor: ["tf", "tflite"]
bitrate: ["8k", "16k"]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-python@v2
with:
python-version: 3.6
- uses: actions/download-artifact@v2
with:
name: "ds_ctcdecoder-linux-test.whl"
- run: |
python --version
pip --version
- run: |
pip install --upgrade pip==19.3.1 setuptools==45.0.0 wheel==0.33.6
- run: |
pip install ds_ctcdecoder-*-cp36-cp36m-manylinux1_x86_64.whl
DS_NODECODER=y pip install --upgrade .
- name: Run training script
run: |
set -ex
bits=""
if [ "${{ matrix.bitrate }}" = "8k" ]; then
bits=8000
fi
if [ "${{ matrix.bitrate }}" = "16k" ]; then
bits=16000
fi
# Easier to rename to that we can exercize the LDC93S1 importer code to
# generate the CSV file.
echo "Moving ${bits} to LDC93S1.wav"
mv data/smoke_test/LDC93S1_pcms16le_1_${bits}.wav data/smoke_test/LDC93S1.wav
./bin/run-ci-ldc93s1_new.sh 249 ${bits}
if [ "${{ matrix.build-flavor }}" = "tflite" ]; then
./bin/run-ci-ldc93s1_tflite.sh ${bits}
fi
- name: Download convert_graphdef_memmapped_format tool
run: |
set -ex
wget -O temp.zip https://github.com/coqui-ai/STT/releases/download/v0.9.3/convert_graphdef_memmapped_format.linux.amd64.zip
unzip temp.zip
rm temp.zip
mv convert_graphdef_memmapped_format /tmp
chmod +x /tmp/convert_graphdef_memmapped_format
/tmp/convert_graphdef_memmapped_format --in_graph=/tmp/train/output_graph.pb --out_graph=/tmp/train/output_graph.pbmm
if: matrix.build-flavor == 'tf'
- run: |
cp /tmp/train*/output_graph.* /tmp/
- run: |
tar -cf - \
-C /tmp/ckpt/ . \
| xz -9 -T0 > /tmp/checkpoint.tar.xz
- uses: actions/upload-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: /tmp/output_graph.*
- uses: actions/upload-artifact@v2
with:
name: "test-checkpoint.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: /tmp/checkpoint.tar.xz
tensorflow_opt-Windows:
name: "Check cache for TensorFlow"
runs-on: ubuntu-20.04
outputs:
status: ${{ steps.check_artifact_exists.outputs.status }}
cache_key: ${{ steps.get_cache_key.outputs.key }}
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- id: get_cache_key
uses: ./.github/actions/get_cache_key
with:
extras: "7"
- id: check_artifact_exists
uses: ./.github/actions/check_artifact_exists
with:
name: ${{ steps.get_cache_key.outputs.key }}
build-tensorflow-Windows:
name: "Build TensorFlow (opt) for Windows"
needs: tensorflow_opt-Windows
runs-on: windows-2019
steps:
- run: true
if: needs.tensorflow_opt-Windows.outputs.status == 'found'
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
update: true
install: >-
git
patch
tar
unzip
zip
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
- uses: actions/setup-python@v2
with:
python-version: 3.7.9
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: 'recursive'
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
# It's important that this PATH change only happens *after* the checkout
# above, because otherwise the checkout fails when persisisting the
# credentials for submodules due to using MSYS2 Git
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
- run: ./ci_scripts/tf-setup.sh
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
- run: ./ci_scripts/tf-build.sh "--windows-cpu"
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
- run: ./ci_scripts/tf-package.sh
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
- uses: actions/upload-artifact@v2
with:
name: ${{ needs.tensorflow_opt-Windows.outputs.cache_key }}
path: ${{ github.workspace }}/artifacts/home.tar.xz
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
build-lib_Windows:
name: "Build libstt+client"
runs-on: windows-2019
needs: [build-tensorflow-Windows, tensorflow_opt-Windows]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: ilammy/msvc-dev-cmd@v1
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
update: true
install: >-
git
make
patch
pkg-config
tar
unzip
zip
- uses: actions/download-artifact@v2
with:
name: ${{ needs.tensorflow_opt-Windows.outputs.cache_key }}
path: ${{ github.workspace }}/
if: needs.tensorflow_opt-Windows.outputs.status == 'missing'
- uses: ./.github/actions/check_artifact_exists
with:
name: ${{ needs.tensorflow_opt-Windows.outputs.cache_key }}
path: ${{ github.workspace }}/
download: true
if: needs.tensorflow_opt-Windows.outputs.status == 'found'
- run: |
"C:/Program Files/7-Zip/7z.exe" x home.tar.xz -so | "C:/Program Files/7-Zip/7z.exe" x -aos -si -ttar -o`pwd`
rm home.tar.xz
- run: |
git status
- run: ./ci_scripts/host-build.sh ${{ matrix.build-flavor }}
- run: ./ci_scripts/package.sh
- uses: actions/upload-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ github.workspace }}/artifacts/native_client.tar.xz
- uses: actions/upload-artifact@v2
with:
name: "libstt.${{ matrix.build-flavor }}.zip"
path: ${{ github.workspace }}/artifacts/libstt.zip
build-python-Windows:
name: "Build Python bindings for Windows"
runs-on: windows-2019
needs: [build-lib_Windows, swig_Windows]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
python-version: [3.6.8, 3.7.9, 3.8.8, 3.9.2]
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
update: true
install: >-
make
- uses: ilammy/msvc-dev-cmd@v1
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/download-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ github.workspace }}/tensorflow/bazel-bin/native_client/
- run: |
pushd tensorflow/bazel-bin/native_client/
"C:/Program Files/7-Zip/7z.exe" x native_client.tar.xz -so | "C:/Program Files/7-Zip/7z.exe" x -aoa -si -ttar -o`pwd`
ls -hal
popd
- uses: actions/download-artifact@v2
with:
name: "swig_Windows"
path: ${{ github.workspace }}/native_client/ds-swig/
- name: Link ds-swig into swig
run: |
set -ex
ls -hal native_client/ds-swig/bin
ln -s ds-swig.exe native_client/ds-swig/bin/swig.exe
chmod +x native_client/ds-swig/bin/ds-swig.exe native_client/ds-swig/bin/swig.exe
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Remove /usr/bin/link conflicting with MSVC link.exe
run: |
rm /usr/bin/link
- id: get_numpy
uses: ./.github/actions/numpy_vers
with:
pyver: ${{ matrix.python-version }}
- uses: ./.github/actions/python-build
with:
build_flavor: ${{ matrix.build-flavor }}
numpy_build: "${{ steps.get_numpy.outputs.build_version }}"
numpy_dep: "${{ steps.get_numpy.outputs.dep_version }}"
- uses: actions/upload-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}-${{ matrix.python-version }}.whl"
path: ${{ github.workspace }}/wheels/*.whl
build-nodejs-Windows:
name: "Build NodeJS/ElectronJS for Windows"
runs-on: windows-2019
needs: [build-lib_Windows, swig_Windows]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
update: true
install: >-
make
tar
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/download-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ github.workspace }}/tensorflow/bazel-bin/native_client/
- run: |
pushd tensorflow/bazel-bin/native_client/
"C:/Program Files/7-Zip/7z.exe" x native_client.tar.xz -so | "C:/Program Files/7-Zip/7z.exe" x -aoa -si -ttar -o`pwd`
ls -hal
popd
- uses: actions/download-artifact@v2
with:
name: "swig_Windows"
path: ${{ github.workspace }}/native_client/ds-swig/
- name: Link ds-swig into swig
run: |
set -ex
ls -hal native_client/ds-swig/bin
ln -s ds-swig.exe native_client/ds-swig/bin/swig.exe
chmod +x native_client/ds-swig/bin/ds-swig.exe native_client/ds-swig/bin/swig.exe
- uses: actions/setup-node@v2
with:
node-version: 12
- uses: ./.github/actions/node-build
with:
nodejs_versions: "10.0.0 11.0.0 12.7.0 13.0.0 14.0.0 15.0.0"
electronjs_versions: "5.0.13 6.0.12 6.1.7 7.0.1 7.1.8 8.0.1 9.0.1 9.1.0 9.2.0 10.0.0 10.1.0 11.0.0 12.0.0"
- uses: actions/upload-artifact@v2
with:
name: "nodewrapper-${{ matrix.build-flavor }}.tar.gz"
path: ${{ github.workspace }}/native_client/javascript/wrapper.tar.gz
- uses: actions/upload-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}.tgz"
path: ${{ github.workspace }}/native_client/javascript/stt-*.tgz
test-cpp-Windows:
name: "Test C++ binary on Windows"
runs-on: windows-2019
needs: [build-lib_Windows, train-test-model]
strategy:
matrix:
build-flavor: ["tf", "tflite"]
env:
TASKCLUSTER_TMP_DIR: tmp/
STT_TEST_MODEL: tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Download native_client.tar.xz
uses: actions/download-artifact@v2
with:
name: "native_client.${{ matrix.build-flavor }}.tar.xz"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
- name: Extract native_client.tar.xz
run: |
mkdir -p ${{ env.TASKCLUSTER_TMP_DIR }}/ds
pushd ${{ env.TASKCLUSTER_TMP_DIR }}/ds
"C:/Program Files/7-Zip/7z.exe" x ../native_client.tar.xz -so | "C:/Program Files/7-Zip/7z.exe" x -aoa -si -ttar -o`pwd`
popd
- name: Download trained test model
uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-16k.zip"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
- run: |
ls -hal ${{ env.TASKCLUSTER_TMP_DIR }}/
- uses: ./.github/actions/run-tests
with:
runtime: "cppwin"
build-flavor: ${{ matrix.build-flavor }}
bitrate: "16k"
model-kind: ""
test-py-Windows:
name: "Test Python bindings on Windows"
runs-on: windows-2019
needs: [ build-python-Windows, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
python-version: [3.6.8, 3.7.9, 3.8.8, 3.9.2]
build-flavor: ["tf", "tflite"]
models: ["test", "prod"]
bitrate: ["8k", "16k"]
env:
TASKCLUSTER_TMP_DIR: tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- uses: ./.github/actions/win-install-sox
- uses: actions/download-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}-${{ matrix.python-version }}.whl"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.TASKCLUSTER_TMP_DIR }}/
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.TASKCLUSTER_TMP_DIR }}/
python -m pip install --only-binary :all: --upgrade ${{ env.TASKCLUSTER_TMP_DIR }}/stt*.whl
- uses: ./.github/actions/run-tests
with:
runtime: "python"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
test-nodejs-Windows:
name: "Test NodeJS bindings on Windows"
runs-on: windows-2019
needs: [ build-nodejs-Windows, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
nodejs-version: [10, 12, 14, 15]
build-flavor: ["tf", "tflite"]
models: ["test"]
bitrate: ["16k"]
env:
TASKCLUSTER_TMP_DIR: tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-node@v2
with:
node-version: ${{ matrix.nodejs-version }}
- uses: ./.github/actions/win-install-sox
- uses: actions/download-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}.tgz"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.TASKCLUSTER_TMP_DIR }}/
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.TASKCLUSTER_TMP_DIR }}/
npm install ${{ env.TASKCLUSTER_TMP_DIR }}/stt*.tgz
- uses: ./.github/actions/run-tests
with:
runtime: "node"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
test-electronjs-Windows:
name: "Test ElectronJS bindings on Windows"
runs-on: windows-2019
needs: [ build-nodejs-Windows, train-test-model ]
if: ${{ github.event_name == 'pull_request' }}
strategy:
matrix:
electronjs-version: [5.0.13, 6.1.7, 7.1.8, 8.0.1, 9.2.0, 10.1.0, 11.0.0, 12.0.0]
build-flavor: ["tf", "tflite"]
models: ["test"]
bitrate: ["16k"]
env:
TASKCLUSTER_TMP_DIR: tmp/
STT_PROD_MODEL: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pb
STT_PROD_MODEL_MMAP: https://github.com/reuben/STT/releases/download/v0.7.0-alpha.3/output_graph.pbmm
STT_TEST_MODEL: tmp/output_graph.pb
EXPECTED_TENSORFLOW_VERSION: "TensorFlow: v2.3.0-6-g23ad988"
steps:
- name: Switch git-bash shell to MSYS2 shell by adding MSYS2 path to PATH front
run: echo "D:\a\_temp\msys\msys64\usr\bin" >> $GITHUB_PATH
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-node@v2
with:
node-version: 12
- uses: ./.github/actions/win-install-sox
- uses: actions/download-artifact@v2
with:
name: "stt-${{ matrix.build-flavor }}.tgz"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
- uses: actions/download-artifact@v2
with:
name: "test-model.${{ matrix.build-flavor }}-${{ matrix.bitrate }}.zip"
path: ${{ env.TASKCLUSTER_TMP_DIR }}
if: matrix.models == 'test'
- run: |
ls -hal ${{ env.TASKCLUSTER_TMP_DIR }}/
if: matrix.models == 'test'
- name: Install STT NodeJS package
run: |
ls -hal ${{ env.TASKCLUSTER_TMP_DIR }}/
npm install ${{ env.TASKCLUSTER_TMP_DIR }}/stt*.tgz
- run: |
npm install electron@${{ matrix.electronjs-version }}
- uses: ./.github/actions/run-tests
with:
runtime: "electronjs"
build-flavor: ${{ matrix.build-flavor }}
bitrate: ${{ matrix.bitrate }}
model-kind: ${{ matrix.models }}
timeout-minutes: 5

1
.gitignore vendored
View File

@ -38,4 +38,3 @@ doc/xml-dotnet
convert_graphdef_memmapped_format convert_graphdef_memmapped_format
native_client/swift/deepspeech_ios.framework/deepspeech_ios native_client/swift/deepspeech_ios.framework/deepspeech_ios
.github/actions/check_artifact_exists/node_modules/ .github/actions/check_artifact_exists/node_modules/
.github/actions/check_artifact_exists/package-lock.json

View File

@ -113,7 +113,7 @@ symlink_electron()
ln -s Electron.app/Contents/MacOS/Electron node_modules/electron/dist/node ln -s Electron.app/Contents/MacOS/Electron node_modules/electron/dist/node
else else
ln -s electron "node_modules/electron/dist/node" ln -s electron "node_modules/electron/dist/node"
if [ -f "node_modules/electron/dist/chrome-sandbox" ]; then if [ "${OS}" = "Linux" -a -f "node_modules/electron/dist/chrome-sandbox" ]; then
export ELECTRON_DISABLE_SANDBOX=1 export ELECTRON_DISABLE_SANDBOX=1
fi fi
fi fi

View File

@ -3,7 +3,10 @@
set -xe set -xe
strip() { strip() {
echo "$(echo $1 | sed -e 's/^[[:space:]]+//' -e 's/[[:space:]]+$//')" # We strip leading carriage return due to ElectronJS on Windows producing stray
# characters before its output intermittently.
# Then we strip leading and trailing whitespace.
echo "$(echo $1 | tr -d $'\r' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
} }
# This verify exact inference result # This verify exact inference result
@ -220,6 +223,17 @@ assert_correct_ldc93s1_prodmodel()
fi; fi;
} }
assert_working_ldc93s1_prodmodel()
{
if [ -z "$3" -o "$3" = "16k" ]; then
assert_working_inference "$1" "she had your dark suit in greasy wash water all year" "$2"
fi
if [ "$3" = "8k" ]; then
assert_working_inference "$1" "she had to do suit in greasy wash water all year" "$2"
fi
}
assert_correct_ldc93s1_prodtflitemodel() assert_correct_ldc93s1_prodtflitemodel()
{ {
if [ -z "$3" -o "$3" = "16k" ]; then if [ -z "$3" -o "$3" = "16k" ]; then
@ -231,16 +245,37 @@ assert_correct_ldc93s1_prodtflitemodel()
fi; fi;
} }
assert_working_ldc93s1_prodtflitemodel()
{
if [ -z "$3" -o "$3" = "16k" ]; then
assert_working_inference "$1" "she had her dark suit in greasy wash water all year" "$2"
fi;
if [ "$3" = "8k" ]; then
assert_working_inference "$1" "she had to do so and greasy wash water all year" "$2"
fi;
}
assert_correct_ldc93s1_prodmodel_stereo_44k() assert_correct_ldc93s1_prodmodel_stereo_44k()
{ {
assert_correct_inference "$1" "she had your dark suit in greasy wash water all year" "$2" assert_correct_inference "$1" "she had your dark suit in greasy wash water all year" "$2"
} }
assert_working_ldc93s1_prodmodel_stereo_44k()
{
assert_working_inference "$1" "she had your dark suit in greasy wash water all year" "$2"
}
assert_correct_ldc93s1_prodtflitemodel_stereo_44k() assert_correct_ldc93s1_prodtflitemodel_stereo_44k()
{ {
assert_correct_inference "$1" "she had her dark suit in greasy wash water all year" "$2" assert_correct_inference "$1" "she had her dark suit in greasy wash water all year" "$2"
} }
assert_working_ldc93s1_prodtflitemodel_stereo_44k()
{
assert_working_inference "$1" "she had her dark suit in greasy wash water all year" "$2"
}
assert_correct_warning_upsampling() assert_correct_warning_upsampling()
{ {
assert_shows_something "$1" "erratic speech recognition" assert_shows_something "$1" "erratic speech recognition"
@ -478,6 +513,31 @@ run_prod_inference_tests()
fi; fi;
} }
# Equivalent to run_prod_inference_tests but we use assert_working* instead of assert_correct
# ElectronJS mixes stdout and stderr and exact matching is broken
run_electronjs_prod_inference_tests()
{
local _bitrate=$1
set +e
phrase_pbmodel_withlm=$(stt --model ${CI_TMP_DIR}/${model_name} --scorer ${CI_TMP_DIR}/kenlm.scorer --audio ${CI_TMP_DIR}/${ldc93s1_sample_filename} 2>${CI_TMP_DIR}/stderr)
status=$?
set -e
assert_working_ldc93s1_prodmodel "${phrase_pbmodel_withlm}" "$status" "${_bitrate}"
set +e
phrase_pbmodel_withlm=$(stt --model ${CI_TMP_DIR}/${model_name_mmap} --scorer ${CI_TMP_DIR}/kenlm.scorer --audio ${CI_TMP_DIR}/${ldc93s1_sample_filename} 2>${CI_TMP_DIR}/stderr)
status=$?
set -e
assert_working_ldc93s1_prodmodel "${phrase_pbmodel_withlm}" "$status" "${_bitrate}"
set +e
phrase_pbmodel_withlm_stereo_44k=$(stt --model ${CI_TMP_DIR}/${model_name_mmap} --scorer ${CI_TMP_DIR}/kenlm.scorer --audio ${CI_TMP_DIR}/LDC93S1_pcms16le_2_44100.wav 2>${CI_TMP_DIR}/stderr)
status=$?
set -e
assert_working_ldc93s1_prodmodel_stereo_44k "${phrase_pbmodel_withlm_stereo_44k}" "$status"
}
run_prodtflite_inference_tests() run_prodtflite_inference_tests()
{ {
local _bitrate=$1 local _bitrate=$1
@ -509,6 +569,31 @@ run_prodtflite_inference_tests()
fi; fi;
} }
# Equivalent to run_prodtflite_inference_tests but we use assert_working* instead of assert_correct
# ElectronJS mixes stdout and stderr and exact matching is broken
run_electronjs_prodtflite_inference_tests()
{
local _bitrate=$1
set +e
phrase_pbmodel_withlm=$(stt --model ${CI_TMP_DIR}/${model_name} --scorer ${CI_TMP_DIR}/kenlm.scorer --audio ${CI_TMP_DIR}/${ldc93s1_sample_filename} 2>${CI_TMP_DIR}/stderr)
status=$?
set -e
assert_working_ldc93s1_prodtflitemodel "${phrase_pbmodel_withlm}" "$status" "${_bitrate}"
set +e
phrase_pbmodel_withlm=$(stt --model ${CI_TMP_DIR}/${model_name_mmap} --scorer ${CI_TMP_DIR}/kenlm.scorer --audio ${CI_TMP_DIR}/${ldc93s1_sample_filename} 2>${CI_TMP_DIR}/stderr)
status=$?
set -e
assert_working_ldc93s1_prodtflitemodel "${phrase_pbmodel_withlm}" "$status" "${_bitrate}"
set +e
phrase_pbmodel_withlm_stereo_44k=$(stt --model ${CI_TMP_DIR}/${model_name_mmap} --scorer ${CI_TMP_DIR}/kenlm.scorer --audio ${CI_TMP_DIR}/LDC93S1_pcms16le_2_44100.wav 2>${CI_TMP_DIR}/stderr)
status=$?
set -e
assert_working_ldc93s1_prodtflitemodel_stereo_44k "${phrase_pbmodel_withlm_stereo_44k}" "$status"
}
run_multi_inference_tests() run_multi_inference_tests()
{ {
set +e -o pipefail set +e -o pipefail

View File

@ -12,11 +12,11 @@ set_ldc_sample_filename "${bitrate}"
model_source=${STT_TEST_MODEL//.pb/.tflite} model_source=${STT_TEST_MODEL//.pb/.tflite}
model_name=$(basename "${model_source}") model_name=$(basename "${model_source}")
model_name_mmap=$(basename "${model_source}") model_name_mmap=$(basename "${model_source}")
export DATA_TMP_DIR=${TASKCLUSTER_TMP_DIR} export DATA_TMP_DIR=${CI_TMP_DIR}
download_material "${TASKCLUSTER_TMP_DIR}/ds" download_material "${CI_TMP_DIR}/ds"
export PATH=${TASKCLUSTER_TMP_DIR}/ds/:$PATH export PATH=${CI_TMP_DIR}/ds/:$PATH
check_versions check_versions

View File

@ -9,9 +9,9 @@ source $(dirname "$0")/asserts.sh
bitrate=$1 bitrate=$1
set_ldc_sample_filename "${bitrate}" set_ldc_sample_filename "${bitrate}"
model_source=${DEEPSPEECH_PROD_MODEL} model_source=${STT_PROD_MODEL}
model_name=$(basename "${model_source}") model_name=$(basename "${model_source}")
model_source_mmap=${DEEPSPEECH_PROD_MODEL_MMAP} model_source_mmap=${STT_PROD_MODEL_MMAP}
model_name_mmap=$(basename "${model_source_mmap}") model_name_mmap=$(basename "${model_source_mmap}")
download_model_prod download_model_prod
@ -30,8 +30,8 @@ which node
node --version node --version
deepspeech --version stt --version
check_runtime_electronjs check_runtime_electronjs
run_prod_inference_tests "${bitrate}" run_electronjs_prod_inference_tests "${bitrate}"

View File

@ -9,9 +9,9 @@ source $(dirname "$0")/asserts.sh
bitrate=$1 bitrate=$1
set_ldc_sample_filename "${bitrate}" set_ldc_sample_filename "${bitrate}"
model_source=${DEEPSPEECH_PROD_MODEL//.pb/.tflite} model_source=${STT_PROD_MODEL//.pb/.tflite}
model_name=$(basename "${model_source}") model_name=$(basename "${model_source}")
model_source_mmap=${DEEPSPEECH_PROD_MODEL_MMAP//.pbmm/.tflite} model_source_mmap=${STT_PROD_MODEL_MMAP//.pbmm/.tflite}
model_name_mmap=$(basename "${model_source}") model_name_mmap=$(basename "${model_source}")
download_model_prod download_model_prod
@ -30,8 +30,8 @@ which node
node --version node --version
deepspeech --version stt --version
check_runtime_electronjs check_runtime_electronjs
run_prodtflite_inference_tests "${bitrate}" run_electronjs_prodtflite_inference_tests "${bitrate}"

View File

@ -26,7 +26,7 @@ package_native_client()
win_lib="-C ${tensorflow_dir}/bazel-bin/native_client/ libstt.so.if.lib" win_lib="-C ${tensorflow_dir}/bazel-bin/native_client/ libstt.so.if.lib"
fi; fi;
${TAR} -cf - \ ${TAR} --verbose -cf - \
-C ${tensorflow_dir}/bazel-bin/native_client/ libstt.so \ -C ${tensorflow_dir}/bazel-bin/native_client/ libstt.so \
${win_lib} \ ${win_lib} \
-C ${tensorflow_dir}/bazel-bin/native_client/ generate_scorer_package \ -C ${tensorflow_dir}/bazel-bin/native_client/ generate_scorer_package \
@ -60,7 +60,7 @@ package_native_client_ndk()
echo "Please specify arch abi." echo "Please specify arch abi."
fi; fi;
${TAR} -cf - \ ${TAR} --verbose -cf - \
-C ${stt_dir}/native_client/libs/${arch_abi}/ stt \ -C ${stt_dir}/native_client/libs/${arch_abi}/ stt \
-C ${stt_dir}/native_client/libs/${arch_abi}/ libstt.so \ -C ${stt_dir}/native_client/libs/${arch_abi}/ libstt.so \
-C ${tensorflow_dir}/bazel-bin/native_client/ generate_scorer_package \ -C ${tensorflow_dir}/bazel-bin/native_client/ generate_scorer_package \

View File

@ -40,9 +40,8 @@ elif [ "${OS}" = "${CI_MSYS_VERSION}" ]; then
export CI_ARTIFACTS_DIR="$(cygpath ${CI_ARTIFACTS_DIR})" export CI_ARTIFACTS_DIR="$(cygpath ${CI_ARTIFACTS_DIR})"
export DS_ROOT_TASK=${CI_TASK_DIR} export DS_ROOT_TASK=${CI_TASK_DIR}
export BAZEL_VC='C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC' export BAZEL_VC="C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC"
export BAZEL_SH='C:\builds\tc-workdir\msys64\usr\bin\bash' export BAZEL_VC_FULL_VERSION="14.28.29910"
export TC_WIN_BUILD_PATH='C:\builds\tc-workdir\msys64\usr\bin;C:\Python36'
export MSYS2_ARG_CONV_EXCL='//' export MSYS2_ARG_CONV_EXCL='//'
mkdir -p ${CI_TASK_DIR}/tmp/ mkdir -p ${CI_TASK_DIR}/tmp/

View File

@ -181,7 +181,7 @@ define copy_missing_libs
if [ "$(OS)" = "Darwin" ]; then \ if [ "$(OS)" = "Darwin" ]; then \
new_missing="$$( (for f in $$(otool -L $$lib 2>/dev/null | tail -n +2 | awk '{ print $$1 }' | grep -v '$$lib'); do ls -hal $$f; done;) 2>&1 | grep 'No such' | cut -d':' -f2 | xargs basename -a)"; \ new_missing="$$( (for f in $$(otool -L $$lib 2>/dev/null | tail -n +2 | awk '{ print $$1 }' | grep -v '$$lib'); do ls -hal $$f; done;) 2>&1 | grep 'No such' | cut -d':' -f2 | xargs basename -a)"; \
missing_libs="$$missing_libs $$new_missing"; \ missing_libs="$$missing_libs $$new_missing"; \
elif [ "$(OS)" = "${TC_MSYS_VERSION}" ]; then \ elif [ "$(OS)" = "${CI_MSYS_VERSION}" ]; then \
missing_libs="libstt.so"; \ missing_libs="libstt.so"; \
else \ else \
missing_libs="$$missing_libs $$($(LDD) $$lib | grep 'not found' | awk '{ print $$1 }')"; \ missing_libs="$$missing_libs $$($(LDD) $$lib | grep 'not found' | awk '{ print $$1 }')"; \