config.yml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. aliases:
  2. # Workflow filters
  3. - &filter-only-release
  4. branches:
  5. ignore: /.*/
  6. tags:
  7. only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
  8. - &filter-not-release-or-master
  9. tags:
  10. ignore: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
  11. branches:
  12. ignore: master
  13. - &filter-only-master
  14. branches:
  15. only: master
  16. version: 2
  17. jobs:
  18. mysql-integration-test:
  19. docker:
  20. - image: circleci/golang:1.11
  21. - image: circleci/mysql:5.6-ram
  22. environment:
  23. MYSQL_ROOT_PASSWORD: rootpass
  24. MYSQL_DATABASE: grafana_tests
  25. MYSQL_USER: grafana
  26. MYSQL_PASSWORD: password
  27. working_directory: /go/src/github.com/grafana/grafana
  28. steps:
  29. - checkout
  30. - run: sudo apt update
  31. - run: sudo apt install -y mysql-client
  32. - run: dockerize -wait tcp://127.0.0.1:3306 -timeout 120s
  33. - run: cat devenv/docker/blocks/mysql_tests/setup.sql | mysql -h 127.0.0.1 -P 3306 -u root -prootpass
  34. - run:
  35. name: mysql integration tests
  36. command: 'GRAFANA_TEST_DB=mysql go test ./pkg/services/sqlstore/... ./pkg/tsdb/mysql/... '
  37. postgres-integration-test:
  38. docker:
  39. - image: circleci/golang:1.11
  40. - image: circleci/postgres:9.3-ram
  41. environment:
  42. POSTGRES_USER: grafanatest
  43. POSTGRES_PASSWORD: grafanatest
  44. POSTGRES_DB: grafanatest
  45. working_directory: /go/src/github.com/grafana/grafana
  46. steps:
  47. - checkout
  48. - run: sudo apt update
  49. - run: sudo apt install -y postgresql-client
  50. - run: dockerize -wait tcp://127.0.0.1:5432 -timeout 120s
  51. - run: 'PGPASSWORD=grafanatest psql -p 5432 -h 127.0.0.1 -U grafanatest -d grafanatest -f devenv/docker/blocks/postgres_tests/setup.sql'
  52. - run:
  53. name: postgres integration tests
  54. command: 'GRAFANA_TEST_DB=postgres go test ./pkg/services/sqlstore/... ./pkg/tsdb/postgres/...'
  55. codespell:
  56. docker:
  57. - image: circleci/python
  58. steps:
  59. - checkout
  60. - run:
  61. name: install codespell
  62. command: 'sudo pip install codespell'
  63. - run:
  64. # Important: all words have to be in lowercase, and separated by "\n".
  65. name: exclude known exceptions
  66. command: 'echo -e "unknwon" > words_to_ignore.txt'
  67. - run:
  68. name: check documentation spelling errors
  69. command: 'codespell -I ./words_to_ignore.txt docs/'
  70. gometalinter:
  71. docker:
  72. - image: circleci/golang:1.11
  73. environment:
  74. # we need CGO because of go-sqlite3
  75. CGO_ENABLED: 1
  76. working_directory: /go/src/github.com/grafana/grafana
  77. steps:
  78. - checkout
  79. - run: 'go get -u github.com/alecthomas/gometalinter'
  80. - run: 'go get -u github.com/tsenart/deadcode'
  81. - run: 'go get -u github.com/jgautheron/goconst/cmd/goconst'
  82. - run: 'go get -u github.com/gordonklaus/ineffassign'
  83. - run: 'go get -u github.com/opennota/check/cmd/structcheck'
  84. - run: 'go get -u github.com/mdempsky/unconvert'
  85. - run: 'go get -u github.com/opennota/check/cmd/varcheck'
  86. - run:
  87. name: run linters
  88. command: 'gometalinter --enable-gc --vendor --deadline 10m --disable-all --enable=deadcode --enable=goconst --enable=ineffassign --enable=structcheck --enable=unconvert --enable=varcheck ./...'
  89. - run:
  90. name: run go vet
  91. command: 'go vet ./pkg/...'
  92. test-frontend:
  93. docker:
  94. - image: circleci/node:8
  95. steps:
  96. - checkout
  97. - restore_cache:
  98. key: dependency-cache-{{ checksum "yarn.lock" }}
  99. - run:
  100. name: yarn install
  101. command: 'yarn install --pure-lockfile --no-progress'
  102. no_output_timeout: 15m
  103. - save_cache:
  104. key: dependency-cache-{{ checksum "yarn.lock" }}
  105. paths:
  106. - node_modules
  107. - run:
  108. name: frontend tests
  109. command: './scripts/circle-test-frontend.sh'
  110. test-backend:
  111. docker:
  112. - image: circleci/golang:1.11
  113. working_directory: /go/src/github.com/grafana/grafana
  114. steps:
  115. - checkout
  116. - run:
  117. name: build backend and run go tests
  118. command: './scripts/circle-test-backend.sh'
  119. build-all:
  120. docker:
  121. - image: grafana/build-container:1.1.0
  122. working_directory: /go/src/github.com/grafana/grafana
  123. steps:
  124. - checkout
  125. - run:
  126. name: prepare build tools
  127. command: '/tmp/bootstrap.sh'
  128. - restore_cache:
  129. key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
  130. - run:
  131. name: download phantomjs binaries
  132. command: './scripts/build/download-phantomjs.sh'
  133. - save_cache:
  134. key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
  135. paths:
  136. - /tmp/phantomjs
  137. - run:
  138. name: build and package grafana
  139. command: './scripts/build/build-all.sh'
  140. - run:
  141. name: sign packages
  142. command: './scripts/build/sign_packages.sh'
  143. - run:
  144. name: verify signed packages
  145. command: |
  146. mkdir -p ~/.rpmdb/pubkeys
  147. curl -s https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana > ~/.rpmdb/pubkeys/grafana.key
  148. ./scripts/build/verify_signed_packages.sh dist/*.rpm
  149. - run:
  150. name: sha-sum packages
  151. command: 'go run build.go sha-dist'
  152. - run:
  153. name: Build Grafana.com master publisher
  154. command: 'go build -o scripts/publish scripts/build/publish.go'
  155. - run:
  156. name: Build Grafana.com release publisher
  157. command: 'cd scripts/build/release_publisher && go build -o release_publisher .'
  158. - persist_to_workspace:
  159. root: .
  160. paths:
  161. - dist/grafana*
  162. - scripts/*.sh
  163. - scripts/publish
  164. - scripts/build/release_publisher/release_publisher
  165. build:
  166. docker:
  167. - image: grafana/build-container:1.1.0
  168. working_directory: /go/src/github.com/grafana/grafana
  169. steps:
  170. - checkout
  171. - run:
  172. name: prepare build tools
  173. command: '/tmp/bootstrap.sh'
  174. - run:
  175. name: build and package grafana
  176. command: './scripts/build/build.sh'
  177. - run:
  178. name: sign packages
  179. command: './scripts/build/sign_packages.sh'
  180. - run:
  181. name: sha-sum packages
  182. command: 'go run build.go sha-dist'
  183. - persist_to_workspace:
  184. root: .
  185. paths:
  186. - dist/grafana*
  187. grafana-docker-master:
  188. docker:
  189. - image: docker:stable-git
  190. steps:
  191. - checkout
  192. - attach_workspace:
  193. at: .
  194. - setup_remote_docker
  195. - run: docker info
  196. - run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
  197. - run: cd packaging/docker && ./build-deploy.sh "master-${CIRCLE_SHA1}"
  198. grafana-docker-pr:
  199. docker:
  200. - image: docker:stable-git
  201. steps:
  202. - checkout
  203. - attach_workspace:
  204. at: .
  205. - setup_remote_docker
  206. - run: docker info
  207. - run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
  208. - run: cd packaging/docker && ./build.sh "${CIRCLE_SHA1}"
  209. grafana-docker-release:
  210. docker:
  211. - image: docker:stable-git
  212. steps:
  213. - checkout
  214. - attach_workspace:
  215. at: .
  216. - setup_remote_docker
  217. - run: docker info
  218. - run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
  219. - run: cd packaging/docker && ./build-deploy.sh "${CIRCLE_TAG}"
  220. build-enterprise:
  221. docker:
  222. - image: grafana/build-container:v0.1
  223. working_directory: /go/src/github.com/grafana/grafana
  224. steps:
  225. - checkout
  226. - run:
  227. name: build, test and package grafana enterprise
  228. command: './scripts/build/build_enterprise.sh'
  229. - run:
  230. name: sign packages
  231. command: './scripts/build/sign_packages.sh'
  232. - run:
  233. name: sha-sum packages
  234. command: 'go run build.go sha-dist'
  235. - run:
  236. name: move enterprise packages into their own folder
  237. command: 'mv dist enterprise-dist'
  238. - persist_to_workspace:
  239. root: .
  240. paths:
  241. - enterprise-dist/grafana-enterprise*
  242. deploy-enterprise-master:
  243. docker:
  244. - image: circleci/python:2.7-stretch
  245. steps:
  246. - attach_workspace:
  247. at: .
  248. - run:
  249. name: install awscli
  250. command: 'sudo pip install awscli'
  251. - run:
  252. name: deploy to s3
  253. command: 'aws s3 sync ./enterprise-dist s3://$ENTERPRISE_BUCKET_NAME/master'
  254. deploy-master:
  255. docker:
  256. - image: circleci/python:2.7-stretch
  257. steps:
  258. - attach_workspace:
  259. at: .
  260. - run:
  261. name: install awscli
  262. command: 'sudo pip install awscli'
  263. - run:
  264. name: deploy to s3
  265. command: |
  266. # Also
  267. cp dist/grafana-latest.linux-x64.tar.gz dist/grafana-master-$(echo "${CIRCLE_SHA1}" | cut -b1-7).linux-x64.tar.gz
  268. aws s3 sync ./dist s3://$BUCKET_NAME/master
  269. - run:
  270. name: Trigger Windows build
  271. command: './scripts/trigger_windows_build.sh ${APPVEYOR_TOKEN} ${CIRCLE_SHA1} master'
  272. - run:
  273. name: Publish to Grafana.com
  274. command: |
  275. rm dist/grafana-master-$(echo "${CIRCLE_SHA1}" | cut -b1-7).linux-x64.tar.gz
  276. ./scripts/publish -apiKey ${GRAFANA_COM_API_KEY}
  277. deploy-release:
  278. docker:
  279. - image: circleci/python:2.7-stretch
  280. steps:
  281. - attach_workspace:
  282. at: .
  283. - run:
  284. name: install awscli
  285. command: 'sudo pip install awscli'
  286. - run:
  287. name: deploy to s3
  288. command: 'aws s3 sync ./dist s3://$BUCKET_NAME/release'
  289. - run:
  290. name: Deploy to Grafana.com
  291. command: './scripts/build/publish.sh'
  292. workflows:
  293. version: 2
  294. build-master:
  295. jobs:
  296. - build-all:
  297. filters: *filter-only-master
  298. - build-enterprise:
  299. filters: *filter-only-master
  300. - codespell:
  301. filters: *filter-only-master
  302. - gometalinter:
  303. filters: *filter-only-master
  304. - test-frontend:
  305. filters: *filter-only-master
  306. - test-backend:
  307. filters: *filter-only-master
  308. - mysql-integration-test:
  309. filters: *filter-only-master
  310. - postgres-integration-test:
  311. filters: *filter-only-master
  312. - deploy-master:
  313. requires:
  314. - build-all
  315. - test-backend
  316. - test-frontend
  317. - codespell
  318. - gometalinter
  319. - mysql-integration-test
  320. - postgres-integration-test
  321. filters: *filter-only-master
  322. - grafana-docker-master:
  323. requires:
  324. - build-all
  325. - test-backend
  326. - test-frontend
  327. - codespell
  328. - gometalinter
  329. - mysql-integration-test
  330. - postgres-integration-test
  331. filters: *filter-only-master
  332. - deploy-enterprise-master:
  333. requires:
  334. - build-all
  335. - test-backend
  336. - test-frontend
  337. - codespell
  338. - gometalinter
  339. - mysql-integration-test
  340. - postgres-integration-test
  341. - build-enterprise
  342. filters: *filter-only-master
  343. release:
  344. jobs:
  345. - build-all:
  346. filters: *filter-only-release
  347. - codespell:
  348. filters: *filter-only-release
  349. - gometalinter:
  350. filters: *filter-only-release
  351. - test-frontend:
  352. filters: *filter-only-release
  353. - test-backend:
  354. filters: *filter-only-release
  355. - mysql-integration-test:
  356. filters: *filter-only-release
  357. - postgres-integration-test:
  358. filters: *filter-only-release
  359. - deploy-release:
  360. requires:
  361. - build-all
  362. - test-backend
  363. - test-frontend
  364. - codespell
  365. - gometalinter
  366. - mysql-integration-test
  367. - postgres-integration-test
  368. filters: *filter-only-release
  369. - grafana-docker-release:
  370. requires:
  371. - build-all
  372. - test-backend
  373. - test-frontend
  374. - codespell
  375. - gometalinter
  376. - mysql-integration-test
  377. - postgres-integration-test
  378. filters: *filter-only-release
  379. build-branches-and-prs:
  380. jobs:
  381. - build:
  382. filters: *filter-not-release-or-master
  383. - codespell:
  384. filters: *filter-not-release-or-master
  385. - gometalinter:
  386. filters: *filter-not-release-or-master
  387. - test-frontend:
  388. filters: *filter-not-release-or-master
  389. - test-backend:
  390. filters: *filter-not-release-or-master
  391. - mysql-integration-test:
  392. filters: *filter-not-release-or-master
  393. - postgres-integration-test:
  394. filters: *filter-not-release-or-master
  395. - grafana-docker-pr:
  396. requires:
  397. - build
  398. - test-backend
  399. - test-frontend
  400. - codespell
  401. - gometalinter
  402. - mysql-integration-test
  403. - postgres-integration-test
  404. filters: *filter-not-release-or-master