Tiltfile 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. load('ext://restart_process', 'docker_build_with_restart')
  2. secret_settings(disable_scrub=True)
  3. if not os.path.exists("vendor"):
  4. local(command="go mod vendor")
  5. if config.tilt_subcommand == "up":
  6. local(command="cd dashboard; npm i --legacy-peer-deps")
  7. if config.tilt_subcommand == "down":
  8. local(command="rm -rf vendor")
  9. local(command="rm -rf dashboard/node_modules")
  10. build_args = "GOOS=linux GOARCH=arm64"
  11. if os.getenv("PLATFORM") == "amd64":
  12. build_args = "GOOS=linux GOARCH=amd64"
  13. ## Build binary locally for faster devexp
  14. local_resource(
  15. name='porter-binary',
  16. cmd='''GOWORK=off CGO_ENABLED=0 %s go build -mod vendor -gcflags '-N -l' -tags ee -o ./bin/porter ./cmd/app/main.go''' % build_args,
  17. deps=[
  18. "api",
  19. "build",
  20. "cli",
  21. "ee",
  22. "internal",
  23. "pkg",
  24. ],
  25. resource_deps=["postgresql"],
  26. labels=["porter"]
  27. )
  28. docker_build_with_restart(
  29. ref="porter1/porter-server",
  30. context=".",
  31. dockerfile="zarf/docker/Dockerfile.server.tilt",
  32. # entrypoint='dlv --listen=:40000 --api-version=2 --headless=true --log=true exec /porter/bin/app',
  33. entrypoint='/app/porter',
  34. build_args={},
  35. only=[
  36. "bin",
  37. ],
  38. live_update=[
  39. sync('./bin/porter', '/app/'),
  40. sync('./bin/migrate', '/app/'),
  41. ],
  42. )
  43. # Frontend
  44. local_resource(
  45. name="porter-dashboard",
  46. serve_cmd="npm start",
  47. serve_dir="dashboard",
  48. serve_env={
  49. "NODE_ENV": "development",
  50. "DEV_SERVER_PORT": "8081",
  51. "ENABLE_PROXY": "true",
  52. "API_SERVER": "http://localhost:8080"
  53. },
  54. resource_deps=["postgresql"],
  55. labels=["porter"]
  56. )
  57. # local_resource('public-url', serve_cmd='lt --subdomain "$(whoami)" --port 8080', resource_deps=["porter-dashboard"], labels=["porter"])
  58. # local_resource('public-url', serve_cmd='ngrok http 8081 --log=stdout', resource_deps=["porter-dashboard"], labels=["porter"])
  59. # Migrations
  60. local_resource(
  61. name="migrations-binary",
  62. cmd='''GOWORK=off CGO_ENABLED=0 %s go build -mod vendor -gcflags '-N -l' -tags ee -o ./bin/migrate ./cmd/migrate/main.go ./cmd/migrate/migrate_ee.go''' % build_args,
  63. resource_deps=["postgresql"],
  64. labels=["porter"],
  65. )
  66. local_resource(
  67. name="run-migrations",
  68. cmd='''kubectl exec -it deploy/porter-server-web -- /app/migrate''',
  69. resource_deps=["migrations-binary", "porter-binary"],
  70. labels=["porter"],
  71. trigger_mode=TRIGGER_MODE_MANUAL,
  72. )
  73. # Config
  74. local_resource(
  75. name="reload-config",
  76. cmd='''kubectl rollout restart deploy/porter-server-web''',
  77. resource_deps=["zarf/helm"],
  78. labels=["porter"],
  79. trigger_mode=TRIGGER_MODE_MANUAL,
  80. )
  81. allow_k8s_contexts('kind-porter')
  82. cluster = str(local('kubectl config current-context')).strip()
  83. if (cluster.startswith("kind-")):
  84. install = kustomize('zarf/helm', flags=["--enable-helm"])
  85. decoded = decode_yaml_stream(install)
  86. for d in decoded:
  87. if d.get('kind') == 'Deployment':
  88. if "securityContext" in d['spec']['template']['spec']:
  89. d['spec']['template']['spec'].pop('securityContext')
  90. for c in d['spec']['template']['spec']['containers']:
  91. if "securityContext" in c:
  92. c.pop('securityContext')
  93. updated_install = encode_yaml_stream(decoded)
  94. k8s_yaml(updated_install)
  95. k8s_resource(workload='porter-server-web', port_forwards="8080:8080", labels=["porter"])
  96. else:
  97. local("echo 'Be careful that you aren't connected to a staging or prod cluster' && exit 1")
  98. exit()