* Separate environment configs * wip * wip * test * plugins * test * test * .sequelizerc, unfortunately can't go through /utils/environment due to not supporting TS * docker-compose -> docker compose * fix: .local wipes .development * Add custom validation message for invalid SECRET_KEY (often confused)
183 lines
5.2 KiB
YAML
183 lines
5.2 KiB
YAML
version: 2.1
|
|
|
|
defaults: &defaults
|
|
working_directory: ~/outline
|
|
docker:
|
|
- image: cimg/node:20.10
|
|
- 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
|
|
DATABASE_URL: postgres://postgres:password@localhost:5432/circle_test
|
|
URL: http://localhost:3000
|
|
NODE_OPTIONS: --max-old-space-size=8000
|
|
|
|
executors:
|
|
docker-publisher:
|
|
environment:
|
|
IMAGE_NAME: outlinewiki/outline
|
|
BASE_IMAGE_NAME: outlinewiki/outline-base
|
|
docker:
|
|
- image: circleci/buildpack-deps:stretch
|
|
|
|
jobs:
|
|
build:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
- run:
|
|
name: install-deps
|
|
command: yarn install --frozen-lockfile
|
|
- save_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
paths:
|
|
- ./node_modules
|
|
lint:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
- run:
|
|
name: lint
|
|
command: yarn lint
|
|
types:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
- run:
|
|
name: typescript
|
|
command: yarn tsc
|
|
test-app:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
- run:
|
|
name: test
|
|
command: yarn test:app
|
|
test-shared:
|
|
<<: *defaults
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
- run:
|
|
name: test
|
|
command: yarn test:shared
|
|
test-server:
|
|
<<: *defaults
|
|
parallelism: 3
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
- run:
|
|
name: migrate
|
|
command: ./node_modules/.bin/sequelize db:migrate
|
|
- run:
|
|
name: test
|
|
command: |
|
|
TESTFILES=$(circleci tests glob "server/**/*.test.ts" | circleci tests split)
|
|
yarn test --maxWorkers=2 $TESTFILES
|
|
bundle-size:
|
|
<<: *defaults
|
|
environment:
|
|
NODE_ENV: production
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: dependency-cache-v1-{{ checksum "package.json" }}
|
|
- run:
|
|
name: build-vite
|
|
command: yarn vite:build
|
|
- run:
|
|
name: Send bundle stats to RelativeCI
|
|
command: npx relative-ci-agent
|
|
build-image:
|
|
executor: docker-publisher
|
|
steps:
|
|
- checkout
|
|
- setup_remote_docker:
|
|
version: 20.10.6
|
|
- run:
|
|
name: Install Docker buildx
|
|
command: |
|
|
mkdir -p ~/.docker/cli-plugins
|
|
url="https://github.com/docker/buildx/releases/download/v0.8.0/buildx-v0.8.0.linux-amd64"
|
|
curl -sSL -o ~/.docker/cli-plugins/docker-buildx $url
|
|
chmod a+x ~/.docker/cli-plugins/docker-buildx
|
|
- run:
|
|
name: Enable Docker buildx
|
|
command: export DOCKER_CLI_EXPERIMENTAL=enabled
|
|
- run:
|
|
name: Initialize Docker buildx
|
|
command: |
|
|
docker buildx install
|
|
docker context create docker-multiarch
|
|
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
docker buildx create --name docker-multiarch --platform linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x docker-multiarch
|
|
docker buildx inspect --builder docker-multiarch --bootstrap
|
|
docker buildx use docker-multiarch
|
|
- run:
|
|
name: Build base image
|
|
command: docker build -f Dockerfile.base -t $BASE_IMAGE_NAME:latest --load .
|
|
- run:
|
|
name: Login to Docker Hub
|
|
command: echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
|
|
- run:
|
|
name: Publish base Docker Image to Docker Hub
|
|
command: docker push $BASE_IMAGE_NAME:latest
|
|
- run:
|
|
name: Build and push Docker image
|
|
command: |
|
|
if [[ "$CIRCLE_TAG" == *"-"* ]]; then
|
|
docker buildx build -t $IMAGE_NAME:${CIRCLE_TAG/v/''} --platform linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x --push .
|
|
else
|
|
docker buildx build -t $IMAGE_NAME:latest -t $IMAGE_NAME:${CIRCLE_TAG/v/''} --platform linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x --push .
|
|
fi
|
|
|
|
workflows:
|
|
version: 2
|
|
all:
|
|
jobs:
|
|
- build
|
|
- lint:
|
|
requires:
|
|
- build
|
|
- test-server:
|
|
requires:
|
|
- build
|
|
- test-shared:
|
|
requires:
|
|
- build
|
|
- test-app:
|
|
requires:
|
|
- build
|
|
- types:
|
|
requires:
|
|
- build
|
|
- bundle-size:
|
|
requires:
|
|
- build
|
|
- types
|
|
|
|
build-docker:
|
|
jobs:
|
|
- build-image:
|
|
filters:
|
|
tags:
|
|
only: /^v.*/
|
|
branches:
|
|
ignore: /.*/
|