build_packages.yaml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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:
  58. runs-on: ubuntu-latest
  59. strategy:
  60. matrix:
  61. suffix:
  62. - fat
  63. - slim
  64. - alpine
  65. steps:
  66. - uses: actions/checkout@v1
  67. - name: install docker
  68. run: |
  69. sudo apt-get remove docker docker-engine docker.io containerd runc
  70. sudo apt-get update
  71. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  72. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  73. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  74. sudo apt-get update
  75. sudo apt-get install docker-ce docker-ce-cli containerd.io
  76. - name: prepare docker
  77. run: |
  78. mkdir -p $HOME/.docker
  79. echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json
  80. echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50, "graph": "/mnt/docker" }' | sudo tee /etc/docker/daemon.json
  81. sudo systemctl restart docker
  82. docker version
  83. docker buildx create --use --name mybuild
  84. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  85. - name: build docker image
  86. if: matrix.suffix == 'fat'
  87. run: docker build --no-cache -t emqx/kuiper:$(git describe --tags --always) -f deploy/docker/Dockerfile .
  88. - name: build docker image
  89. if: matrix.suffix != 'fat'
  90. env:
  91. SUFFIX: ${{ matrix.suffix }}
  92. run: docker build --no-cache -t emqx/kuiper:$(git describe --tags --always)-$SUFFIX -f deploy/docker/Dockerfile-$SUFFIX .
  93. - name: test docker image
  94. run: |
  95. set -e -x -u
  96. image_id=$(docker images emqx/kuiper -q | head -1)
  97. container_id=$(docker run -d $image_id)
  98. ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $container_id)
  99. sleep 10
  100. if ! curl ${ip_address}:9081 >/dev/null 2>&1; then echo "docker image failed"; exit 1; fi
  101. - name: cross build docker images
  102. if: (matrix.suffix == 'fat') && (github.event_name == 'release')
  103. run: |
  104. set -e -u -x
  105. echo ${{ secrets.DockerHubPassword }} | docker login -u ${{ secrets.DockerHubUser }} --password-stdin
  106. docker buildx build --no-cache \
  107. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  108. -t emqx/kuiper:$(git describe --tags --always) \
  109. -f deploy/docker/Dockerfile . \
  110. --push
  111. - name: cross build docker images
  112. if: (matrix.suffix != 'fat') && (github.event_name == 'release')
  113. env:
  114. SUFFIX: ${{ matrix.suffix }}
  115. run: |
  116. set -e -u -x
  117. echo ${{ secrets.DockerHubPassword }} | docker login -u ${{ secrets.DockerHubUser }} --password-stdin
  118. docker buildx build --no-cache \
  119. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le \
  120. -t emqx/kuiper:$(git describe --tags --always)-$SUFFIX \
  121. -f deploy/docker/Dockerfile-$SUFFIX . \
  122. --push
  123. build-kubernetes-tool:
  124. runs-on: ubuntu-latest
  125. steps:
  126. - uses: actions/checkout@v1
  127. - name: install docker
  128. run: |
  129. sudo apt-get remove docker docker-engine docker.io containerd runc
  130. sudo apt-get update
  131. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  132. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  133. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  134. sudo apt-get update
  135. sudo apt-get install docker-ce docker-ce-cli containerd.io
  136. - name: prepare docker
  137. run: |
  138. mkdir -p $HOME/.docker
  139. echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json
  140. echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50, "graph": "/mnt/docker" }' | sudo tee /etc/docker/daemon.json
  141. sudo systemctl restart docker
  142. docker version
  143. docker buildx create --use --name mybuild
  144. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  145. - name: build docker image
  146. run: docker build --no-cache -t emqx/kuiper-kubernetes-tool:$(git describe --tags --always) -f deploy/docker/Dockerfile-kubernetes-tool .
  147. - name: test docker image
  148. run: |
  149. set -e -u -x
  150. docker run -d --name kuiper-kubernetes-tool emqx/kuiper-kubernetes-tool:$(git describe --tags --always)
  151. sleep 5
  152. if [ "$(docker logs kuiper-kubernetes-tool)" != "Kuiper kubernetes tool is started successfully!" ]; then exit 1; fi
  153. - name: buildx docker image
  154. if: github.event_name == 'release'
  155. run: |
  156. echo ${{ secrets.DockerHubPassword }} | docker login -u ${{ secrets.DockerHubUser }} --password-stdin
  157. docker buildx build --no-cache \
  158. --platform=linux/amd64,linux/arm64,linux/arm/v7,linux/386 \
  159. -t emqx/kuiper-kubernetes-tool:$(git describe --tags --always) \
  160. -f deploy/docker/Dockerfile-kubernetes-tool . \
  161. -- push
  162. release:
  163. runs-on: ubuntu-latest
  164. needs: [build, build-on-mac]
  165. steps:
  166. - uses: actions/checkout@v1
  167. - uses: actions/download-artifact@v1
  168. with:
  169. name: packages
  170. path: _packages
  171. - uses: actions/download-artifact@v1
  172. with:
  173. name: packages-mac
  174. path: _packages
  175. - name: check packages
  176. run: |
  177. cd _packages && for var in $( ls |grep -v sha256); do
  178. echo "$(cat $var.sha256) $var" | sha256sum -c || exit 1
  179. done
  180. - name: update github release
  181. if: github.event_name == 'release'
  182. run: |
  183. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  184. for var in $(ls _packages) ; do
  185. .github/workflows/script/upload_github_release_asset.sh owner=emqx repo=kuiper tag=$version filename=_packages/$var github_api_token=$(echo ${{ secrets.AccessToken }})
  186. done
  187. - name: create invalidation for cloudfront
  188. if: github.event_name == 'release'
  189. run: |
  190. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  191. curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
  192. unzip awscliv2.zip
  193. sudo ./aws/install
  194. aws configure set aws_access_key_id ${{ secrets.AwsAccessKeyId }}
  195. aws configure set aws_secret_access_key ${{ secrets.AwsSecretAccessKey }}
  196. aws configure set default.region us-west-2
  197. aws s3 rm --quiet --recursive s3://packages.emqx.io/kuiper/$version
  198. aws s3 cp --quiet --recursive ./_packages s3://packages.emqx.io/kuiper/$version
  199. aws cloudfront create-invalidation --distribution-id E3TYD0WSP4S14P --paths "/kuiper/$version/*"
  200. - name: update emqx.io
  201. if: github.event_name == 'release'
  202. run: |
  203. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  204. curl -w %{http_code} --insecure -H ${{ secrets.EmqxHeader }} https://admin.emqx.io/admin_api/v1/kuiper_github_release_callback?tag=$version
  205. - name: update helm packages
  206. if: github.event_name == 'release'
  207. run: |
  208. version=$(echo ${{ github.ref }} | sed -r "s .*/.*/(.*) \1 g")
  209. curl -H "Authorization: token ${{ secrets.AccessToken }}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" -X POST -d "{\"event_type\":\"update_repos_for_kuiper\",\"client_payload\":{\"version\": \"$version\"}}" https://api.github.com/repos/emqx/emqx-packages-docker/dispatches