mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 01:23:32 -06:00
296 lines
8.1 KiB
YAML
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
|