config.yml 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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
  9. tags:
  10. ignore: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
  11. version: 2
  12. jobs:
  13. codespell:
  14. docker:
  15. - image: circleci/python
  16. steps:
  17. - checkout
  18. - run:
  19. name: install codespell
  20. command: 'sudo pip install codespell'
  21. - run:
  22. # Important: all words have to be in lowercase, and separated by "\n".
  23. name: exclude known exceptions
  24. command: 'echo -e "unknwon" > words_to_ignore.txt'
  25. - run:
  26. name: check documentation spelling errors
  27. command: 'codespell -I ./words_to_ignore.txt docs/'
  28. gometalinter:
  29. docker:
  30. - image: circleci/golang:1.10
  31. environment:
  32. # we need CGO because of go-sqlite3
  33. CGO_ENABLED: 1
  34. working_directory: /go/src/github.com/grafana/grafana
  35. steps:
  36. - checkout
  37. - run: 'go get -u gopkg.in/alecthomas/gometalinter.v2'
  38. - run: 'go get -u github.com/tsenart/deadcode'
  39. - run: 'go get -u github.com/gordonklaus/ineffassign'
  40. - run: 'go get -u github.com/opennota/check/cmd/structcheck'
  41. - run: 'go get -u github.com/mdempsky/unconvert'
  42. - run: 'go get -u github.com/opennota/check/cmd/varcheck'
  43. - run:
  44. name: run linters
  45. command: 'gometalinter.v2 --enable-gc --vendor --deadline 10m --disable-all --enable=deadcode --enable=ineffassign --enable=structcheck --enable=unconvert --enable=varcheck ./...'
  46. test-frontend:
  47. docker:
  48. - image: circleci/node:6.11.4
  49. steps:
  50. - checkout
  51. - run:
  52. name: install yarn
  53. command: 'sudo npm install -g yarn --quiet'
  54. - restore_cache:
  55. key: dependency-cache-{{ checksum "yarn.lock" }}
  56. - run:
  57. name: yarn install
  58. command: 'yarn install --pure-lockfile --no-progress'
  59. - save_cache:
  60. key: dependency-cache-{{ checksum "yarn.lock" }}
  61. paths:
  62. - node_modules
  63. - run:
  64. name: frontend tests
  65. command: './scripts/circle-test-frontend.sh'
  66. test-backend:
  67. docker:
  68. - image: circleci/golang:1.10
  69. working_directory: /go/src/github.com/grafana/grafana
  70. steps:
  71. - checkout
  72. - run:
  73. name: build backend and run go tests
  74. command: './scripts/circle-test-backend.sh'
  75. build-all:
  76. docker:
  77. - image: grafana/build-container:1.0.0
  78. working_directory: /go/src/github.com/grafana/grafana
  79. steps:
  80. - checkout
  81. - run:
  82. name: prepare build tools
  83. command: '/tmp/bootstrap.sh'
  84. - restore_cache:
  85. key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
  86. - run:
  87. name: download phantomjs binaries
  88. command: './scripts/build/download-phantomjs.sh'
  89. - save_cache:
  90. key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
  91. paths:
  92. - /tmp/phantomjs
  93. - run:
  94. name: build and package grafana
  95. command: './scripts/build/build-all.sh'
  96. - run:
  97. name: sign packages
  98. command: './scripts/build/sign_packages.sh'
  99. - run:
  100. name: sha-sum packages
  101. command: 'go run build.go sha-dist'
  102. - run:
  103. name: Build Grafana.com publisher
  104. command: 'go build -o scripts/publish scripts/build/publish.go'
  105. - persist_to_workspace:
  106. root: .
  107. paths:
  108. - dist/grafana*
  109. - scripts/*.sh
  110. - scripts/publish
  111. - store_artifacts:
  112. path: dist
  113. build-enterprise:
  114. docker:
  115. - image: grafana/build-container:v0.1
  116. working_directory: /go/src/github.com/grafana/grafana
  117. steps:
  118. - checkout
  119. - run:
  120. name: build and package grafana
  121. command: './scripts/build/build_enterprise.sh'
  122. - run:
  123. name: sign packages
  124. command: './scripts/build/sign_packages.sh'
  125. - run:
  126. name: sha-sum packages
  127. command: 'go run build.go sha-dist'
  128. deploy-master:
  129. docker:
  130. - image: circleci/python:2.7-stretch
  131. steps:
  132. - attach_workspace:
  133. at: .
  134. - run:
  135. name: install awscli
  136. command: 'sudo pip install awscli'
  137. - run:
  138. name: deploy to s3
  139. command: 'aws s3 sync ./dist s3://$BUCKET_NAME/master'
  140. - run:
  141. name: Trigger Windows build
  142. command: './scripts/trigger_windows_build.sh ${APPVEYOR_TOKEN} ${CIRCLE_SHA1} master'
  143. - run:
  144. name: Trigger Docker build
  145. command: './scripts/trigger_docker_build.sh ${TRIGGER_GRAFANA_PACKER_CIRCLECI_TOKEN}'
  146. - run:
  147. name: Publish to Grafana.com
  148. command: './scripts/publish -apiKey ${GRAFANA_COM_API_KEY}'
  149. deploy-release:
  150. docker:
  151. - image: circleci/python:2.7-stretch
  152. steps:
  153. - attach_workspace:
  154. at: .
  155. - run:
  156. name: install awscli
  157. command: 'sudo pip install awscli'
  158. - run:
  159. name: deploy to s3
  160. command: 'aws s3 sync ./dist s3://$BUCKET_NAME/release'
  161. - run:
  162. name: Trigger Windows build
  163. command: './scripts/trigger_windows_build.sh ${APPVEYOR_TOKEN} ${CIRCLE_SHA1} release'
  164. - run:
  165. name: Trigger Docker build
  166. command: './scripts/trigger_docker_build.sh ${TRIGGER_GRAFANA_PACKER_CIRCLECI_TOKEN} ${CIRCLE_TAG}'
  167. workflows:
  168. version: 2
  169. test-and-build:
  170. jobs:
  171. - build-all:
  172. filters: *filter-not-release
  173. - codespell:
  174. filters: *filter-not-release
  175. - gometalinter:
  176. filters: *filter-not-release
  177. - test-frontend:
  178. filters: *filter-not-release
  179. - test-backend:
  180. filters: *filter-not-release
  181. - deploy-master:
  182. requires:
  183. - build-all
  184. - test-backend
  185. - test-frontend
  186. - codespell
  187. - gometalinter
  188. filters:
  189. branches:
  190. only: master
  191. release:
  192. jobs:
  193. - build-all:
  194. filters: *filter-only-release
  195. - codespell:
  196. filters: *filter-only-release
  197. - gometalinter:
  198. filters: *filter-only-release
  199. - test-frontend:
  200. filters: *filter-only-release
  201. - test-backend:
  202. filters: *filter-only-release
  203. - deploy-release:
  204. requires:
  205. - build-all
  206. - test-backend
  207. - test-frontend
  208. - codespell
  209. - gometalinter
  210. filters: *filter-only-release