Nuxt/.circleci/config.yml

215 lines
5.7 KiB
YAML
Raw Normal View History

2017-10-28 21:31:01 +00:00
version: 2
2018-03-19 07:16:11 +00:00
defaults: &defaults
working_directory: ~/project
2018-03-19 07:16:11 +00:00
docker:
2019-01-12 21:46:58 +00:00
- image: circleci/node:latest
environment:
NODE_ENV: test
NODE_OPTIONS: --max_old_space_size=4096
release_branches: &release_branches
branches:
only:
- dev
- next
2018-03-19 07:16:11 +00:00
2018-12-31 09:24:41 +00:00
release: &release
<<: *defaults
steps:
- checkout
- attach_workspace:
at: ~/project
- run:
name: release
command: |
if [ -z "$COMMIT_MSG" ]; then
COMMIT_MSG=$(git --no-pager log --pretty=full -n1 $CIRCLE_SHA1)
fi
2018-12-31 09:24:41 +00:00
if echo "$COMMIT_MSG" | grep -o "\[release\]"; then
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
echo "//registry.yarnpkg.com/:_authToken=$NPM_TOKEN" >> ~/.npmrc
yarn lerna version --yes --no-git-tag-version --no-push
PACKAGE_SUFFIX=edge yarn build
if [ "$CIRCLE_BRANCH" = "next" ]; then tag="--tag next"; fi
./scripts/workspace-run npm publish $tag -q
else
echo "Release phase is skipped."
fi
2017-10-28 21:31:01 +00:00
jobs:
# --------------------------------------------------------------------------
# Phase 1: Setup
# --------------------------------------------------------------------------
2018-03-19 07:37:52 +00:00
setup:
2018-03-19 07:16:11 +00:00
<<: *defaults
2017-10-28 21:31:01 +00:00
steps:
# Checkout repository
- checkout
# Restore cache
- restore_cache:
2019-01-12 21:31:37 +00:00
key: lock-{{ checksum "yarn.lock" }}
2017-10-28 21:31:01 +00:00
# Install dependencies
- run:
name: Install Dependencies
command: yarn --frozen-lockfile --non-interactive
2017-10-28 21:31:01 +00:00
# Save cache
2017-10-28 21:31:01 +00:00
- save_cache:
2019-01-12 21:31:37 +00:00
key: lock-{{ checksum "yarn.lock" }}
2017-10-28 21:31:01 +00:00
paths:
- node_modules
- packages/*/node_modules
- distributions/*/node_modules
2017-10-28 21:31:01 +00:00
# Persist workspace
2018-03-19 07:27:08 +00:00
- persist_to_workspace:
root: ~/project
paths:
- node_modules
- packages/*/node_modules
- distributions/*/node_modules
- packages/*/dist
2018-03-19 07:27:08 +00:00
# --------------------------------------------------------------------------
# Phase 2: Lint + Audit + Build Nuxt and fixtures
# --------------------------------------------------------------------------
2018-03-19 07:16:11 +00:00
lint:
2018-03-19 07:21:50 +00:00
<<: *defaults
steps:
- checkout
2018-03-19 07:27:08 +00:00
- attach_workspace:
2018-03-19 07:30:03 +00:00
at: ~/project
2018-03-19 07:21:50 +00:00
- run:
name: Lint
command: yarn test:lint
2017-11-24 16:17:27 +00:00
audit:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: ~/project
- run:
name: Security Audit
2019-04-20 10:06:57 +00:00
command: yarn audit || true
2018-03-19 07:16:11 +00:00
build:
2018-03-19 07:21:50 +00:00
<<: *defaults
steps:
- checkout
2018-03-19 07:27:08 +00:00
- attach_workspace:
2018-03-19 07:30:03 +00:00
at: ~/project
2018-03-19 07:21:50 +00:00
- run:
name: Build Fixtures
2019-05-17 09:36:33 +00:00
command: yarn test:fixtures -i --coverage && yarn coverage -F fixtures
2018-03-19 07:37:52 +00:00
- persist_to_workspace:
root: ~/project
paths:
- test/fixtures
2018-03-19 07:16:11 +00:00
2019-01-06 07:56:59 +00:00
lint-app:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: ~/project
- run:
name: Lint vue-app templates
command: yarn lint:app
# --------------------------------------------------------------------------
# Phase 3: Unit, E2E and types tests
# --------------------------------------------------------------------------
test-unit:
2018-03-19 07:21:50 +00:00
<<: *defaults
steps:
- checkout
2018-03-19 07:27:08 +00:00
- attach_workspace:
2018-03-19 07:30:03 +00:00
at: ~/project
2018-03-19 07:21:50 +00:00
- run:
name: Unit Tests
2019-05-17 09:36:33 +00:00
command: yarn test:unit -w=2 --coverage && yarn coverage -F unit
2018-03-19 08:22:00 +00:00
test-e2e:
<<: *defaults
2019-01-12 21:24:58 +00:00
docker:
2019-01-12 21:46:58 +00:00
- image: circleci/node:latest-browsers
2018-03-19 08:22:00 +00:00
steps:
- checkout
2018-03-19 08:22:00 +00:00
- attach_workspace:
at: ~/project
- run:
name: Download Chromium
command: |
cd /opt
sudo wget https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/641430/chrome-linux.zip
sudo unzip chrome-linux.zip
sudo ln -s `pwd`/chrome-linux/chrome /bin/chromium
2018-03-19 08:22:00 +00:00
- run:
name: E2E Tests
2019-05-17 09:36:33 +00:00
command: CHROME_PATH=/bin/chromium yarn test:e2e && yarn coverage -F e2e
2018-03-19 07:16:11 +00:00
test-types:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: ~/project
- run:
name: Types Tests
command: yarn test:types
# --------------------------------------------------------------------------
# Phase 4: Release (dev branch only)
# --------------------------------------------------------------------------
2018-12-31 09:24:41 +00:00
release-commit:
<<: *release
release-nightly:
<<: *release
environment:
COMMIT_MSG: '[release]'
2018-03-19 07:16:11 +00:00
# Workflow definition
2018-03-19 07:16:11 +00:00
workflows:
version: 2
# Build and test after each commit
2019-01-06 07:56:59 +00:00
# Manually release on release branches
commit:
2018-03-19 07:16:11 +00:00
jobs:
2018-03-19 07:37:52 +00:00
- setup
- lint: { requires: [setup] }
- audit: { requires: [setup] }
- build: { requires: [setup] }
2019-01-06 07:56:59 +00:00
- lint-app: { requires: [build] }
- test-unit: { requires: [build] }
- test-e2e: { requires: [build] }
- test-types: { requires: [build] }
2018-12-31 09:24:41 +00:00
- release-commit:
requires: [build, lint, lint-app, audit, test-unit, test-e2e, test-types]
filters:
<<: *release_branches
# Release nightly builds on release branches
nightly:
jobs:
- setup
- lint: { requires: [setup] }
- audit: { requires: [setup] }
- build: { requires: [setup] }
2019-01-06 07:56:59 +00:00
- lint-app: { requires: [build] }
- test-unit: { requires: [build] }
- test-e2e: { requires: [build] }
- test-types: { requires: [build] }
2018-12-31 09:24:41 +00:00
- release-nightly:
requires: [build, lint, lint-app, audit, test-unit, test-e2e, test-types]
triggers:
- schedule:
cron: "0 0 * * *"
2018-03-27 22:33:23 +00:00
filters:
<<: *release_branches