steps.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package actions
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. )
  6. func getCheckoutCodeStep() GithubActionYAMLStep {
  7. return GithubActionYAMLStep{
  8. Name: "Checkout code",
  9. Uses: "actions/checkout@v2.3.4",
  10. }
  11. }
  12. const download string = `
  13. name=$(curl -s https://api.github.com/repos/porter-dev/porter/releases/latest | grep "browser_download_url.*/porter_.*_Linux_x86_64\.zip" | cut -d ":" -f 2,3 | tr -d \")
  14. name=$(basename $name)
  15. curl -L https://github.com/porter-dev/porter/releases/latest/download/$name --output $name
  16. unzip -a $name
  17. rm $name
  18. chmod +x ./porter
  19. sudo mv ./porter /usr/local/bin/porter
  20. `
  21. func getDownloadPorterStep() GithubActionYAMLStep {
  22. return GithubActionYAMLStep{
  23. Name: "Download Porter",
  24. ID: "download_porter",
  25. Run: download,
  26. }
  27. }
  28. const configure string = `
  29. sudo porter config set-host %s
  30. sudo porter auth login --token ${{secrets.%s}}
  31. sudo porter docker configure
  32. `
  33. func getConfigurePorterStep(serverURL, porterTokenSecretName string) GithubActionYAMLStep {
  34. return GithubActionYAMLStep{
  35. Name: "Configure Porter",
  36. ID: "configure_porter",
  37. Run: fmt.Sprintf(configure, serverURL, porterTokenSecretName),
  38. }
  39. }
  40. const dockerBuildPush string = `
  41. export $(echo "${{secrets.%s}}" | xargs)
  42. echo "${{secrets.%s}}" > ./env_porter
  43. sudo docker build %s $(cat ./env_porter | awk 'NF' | sed 's@^@--build-arg @g' | paste -s -d " " -) --file %s -t %s:$(git rev-parse --short HEAD)
  44. sudo docker push %s:$(git rev-parse --short HEAD)
  45. `
  46. func getDockerBuildPushStep(envSecretName, dockerFilePath, repoURL string) GithubActionYAMLStep {
  47. return GithubActionYAMLStep{
  48. Name: "Docker build, push",
  49. ID: "docker_build_push",
  50. Run: fmt.Sprintf(dockerBuildPush, envSecretName, envSecretName, filepath.Dir(dockerFilePath), dockerFilePath, repoURL, repoURL),
  51. }
  52. }
  53. const buildPackPush string = `
  54. export $(echo "${{secrets.%s}}" | xargs)
  55. echo "${{secrets.%s}}" > ./env_porter
  56. sudo add-apt-repository ppa:cncf-buildpacks/pack-cli
  57. sudo apt-get update
  58. sudo apt-get install pack-cli
  59. sudo pack build %s:$(git rev-parse --short HEAD) --path %s --builder heroku/buildpacks:18 --env-file ./env_porter
  60. sudo docker push %s:$(git rev-parse --short HEAD)
  61. `
  62. func getBuildPackPushStep(envSecretName, folderPath, repoURL string) GithubActionYAMLStep {
  63. return GithubActionYAMLStep{
  64. Name: "Docker build, push",
  65. ID: "docker_build_push",
  66. Run: fmt.Sprintf(buildPackPush, envSecretName, envSecretName, repoURL, folderPath, repoURL),
  67. }
  68. }
  69. const deployPorter string = `
  70. curl -X POST "%s/api/webhooks/deploy/${{secrets.%s}}?commit=$(git rev-parse --short HEAD)"
  71. `
  72. func deployPorterWebhookStep(serverURL, webhookTokenSecretName string) GithubActionYAMLStep {
  73. return GithubActionYAMLStep{
  74. Name: "Deploy on Porter",
  75. ID: "deploy_porter",
  76. Run: fmt.Sprintf(deployPorter, serverURL, webhookTokenSecretName),
  77. }
  78. }