118 lines
3.2 KiB
YAML
118 lines
3.2 KiB
YAML
# These environment variables must be set in CircleCI UI
|
|
#
|
|
# DOCKERHUB_REPO - docker hub repo, format: <username>/<repo>
|
|
# DOCKER_USER - login info for docker hub
|
|
# DOCKER_PASS
|
|
#
|
|
version: 2
|
|
jobs:
|
|
build:
|
|
docker:
|
|
- image: docker:stable-git
|
|
working_directory: /dockerflow
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker
|
|
|
|
- run:
|
|
name: os-release
|
|
command: |
|
|
cat /etc/os-release
|
|
|
|
- run:
|
|
name: install make
|
|
command: |
|
|
apk add make
|
|
|
|
- run:
|
|
name: Create a Dockerfile.train
|
|
command: |
|
|
make Dockerfile.train \
|
|
DEEPSPEECH_REPO="https://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME" \
|
|
DEEPSPEECH_SHA=$CIRCLE_SHA1
|
|
|
|
- run:
|
|
name: Build Docker image
|
|
command: docker build -t app:build -f Dockerfile.train .
|
|
|
|
# save the built docker container into CircleCI's cache. This is
|
|
# required since Workflows do not have the same remote docker instance.
|
|
- run:
|
|
name: docker save app:build
|
|
command: mkdir -p /cache; docker save -o /cache/docker.tar "app:build"
|
|
- save_cache:
|
|
key: v1-{{ .Branch }}-{{epoch}}
|
|
paths:
|
|
- /cache/docker.tar
|
|
|
|
deploy:
|
|
docker:
|
|
- image: docker:18.02.0-ce
|
|
steps:
|
|
- setup_remote_docker
|
|
- restore_cache:
|
|
key: v1-{{.Branch}}
|
|
- run:
|
|
name: Restore Docker image cache
|
|
command: docker load -i /cache/docker.tar
|
|
|
|
- run:
|
|
name: Deploy to Dockerhub
|
|
command: |
|
|
echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin
|
|
# deploy master
|
|
if [ "${CIRCLE_BRANCH}" == "master" ]; then
|
|
docker tag app:build ${DOCKERHUB_REPO}:latest
|
|
docker push ${DOCKERHUB_REPO}:latest
|
|
elif [ ! -z "${CIRCLE_TAG}" ]; then
|
|
# deploy a release tag...
|
|
echo "${DOCKERHUB_REPO}:${CIRCLE_TAG}"
|
|
docker tag app:build "${DOCKERHUB_REPO}:${CIRCLE_TAG}"
|
|
docker images
|
|
docker push "${DOCKERHUB_REPO}:${CIRCLE_TAG}"
|
|
fi
|
|
|
|
lint:
|
|
docker:
|
|
- image: circleci/python:3.7.9
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Install dependencies
|
|
command: |
|
|
pip install --upgrade cardboardlint pylint
|
|
- run:
|
|
name: Run linter
|
|
command: |
|
|
set -ex
|
|
# Check if branch can be merged with master (if failing script will stop due to set -e)
|
|
git config user.email "you@example.com"
|
|
git config user.name "Your Name"
|
|
git merge --no-commit --no-ff origin/master
|
|
|
|
# Undo merge changes if any
|
|
git reset --hard $CIRCLE_BRANCH
|
|
|
|
# Lint differences against master
|
|
cardboardlinter --refspec origin/master -n auto;
|
|
|
|
workflows:
|
|
version: 2
|
|
build-deploy:
|
|
jobs:
|
|
- build:
|
|
filters:
|
|
tags:
|
|
only: /.*/
|
|
|
|
- deploy:
|
|
requires:
|
|
- build
|
|
filters:
|
|
tags:
|
|
only: /.*/
|
|
|
|
lint:
|
|
jobs:
|
|
- lint
|