191 lines
4.9 KiB
YAML
191 lines
4.9 KiB
YAML
version: 2.1
|
|
|
|
defaults: &defaults
|
|
working_directory: ~/outline
|
|
docker:
|
|
- image: cimg/node:14.19
|
|
- image: cimg/redis:5.0
|
|
- image: cimg/postgres:14.2
|
|
environment:
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: password
|
|
POSTGRES_DB: circle_test
|
|
resource_class: large
|
|
environment:
|
|
NODE_ENV: test
|
|
SECRET_KEY: F0E5AD933D7F6FD8F4DBB3E038C501C052DC0593C686D21ACB30AE205D2F634B
|
|
DATABASE_URL_TEST: postgres://postgres:password@localhost:5432/circle_test
|
|
DATABASE_URL: postgres://postgres:password@localhost:5432/circle_test
|
|
URL: http://localhost:3000
|
|
SMTP_FROM_EMAIL: hello@example.com
|
|
AWS_S3_UPLOAD_BUCKET_URL: https://s3.amazonaws.com
|
|
AWS_S3_UPLOAD_BUCKET_NAME: outline-circle
|
|
|
|
executors:
|
|
docker-publisher:
|
|
environment:
|
|
IMAGE_NAME: outlinewiki/outline
|
|
docker:
|
|
- image: cimg/base
|
|
|
|
jobs:
|
|
build:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-{{ checksum "package.json" }}
|
|
- run:
|
|
name: install-deps
|
|
command: yarn install --frozen-lockfile
|
|
- save_cache:
|
|
key: dependency-cache-{{ checksum "package.json" }}
|
|
paths:
|
|
- ./node_modules
|
|
lint:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-{{ checksum "package.json" }}
|
|
- run:
|
|
name: lint
|
|
command: yarn lint
|
|
types:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-{{ checksum "package.json" }}
|
|
- run:
|
|
name: typescript
|
|
command: yarn tsc
|
|
test-app:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-{{ checksum "package.json" }}
|
|
- run:
|
|
name: test
|
|
command: yarn test:app
|
|
test-server:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-{{ checksum "package.json" }}
|
|
- run:
|
|
name: migrate
|
|
command: ./node_modules/.bin/sequelize db:migrate --url $DATABASE_URL_TEST
|
|
- run:
|
|
name: test
|
|
command: yarn test:server
|
|
bundle-size:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-{{ checksum "package.json" }}
|
|
- run:
|
|
name: build-webpack
|
|
command: yarn build:webpack
|
|
build-image:
|
|
executor: docker-publisher
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker:
|
|
version: 20.10.6
|
|
- run:
|
|
name: Build Docker image
|
|
command: docker build -t $IMAGE_NAME:latest .
|
|
- run:
|
|
name: Archive Docker image
|
|
command: docker save -o image.tar $IMAGE_NAME
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- ./image.tar
|
|
publish-latest:
|
|
executor: docker-publisher
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- setup_remote_docker:
|
|
version: 20.10.6
|
|
- run:
|
|
name: Load archived Docker image
|
|
command: docker load -i /tmp/workspace/image.tar
|
|
- run:
|
|
name: Publish Docker Image to Docker Hub
|
|
command: |
|
|
echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
|
|
IMAGE_TAG=${CIRCLE_TAG/v/''}
|
|
docker tag $IMAGE_NAME:latest $IMAGE_NAME:$IMAGE_TAG
|
|
docker push $IMAGE_NAME:latest
|
|
docker push $IMAGE_NAME:$IMAGE_TAG
|
|
publish-tag:
|
|
executor: docker-publisher
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- setup_remote_docker:
|
|
version: 20.10.6
|
|
- run:
|
|
name: Load archived Docker image
|
|
command: docker load -i /tmp/workspace/image.tar
|
|
- run:
|
|
name: Publish Docker Image to Docker Hub
|
|
command: |
|
|
echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
|
|
IMAGE_TAG=${CIRCLE_TAG/v/''}
|
|
docker tag $IMAGE_NAME:latest $IMAGE_NAME:$IMAGE_TAG
|
|
docker push $IMAGE_NAME:$IMAGE_TAG
|
|
|
|
workflows:
|
|
version: 2
|
|
all:
|
|
jobs:
|
|
- build
|
|
- lint:
|
|
requires:
|
|
- build
|
|
- test-server:
|
|
requires:
|
|
- build
|
|
- test-app:
|
|
requires:
|
|
- build
|
|
- types:
|
|
requires:
|
|
- build
|
|
- bundle-size:
|
|
requires:
|
|
- test-app
|
|
- test-server
|
|
|
|
build-docker:
|
|
jobs:
|
|
- build-image:
|
|
filters:
|
|
tags:
|
|
only: /^v.*/
|
|
branches:
|
|
ignore: /.*/
|
|
- publish-latest:
|
|
requires:
|
|
- build-image
|
|
filters:
|
|
tags:
|
|
only: /^v\d+\.\d+\.\d+$/
|
|
branches:
|
|
ignore: /.*/
|
|
- publish-tag:
|
|
requires:
|
|
- build-image
|
|
filters:
|
|
tags:
|
|
only: /^v\d+\.\d+\.\d+-.*$/
|
|
branches:
|
|
ignore: /.*/
|