grafana/packages/grafana-toolkit/config/circleci/config.yml

296 lines
8.1 KiB
YAML

version: 2.1
parameters:
ssh-fingerprint:
type: string
default: ${GITHUB_SSH_FINGERPRINT}
aliases:
# Workflow filters
- &filter-only-master
branches:
only: master
- &filter-only-release
branches:
only: /^v[1-9]*[0-9]+\.[1-9]*[0-9]+\.x$/
workflows:
plugin_workflow:
jobs:
- yarn_install
- build_docs:
requires:
- yarn_install
- build_frontend:
requires:
- yarn_install
- build_backend:
requires:
- yarn_install
- package:
requires:
- build_frontend
- build_backend
- build_docs
- provisioning:
requires:
- build_frontend
- build_backend
- build_docs
- e2e_canary:
requires:
- provisioning
- package
- report:
requires:
- package
- e2e_canary
- approve_release:
type: approval
requires:
- report
filters: *filter-only-release
- publish_github_release:
requires:
- approve_release
filters: *filter-only-release
executors:
default_exec: # declares a reusable executor
docker:
- image: srclosson/grafana-plugin-ci-alpine:latest
e2e_exec:
docker:
- image: srclosson/grafana-plugin-ci-e2e:latest
jobs:
yarn_install:
executor: default_exec
steps:
- checkout
- restore_cache:
name: restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- run:
name: Install dependencies
command: |
mkdir ci
yarn bin grafana-toolkit ] || yarn install --immutable
- save_cache:
name: save yarn cache
paths:
- ~/project/.yarn
key: build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- save_cache:
name: save cypress cache
paths:
- ~/.cache/Cypress
key: cypress-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
build_docs:
executor: default_exec
steps:
- checkout
- restore_cache:
name: restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- run:
name: Build docs
command: |
yarn run grafana-toolkit plugin:ci-docs
[ -d "dist" ] || circleci-agent step halt
- persist_to_workspace:
root: .
paths:
- dist
build_frontend:
executor: default_exec
steps:
- checkout
- restore_cache:
name: restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- run:
name: Build and test frontend
command: yarn run grafana-toolkit plugin:ci-build
- persist_to_workspace:
root: .
paths:
- dist
build_backend:
executor: default_exec
steps:
- checkout
- restore_cache:
name: restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- run:
name: Exit if no backend
command: |
[ -f "Magefile.go" ] || circleci-agent step halt
- run:
name: Build backend
command: mage -v buildAll
- run:
name: Test backend
command: |
mage -v lint
mage -v coverage
- persist_to_workspace:
root: .
paths:
- dist
package:
executor: default_exec
steps:
- checkout
- restore_cache:
name: restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- attach_workspace:
at: .
- run:
name: Move results to ci folder
command: yarn run grafana-toolkit plugin:ci-build --finish
- run:
name: Package distribution
command: |
yarn run grafana-toolkit plugin:ci-package
- persist_to_workspace:
root: .
paths:
- ci/jobs/package
- ci/packages
- ci/dist
- ci/grafana-test-env
- store_artifacts:
path: ci
provisioning:
executor: default_exec
steps:
- run:
name: Continue if this plugin has a provisioning path
command: |
[ -z "${PROVISIONING_REPO_PATH}" ] && circleci-agent step halt
- checkout
- add_ssh_keys:
fingerprints:
- << pipeline.parameters.ssh-fingerprint >>
- run:
name: Checkout provisioning files
command: git clone --depth 1 git@github.com:grafana/plugin-provisioning.git
- run:
name: Prepare task output dir
command: |
mkdir ci # Avoid error if not exists
mkdir ci/jobs # Avoid error if not exists
mkdir ci/jobs/provisioning
mv plugin-provisioning/${PROVISIONING_REPO_PATH}/* ci/jobs/provisioning
- persist_to_workspace:
root: .
paths:
- ci/jobs/provisioning
e2e_canary:
executor: e2e_exec
steps:
- run:
name: Continue if this plugin has a provisioning path
command: |
[ -z "${PROVISIONING_REPO_PATH}" ] && circleci-agent step halt
- checkout
- attach_workspace:
at: .
- restore_cache:
name: Restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- restore_cache:
name: Restore cypress cache
keys:
- cypress-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- run:
name: Exit if no e2e tests configured
command: |
[ -d cypress ] || circleci-agent step halt
- run:
name: Setup Grafana (local install)
command: |
ginstall canary
/opt/grafana/bin/grafana-server -config ci/grafana-test-env/custom.ini -homepath /opt/grafana &
## To make sure grafana has started up
while ! $(netstat -tulpn | grep 3000 >/dev/null 2>&1); do sleep 1; done
/opt/grafana/bin/grafana-cli --version
- run:
name: Copy provisioning files
command: cp -r ci/jobs/provisioning provisioning/
- run:
name: Run e2e tests
command: |
# If the tests fail, but GRAFANACI_STRICT_E2E=0, don't worry about it
yarn run grafana-e2e run \
|| (
[ "$GRAFANACI_STRICT_E2E" -eq 0 ] && echo "Bypassing fail. ci-nostrict enabled"
)
- run:
when: always
name: Prepare task output dir
command: |
# TODO: probably move all of this to `@grafana/toolkit plugin:ci-test`
mkdir ci/jobs/e2e_canary
# only copy if they exist
cp cypress/screenshots/*.* ci/jobs/e2e_canary 2>/dev/null || :
cp cypress/videos/*.* ci/jobs/e2e_canary 2>/dev/null || :
- persist_to_workspace:
root: .
paths:
- ci/jobs/e2e_canary
- store_test_results:
path: ci/jobs/e2e_canary
- store_artifacts:
path: ci/jobs/e2e_canary
report:
executor: default_exec
steps:
- checkout
- attach_workspace:
at: .
- restore_cache:
name: restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- run:
name: Toolkit report
command: |
yarn run grafana-toolkit plugin:ci-report
- store_artifacts:
path: ci
publish_github_release:
executor: default_exec
steps:
- checkout
- add_ssh_keys:
fingerprints:
- "dc:60:ab:c7:2d:8c:82:50:2a:2a:97:1a:c0:66:83:14"
- attach_workspace:
at: .
- restore_cache:
name: restore yarn cache
keys:
- build-cache-{{ .Environment.CACHE_VERSION }}-{{ checksum "yarn.lock" }}
- run:
name: "Publish Release on GitHub"
command: |
yarn run grafana-toolkit plugin:github-publish