build_packages.yaml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. name: Build packages
  2. on:
  3. pull_request:
  4. release:
  5. types:
  6. - published
  7. jobs:
  8. build:
  9. runs-on: ubuntu-latest
  10. steps:
  11. - uses: actions/checkout@v1
  12. - name: install docker
  13. run: |
  14. sudo apt-get remove docker docker-engine docker.io containerd runc
  15. sudo apt-get update
  16. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  17. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  18. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  19. sudo apt-get update
  20. sudo apt-get install docker-ce docker-ce-cli containerd.io
  21. - name: prepare docker
  22. run: |
  23. mkdir -p $HOME/.docker
  24. echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json
  25. echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50, "graph": "/mnt/docker" }' | sudo tee /etc/docker/daemon.json
  26. sudo systemctl restart docker
  27. docker info
  28. docker buildx create --use --name mybuild
  29. - name: build
  30. run: |
  31. make all_pkgs
  32. cd _packages && for var in $(ls); do sudo bash -c "echo $(sha256sum $var | awk '{print $1}') > $var.sha256"; done && cd -
  33. - uses: actions/upload-artifact@v1
  34. with:
  35. name: packages
  36. path: _packages/.
  37. build-on-mac:
  38. runs-on: macos-latest
  39. steps:
  40. - uses: actions/checkout@v1
  41. - uses: actions/setup-go@v1
  42. with:
  43. go-version: '1.14'
  44. - name: prepare
  45. run: |
  46. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  47. brew install curl zip unzip gnu-sed upx pkg-config zmq
  48. echo "/usr/local/bin:$PATH" >> ~/.bashrc
  49. - name: build
  50. run: |
  51. make pkg
  52. cd _packages && for var in $(ls); do openssl dgst -sha256 $var | awk '{print $2}' > $var.sha256; done && cd -
  53. - uses: actions/upload-artifact@v1
  54. with:
  55. name: packages-mac
  56. path: _packages/.
  57. build-docker-images-and-plugins:
  58. runs-on: ubuntu-latest
  59. strategy:
  60. matrix:
  61. plugin:
  62. - sinks/file
  63. - sinks/influx
  64. - sinks/tdengine
  65. - sinks/zmq
  66. - sources/random
  67. - sources/zmq
  68. - functions/accumulateWordCount
  69. - functions/countPlusOne
  70. - functions/echo
  71. steps:
  72. - uses: actions/checkout@v1
  73. - name: install docker
  74. run: |
  75. sudo apt-get remove docker docker-engine docker.io containerd runc
  76. sudo apt-get update
  77. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  78. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  79. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  80. sudo apt-get update
  81. sudo apt-get install docker-ce docker-ce-cli containerd.io
  82. - name: prepare docker
  83. run: |
  84. mkdir -p $HOME/.docker
  85. echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json
  86. echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50, "graph": "/mnt/docker" }' | sudo tee /etc/docker/daemon.json
  87. sudo systemctl restart docker
  88. docker version
  89. docker buildx create --use --name mybuild
  90. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  91. - name: build docker image
  92. run: make docker -j4
  93. - name: buiild debian plugins
  94. env:
  95. PLUGIN: ${{ matrix.plugin }}
  96. run: make ${PLUGIN}
  97. - name: test docker and plugins
  98. env:
  99. PLUGIN: ${{ matrix.plugin }}
  100. run: |
  101. set -e -x -u
  102. plugin_type=$(echo ${PLUGIN%%/*})
  103. plugin_name=$(echo ${PLUGIN##*/})
  104. for image_id in $(docker images emqx/kuiper -q); do
  105. container_id=$(docker run -d -v $(pwd)/_plugins:/var/plugins $image_id)
  106. ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $container_id)
  107. os=$(docker exec -i ${container_id} sh -c "sed -n '/^ID=/p' /etc/os-release | sed -r 's/ID=(.*)/\1/g'" )
  108. sleep 5
  109. if ! curl ${ip_address}:9081 >/dev/null 2>&1; then echo "docker image failed"; exit 1; fi
  110. if [ ${os} = alpine ]; then continue; fi
  111. if [ "${plugin_name}" = "tdengine" ]; then
  112. curl \
  113. ${ip_address}:9081/plugins/${plugin_type} \
  114. -X POST \
  115. -d "{\"name\":\"${plugin_name}\", \"file\":\"file:///var/plugins/${os}/${plugin_type}/${plugin_name}_amd64.zip\", \"shellParas\": [\"2.0.3.1\"]}"
  116. else
  117. curl \
  118. ${ip_address}:9081/plugins/${plugin_type} \
  119. -X POST \
  120. -d "{\"name\":\"${plugin_name}\", \"file\":\"file:///var/plugins/${os}/${plugin_type}/${plugin_name}_amd64.zip\"}"
  121. fi
  122. docker logs ${container_id}
  123. [ $plugin_name = $(curl ${ip_address}:9081/plugins/${plugin_type}/${plugin_name} | jq '.name'| sed 's/\"//g' ) ] || exit 1
  124. done
  125. - uses: actions/upload-artifact@v2
  126. with:
  127. name: plugins
  128. path: "_plugins/"
  129. build-docker-manifest-images:
  130. runs-on: ubuntu-latest
  131. needs:
  132. - build-docker-images-and-plugins
  133. strategy:
  134. matrix:
  135. suffix:
  136. - fat
  137. - slim
  138. - alpine
  139. steps:
  140. - uses: actions/checkout@v1
  141. - name: install docker
  142. if: github.event_name == 'release'
  143. run: |
  144. sudo apt-get remove docker docker-engine docker.io containerd runc
  145. sudo apt-get update
  146. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  147. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  148. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  149. sudo apt-get update
  150. sudo apt-get install docker-ce docker-ce-cli containerd.io jq
  151. - name: prepare docker
  152. if: github.event_name == 'release'
  153. run: |
  154. mkdir -p $HOME/.docker
  155. echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json
  156. echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50, "graph": "/mnt/docker" }' | sudo tee /etc/docker/daemon.json
  157. sudo systemctl restart docker
  158. docker version
  159. docker buildx create --use --name mybuild
  160. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  161. - name: cross build docker images
  162. if: (matrix.suffix == 'fat') && (github.event_name == 'release')
  163. run: |
  164. set -e -u -x
  165. echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USER }} --password-stdin
  166. docker buildx build --no-cache \
  167. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  168. -t emqx/kuiper:$(git describe --tags --always) \
  169. -f deploy/docker/Dockerfile . \
  170. --push
  171. - name: cross build docker images
  172. if: (matrix.suffix != 'fat') && (github.event_name == 'release')
  173. env:
  174. SUFFIX: ${{ matrix.suffix }}
  175. run: |
  176. set -e -u -x
  177. echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USER }} --password-stdin
  178. docker buildx build --no-cache \
  179. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  180. -t emqx/kuiper:$(git describe --tags --always)-$SUFFIX \
  181. -f deploy/docker/Dockerfile-$SUFFIX . \
  182. --push
  183. build-kubernetes-tool:
  184. runs-on: ubuntu-latest
  185. steps:
  186. - uses: actions/checkout@v1
  187. - name: install docker
  188. run: |
  189. sudo apt-get remove docker docker-engine docker.io containerd runc
  190. sudo apt-get update
  191. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  192. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  193. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  194. sudo apt-get update
  195. sudo apt-get install docker-ce docker-ce-cli containerd.io
  196. - name: prepare docker
  197. run: |
  198. mkdir -p $HOME/.docker
  199. echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json
  200. echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50, "graph": "/mnt/docker" }' | sudo tee /etc/docker/daemon.json
  201. sudo systemctl restart docker
  202. docker version
  203. docker buildx create --use --name mybuild
  204. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  205. - name: build docker image
  206. run: docker build --no-cache -t emqx/kuiper-kubernetes-tool:$(git describe --tags --always) -f deploy/docker/Dockerfile-kubernetes-tool .
  207. - name: test docker image
  208. run: |
  209. set -e -u -x
  210. docker run -d --name kuiper-kubernetes-tool emqx/kuiper-kubernetes-tool:$(git describe --tags --always)
  211. sleep 5
  212. if [ "$(docker logs kuiper-kubernetes-tool)" != "Kuiper kubernetes tool is started successfully!" ]; then exit 1; fi
  213. - name: buildx docker image
  214. if: github.event_name == 'release'
  215. run: |
  216. echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USER }} --password-stdin
  217. docker buildx build --no-cache \
  218. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386 \
  219. -t emqx/kuiper-kubernetes-tool:$(git describe --tags --always) \
  220. -f deploy/docker/Dockerfile-kubernetes-tool . \
  221. --push
  222. release:
  223. runs-on: ubuntu-latest
  224. needs:
  225. - build
  226. - build-on-mac
  227. - build-docker-images-and-plugins
  228. steps:
  229. - uses: actions/checkout@v1
  230. - uses: actions/download-artifact@v1
  231. with:
  232. name: packages
  233. path: _packages
  234. - uses: actions/download-artifact@v1
  235. with:
  236. name: packages-mac
  237. path: _packages
  238. - uses: actions/download-artifact@v1
  239. with:
  240. name: plugins
  241. path: _plugins
  242. - name: check packages
  243. run: |
  244. cd _packages && for var in $( ls |grep -v sha256); do
  245. echo "$(cat $var.sha256) $var" | sha256sum -c || exit 1
  246. done
  247. - name: update github release
  248. if: github.event_name == 'release'
  249. run: |
  250. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  251. for var in $(ls _packages) ; do
  252. .github/workflows/script/upload_github_release_asset.sh owner=emqx repo=kuiper tag=$version filename=_packages/$var github_api_token=$(echo ${{ secrets.AccessToken }})
  253. done
  254. - name: create invalidation for cloudfront
  255. if: github.event_name == 'release'
  256. run: |
  257. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  258. curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
  259. unzip awscliv2.zip
  260. sudo ./aws/install
  261. aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
  262. aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  263. aws configure set default.region us-west-2
  264. aws s3 rm --quiet --recursive s3://packages.emqx/kuiper/$version
  265. aws s3 cp --quiet --recursive ./_packages s3://packages.emqx/kuiper/$version
  266. aws s3 cp --quiet --recursive ./_plugins s3://packages.emqx/kuiper-plugins/$version
  267. aws cloudfront create-invalidation --distribution-id E170YEULGLT8XB --paths "/kuiper/$version/*,/kuiper-plugins/$version/*"
  268. - name: update emqx.io
  269. if: github.event_name == 'release'
  270. run: |
  271. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  272. curl -w %{http_code} --insecure -H ${{ secrets.EmqxHeader }} https://admin.emqx.io/admin_api/v1/kuiper_github_release_callback?tag=$version
  273. - name: update helm packages
  274. if: github.event_name == 'release'
  275. run: |
  276. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  277. curl \
  278. -H "Authorization: token ${{ secrets.AccessToken }}" \
  279. -H "Accept: application/vnd.github.v3+json" \
  280. -X POST \
  281. -d "{\"ref\":\"v1.0.0\",\"inputs\":{\"version\": \"${version}\", \"emqx_ce\": \"true\"}}" \
  282. https://api.github.com/repos/emqx/emqx-ci-helper/actions/workflows/kuiper_repos.yaml/dispatches