create-svc 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +138 -16
  2. package/bin/create-service.mjs +2 -0
  3. package/package.json +19 -11
  4. package/src/cli.test.ts +46 -7
  5. package/src/cli.ts +282 -84
  6. package/src/git-bootstrap.test.ts +40 -0
  7. package/src/git-bootstrap.ts +110 -0
  8. package/src/naming.test.ts +5 -2
  9. package/src/naming.ts +32 -1
  10. package/src/neon.ts +10 -8
  11. package/src/post-scaffold.test.ts +19 -0
  12. package/src/post-scaffold.ts +18 -26
  13. package/src/profiles.ts +25 -0
  14. package/src/scaffold.test.ts +320 -18
  15. package/src/scaffold.ts +154 -28
  16. package/src/vault.test.ts +94 -10
  17. package/src/vault.ts +81 -18
  18. package/templates/shared/.github/workflows/ci.yml +2 -1
  19. package/templates/shared/.github/workflows/deploy.yml +2 -0
  20. package/templates/shared/README.md +217 -29
  21. package/templates/shared/docker-compose.yml +19 -0
  22. package/templates/shared/grafana/alerts.yaml +54 -0
  23. package/templates/shared/grafana/waitlist-dashboard.json +63 -0
  24. package/templates/shared/scripts/authctl.ts +231 -0
  25. package/templates/shared/scripts/cloudrun/bootstrap.ts +24 -42
  26. package/templates/shared/scripts/cloudrun/cleanup.ts +81 -35
  27. package/templates/shared/scripts/cloudrun/cli.ts +324 -7
  28. package/templates/shared/scripts/cloudrun/config.ts +21 -19
  29. package/templates/shared/scripts/cloudrun/deploy.ts +16 -11
  30. package/templates/shared/scripts/cloudrun/lib.ts +232 -123
  31. package/templates/shared/scripts/cloudrun/neon.ts +127 -13
  32. package/templates/shared/scripts/dev.ts +22 -0
  33. package/templates/shared/scripts/ensure-local-db.ts +3 -0
  34. package/templates/shared/scripts/local-docker.ts +63 -0
  35. package/templates/shared/scripts/local-env.ts +27 -0
  36. package/templates/shared/scripts/seed.ts +73 -0
  37. package/templates/shared/scripts/wait-for-db.ts +32 -0
  38. package/templates/shared/service.config.ts +59 -0
  39. package/templates/shared/service.yaml +24 -1
  40. package/templates/targets/workers/.github/workflows/ci.yml +19 -0
  41. package/templates/targets/workers/.github/workflows/deploy.yml +19 -0
  42. package/templates/targets/workers/Makefile +33 -0
  43. package/templates/targets/workers/README.md +75 -0
  44. package/templates/targets/workers/package.json +35 -0
  45. package/templates/targets/workers/scripts/workers/cli.ts +397 -0
  46. package/templates/targets/workers/src/auth.ts +178 -0
  47. package/templates/targets/workers/src/index.ts +198 -0
  48. package/templates/targets/workers/src/storage.ts +370 -0
  49. package/templates/targets/workers/test/app.test.ts +108 -0
  50. package/templates/targets/workers/tsconfig.json +11 -0
  51. package/templates/targets/workers/wrangler.toml +24 -0
  52. package/templates/variants/bun-connectrpc/Dockerfile +1 -0
  53. package/templates/variants/bun-connectrpc/Makefile +17 -8
  54. package/templates/variants/bun-connectrpc/gen/protos/waitlist/v1/waitlist_pb.ts +424 -0
  55. package/templates/variants/bun-connectrpc/migrations/0000_init.sql +20 -0
  56. package/templates/variants/bun-connectrpc/package.json +25 -1
  57. package/templates/variants/bun-connectrpc/protos/waitlist/v1/waitlist.proto +91 -0
  58. package/templates/variants/bun-connectrpc/scripts/codegen.ts +31 -1
  59. package/templates/variants/bun-connectrpc/scripts/migrate.ts +49 -0
  60. package/templates/variants/bun-connectrpc/src/auth.ts +200 -0
  61. package/templates/variants/bun-connectrpc/src/db/client.ts +15 -0
  62. package/templates/variants/bun-connectrpc/src/db/repository.ts +126 -0
  63. package/templates/variants/bun-connectrpc/src/db/schema.ts +26 -0
  64. package/templates/variants/bun-connectrpc/src/index.ts +194 -22
  65. package/templates/variants/bun-connectrpc/src/temporal/activities.ts +14 -0
  66. package/templates/variants/bun-connectrpc/src/temporal/worker.ts +38 -0
  67. package/templates/variants/bun-connectrpc/src/temporal/workflows.ts +10 -0
  68. package/templates/variants/bun-connectrpc/src/waitlist/service.ts +172 -0
  69. package/templates/variants/bun-connectrpc/src/waitlist/types.ts +45 -0
  70. package/templates/variants/bun-connectrpc/test/app.test.ts +14 -13
  71. package/templates/variants/bun-connectrpc/test/waitlist.integration.test.ts +71 -0
  72. package/templates/variants/bun-connectrpc/tsconfig.json +2 -1
  73. package/templates/variants/bun-hono/Makefile +17 -8
  74. package/templates/variants/bun-hono/migrations/0000_init.sql +20 -0
  75. package/templates/variants/bun-hono/package.json +21 -1
  76. package/templates/variants/bun-hono/scripts/migrate.ts +49 -0
  77. package/templates/variants/bun-hono/src/auth.ts +181 -0
  78. package/templates/variants/bun-hono/src/db/client.ts +15 -0
  79. package/templates/variants/bun-hono/src/db/repository.ts +126 -0
  80. package/templates/variants/bun-hono/src/db/schema.ts +26 -0
  81. package/templates/variants/bun-hono/src/index.ts +141 -10
  82. package/templates/variants/bun-hono/src/temporal/activities.ts +14 -0
  83. package/templates/variants/bun-hono/src/temporal/worker.ts +38 -0
  84. package/templates/variants/bun-hono/src/temporal/workflows.ts +10 -0
  85. package/templates/variants/bun-hono/src/waitlist/service.ts +166 -0
  86. package/templates/variants/bun-hono/src/waitlist/types.ts +50 -0
  87. package/templates/variants/bun-hono/test/app.test.ts +90 -5
  88. package/templates/variants/bun-hono/test/waitlist.integration.test.ts +102 -0
  89. package/templates/variants/bun-hono/tsconfig.json +1 -0
  90. package/templates/variants/go-chi/Makefile +30 -10
  91. package/templates/variants/go-chi/atlas.hcl +8 -0
  92. package/templates/variants/go-chi/cmd/server/main.go +25 -13
  93. package/templates/variants/go-chi/go.mod +3 -2
  94. package/templates/variants/go-chi/internal/app/service.go +279 -70
  95. package/templates/variants/go-chi/internal/auth/middleware.go +289 -0
  96. package/templates/variants/go-chi/internal/auth/middleware_test.go +38 -0
  97. package/templates/variants/go-chi/internal/config/config.go +38 -7
  98. package/templates/variants/go-chi/internal/httpapi/routes.go +170 -47
  99. package/templates/variants/go-chi/internal/httpapi/waitlist_integration_test.go +199 -0
  100. package/templates/variants/go-chi/internal/temporal/activities.go +27 -0
  101. package/templates/variants/go-chi/internal/temporal/worker.go +42 -0
  102. package/templates/variants/go-chi/internal/temporal/workflows.go +18 -0
  103. package/templates/variants/go-chi/migrations/0000_init.sql +20 -0
  104. package/templates/variants/go-chi/migrations/atlas.sum +2 -0
  105. package/templates/variants/go-chi/package.json +7 -1
  106. package/templates/variants/go-chi/test/go.test.ts +4 -1
  107. package/templates/variants/go-connectrpc/Makefile +29 -8
  108. package/templates/variants/go-connectrpc/atlas.hcl +8 -0
  109. package/templates/variants/go-connectrpc/buf.gen.yaml +2 -0
  110. package/templates/variants/go-connectrpc/cmd/server/main.go +44 -9
  111. package/templates/variants/go-connectrpc/gen/waitlist/v1/waitlist.pb.go +960 -0
  112. package/templates/variants/go-connectrpc/gen/waitlist/v1/waitlistv1connect/waitlist.connect.go +283 -0
  113. package/templates/variants/go-connectrpc/go.mod +4 -0
  114. package/templates/variants/go-connectrpc/internal/app/service.go +279 -70
  115. package/templates/variants/go-connectrpc/internal/auth/middleware.go +289 -0
  116. package/templates/variants/go-connectrpc/internal/auth/middleware_test.go +38 -0
  117. package/templates/variants/go-connectrpc/internal/config/config.go +38 -7
  118. package/templates/variants/go-connectrpc/internal/connectapi/handler.go +129 -40
  119. package/templates/variants/go-connectrpc/internal/connectapi/waitlist_integration_test.go +122 -0
  120. package/templates/variants/go-connectrpc/internal/httpapi/routes.go +170 -47
  121. package/templates/variants/go-connectrpc/internal/temporal/activities.go +27 -0
  122. package/templates/variants/go-connectrpc/internal/temporal/worker.go +42 -0
  123. package/templates/variants/go-connectrpc/internal/temporal/workflows.go +18 -0
  124. package/templates/variants/go-connectrpc/migrations/0000_init.sql +20 -0
  125. package/templates/variants/go-connectrpc/migrations/atlas.sum +2 -0
  126. package/templates/variants/go-connectrpc/package.json +7 -1
  127. package/templates/variants/go-connectrpc/protos/waitlist/v1/waitlist.proto +93 -0
  128. package/templates/root/.github/workflows/buf-publish.yml +0 -19
  129. package/templates/root/.github/workflows/ci.yml +0 -26
  130. package/templates/root/.github/workflows/deploy.yml +0 -22
  131. package/templates/root/Dockerfile +0 -23
  132. package/templates/root/README.md +0 -69
  133. package/templates/root/buf.gen.yaml +0 -10
  134. package/templates/root/buf.yaml +0 -9
  135. package/templates/root/cmd/server/main.go +0 -44
  136. package/templates/root/gen/dns/v1/dns.pb.go +0 -623
  137. package/templates/root/gen/dns/v1/dnsv1connect/dns.connect.go +0 -192
  138. package/templates/root/go.mod +0 -10
  139. package/templates/root/internal/app/service.go +0 -152
  140. package/templates/root/internal/app/token_source.go +0 -50
  141. package/templates/root/internal/cloudflare/client.go +0 -160
  142. package/templates/root/internal/config/config.go +0 -55
  143. package/templates/root/internal/connectapi/handler.go +0 -79
  144. package/templates/root/internal/httpapi/routes.go +0 -93
  145. package/templates/root/internal/vault/client.go +0 -148
  146. package/templates/root/package.json +0 -12
  147. package/templates/root/protos/dns/v1/dns.proto +0 -58
  148. package/templates/root/scripts/cloudrun/bootstrap.ts +0 -65
  149. package/templates/root/scripts/cloudrun/config.ts +0 -50
  150. package/templates/root/scripts/cloudrun/deploy.ts +0 -41
  151. package/templates/root/scripts/cloudrun/lib.ts +0 -244
  152. package/templates/root/service.yaml +0 -50
  153. package/templates/root/test/go.test.ts +0 -19
  154. package/templates/shared/.env.example +0 -10
  155. package/templates/variants/go-chi/buf.gen.yaml +0 -10
  156. package/templates/variants/go-chi/buf.yaml +0 -9
  157. package/templates/variants/go-chi/gen/dns/v1/dns.pb.go +0 -623
  158. package/templates/variants/go-chi/gen/dns/v1/dnsv1connect/dns.connect.go +0 -192
  159. package/templates/variants/go-chi/internal/connectapi/handler.go +0 -79
  160. package/templates/variants/go-chi/protos/dns/v1/dns.proto +0 -58
  161. package/templates/variants/go-connectrpc/gen/dns/v1/dns.pb.go +0 -623
  162. package/templates/variants/go-connectrpc/gen/dns/v1/dnsv1connect/dns.connect.go +0 -192
  163. package/templates/variants/go-connectrpc/protos/dns/v1/dns.proto +0 -58
@@ -1,9 +1,21 @@
1
- .PHONY: dev gen lint test bootstrap deploy cleanup
1
+ .PHONY: dev migrate migrate-lint gen lint test create deploy dashboards auth destroy
2
2
 
3
- CLOUDRUN := npx --no-install svc-cloudrun
3
+ SERVICE := npx --no-install service
4
+ WITH_ENV := set -a; [ ! -f .env.local ] || . ./.env.local; set +a;
5
+ ATLAS ?= atlas
4
6
 
5
7
  dev:
6
- go run ./cmd/server
8
+ @bun run ./scripts/dev.ts go run ./cmd/server
9
+
10
+ migrate:
11
+ @bun run ./scripts/ensure-local-db.ts
12
+ @bun run ./scripts/wait-for-db.ts
13
+ @$(WITH_ENV) $(ATLAS) migrate apply --env local
14
+
15
+ migrate-lint:
16
+ @bun run ./scripts/ensure-local-db.ts
17
+ @bun run ./scripts/wait-for-db.ts
18
+ @$(WITH_ENV) $(ATLAS) migrate lint --env local --latest 1
7
19
 
8
20
  gen:
9
21
  buf generate
@@ -11,15 +23,24 @@ gen:
11
23
  lint:
12
24
  go vet ./...
13
25
  buf lint
26
+ @bun run ./scripts/ensure-local-db.ts
27
+ @bun run ./scripts/wait-for-db.ts
28
+ @$(WITH_ENV) $(ATLAS) migrate lint --env local --latest 1
14
29
 
15
30
  test:
16
31
  bun test ./test
17
32
 
18
- bootstrap:
19
- $(CLOUDRUN) bootstrap
33
+ create:
34
+ $(SERVICE) create
20
35
 
21
36
  deploy:
22
- $(CLOUDRUN) deploy $(ARGS)
37
+ $(SERVICE) deploy $(ARGS)
38
+
39
+ dashboards:
40
+ $(SERVICE) dashboards
41
+
42
+ auth:
43
+ $(SERVICE) auth $(ARGS)
23
44
 
24
- cleanup:
25
- $(CLOUDRUN) cleanup $(ARGS)
45
+ destroy:
46
+ $(SERVICE) destroy $(ARGS)
@@ -0,0 +1,8 @@
1
+ env "local" {
2
+ url = getenv("DATABASE_URL")
3
+ dev = "docker://postgres/16/dev?search_path=public"
4
+
5
+ migration {
6
+ dir = "file://migrations"
7
+ }
8
+ }
@@ -4,7 +4,9 @@ plugins:
4
4
  out: gen
5
5
  opt:
6
6
  - paths=source_relative
7
+ - Mwaitlist/v1/waitlist.proto={{MODULE_PATH}}/gen/waitlist/v1
7
8
  - local: protoc-gen-connect-go
8
9
  out: gen
9
10
  opt:
10
11
  - paths=source_relative
12
+ - Mwaitlist/v1/waitlist.proto={{MODULE_PATH}}/gen/waitlist/v1
@@ -4,16 +4,23 @@ import (
4
4
  "context"
5
5
  "log"
6
6
  "net/http"
7
+ "os"
8
+ "strings"
7
9
  "time"
8
10
 
11
+ "connectrpc.com/grpcreflect"
9
12
  "github.com/go-chi/chi/v5"
13
+ _ "github.com/jackc/pgx/v5/stdlib"
10
14
  "golang.org/x/net/http2"
11
15
  "golang.org/x/net/http2/h2c"
12
16
 
17
+ waitlistv1connect "{{MODULE_PATH}}/gen/waitlist/v1/waitlistv1connect"
13
18
  "{{MODULE_PATH}}/internal/app"
19
+ "{{MODULE_PATH}}/internal/auth"
14
20
  "{{MODULE_PATH}}/internal/config"
15
21
  "{{MODULE_PATH}}/internal/connectapi"
16
22
  "{{MODULE_PATH}}/internal/httpapi"
23
+ temporalapp "{{MODULE_PATH}}/internal/temporal"
17
24
  )
18
25
 
19
26
  func main() {
@@ -22,24 +29,44 @@ func main() {
22
29
  log.Fatal(err)
23
30
  }
24
31
 
25
- service := app.NewDNSService()
26
- if cfg.DatabaseURL != "" {
27
- if _, err := service.CreateRecord(context.Background(), app.CreateRecordInput{
28
- Type: "TXT",
29
- Name: "bootstrap",
30
- Content: "database-configured",
31
- TTL: 60,
32
- Proxied: false,
33
- }); err != nil {
32
+ db, err := app.OpenDatabase(context.Background(), cfg.DatabaseURL)
33
+ if err != nil {
34
+ log.Fatal(err)
35
+ }
36
+ service := app.NewWaitlistService(db)
37
+ if cfg.TemporalEnabled {
38
+ stopTemporal, err := temporalapp.StartWorker(temporalapp.WorkerConfig{
39
+ Address: cfg.TemporalAddress,
40
+ Namespace: cfg.TemporalNamespace,
41
+ TaskQueue: cfg.TemporalTaskQueue,
42
+ APIKey: cfg.TemporalAPIKey,
43
+ })
44
+ if err != nil {
34
45
  log.Fatal(err)
35
46
  }
47
+ defer stopTemporal()
48
+ log.Printf("Temporal worker polling %s", cfg.TemporalTaskQueue)
36
49
  }
37
50
 
38
51
  router := chi.NewRouter()
52
+ router.Use(auth.Middleware(auth.Config{
53
+ Enabled: cfg.AuthEnabled,
54
+ Issuer: cfg.AuthIssuer,
55
+ Audience: cfg.AuthAudience,
56
+ JWKSURL: cfg.AuthJWKSURL,
57
+ }))
39
58
  connectPath, connectHandler := connectapi.NewHandler(service)
40
59
  router.Mount(connectPath, connectHandler)
41
60
  httpapi.RegisterRoutes(router, service)
42
61
 
62
+ if localRPCIntrospectionEnabled() {
63
+ reflector := grpcreflect.NewStaticReflector(waitlistv1connect.WaitlistServiceName)
64
+ reflectionV1Path, reflectionV1Handler := grpcreflect.NewHandlerV1(reflector)
65
+ reflectionV1AlphaPath, reflectionV1AlphaHandler := grpcreflect.NewHandlerV1Alpha(reflector)
66
+ router.Mount(reflectionV1Path, reflectionV1Handler)
67
+ router.Mount(reflectionV1AlphaPath, reflectionV1AlphaHandler)
68
+ }
69
+
43
70
  server := &http.Server{
44
71
  Addr: ":" + cfg.Port,
45
72
  ReadHeaderTimeout: 10 * time.Second,
@@ -49,3 +76,11 @@ func main() {
49
76
  log.Printf("listening on %s", server.Addr)
50
77
  log.Fatal(server.ListenAndServe())
51
78
  }
79
+
80
+ func localRPCIntrospectionEnabled() bool {
81
+ override := strings.TrimSpace(strings.ToLower(os.Getenv("ENABLE_RPC_INTROSPECTION")))
82
+ if override != "" {
83
+ return override != "0" && override != "false" && override != "no" && override != "off"
84
+ }
85
+ return os.Getenv("K_SERVICE") == ""
86
+ }