release.yaml 16 KB

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