release.yaml 16 KB

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