ci.yml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. name: CI
  2. on:
  3. push:
  4. branches: [ main ]
  5. tags:
  6. - "*"
  7. pull_request:
  8. branches: [ main ]
  9. schedule:
  10. - cron: '0 0 * * *'
  11. workflow_dispatch:
  12. jobs:
  13. build:
  14. runs-on: ubuntu-latest
  15. steps:
  16. - uses: actions/checkout@v2
  17. - name: Set up Go
  18. uses: actions/setup-go@v2
  19. with:
  20. go-version: 1.16.5
  21. - name: Build
  22. run: make
  23. linux:
  24. runs-on: ubuntu-latest
  25. steps:
  26. - uses: actions/checkout@v2
  27. - name: Set up Go
  28. uses: actions/setup-go@v2
  29. with:
  30. go-version: 1.16.5
  31. - name: Build kg and kgctl for all Linux Architectures
  32. run: make all-build
  33. darwin:
  34. runs-on: ubuntu-latest
  35. steps:
  36. - uses: actions/checkout@v2
  37. - name: Set up Go
  38. uses: actions/setup-go@v2
  39. with:
  40. go-version: 1.16.5
  41. - name: Build kgctl for Darwin amd64
  42. run: make OS=darwin ARCH=amd64
  43. - name: Build kgctl for Darwin arm64
  44. run: make OS=darwin ARCH=arm64
  45. windows:
  46. runs-on: ubuntu-latest
  47. steps:
  48. - uses: actions/checkout@v2
  49. - name: Set up Go
  50. uses: actions/setup-go@v2
  51. with:
  52. go-version: 1.16.5
  53. - name: Build kgctl for Windows
  54. run: make OS=windows
  55. unit:
  56. runs-on: ubuntu-latest
  57. steps:
  58. - uses: actions/checkout@v2
  59. - name: Set up Go
  60. uses: actions/setup-go@v2
  61. with:
  62. go-version: 1.16.5
  63. - name: Run Unit Tests
  64. run: make unit
  65. e2e:
  66. if: github.event_name == 'pull_request'
  67. runs-on: ubuntu-latest
  68. steps:
  69. - uses: actions/checkout@v2
  70. - name: Set up Go
  71. uses: actions/setup-go@v2
  72. with:
  73. go-version: 1.16.5
  74. - name: Run e2e Tests
  75. run: make e2e
  76. lint:
  77. runs-on: ubuntu-latest
  78. steps:
  79. - uses: actions/checkout@v2
  80. - name: Set up Go
  81. uses: actions/setup-go@v2
  82. with:
  83. go-version: 1.16.5
  84. - name: Lint Code
  85. run: make lint
  86. container:
  87. runs-on: ubuntu-latest
  88. steps:
  89. - uses: actions/checkout@v2
  90. - name: Set up Go
  91. uses: actions/setup-go@v2
  92. with:
  93. go-version: 1.16.5
  94. - name: Enable Experimental Docker CLI
  95. run: |
  96. echo $'{\n "experimental": true\n}' | sudo tee /etc/docker/daemon.json
  97. mkdir -p ~/.docker
  98. echo $'{\n "experimental": "enabled"\n}' | sudo tee ~/.docker/config.json
  99. sudo service docker restart
  100. docker version -f '{{.Client.Experimental}}'
  101. docker version -f '{{.Server.Experimental}}'
  102. docker buildx version
  103. - name: Container
  104. run: make container
  105. push:
  106. if: github.event_name != 'pull_request'
  107. needs:
  108. - build
  109. - linux
  110. - darwin
  111. - windows
  112. - unit
  113. - lint
  114. - container
  115. runs-on: ubuntu-latest
  116. steps:
  117. - uses: actions/checkout@v2
  118. - name: Set up Go
  119. uses: actions/setup-go@v2
  120. with:
  121. go-version: 1.16.5
  122. - name: Enable Experimental Docker CLI
  123. run: |
  124. echo $'{\n "experimental": true\n}' | sudo tee /etc/docker/daemon.json
  125. mkdir -p ~/.docker
  126. echo $'{\n "experimental": "enabled"\n}' | sudo tee ~/.docker/config.json
  127. sudo service docker restart
  128. docker version -f '{{.Client.Experimental}}'
  129. docker version -f '{{.Server.Experimental}}'
  130. docker buildx version
  131. - name: Set up QEMU
  132. uses: docker/setup-qemu-action@master
  133. with:
  134. platforms: all
  135. - name: Login to DockerHub
  136. if: github.event_name != 'pull_request'
  137. uses: docker/login-action@v1
  138. with:
  139. username: ${{ secrets.DOCKER_USERNAME }}
  140. password: ${{ secrets.DOCKER_PASSWORD }}
  141. - name: Build and push
  142. if: github.event_name != 'pull_request'
  143. run: make manifest
  144. - name: Build and push latest
  145. if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
  146. run: make manifest-latest