You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
4.8 KiB
207 lines
4.8 KiB
version: 2.1
|
|
# --- Constants --- #
|
|
|
|
globals:
|
|
images:
|
|
node: &node cimg/node:lts
|
|
postgres: &postgres circleci/postgres:9.6.5
|
|
caches:
|
|
dependencies: &dependencies dependencies-{{ checksum "package.json" }}
|
|
docker_hub:
|
|
user-id: &dockerhub-user-id anthonyjhoiro
|
|
password: &dockerhub-password $DOCKERHUB_PASSWORD
|
|
image: &dockerhub-image devops-tpfinal-back
|
|
heroku:
|
|
main: &heroku-app-main tpfinal-devops-back
|
|
develop: &heroku-app-dev tpfinal-devops-back-dev
|
|
|
|
|
|
# --- Commands --- #
|
|
|
|
commands:
|
|
setup_dependencies:
|
|
description: Setup the environment
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- *dependencies
|
|
|
|
# --- Jobs definitions --- #
|
|
|
|
jobs:
|
|
build: &shared-config
|
|
docker:
|
|
- image: *node
|
|
auth:
|
|
username: *dockerhub-user-id
|
|
password: *dockerhub-password
|
|
working_directory: ~/app
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- *dependencies
|
|
# fallback to using the latest cache if no exact match is found
|
|
- dependencies-
|
|
- run: yarn install
|
|
- save_cache:
|
|
paths:
|
|
- node_modules
|
|
key: *dependencies
|
|
test:
|
|
<<: *shared-config
|
|
steps:
|
|
- setup_dependencies
|
|
- run: yarn test
|
|
|
|
test-e2e:
|
|
<<: *shared-config
|
|
docker:
|
|
- image: *node
|
|
- image: *postgres
|
|
environment:
|
|
POSTGRES_DB: postgres
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: postgres
|
|
steps:
|
|
- setup_dependencies
|
|
- run:
|
|
command: yarn test:e2e
|
|
environment:
|
|
DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres
|
|
|
|
lint:
|
|
<<: *shared-config
|
|
steps:
|
|
- setup_dependencies
|
|
- run:
|
|
name: Check files format
|
|
command: yarn format:check
|
|
|
|
- run:
|
|
name: Lint files
|
|
command: yarn lint
|
|
|
|
docker-build:
|
|
<<: *shared-config
|
|
parameters:
|
|
tags:
|
|
default: ""
|
|
type: string
|
|
environment:
|
|
DOCKER_HUB_PWD: *dockerhub-password
|
|
DOCKER_HUB_USER_ID: *dockerhub-user-id
|
|
DOCKER_HUB_IMAGE: *dockerhub-image
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker:
|
|
version: 20.10.7
|
|
- run:
|
|
name: Build docker image
|
|
command: docker build -t app .
|
|
- deploy:
|
|
name: Publish image to Docker Hub
|
|
command: |
|
|
echo $DOCKERHUB_PASSWORD | docker login -u $DOCKER_HUB_USER_ID --password-stdin
|
|
|
|
for tag in <<parameters.tags>>
|
|
do
|
|
docker tag app $DOCKER_HUB_USER_ID/$DOCKER_HUB_IMAGE:$tag
|
|
docker push $DOCKER_HUB_USER_ID/$DOCKER_HUB_IMAGE:$tag
|
|
done
|
|
|
|
|
|
deploy-heroku:
|
|
<<: *shared-config
|
|
parameters:
|
|
heroku-app:
|
|
default: ""
|
|
type: string
|
|
branch:
|
|
default: "main"
|
|
type: string
|
|
docker:
|
|
- image: buildpack-deps:trusty
|
|
auth:
|
|
username: *dockerhub-user-id
|
|
password: *dockerhub-password
|
|
steps:
|
|
- setup_dependencies
|
|
- run:
|
|
name: Heroku Deploy
|
|
command: git push https://heroku:$HEROKU_API_KEY@git.heroku.com/<<parameters.heroku-app>>.git HEAD:main
|
|
- run:
|
|
name: Smoke Test
|
|
command: |
|
|
HTTPCODE=`curl -s -o /dev/null -w "%{http_code}" https://<<parameters.heroku-app>>.herokuapp.com/`
|
|
if [ "$HTTPCODE" -ne 200 ];then
|
|
echo "heroku app not responding, failing deploy"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# --- Workflow definition --- #
|
|
|
|
workflows:
|
|
version: 2
|
|
build-test-and-lint:
|
|
jobs:
|
|
- build
|
|
- test:
|
|
requires:
|
|
- build
|
|
- test-e2e:
|
|
requires:
|
|
- build
|
|
- lint:
|
|
requires:
|
|
- build
|
|
- docker-build:
|
|
name: docker-build-prod
|
|
tags: "latest $CIRCLE_BUILD_NUM"
|
|
requires:
|
|
- test
|
|
- test-e2e
|
|
- lint
|
|
filters:
|
|
branches:
|
|
only:
|
|
- main
|
|
|
|
- docker-build:
|
|
name: docker-build-dev
|
|
tags: "dev $CIRCLE_BUILD_NUM-dev"
|
|
requires:
|
|
- test
|
|
- test-e2e
|
|
- lint
|
|
filters:
|
|
branches:
|
|
only:
|
|
- develop
|
|
|
|
- deploy-heroku:
|
|
name: heroku-deploy-prod
|
|
heroku-app: *heroku-app-main
|
|
branch: main
|
|
requires:
|
|
- test
|
|
- test-e2e
|
|
- lint
|
|
filters:
|
|
branches:
|
|
only:
|
|
- main
|
|
- deploy-heroku:
|
|
name: heroku-deploy-dev
|
|
heroku-app: *heroku-app-dev
|
|
branch: develop
|
|
requires:
|
|
- test
|
|
- test-e2e
|
|
- lint
|
|
filters:
|
|
branches:
|
|
only:
|
|
- develop
|