sourcecred/.circleci/config.yml

163 lines
4.5 KiB
YAML

# JavaScript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
# See https://circleci.com/docs/2.0/config-intro/#section=configuration for spec
#
version: 2.1
orbs:
# https://circleci.com/orbs/registry/orb/circleci/docker
docker: circleci/docker@0.5.13
executors:
node10:
docker:
- image: circleci/node:10
working_directory: ~/repo
node12:
docker:
- image: circleci/node:12
working_directory: ~/repo
commands:
set_up_node_modules:
description: "load node_modules, updating and storing back into cache if necessary"
parameters:
node_version:
description: Which node version we're caching packages for
type: integer
default: 12
steps:
- restore_cache:
keys:
- v1-node<< parameters.node_version >>-dependencies-{{ checksum "package.json" }}
# fall back to using the latest cache if no exact match is found
- v1-node<< parameters.node_version >>-dependencies-
- run: yarn install
- save_cache:
paths:
- node_modules
key: v1-node<< parameters.node_version >>-dependencies-{{ checksum "package.json" }}
pull_cache:
description: Pulls docker images usable for our cache
steps:
- run: docker pull sourcecred/sourcecred:dev
- run: docker pull node:12
jobs:
test:
executor: node12
steps:
- checkout
- set_up_node_modules
- run: yarn test --ci
test_full:
executor: node12
steps:
- checkout
- set_up_node_modules
- run: yarn test --full --ci
test_full_10:
executor: node10
steps:
- checkout
- set_up_node_modules:
node_version: 10
- run: yarn test --full --ci
workflows:
version: 2.0
commit:
jobs:
- test
# We also run full-tests on each commit, but they're not configured as
# blocking checks. Thus, in the case that they complete before you want
# to merge your pull request, they provide information, and otherwise
# they don't get in your way.
- test_full
- test_full_10
- docker/publish:
deploy: false
image: sourcecred/sourcecred
tag: latest
requires:
- test
filters:
branches:
ignore:
- master
extra_build_args: --cache-from=node:12,sourcecred/sourcecred:dev
before_build:
- pull_cache
after_build:
- run:
name: Preview Docker Tag for Build
command: |
DOCKER_TAG=$(docker run sourcecred/sourcecred --version | cut -d' ' -f2)
echo "Version that would be used for Docker tag is ${DOCKER_TAG}"
- docker/publish:
image: sourcecred/sourcecred
extra_build_args: --cache-from=node:12,sourcecred/sourcecred:dev
before_build:
- pull_cache
requires:
- test
- test_full
- test_full_10
tag: dev
filters:
branches:
only: master
# Separate workflow just for version tag releases.
tagged-release:
jobs:
- test:
filters: &version-tag-only
branches:
ignore: /.*/
tags:
only: /^v.*/
- test_full:
filters: *version-tag-only
- test_full_10:
filters: *version-tag-only
- docker/publish:
filters: *version-tag-only
requires:
- test
- test_full
- test_full_10
deploy: false
image: sourcecred/sourcecred
tag: latest
extra_build_args: --cache-from=node:12,sourcecred/sourcecred:dev
before_build:
- pull_cache
after_build:
- run:
name: Publish Docker Tag with Sourcecred Version
command: |
DOCKER_TAG=$(docker run sourcecred/sourcecred --version | cut -d' ' -f2)
echo "Version for Docker tag is ${DOCKER_TAG}"
docker tag sourcecred/sourcecred:latest sourcecred/sourcecred:${DOCKER_TAG}
docker push sourcecred/sourcecred:${DOCKER_TAG}
docker push sourcecred/sourcecred:latest
nightly:
triggers:
- schedule:
cron: "0 22 * * *" # 22:00 UTC
filters:
branches:
only:
- master
jobs:
- test_full
- test_full_10