config.yml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  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.10
  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 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.10
  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 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.10
  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 gopkg.in/alecthomas/gometalinter.v2'
  80. - run: 'go get -u github.com/tsenart/deadcode'
  81. - run: 'go get -u github.com/gordonklaus/ineffassign'
  82. - run: 'go get -u github.com/opennota/check/cmd/structcheck'
  83. - run: 'go get -u github.com/mdempsky/unconvert'
  84. - run: 'go get -u github.com/opennota/check/cmd/varcheck'
  85. - run:
  86. name: run linters
  87. command: 'gometalinter.v2 --enable-gc --vendor --deadline 10m --disable-all --enable=deadcode --enable=ineffassign --enable=structcheck --enable=unconvert --enable=varcheck ./...'
  88. - run:
  89. name: run go vet
  90. command: 'go vet ./pkg/...'
  91. test-frontend:
  92. docker:
  93. - image: circleci/node:8
  94. steps:
  95. - checkout
  96. - restore_cache:
  97. key: dependency-cache-{{ checksum "yarn.lock" }}
  98. - run:
  99. name: yarn install
  100. command: 'yarn install --pure-lockfile --no-progress'
  101. - save_cache:
  102. key: dependency-cache-{{ checksum "yarn.lock" }}
  103. paths:
  104. - node_modules
  105. - run:
  106. name: frontend tests
  107. command: './scripts/circle-test-frontend.sh'
  108. test-backend:
  109. docker:
  110. - image: circleci/golang:1.10
  111. working_directory: /go/src/github.com/grafana/grafana
  112. steps:
  113. - checkout
  114. - run:
  115. name: build backend and run go tests
  116. command: './scripts/circle-test-backend.sh'
  117. build-all:
  118. docker:
  119. - image: grafana/build-container:1.0.0
  120. working_directory: /go/src/github.com/grafana/grafana
  121. steps:
  122. - checkout
  123. - run:
  124. name: prepare build tools
  125. command: '/tmp/bootstrap.sh'
  126. - restore_cache:
  127. key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
  128. - run:
  129. name: download phantomjs binaries
  130. command: './scripts/build/download-phantomjs.sh'
  131. - save_cache:
  132. key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
  133. paths:
  134. - /tmp/phantomjs
  135. - run:
  136. name: build and package grafana
  137. command: './scripts/build/build-all.sh'
  138. - run:
  139. name: sign packages
  140. command: './scripts/build/sign_packages.sh'
  141. - run:
  142. name: sha-sum packages
  143. command: 'go run build.go sha-dist'
  144. - run:
  145. name: Build Grafana.com publisher
  146. command: 'go build -o scripts/publish scripts/build/publish.go'
  147. - persist_to_workspace:
  148. root: .
  149. paths:
  150. - dist/grafana*
  151. - scripts/*.sh
  152. - scripts/publish
  153. build:
  154. docker:
  155. - image: grafana/build-container:1.0.0
  156. working_directory: /go/src/github.com/grafana/grafana
  157. steps:
  158. - checkout
  159. - run:
  160. name: prepare build tools
  161. command: '/tmp/bootstrap.sh'
  162. - run:
  163. name: build and package grafana
  164. command: './scripts/build/build.sh'
  165. - run:
  166. name: sign packages
  167. command: './scripts/build/sign_packages.sh'
  168. - run:
  169. name: sha-sum packages
  170. command: 'go run build.go sha-dist'
  171. - persist_to_workspace:
  172. root: .
  173. paths:
  174. - dist/grafana*
  175. grafana-docker-master:
  176. docker:
  177. - image: docker:stable-git
  178. steps:
  179. - checkout
  180. - attach_workspace:
  181. at: .
  182. - setup_remote_docker
  183. - run: docker info
  184. - run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
  185. - run: cd packaging/docker && ./build-deploy.sh "master-${CIRCLE_SHA1}"
  186. grafana-docker-pr:
  187. docker:
  188. - image: docker:stable-git
  189. steps:
  190. - checkout
  191. - attach_workspace:
  192. at: .
  193. - setup_remote_docker
  194. - run: docker info
  195. - run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
  196. - run: cd packaging/docker && ./build.sh "${CIRCLE_SHA1}"
  197. grafana-docker-release:
  198. docker:
  199. - image: docker:stable-git
  200. steps:
  201. - checkout
  202. - attach_workspace:
  203. at: .
  204. - setup_remote_docker
  205. - run: docker info
  206. - run: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker
  207. - run: cd packaging/docker && ./build-deploy.sh "${CIRCLE_TAG}"
  208. build-enterprise:
  209. docker:
  210. - image: grafana/build-container:v0.1
  211. working_directory: /go/src/github.com/grafana/grafana
  212. steps:
  213. - checkout
  214. - run:
  215. name: build, test and package grafana enterprise
  216. command: './scripts/build/build_enterprise.sh'
  217. - run:
  218. name: sign packages
  219. command: './scripts/build/sign_packages.sh'
  220. - run:
  221. name: sha-sum packages
  222. command: 'go run build.go sha-dist'
  223. - run:
  224. name: move enterprise packages into their own folder
  225. command: 'mv dist enterprise-dist'
  226. - persist_to_workspace:
  227. root: .
  228. paths:
  229. - enterprise-dist/grafana-enterprise*
  230. deploy-enterprise-master:
  231. docker:
  232. - image: circleci/python:2.7-stretch
  233. steps:
  234. - attach_workspace:
  235. at: .
  236. - run:
  237. name: install awscli
  238. command: 'sudo pip install awscli'
  239. - run:
  240. name: deploy to s3
  241. command: 'aws s3 sync ./enterprise-dist s3://$ENTERPRISE_BUCKET_NAME/master'
  242. deploy-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: |
  254. # Also
  255. cp dist/grafana-latest.linux-x64.tar.gz dist/grafana-master-$(echo "${CIRCLE_SHA1}" | cut -b1-7).linux-x64.tar.gz
  256. aws s3 sync ./dist s3://$BUCKET_NAME/master
  257. - run:
  258. name: Trigger Windows build
  259. command: './scripts/trigger_windows_build.sh ${APPVEYOR_TOKEN} ${CIRCLE_SHA1} master'
  260. - run:
  261. name: Publish to Grafana.com
  262. command: |
  263. rm dist/grafana-master-$(echo "${CIRCLE_SHA1}" | cut -b1-7).linux-x64.tar.gz
  264. ./scripts/publish -apiKey ${GRAFANA_COM_API_KEY}
  265. deploy-release:
  266. docker:
  267. - image: circleci/python:2.7-stretch
  268. steps:
  269. - attach_workspace:
  270. at: .
  271. - run:
  272. name: install awscli
  273. command: 'sudo pip install awscli'
  274. - run:
  275. name: deploy to s3
  276. command: 'aws s3 sync ./dist s3://$BUCKET_NAME/release'
  277. - run:
  278. name: Trigger Windows build
  279. command: './scripts/trigger_windows_build.sh ${APPVEYOR_TOKEN} ${CIRCLE_SHA1} release'
  280. workflows:
  281. version: 2
  282. build-master:
  283. jobs:
  284. - build-all:
  285. filters: *filter-only-master
  286. - build-enterprise:
  287. filters: *filter-only-master
  288. - codespell:
  289. filters: *filter-only-master
  290. - gometalinter:
  291. filters: *filter-only-master
  292. - test-frontend:
  293. filters: *filter-only-master
  294. - test-backend:
  295. filters: *filter-only-master
  296. - mysql-integration-test:
  297. filters: *filter-only-master
  298. - postgres-integration-test:
  299. filters: *filter-only-master
  300. - deploy-master:
  301. requires:
  302. - build-all
  303. - test-backend
  304. - test-frontend
  305. - codespell
  306. - gometalinter
  307. - mysql-integration-test
  308. - postgres-integration-test
  309. filters: *filter-only-master
  310. - grafana-docker-master:
  311. requires:
  312. - build-all
  313. - test-backend
  314. - test-frontend
  315. - codespell
  316. - gometalinter
  317. - mysql-integration-test
  318. - postgres-integration-test
  319. filters: *filter-only-master
  320. - deploy-enterprise-master:
  321. requires:
  322. - build-all
  323. - test-backend
  324. - test-frontend
  325. - codespell
  326. - gometalinter
  327. - mysql-integration-test
  328. - postgres-integration-test
  329. - build-enterprise
  330. filters: *filter-only-master
  331. release:
  332. jobs:
  333. - build-all:
  334. filters: *filter-only-release
  335. - codespell:
  336. filters: *filter-only-release
  337. - gometalinter:
  338. filters: *filter-only-release
  339. - test-frontend:
  340. filters: *filter-only-release
  341. - test-backend:
  342. filters: *filter-only-release
  343. - mysql-integration-test:
  344. filters: *filter-only-release
  345. - postgres-integration-test:
  346. filters: *filter-only-release
  347. - deploy-release:
  348. requires:
  349. - build-all
  350. - test-backend
  351. - test-frontend
  352. - codespell
  353. - gometalinter
  354. - mysql-integration-test
  355. - postgres-integration-test
  356. filters: *filter-only-release
  357. - grafana-docker-release:
  358. requires:
  359. - build-all
  360. - test-backend
  361. - test-frontend
  362. - codespell
  363. - gometalinter
  364. - mysql-integration-test
  365. - postgres-integration-test
  366. filters: *filter-only-release
  367. build-branches-and-prs:
  368. jobs:
  369. - build:
  370. filters: *filter-not-release-or-master
  371. - codespell:
  372. filters: *filter-not-release-or-master
  373. - gometalinter:
  374. filters: *filter-not-release-or-master
  375. - test-frontend:
  376. filters: *filter-not-release-or-master
  377. - test-backend:
  378. filters: *filter-not-release-or-master
  379. - mysql-integration-test:
  380. filters: *filter-not-release-or-master
  381. - postgres-integration-test:
  382. filters: *filter-not-release-or-master
  383. - grafana-docker-pr:
  384. requires:
  385. - build
  386. - test-backend
  387. - test-frontend
  388. - codespell
  389. - gometalinter
  390. - mysql-integration-test
  391. - postgres-integration-test
  392. filters: *filter-not-release-or-master