release.yaml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. on:
  2. push:
  3. tags:
  4. - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
  5. name: Create release w/ binaries and docker image
  6. jobs:
  7. docker-build-push:
  8. runs-on: ubuntu-latest
  9. steps:
  10. - name: Get tag name
  11. id: tag_name
  12. run: |
  13. tag=${GITHUB_TAG/refs\/tags\//}
  14. echo ::set-output name=tag::$tag
  15. env:
  16. GITHUB_TAG: ${{ github.ref }}
  17. - name: Checkout
  18. uses: actions/checkout@v2.3.4
  19. - name: Setup docker
  20. uses: docker/login-action@v1
  21. with:
  22. username: ${{ secrets.DOCKERHUB_USERNAME }}
  23. password: ${{ secrets.DOCKERHUB_TOKEN }}
  24. - name: Write Dashboard Environment Variables
  25. run: |
  26. cat >./dashboard/.env <<EOL
  27. NODE_ENV=production
  28. API_SERVER=dashboard.getporter.dev
  29. FULLSTORY_ORG_ID=${{secrets.FULLSTORY_ORG_ID}}
  30. DISCORD_KEY=${{secrets.DISCORD_KEY}}
  31. DISCORD_CID=${{secrets.DISCORD_CID}}
  32. FEEDBACK_ENDPOINT=${{secrets.FEEDBACK_ENDPOINT}}
  33. EOL
  34. cat ./dashboard/.env
  35. - name: Build
  36. run: |
  37. DOCKER_BUILDKIT=1 docker build . -t gcr.io/porter-dev-273614/porter-prov:${{steps.tag_name.outputs.tag}} -f ./docker/Dockerfile
  38. - name: Push
  39. run: |
  40. docker push gcr.io/porter-dev-273614/porter-prov:${{steps.tag_name.outputs.tag}}
  41. build:
  42. name: Build binaries
  43. runs-on: ubuntu-latest
  44. steps:
  45. - name: Get tag name
  46. id: tag_name
  47. run: |
  48. tag=${GITHUB_TAG/refs\/tags\//}
  49. echo ::set-output name=tag::$tag
  50. env:
  51. GITHUB_TAG: ${{ github.ref }}
  52. - name: Checkout code
  53. uses: actions/checkout@v2
  54. - name: Set up Go
  55. uses: actions/setup-go@v2
  56. with:
  57. go-version: 1.15
  58. - name: Build Linux binaries
  59. run: |
  60. go build -ldflags="-w -s -X 'github.com/porter-dev/porter/cli/cmd.Version=${{steps.tag_name.outputs.tag}}'" -a -tags cli -o ./porter ./cli &
  61. go build -ldflags="-w -s -X 'main.Version=${{steps.tag_name.outputs.tag}}'" -a -o ./docker-credential-porter ./cmd/docker-credential-porter/ &
  62. go build -ldflags="-w -s" -a -o ./portersvr ./cmd/app/ &
  63. wait
  64. env:
  65. GOOS: linux
  66. GOARCH: amd64
  67. # Note: we have to zip all binaries before uploading them as artifacts --
  68. # without this step, the binaries will be uploaded but the file metadata will
  69. # be listed as plaintext after downloading the artifact in a later step
  70. #
  71. # TODO: investigate
  72. - name: Zip Linux binaries
  73. run: |
  74. mkdir -p ./release/linux
  75. zip --junk-paths ./release/linux/porter_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip ./porter
  76. zip --junk-paths ./release/linux/portersvr_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip ./portersvr
  77. zip --junk-paths ./release/linux/docker-credential-porter_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip ./docker-credential-porter
  78. - name: Build Darwin binaries
  79. run: |
  80. go build -ldflags="-w -s -X 'github.com/porter-dev/porter/cli/cmd.Version=${{steps.tag_name.outputs.tag}}'" -a -tags cli -o ./porter ./cli &
  81. go build -ldflags="-w -s -X 'main.Version=${{steps.tag_name.outputs.tag}}'" -a -o ./docker-credential-porter ./cmd/docker-credential-porter/ &
  82. go build -ldflags="-w -s" -a -o ./portersvr ./cmd/app/ &
  83. wait
  84. env:
  85. GOOS: darwin
  86. GOARCH: amd64
  87. - name: Zip Darwin binaries
  88. run: |
  89. mkdir -p ./release/darwin
  90. zip --junk-paths ./release/darwin/UNSIGNED_porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip ./porter
  91. zip --junk-paths ./release/darwin/UNSIGNED_portersvr_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip ./portersvr
  92. zip --junk-paths ./release/darwin/UNSIGNED_docker-credential-porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip ./docker-credential-porter
  93. - name: Build Windows binaries
  94. run: |
  95. go build -ldflags="-w -s -X 'github.com/porter-dev/porter/cli/cmd.Version=${{steps.tag_name.outputs.tag}}'" -a -tags cli -o ./porter.exe ./cli &
  96. go build -ldflags="-w -s -X 'main.Version=${{steps.tag_name.outputs.tag}}'" -a -o ./docker-credential-porter.exe ./cmd/docker-credential-porter/ &
  97. go build -ldflags="-w -s" -a -o ./portersvr.exe ./cmd/app/ &
  98. wait
  99. env:
  100. GOOS: windows
  101. GOARCH: amd64
  102. - name: Zip Windows binaries
  103. run: |
  104. mkdir -p ./release/windows
  105. zip --junk-paths ./release/windows/porter_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip ./porter.exe
  106. zip --junk-paths ./release/windows/portersvr_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip ./portersvr.exe
  107. zip --junk-paths ./release/windows/docker-credential-porter_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip ./docker-credential-porter.exe
  108. - name: Build and zip static folder
  109. run: |
  110. mkdir -p ./release/static
  111. cd dashboard
  112. npm i
  113. npm run build
  114. cd ..
  115. zip --junk-paths ./release/static/static_${{steps.tag_name.outputs.tag}}.zip ./dashboard/build/*
  116. env:
  117. NODE_ENV: production
  118. API_SERVER: ${{ secrets.API_SERVER }}
  119. FULLSTORY_ORG_ID: ${{ secrets.FULLSTORY_ORG_ID }}
  120. DISCORD_KEY: ${{ secrets.DISCORD_KEY }}
  121. DISCORD_CID: ${{ secrets.DISCORD_CID }}
  122. FEEDBACK_ENDPOINT: ${{ secrets.FEEDBACK_ENDPOINT }}
  123. - name: Upload binaries
  124. uses: actions/upload-artifact@v2
  125. with:
  126. path: ./release
  127. name: binaries
  128. retention-days: 1
  129. notarize:
  130. name: Notarize Darwin binaries
  131. runs-on: macos-latest
  132. needs: build
  133. steps:
  134. - name: Get tag name
  135. id: tag_name
  136. run: |
  137. tag=${GITHUB_TAG/refs\/tags\//}
  138. echo ::set-output name=tag::$tag
  139. env:
  140. GITHUB_TAG: ${{ github.ref }}
  141. - name: Download binaries
  142. uses: actions/download-artifact@v2
  143. with:
  144. name: binaries
  145. path: release/
  146. - name: Unzip Darwin binaries
  147. run: |
  148. unzip ./release/darwin/UNSIGNED_porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  149. unzip ./release/darwin/UNSIGNED_portersvr_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  150. unzip ./release/darwin/UNSIGNED_docker-credential-porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  151. - name: Import Code-Signing Certificates
  152. uses: Apple-Actions/import-codesign-certs@v1
  153. with:
  154. # The certificates in a PKCS12 file encoded as a base64 string
  155. p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
  156. # The password used to import the PKCS12 file.
  157. p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
  158. - name: Install gon via HomeBrew for code signing and app notarization
  159. run: |
  160. brew tap mitchellh/gon
  161. brew install mitchellh/gon/gon
  162. - name: Create a porter.gon.json file
  163. run: |
  164. echo "
  165. {
  166. \"source\": [\"./porter\"],
  167. \"bundle_id\": \"cli.porter\",
  168. \"apple_id\": {
  169. \"password\": \"@env:AC_PASSWORD\"
  170. },
  171. \"sign\": {
  172. \"application_identity\": \"${{ secrets.AC_APPLICATION_IDENTITY }}\"
  173. },
  174. \"zip\": {
  175. \"output_path\": \"./release/darwin/porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip\"
  176. }
  177. }
  178. " > ./porter.gon.json
  179. - name: Create a portersvr.gon.json file
  180. run: |
  181. echo "
  182. {
  183. \"source\": [\"./portersvr\"],
  184. \"bundle_id\": \"cli.portersvr\",
  185. \"apple_id\": {
  186. \"password\": \"@env:AC_PASSWORD\"
  187. },
  188. \"sign\": {
  189. \"application_identity\": \"${{ secrets.AC_APPLICATION_IDENTITY }}\"
  190. },
  191. \"zip\": {
  192. \"output_path\": \"./release/darwin/portersvr_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip\"
  193. }
  194. }
  195. " > ./portersvr.gon.json
  196. - name: Create a docker-credential-porter.gon.json file
  197. run: |
  198. echo "
  199. {
  200. \"source\": [\"./docker-credential-porter\"],
  201. \"bundle_id\": \"cli.docker-credential-porter\",
  202. \"apple_id\": {
  203. \"password\": \"@env:AC_PASSWORD\"
  204. },
  205. \"sign\": {
  206. \"application_identity\": \"${{ secrets.AC_APPLICATION_IDENTITY }}\"
  207. },
  208. \"zip\": {
  209. \"output_path\": \"./release/darwin/docker-credential-porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip\"
  210. }
  211. }
  212. " > ./docker-credential-porter.gon.json
  213. - name: Sign the mac binaries with Gon
  214. env:
  215. AC_USERNAME: ${{ secrets.AC_USERNAME }}
  216. AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
  217. run: |
  218. gon ./porter.gon.json &
  219. gon ./portersvr.gon.json &
  220. gon ./docker-credential-porter.gon.json &
  221. wait
  222. - name: Upload binaries
  223. uses: actions/upload-artifact@v2
  224. with:
  225. path: ./release
  226. name: binaries
  227. retention-days: 1
  228. release:
  229. name: Zip binaries, create release and upload assets
  230. runs-on: ubuntu-latest
  231. needs: notarize
  232. steps:
  233. - name: Get tag name
  234. id: tag_name
  235. run: |
  236. tag=${GITHUB_TAG/refs\/tags\//}
  237. echo ::set-output name=tag::$tag
  238. env:
  239. GITHUB_TAG: ${{ github.ref }}
  240. - name: Download binaries
  241. uses: actions/download-artifact@v2
  242. with:
  243. name: binaries
  244. path: release/
  245. - name: Create Release
  246. id: create_release
  247. uses: actions/create-release@v1
  248. env:
  249. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  250. with:
  251. tag_name: ${{ github.ref }}
  252. release_name: Release ${{ github.ref }}
  253. draft: false
  254. prerelease: true
  255. - name: Upload Linux CLI Release Asset
  256. id: upload-linux-cli-release-asset
  257. uses: actions/upload-release-asset@v1
  258. env:
  259. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  260. GITHUB_TAG: ${{ github.ref }}
  261. with:
  262. upload_url: ${{ steps.create_release.outputs.upload_url }}
  263. asset_path: ./release/linux/porter_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip
  264. asset_name: porter_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip
  265. asset_content_type: application/zip
  266. - name: Upload Linux Server Release Asset
  267. id: upload-linux-server-release-asset
  268. uses: actions/upload-release-asset@v1
  269. env:
  270. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  271. GITHUB_TAG: ${{ github.ref }}
  272. with:
  273. upload_url: ${{ steps.create_release.outputs.upload_url }}
  274. asset_path: ./release/linux/portersvr_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip
  275. asset_name: portersvr_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip
  276. asset_content_type: application/zip
  277. - name: Upload Linux Docker Credential Release Asset
  278. id: upload-linux-docker-cred-release-asset
  279. uses: actions/upload-release-asset@v1
  280. env:
  281. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  282. GITHUB_TAG: ${{ github.ref }}
  283. with:
  284. upload_url: ${{ steps.create_release.outputs.upload_url }}
  285. asset_path: ./release/linux/docker-credential-porter_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip
  286. asset_name: docker-credential-porter_${{steps.tag_name.outputs.tag}}_Linux_x86_64.zip
  287. asset_content_type: application/zip
  288. - name: Upload Darwin CLI Release Asset
  289. id: upload-darwin-cli-release-asset
  290. uses: actions/upload-release-asset@v1
  291. env:
  292. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  293. GITHUB_TAG: ${{ github.ref }}
  294. with:
  295. upload_url: ${{ steps.create_release.outputs.upload_url }}
  296. asset_path: ./release/darwin/porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  297. asset_name: porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  298. asset_content_type: application/zip
  299. - name: Upload Darwin Server Release Asset
  300. id: upload-darwin-server-release-asset
  301. uses: actions/upload-release-asset@v1
  302. env:
  303. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  304. GITHUB_TAG: ${{ github.ref }}
  305. with:
  306. upload_url: ${{ steps.create_release.outputs.upload_url }}
  307. asset_path: ./release/darwin/portersvr_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  308. asset_name: portersvr_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  309. asset_content_type: application/zip
  310. - name: Upload Darwin Docker Credential Release Asset
  311. id: upload-darwin-docker-cred-release-asset
  312. uses: actions/upload-release-asset@v1
  313. env:
  314. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  315. GITHUB_TAG: ${{ github.ref }}
  316. with:
  317. upload_url: ${{ steps.create_release.outputs.upload_url }}
  318. asset_path: ./release/darwin/docker-credential-porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  319. asset_name: docker-credential-porter_${{steps.tag_name.outputs.tag}}_Darwin_x86_64.zip
  320. asset_content_type: application/zip
  321. - name: Upload Windows CLI Release Asset
  322. id: upload-windows-cli-release-asset
  323. uses: actions/upload-release-asset@v1
  324. env:
  325. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  326. GITHUB_TAG: ${{ github.ref }}
  327. with:
  328. upload_url: ${{ steps.create_release.outputs.upload_url }}
  329. asset_path: ./release/windows/porter_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip
  330. asset_name: porter_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip
  331. asset_content_type: application/zip
  332. - name: Upload Windows Server Release Asset
  333. id: upload-windows-server-release-asset
  334. uses: actions/upload-release-asset@v1
  335. env:
  336. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  337. GITHUB_TAG: ${{ github.ref }}
  338. with:
  339. upload_url: ${{ steps.create_release.outputs.upload_url }}
  340. asset_path: ./release/windows/portersvr_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip
  341. asset_name: portersvr_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip
  342. asset_content_type: application/zip
  343. - name: Upload Windows Docker Credential Release Asset
  344. id: upload-windows-docker-cred-release-asset
  345. uses: actions/upload-release-asset@v1
  346. env:
  347. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  348. GITHUB_TAG: ${{ github.ref }}
  349. with:
  350. upload_url: ${{ steps.create_release.outputs.upload_url }}
  351. asset_path: ./release/windows/docker-credential-porter_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip
  352. asset_name: docker-credential-porter_${{steps.tag_name.outputs.tag}}_Windows_x86_64.zip
  353. asset_content_type: application/zip
  354. - name: Upload Static Release Asset
  355. id: upload-static-release-asset
  356. uses: actions/upload-release-asset@v1
  357. env:
  358. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  359. GITHUB_TAG: ${{ github.ref }}
  360. with:
  361. upload_url: ${{ steps.create_release.outputs.upload_url }}
  362. asset_path: ./release/static/static_${{steps.tag_name.outputs.tag}}.zip
  363. asset_name: static_${{steps.tag_name.outputs.tag}}.zip
  364. asset_content_type: application/zip