Tiltfile 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. load('ext://helm_resource', 'helm_resource', 'helm_repo')
  2. load('ext://restart_process', 'docker_build_with_restart')
  3. # WARNING: this allows any k8s context for deployment
  4. #allow_k8s_contexts(k8s_context())
  5. # To allow a specific context for deployment:
  6. # allow_k8s_contexts('kubectl-context')
  7. # See https://docs.tilt.dev/api.html#api.allow_k8s_contexts for default allowed contexts
  8. config.define_string('arch', args=False, usage='amd64')
  9. config.define_string('docker-repo', args=False, usage='')
  10. cfg = config.parse()
  11. arch = cfg.get('arch')
  12. docker_platform = "linux/amd64"
  13. go_arch = "amd64"
  14. if arch == "arm64":
  15. docker_platform = "linux/aarch64"
  16. go_arch = "arm64"
  17. docker_repo = cfg.get('docker-repo')
  18. if docker_repo == None:
  19. docker_repo = ''
  20. else:
  21. docker_repo = docker_repo + "/"
  22. # Build and update opencost back end binary when code changes
  23. local_resource(
  24. name='build-costmodel',
  25. dir='.',
  26. cmd='CGO_ENABLED=0 GOOS=linux GOARCH='+go_arch+' go build -o ./cmd/costmodel/costmodel-tilt ./cmd/costmodel/main.go',
  27. deps=[
  28. './cmd/costmodel/main.go',
  29. './pkg',
  30. ],
  31. allow_parallel=True,
  32. resource_deps=['build-go-mod-download'],
  33. )
  34. # Build back end docker container
  35. # If the binary is updated, update the running container and restart binary in dlv
  36. docker_build_with_restart(
  37. ref=docker_repo+'opencost-costmodel',
  38. context='.',
  39. # remove --continue flag to make dlv wait until debugger is attached to start
  40. entrypoint='/go/bin/dlv exec --listen=:40000 --api-version=2 --headless=true --accept-multiclient --log --continue /app/main',
  41. dockerfile='Dockerfile.debug',
  42. platform=docker_platform,
  43. build_args={'binary_path':'./cmd/costmodel/costmodel-tilt'},
  44. only=[
  45. 'cmd/costmodel/costmodel-tilt',
  46. 'configs',
  47. ],
  48. live_update=[
  49. sync('./cmd/costmodel/costmodel-tilt', '/app/main'),
  50. ],
  51. )
  52. # npm install if package.json changes
  53. local_resource(
  54. name='build-npm-install',
  55. dir='./ui',
  56. cmd='npm install',
  57. deps=[
  58. './ui/package.json',
  59. ],
  60. allow_parallel=True,
  61. )
  62. # Build FE locally when code changes
  63. local_resource(
  64. name='build-ui',
  65. dir='./ui',
  66. cmd='npx parcel build src/index.html',
  67. deps=[
  68. './ui/src',
  69. './ui/package.json',
  70. ],
  71. allow_parallel=True,
  72. resource_deps=['build-npm-install'],
  73. )
  74. # update container when relevant files change
  75. docker_build(
  76. ref=docker_repo+'opencost-ui',
  77. context='./ui',
  78. dockerfile='./ui/Dockerfile.cross',
  79. only=[
  80. 'dist',
  81. 'nginx.conf',
  82. 'default.nginx.conf',
  83. 'docker-entrypoint.sh',
  84. ],
  85. live_update=[
  86. sync('./ui/dist', '/var/www'),
  87. ],
  88. )
  89. # build yaml for deployment to k8s
  90. yaml = helm(
  91. '../opencost-helm-chart/charts/opencost',
  92. name='opencost',
  93. values=['./tilt-values.yaml'],
  94. # configuring opencost to also use the kubecost prometheus server below
  95. set=[
  96. 'opencost.ui.image.fullImageName='+docker_repo+'opencost-ui',
  97. 'opencost.exporter.image.fullImageName='+docker_repo+'opencost-costmodel',
  98. 'opencost.prometheus.internal.namespaceName='+k8s_namespace(),
  99. ]
  100. )
  101. k8s_yaml(yaml) # put resulting yaml into k8s
  102. k8s_resource(workload='opencost', port_forwards=['9003:9003','9090:9090','40000:40000'])
  103. helm_resource(
  104. name='prometheus',
  105. chart='prometheus-community/prometheus')
  106. k8s_resource(workload='prometheus', port_forwards=['9080:9090'])
  107. local_resource(
  108. name='costmodel-test',
  109. dir='.',
  110. cmd='go test ./...',
  111. deps=[
  112. './pkg',
  113. ],
  114. allow_parallel=True,
  115. resource_deps=['opencost'], # run tests after build to speed up deployment
  116. )