ci: don't build our master branch (#1177)

* ci: don't build our master branch

* Add netlify-cli as a dev dependency

* ci: trying a sheltered merge flow for promotions
This commit is contained in:
Danny Brown 2019-11-14 15:01:55 -05:00 committed by GitHub
parent 81ad25b39f
commit 538ea2516d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 2086 additions and 264 deletions

View File

@ -23,43 +23,38 @@ defaults: &defaults
working_directory: ~/repo working_directory: ~/repo
jobs: jobs:
###
# Workflow: PR_CHECKS
###
UNIT_TESTS: UNIT_TESTS:
<<: *defaults <<: *defaults
steps: steps:
# Update yarn # Update yarn
- run: yarn -v - run: yarn -v
#- run: rm -rf ~/.yarn && npm i -g yarn && yarn -v
# Enable yarn workspaces # Enable yarn workspaces
- run: yarn config set workspaces-experimental true - run: yarn config set workspaces-experimental true
# Checkout code and ALL Git Tags # Checkout code and ALL Git Tags
- checkout: - checkout:
post: post:
- git fetch --all - git fetch --all
- restore_cache: - restore_cache:
name: Restore Yarn and Cypress Package Cache name: Restore Yarn and Cypress Package Cache
keys: keys:
# when lock file changes, use increasingly general patterns to restore cache # when lock file changes, use increasingly general patterns to restore cache
- yarn-packages-{{ checksum "yarn.lock" }} - yarn-packages-{{ checksum "yarn.lock" }}
- yarn-packages- - yarn-packages-
- run: - run:
name: Install Dependencies name: Install Dependencies
command: yarn install --frozen-lockfile command: yarn install --frozen-lockfile
- save_cache: - save_cache:
name: Save Yarn Package Cache name: Save Yarn Package Cache
paths: paths:
- ~/.cache ## Cache yarn and Cypress - ~/.cache ## Cache yarn and Cypress
key: yarn-packages-{{ checksum "yarn.lock" }} key: yarn-packages-{{ checksum "yarn.lock" }}
# RUN TESTS # RUN TESTS
- run: - run:
name: 'JavaScript Test Suite' name: 'JavaScript Test Suite'
command: yarn run test:unit:ci command: yarn run test:unit:ci
# PLATFORM/VIEWER # PLATFORM/VIEWER
- run: - run:
name: 'VIEWER: Combine report output' name: 'VIEWER: Combine report output'
@ -73,7 +68,6 @@ jobs:
- codecov/upload: - codecov/upload:
file: '/home/circleci/repo/platform/viewer/coverage/reports' file: '/home/circleci/repo/platform/viewer/coverage/reports'
flags: 'viewer' flags: 'viewer'
# PLATFORM/CORE # PLATFORM/CORE
- run: - run:
name: 'CORE: Combine report output' name: 'CORE: Combine report output'
@ -88,12 +82,12 @@ jobs:
file: '/home/circleci/repo/platform/core/coverage/reports' file: '/home/circleci/repo/platform/core/coverage/reports'
flags: 'core' flags: 'core'
UNIT_TESTS_PERSIST_WORKSPACE: ###
# Workflow: PR_OPTIONAL_DOCKER_PUBLISH
###
DOCKER_PR_PUBLISH:
<<: *defaults <<: *defaults
steps: steps:
# Update yarn
#- run: rm -rf ~/.yarn && npm i -g yarn && yarn -v
# Enable yarn workspaces # Enable yarn workspaces
- run: yarn config set workspaces-experimental true - run: yarn config set workspaces-experimental true
@ -113,50 +107,104 @@ jobs:
name: Install Dependencies name: Install Dependencies
command: yarn install --frozen-lockfile command: yarn install --frozen-lockfile
- setup_remote_docker:
docker_layer_caching: false
- run:
name: Build and push Docker image
command: |
# Remove npm config
rm -f ./.npmrc
# Set our version number using vars
echo $CIRCLE_BUILD_NUM
# Build our image, auth, and push
docker build --tag ohif/viewer:PR_BUILD-$CIRCLE_BUILD_NUM .
echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin
docker push ohif/viewer:PR_BUILD-$CIRCLE_BUILD_NUM
###
# Workflow: DEPLOY
###
BUILD:
<<: *defaults
steps:
# Checkout code and ALL Git Tags
- checkout:
post:
- git fetch --all
- restore_cache:
name: Restore Yarn and Cypress Package Cache
keys:
# when lock file changes, use increasingly general patterns to restore cache
- yarn-packages-{{ checksum "yarn.lock" }}
- yarn-packages-
- run:
name: Install Dependencies
command: yarn install --frozen-lockfile
- save_cache: - save_cache:
name: Save Yarn Package Cache name: Save Yarn Package Cache
paths: paths:
- ~/.cache ## Cache yarn and Cypress - ~/.cache ## Cache yarn and Cypress
key: yarn-packages-{{ checksum "yarn.lock" }} key: yarn-packages-{{ checksum "yarn.lock" }}
# Build & Test
# RUN TESTS
- run: - run:
name: 'JavaScript Test Suite' name: 'Build the OHIF Viewer'
command: yarn run test:unit:ci command: yarn run build
no_output_timeout: 45m
# PLATFORM/VIEWER # - run:
- run: # name: 'Upload SourceMaps, Send Deploy Notification'
name: 'VIEWER: Combine report output' # command: |
command: | # # export FILE_1=$(find ./build/static/js -type f -name "2.*.js" -exec basename {} \;)
viewerCov="/home/circleci/repo/platform/viewer/coverage" # # export FILE_MAIN=$(find ./build/static/js -type f -name "main.*.js" -exec basename {} \;)
touch "${viewerCov}/reports" # # export FILE_RUNTIME_MAIN=$(find ./build/static/js -type f -name "runtime~main.*.js" -exec basename {} \;)
cat "${viewerCov}/clover.xml" >> "${viewerCov}/reports" # # curl https://api.rollbar.com/api/1/sourcemap -F source_map=@build/static/js/$FILE_1.map -F access_token=$ROLLBAR_TOKEN -F version=$CIRCLE_SHA1 -F minified_url=https://$GOOGLE_STORAGE_BUCKET/static/js/$FILE_1
echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" # # curl https://api.rollbar.com/api/1/sourcemap -F source_map=@build/static/js/$FILE_MAIN.map -F access_token=$ROLLBAR_TOKEN -F version=$CIRCLE_SHA1 -F minified_url=https://$GOOGLE_STORAGE_BUCKET/static/js/$FILE_MAIN
cat "${viewerCov}/lcov.info" >>"${viewerCov}/reports" # # curl https://api.rollbar.com/api/1/sourcemap -F source_map=@build/static/js/$FILE_RUNTIME_MAIN.map -F access_token=$ROLLBAR_TOKEN -F version=$CIRCLE_SHA1 -F minified_url=https://$GOOGLE_STORAGE_BUCKET/static/js/$FILE_RUNTIME_MAIN
echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" # curl --request POST https://api.rollbar.com/api/1/deploy/ -F access_token=$ROLLBAR_TOKEN -F environment=$GOOGLE_STORAGE_BUCKET -F revision=$CIRCLE_SHA1 -F local_username=CircleCI
- codecov/upload:
file: '/home/circleci/repo/platform/viewer/coverage/reports'
flags: 'viewer'
# PLATFORM/CORE
- run:
name: 'CORE: Combine report output'
command: |
coreCov="/home/circleci/repo/platform/core/coverage"
touch "${coreCov}/reports"
cat "${coreCov}/clover.xml" >> "${coreCov}/reports"
echo "\<<\<<\<< EOF" >> "${coreCov}/reports"
cat "${coreCov}/lcov.info" >> "${coreCov}/reports"
echo "\<<\<<\<< EOF" >> "${coreCov}/reports"
- codecov/upload:
file: '/home/circleci/repo/platform/core/coverage/reports'
flags: 'core'
# Persist :+1: # Persist :+1:
- persist_to_workspace: &persist_to_workspace - persist_to_workspace:
root: ~/repo root: ~/repo
paths: . paths: .
DEPLOY_TO_DEV:
docker:
- image: circleci/node:12.9.1
environment:
TERM: xterm
NETLIFY_SITE_ID: 32708787-c9b0-4634-b50f-7ca41952da77
working_directory: ~/repo
steps:
- attach_workspace:
at: ~/repo
- run: npx netlify deploy --prod
DEPLOY_TO_STAGING:
docker:
- image: circleci/node:12.9.1
environment:
TERM: xterm
NETLIFY_SITE_ID: 32708787-c9b0-4634-b50f-7ca41952da77
working_directory: ~/repo
steps:
- attach_workspace:
at: ~/repo
- run: npx netlify deploy --prod
DEPLOY_TO_PRODUCTION:
docker:
- image: circleci/node:12.9.1
environment:
TERM: xterm
NETLIFY_SITE_ID: 32708787-c9b0-4634-b50f-7ca41952da77
working_directory: ~/repo
steps:
- attach_workspace:
at: ~/repo
- run: npx netlify deploy --prod
###
# Workflow: RELEASE
###
NPM_PUBLISH: NPM_PUBLISH:
<<: *defaults <<: *defaults
steps: steps:
@ -227,92 +275,9 @@ jobs:
docker push ohif/$IMAGE_NAME:latest docker push ohif/$IMAGE_NAME:latest
fi fi
DOCKER_PR_PUBLISH:
<<: *defaults
steps:
# Enable yarn workspaces
- run: yarn config set workspaces-experimental true
# Checkout code and ALL Git Tags
- checkout:
post:
- git fetch --all
- restore_cache:
name: Restore Yarn and Cypress Package Cache
keys:
# when lock file changes, use increasingly general patterns to restore cache
- yarn-packages-{{ checksum "yarn.lock" }}
- yarn-packages-
- run:
name: Install Dependencies
command: yarn install --frozen-lockfile
- setup_remote_docker:
docker_layer_caching: false
- run:
name: Build and push Docker image
command: |
# Remove npm config
rm -f ./.npmrc
# Set our version number using vars
echo $CIRCLE_BUILD_NUM
# Build our image, auth, and push
docker build --tag ohif/viewer:PR_BUILD-$CIRCLE_BUILD_NUM .
echo $DOCKER_PWD | docker login -u $DOCKER_LOGIN --password-stdin
docker push ohif/viewer:PR_BUILD-$CIRCLE_BUILD_NUM
VIEWER_DEMO_BUILD:
<<: *defaults
steps:
- attach_workspace:
at: ~/repo
# Build & Test
- run:
name: 'Build Demo Site'
command: yarn run build:demo
no_output_timeout: 45m
- run:
name: 'Upload SourceMaps, Send Deploy Notification'
command: |
# export FILE_1=$(find ./build/static/js -type f -name "2.*.js" -exec basename {} \;)
# export FILE_MAIN=$(find ./build/static/js -type f -name "main.*.js" -exec basename {} \;)
# export FILE_RUNTIME_MAIN=$(find ./build/static/js -type f -name "runtime~main.*.js" -exec basename {} \;)
# curl https://api.rollbar.com/api/1/sourcemap -F source_map=@build/static/js/$FILE_1.map -F access_token=$ROLLBAR_TOKEN -F version=$CIRCLE_SHA1 -F minified_url=https://$GOOGLE_STORAGE_BUCKET/static/js/$FILE_1
# curl https://api.rollbar.com/api/1/sourcemap -F source_map=@build/static/js/$FILE_MAIN.map -F access_token=$ROLLBAR_TOKEN -F version=$CIRCLE_SHA1 -F minified_url=https://$GOOGLE_STORAGE_BUCKET/static/js/$FILE_MAIN
# curl https://api.rollbar.com/api/1/sourcemap -F source_map=@build/static/js/$FILE_RUNTIME_MAIN.map -F access_token=$ROLLBAR_TOKEN -F version=$CIRCLE_SHA1 -F minified_url=https://$GOOGLE_STORAGE_BUCKET/static/js/$FILE_RUNTIME_MAIN
curl --request POST https://api.rollbar.com/api/1/deploy/ -F access_token=$ROLLBAR_TOKEN -F environment=$GOOGLE_STORAGE_BUCKET -F revision=$CIRCLE_SHA1 -F local_username=CircleCI
# Persist :+1:
- persist_to_workspace:
root: ~/repo
paths: .
VIEWER_DEMO_PUBLISH:
working_directory: ~/repo
docker:
- image: google/cloud-sdk
steps:
- attach_workspace:
at: ~/repo
- setup_remote_docker:
docker_layer_caching: false
- run:
name: Deploy latest version to viewer.ohif.org
command: |
# https://circleci.com/docs/2.0/google-auth/#authorization
echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=-
gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}
# Remove all files in Storage Bucket; Push latest
gsutil -m rm gs://$GOOGLE_STORAGE_BUCKET/**
gsutil -m rsync -R platform/viewer/dist gs://$GOOGLE_STORAGE_BUCKET
workflows: workflows:
version: 2 version: 2
# PULL REQUESTS
PR_CHECKS: PR_CHECKS:
jobs: jobs:
- UNIT_TESTS: - UNIT_TESTS:
@ -379,14 +344,25 @@ workflows:
requires: requires:
- AWAIT_APPROVAL - AWAIT_APPROVAL
# MERGE TO MASTER ###
RELEASE: # Our workflow for building, deploying, and promoting builds across our
# development, staging, and production environments.
##
DEPLOY:
jobs: jobs:
- UNIT_TESTS_PERSIST_WORKSPACE: - BUILD:
filters: filters:
branches: branches:
only: master only: master
# E2E: PWA + Persist - DEPLOY_TO_DEV:
requires:
- BUILD
- PROMOTE_TO_STAGING:
type: approval
requires:
- DEPLOY_TO_DEV
# TODO: PWA E2E Test against demo site
# E2E: PWA
- cypress/run: - cypress/run:
name: 'E2E: PWA' name: 'E2E: PWA'
executor: cypress/browsers-chrome76 executor: cypress/browsers-chrome76
@ -410,7 +386,7 @@ workflows:
- store_test_results: - store_test_results:
path: cypress/results path: cypress/results
requires: requires:
- UNIT_TESTS_PERSIST_WORKSPACE - PROMOTE_TO_STAGING
# E2E: script-tag # E2E: script-tag
- cypress/run: - cypress/run:
name: 'E2E: Script Tag' name: 'E2E: Script Tag'
@ -435,26 +411,27 @@ workflows:
- store_test_results: - store_test_results:
path: cypress/results path: cypress/results
requires: requires:
- UNIT_TESTS_PERSIST_WORKSPACE - PROMOTE_TO_STAGING
# Update NPM - DEPLOY_TO_STAGING:
- NPM_PUBLISH:
requires: requires:
- 'E2E: Script Tag'
- 'E2E: PWA' - 'E2E: PWA'
# Update docs.ohif.org
- DOCS_PUBLISH:
requires:
- 'E2E: Script Tag' - 'E2E: Script Tag'
- 'E2E: PWA' - PROMOTE_TO_PRODUCTION:
- VIEWER_DEMO_BUILD: type: approval
requires: requires:
- 'E2E: Script Tag' - DEPLOY_TO_STAGING
- 'E2E: PWA' - DEPLOY_TO_PRODUCTION:
# Update viewer.ohif.org
- VIEWER_DEMO_PUBLISH:
requires: requires:
- VIEWER_DEMO_BUILD - PROMOTE_TO_PRODUCTION
# Update hub.docker.org # Unit and E2E tests have already run for PR_CHECKS
- DOCKER_MASTER_PUBLISH: # Re-running should not gain us any confidence here
requires: # RELEASE:
- NPM_PUBLISH # jobs:
# - NPM_PUBLISH:
# filters:
# branches:
# only: master
# - DOCS_PUBLISH
# - DOCKER_MASTER_PUBLISH:
# requires:
# - NPM_PUBLISH

View File

@ -8,15 +8,6 @@
# managed by CircleCI and deployed to our Google Hosting # managed by CircleCI and deployed to our Google Hosting
# #
# Settings in the [build] context are global and are applied to all contexts
# unless otherwise overridden by more specific contexts.
[build]
# Directory to change to before starting a build.
# This is where we will look for package.json/.nvmrc/etc.
base = ""
publish = "project/build-output/"
# NODE_VERSION in root `.nvmrc` takes priority # NODE_VERSION in root `.nvmrc` takes priority
# YARN_FLAGS: https://www.netlify.com/docs/build-gotchas/#yarn # YARN_FLAGS: https://www.netlify.com/docs/build-gotchas/#yarn
[build.environment] [build.environment]
@ -28,10 +19,8 @@
# Production context: all deploys from the Production branch set in your site's # Production context: all deploys from the Production branch set in your site's
# deploy contexts will inherit these settings. # deploy contexts will inherit these settings.
# [context.production] [context.production]
# publish = "project/output/" ignore = "exit 0" # Never build production; We'll let our CI do that
# command = "make publish"
# environment = { ACCESS_TOKEN = "super secret", NODE_VERSION = "8.0.1" }
# Deploy Preview context: all deploys generated from a pull/merge request will # Deploy Preview context: all deploys generated from a pull/merge request will
# inherit these settings. # inherit these settings.
@ -39,7 +28,6 @@
base = "" base = ""
publish = ".netlify/www/" publish = ".netlify/www/"
command = "chmod +x .netlify/build-deploy-preview.sh && .netlify/build-deploy-preview.sh" command = "chmod +x .netlify/build-deploy-preview.sh && .netlify/build-deploy-preview.sh"
# command = "yarn config set workspaces-experimental true && chmod +x .netlify/build-deploy-preview.sh && .netlify/build-deploy-preview.sh"
[[headers]] [[headers]]
# Define which paths this specific [[headers]] block will cover. # Define which paths this specific [[headers]] block will cover.

View File

@ -80,6 +80,7 @@
"jest-junit": "^6.4.0", "jest-junit": "^6.4.0",
"lerna": "^3.15.0", "lerna": "^3.15.0",
"lint-staged": "^9.0.2", "lint-staged": "^9.0.2",
"netlify-cli": "^2.21.0",
"optimize-css-assets-webpack-plugin": "^5.0.3", "optimize-css-assets-webpack-plugin": "^5.0.3",
"postcss-import": "^12.0.1", "postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0", "postcss-loader": "^3.0.0",

2050
yarn.lock

File diff suppressed because it is too large Load Diff