@ackee/create-node-app 1.0.0

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 (104) hide show
  1. package/.eslintrc.cjs +10 -0
  2. package/AUTHORS +3 -0
  3. package/LICENSE.txt +22 -0
  4. package/README.md +39 -0
  5. package/bin/create-node-app.js +6 -0
  6. package/lib/Bootstrap.js +79 -0
  7. package/lib/Bootstrap.js.map +1 -0
  8. package/lib/Logger.js +12 -0
  9. package/lib/Logger.js.map +1 -0
  10. package/lib/Npm.js +33 -0
  11. package/lib/Npm.js.map +1 -0
  12. package/lib/PackageJson.js +39 -0
  13. package/lib/PackageJson.js.map +1 -0
  14. package/lib/Starter.js +2 -0
  15. package/lib/Starter.js.map +1 -0
  16. package/lib/Toolbelt.js +102 -0
  17. package/lib/Toolbelt.js.map +1 -0
  18. package/lib/cloudrun/CloudRunStarter.js +126 -0
  19. package/lib/cloudrun/CloudRunStarter.js.map +1 -0
  20. package/lib/cloudrun-graphql/GraphQLStarter.js +118 -0
  21. package/lib/cloudrun-graphql/GraphQLStarter.js.map +1 -0
  22. package/lib/types.js +2 -0
  23. package/lib/types.js.map +1 -0
  24. package/logo.png +0 -0
  25. package/package.json +42 -0
  26. package/prettier.config.cjs +1 -0
  27. package/src/Bootstrap.ts +99 -0
  28. package/src/Logger.ts +11 -0
  29. package/src/Npm.ts +38 -0
  30. package/src/PackageJson.ts +47 -0
  31. package/src/Starter.ts +7 -0
  32. package/src/Toolbelt.ts +132 -0
  33. package/src/cloudrun/CloudRunStarter.ts +181 -0
  34. package/src/cloudrun-graphql/GraphQLStarter.ts +182 -0
  35. package/src/types.ts +1 -0
  36. package/starter/cloudrun/.env.jsonc +10 -0
  37. package/starter/cloudrun/.eslint.tsconfig.json +4 -0
  38. package/starter/cloudrun/.eslintrc.cjs +8 -0
  39. package/starter/cloudrun/README.md +69 -0
  40. package/starter/cloudrun/src/adapters/pino.logger.ts +44 -0
  41. package/starter/cloudrun/src/config.ts +22 -0
  42. package/starter/cloudrun/src/container.ts +18 -0
  43. package/starter/cloudrun/src/context.ts +39 -0
  44. package/starter/cloudrun/src/domain/errors/codes.ts +9 -0
  45. package/starter/cloudrun/src/domain/errors/errors.ts +25 -0
  46. package/starter/cloudrun/src/domain/health-check.service.ts +15 -0
  47. package/starter/cloudrun/src/domain/ports/logger.d.ts +21 -0
  48. package/starter/cloudrun/src/index.ts +17 -0
  49. package/starter/cloudrun/src/test/health-check.test.ts +25 -0
  50. package/starter/cloudrun/src/test/util/openapi-test.util.ts +71 -0
  51. package/starter/cloudrun/src/view/cli/README.md +17 -0
  52. package/starter/cloudrun/src/view/cli/cli.ts +94 -0
  53. package/starter/cloudrun/src/view/cli/openapi/generate.ts +64 -0
  54. package/starter/cloudrun/src/view/rest/controller/health-check.controller.ts +33 -0
  55. package/starter/cloudrun/src/view/rest/middleware/context-middleware.ts +28 -0
  56. package/starter/cloudrun/src/view/rest/middleware/error-handler.ts +60 -0
  57. package/starter/cloudrun/src/view/rest/middleware/request-logger.ts +37 -0
  58. package/starter/cloudrun/src/view/rest/request.d.ts +9 -0
  59. package/starter/cloudrun/src/view/rest/routes.ts +15 -0
  60. package/starter/cloudrun/src/view/rest/spec/openapi.yml +65 -0
  61. package/starter/cloudrun/src/view/rest/util/openapi.util.ts +310 -0
  62. package/starter/cloudrun/src/view/server.ts +25 -0
  63. package/starter/cloudrun-graphql/.env.jsonc +12 -0
  64. package/starter/cloudrun-graphql/.eslint.tsconfig.json +4 -0
  65. package/starter/cloudrun-graphql/.eslintrc.cjs +43 -0
  66. package/starter/cloudrun-graphql/README.md +53 -0
  67. package/starter/cloudrun-graphql/codegen.yml +11 -0
  68. package/starter/cloudrun-graphql/src/adapters/pino.logger.ts +44 -0
  69. package/starter/cloudrun-graphql/src/config.ts +21 -0
  70. package/starter/cloudrun-graphql/src/container.ts +15 -0
  71. package/starter/cloudrun-graphql/src/context.ts +39 -0
  72. package/starter/cloudrun-graphql/src/domain/errors/codes.ts +9 -0
  73. package/starter/cloudrun-graphql/src/domain/errors/errors.ts +25 -0
  74. package/starter/cloudrun-graphql/src/domain/ports/logger.d.ts +21 -0
  75. package/starter/cloudrun-graphql/src/index.ts +11 -0
  76. package/starter/cloudrun-graphql/src/test/helloWorld.test.ts +23 -0
  77. package/starter/cloudrun-graphql/src/view/controller.ts +42 -0
  78. package/starter/cloudrun-graphql/src/view/graphql/resolvers/greeting.resolver.ts +5 -0
  79. package/starter/cloudrun-graphql/src/view/graphql/resolvers.ts +6 -0
  80. package/starter/cloudrun-graphql/src/view/graphql/schema/schema.graphql +6 -0
  81. package/starter/cloudrun-graphql/src/view/graphql/schema.ts +7 -0
  82. package/starter/cloudrun-graphql/src/view/server.ts +45 -0
  83. package/starter/shared/.dockerignore +19 -0
  84. package/starter/shared/.gitignore_ +5 -0
  85. package/starter/shared/.gitlab-ci.yml +199 -0
  86. package/starter/shared/.mocha-junit-config.json +6 -0
  87. package/starter/shared/.mocharc.json +8 -0
  88. package/starter/shared/.nvmrc +1 -0
  89. package/starter/shared/Dockerfile +40 -0
  90. package/starter/shared/ci-branch-config/common.env +7 -0
  91. package/starter/shared/ci-branch-config/development.env +7 -0
  92. package/starter/shared/ci-branch-config/master.env +7 -0
  93. package/starter/shared/ci-branch-config/stage.env +7 -0
  94. package/starter/shared/docker-compose/docker-compose-entrypoint.sh +7 -0
  95. package/starter/shared/docker-compose/docker-compose.ci.yml +19 -0
  96. package/starter/shared/docker-compose/docker-compose.local.yml +5 -0
  97. package/starter/shared/docker-compose/docker-compose.override.yml +5 -0
  98. package/starter/shared/docker-compose/docker-compose.yml +8 -0
  99. package/starter/shared/jest.config.js +12 -0
  100. package/starter/shared/prettier.config.cjs +1 -0
  101. package/starter/shared/src/test/setup.ts +1 -0
  102. package/starter/shared/tsconfig.json +22 -0
  103. package/tsconfig.json +19 -0
  104. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,42 @@
1
+ import express from 'express'
2
+ import { Handler, RequestHandler } from 'express'
3
+
4
+ /**
5
+ * pipeMiddleware takes multiple middlewares and creates and merges them into
6
+ * one using express Router.
7
+ */
8
+ export const pipeMiddleware = (...middlewares: RequestHandler[]) => {
9
+ const router = express.Router({ mergeParams: true })
10
+ middlewares.forEach(m => router.use(m))
11
+ return router
12
+ }
13
+
14
+ const asyncHandler =
15
+ (controllerHandler: Handler): Handler =>
16
+ async (req, res, next) => {
17
+ try {
18
+ await controllerHandler(req, res, next)
19
+ } catch (err) {
20
+ next(err)
21
+ }
22
+ }
23
+
24
+ /**
25
+ * ctrl is a scoped object for controller functions
26
+ */
27
+ export const ctrl = {
28
+ json: pipeMiddleware(
29
+ express.json(),
30
+ // Monkeypatch res.json to assign the body to res.out first in order
31
+ // to log it by pino
32
+ (_req, res, next) => {
33
+ const resJson = res.json.bind(res)
34
+ res.json = (body?: any) => {
35
+ ;(res as any).out = body
36
+ return resJson(body)
37
+ }
38
+ next()
39
+ }
40
+ ),
41
+ asyncHandler,
42
+ }
@@ -0,0 +1,5 @@
1
+ import { QueryResolvers } from '../../../generated/graphql.js'
2
+
3
+ export const greetingQueryResolver: QueryResolvers = {
4
+ greeting: () => 'Hello, world! 🎉',
5
+ }
@@ -0,0 +1,6 @@
1
+ import { Resolvers } from '../../generated/graphql.js'
2
+ import { greetingQueryResolver } from './resolvers/greeting.resolver.js'
3
+
4
+ export const resolvers: Resolvers = {
5
+ Query: greetingQueryResolver,
6
+ }
@@ -0,0 +1,6 @@
1
+ """
2
+ All data queries
3
+ """
4
+ type Query {
5
+ greeting: String!
6
+ }
@@ -0,0 +1,7 @@
1
+ import { loadFilesSync } from '@graphql-tools/load-files'
2
+ import { mergeTypeDefs } from '@graphql-tools/merge'
3
+ import path from 'path'
4
+
5
+ export const schema = [
6
+ mergeTypeDefs(loadFilesSync(path.join(import.meta.dirname, 'schema'))),
7
+ ]
@@ -0,0 +1,45 @@
1
+ import { ApolloServer } from '@apollo/server'
2
+ import { makeExecutableSchema } from '@graphql-tools/schema'
3
+ import { resolvers } from './graphql/resolvers.js'
4
+ import { config } from '../config.js'
5
+ import { schema } from './graphql/schema.js'
6
+ import express from 'express'
7
+ import { ctrl } from './controller.js'
8
+ import { expressMiddleware } from '@as-integrations/express5'
9
+ import { Container } from '../container.js'
10
+
11
+ export const clientSchema = makeExecutableSchema({
12
+ typeDefs: schema,
13
+ resolvers,
14
+ })
15
+
16
+ export const createAppServer = () => {
17
+ const app = express()
18
+ app.disable('x-powered-by')
19
+
20
+ const server = new ApolloServer({
21
+ schema: clientSchema,
22
+ includeStacktraceInErrorResponses: config.server.allowResponseErrors,
23
+ introspection: config.server.enableIntrospection,
24
+ })
25
+
26
+ return { app, server }
27
+ }
28
+
29
+ export async function startServer({
30
+ app,
31
+ server,
32
+ container,
33
+ }: ReturnType<typeof createAppServer> & { container: Container }) {
34
+ const { logger } = container
35
+
36
+ await server.start()
37
+
38
+ app.use('/api/graphql', ctrl.json, expressMiddleware(server))
39
+
40
+ app.listen({ port: config.server.port }, () =>
41
+ logger.info({}, `Server started, port=${config.server.port}`)
42
+ )
43
+
44
+ return { app, server }
45
+ }
@@ -0,0 +1,19 @@
1
+ .editorconfig
2
+ .git
3
+ .gitignore
4
+ .gitlab
5
+ .gitlab-ci.yml
6
+ .huskyrc.json
7
+ .npm
8
+ Dockerfile
9
+ LICENSE
10
+ README.md
11
+ ci-branch-config
12
+ commitlint.config.js
13
+ dist
14
+ docker-compose
15
+ docs
16
+ docs-output
17
+ helm
18
+ node_modules
19
+ prettier.config.js
@@ -0,0 +1,5 @@
1
+ node_modules
2
+ dist
3
+ tsconfig.tsbuildinfo
4
+ junit.xml
5
+ coverage
@@ -0,0 +1,199 @@
1
+ variables:
2
+ # Default configuration, check .export_variables job for calculated env variables based on branch config
3
+
4
+ # Node image for pipeline runner
5
+ NODE_BASE_IMAGE: node:24.5.0
6
+ # Where to store json secrets from Cloud provider
7
+ SECRETS_PATH: '/config/secrets.json'
8
+
9
+ ## GCP configuration ##
10
+ # Where to temporary store Google service account
11
+ GCP_SA_KEY_JSON_PATH: /tmp/key.json
12
+
13
+ ## Docker artifact registry configuration ##
14
+ # Project name for docker compose CI job runs
15
+ DOCKER_COMPOSE_PROJECT_NAME: $CI_PROJECT_NAME-job-$CI_JOB_ID
16
+ # Build docker version tag
17
+ DOCKER_IMAGE_TAG: $CI_COMMIT_SHORT_SHA
18
+
19
+ default:
20
+ image: ackee/gitlab-builder
21
+ before_script:
22
+ - echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}" >> .npmrc
23
+ - echo "//${CI_SERVER_HOST}/api/v4/packages/npm/:_authToken=${CI_JOB_TOKEN}" >> .npmrc;
24
+
25
+ cache: &docker_cache
26
+ key: "$CI_COMMIT_REF_NAME"
27
+ paths:
28
+ - app_image*.tar
29
+ policy: pull
30
+
31
+ stages:
32
+ - build
33
+ - test
34
+ - deploy
35
+
36
+ ##
37
+ # HELPERS
38
+ ##
39
+ # Before script extension that exports ci-branch-config environment variables and stores the GCP service
40
+ # account on the disk to be used by another jobs in the CI. This should be extended by every job that uses
41
+ # any of the branch configuration, docker image or CI SA
42
+ .export_variables:
43
+ before_script:
44
+ - source ci-branch-config/common.env
45
+ - |
46
+ if [ -f "ci-branch-config/${CI_COMMIT_REF_NAME}.env" ]; then
47
+ source ci-branch-config/${CI_COMMIT_REF_NAME}.env
48
+ fi
49
+ - export DOCKER_REGISTRY_URL="$GCP_REGION-docker.pkg.dev"
50
+ - export DOCKER_IMAGE_NAME="$DOCKER_REGISTRY_URL/$GCP_PROJECT_ID/${GCP_PROJECT_ID}-docker/$CI_PROJECT_NAME"
51
+ - export DOCKER_IMAGE_BUILDER_NAME="$DOCKER_IMAGE_NAME-builder"
52
+ - echo "$GCP_SA_KEY" | base64 -d > "$GCP_SA_KEY_JSON_PATH"
53
+
54
+
55
+ # Fetches built docker builder image from remote storage or cache
56
+ .fetch_build_image: &fetch_build_image
57
+ - |
58
+ if ! docker inspect --type=image "$DOCKER_IMAGE_BUILDER_NAME:$DOCKER_IMAGE_TAG" >/dev/null; then
59
+ docker load -i app_image_builder.tar
60
+ fi
61
+
62
+ ##
63
+ # BUILD STAGE
64
+ ##
65
+ # Builds the builder docker image that can be used for running jobs using the CI docker dependencies and
66
+ # configuration (tests, lint, audit, ...)
67
+ build image:
68
+ stage: build
69
+ interruptible: true
70
+ extends: .export_variables
71
+ script:
72
+ - |
73
+ echo "app_image*" >> .dockerignore
74
+ docker build --target builder \
75
+ -t "$DOCKER_IMAGE_BUILDER_NAME:$DOCKER_IMAGE_TAG" .
76
+ - docker save "$DOCKER_IMAGE_BUILDER_NAME:$DOCKER_IMAGE_TAG" > app_image_builder.tar
77
+ cache:
78
+ <<: *docker_cache
79
+ policy: push
80
+ when: on_success
81
+
82
+ ##
83
+ # TEST STAGE
84
+ ##
85
+ # Performs npm ci-lint script in builder image.
86
+ # Make sure the ci-lint outputs json file "output/checkstyle-result.json" that reports the result of the linter
87
+ lint:
88
+ stage: test
89
+ interruptible: true
90
+ extends: .export_variables
91
+ script:
92
+ - if [ "$SKIP_LINT" == "true" ]; then warn "Lint skipped."; exit 0; fi
93
+ - *fetch_build_image
94
+ - cd "$CI_PROJECT_DIR/docker-compose"
95
+ - |
96
+ DOCKER_IMAGE_NAME="$DOCKER_IMAGE_BUILDER_NAME" docker-compose -p "$DOCKER_COMPOSE_PROJECT_NAME" \
97
+ -f docker-compose.yml -f docker-compose.ci.yml \
98
+ run --rm --no-deps app npm run ci-lint
99
+ needs:
100
+ - build image
101
+ artifacts:
102
+ reports:
103
+ codequality: output/checkstyle-result.json
104
+
105
+ # Npm audit run inside of builder image
106
+ npm audit:
107
+ stage: test
108
+ interruptible: true
109
+ extends: .export_variables
110
+ script:
111
+ - if [ "$SKIP_AUDIT" == "true" ]; then warn "Audit skipped."; exit 0; fi
112
+ - *fetch_build_image
113
+ - cd "$CI_PROJECT_DIR/docker-compose"
114
+ - |
115
+ DOCKER_IMAGE_NAME="$DOCKER_IMAGE_BUILDER_NAME" docker-compose -p "$DOCKER_COMPOSE_PROJECT_NAME" \
116
+ -f docker-compose.yml -f docker-compose.ci.yml \
117
+ run --rm --no-deps app npm audit --production --audit-level=high
118
+ needs:
119
+ - build image
120
+
121
+ # Test job running npm ci-test script. Make sure the ci-test script exports two files on disk:
122
+ # output/test.xml - jUnit reporter with test results
123
+ # output/cobertura-coverage.xml - Test coverage results
124
+ test:
125
+ stage: test
126
+ interruptible: true
127
+ extends: .export_variables
128
+ script:
129
+ - if [ "$SKIP_TESTS" == "true" ]; then warn "Tests skipped."; exit 0; fi
130
+ - *fetch_build_image
131
+ - cd "$CI_PROJECT_DIR/docker-compose"
132
+ - |
133
+ DOCKER_IMAGE_NAME="$DOCKER_IMAGE_BUILDER_NAME" \
134
+ docker-compose -p "$DOCKER_COMPOSE_PROJECT_NAME" \
135
+ -f docker-compose.yml -f docker-compose.ci.yml \
136
+ run --rm -e RUN_DOCKER_COMPOSE_DEPS=true -e DB_HOST=postgres app npm run ci-test
137
+ artifacts:
138
+ when: always
139
+ reports:
140
+ junit: output/test.xml
141
+ coverage_report:
142
+ coverage_format: cobertura
143
+ path: output/cobertura-coverage.xml
144
+ needs:
145
+ - build image
146
+
147
+ ##
148
+ # DEPLOY STAGE
149
+ ##
150
+ # Build production image and push to registry
151
+ # Signs in with GCP SA key from pipeline, perform build of the image and pushes it to remote registry
152
+ # Make sure /ci-branch-config-name/{branch} exists when adding new branches to "only" field
153
+ build and push to registry:
154
+ stage: deploy
155
+ extends: .export_variables
156
+ script:
157
+ - docker login -u _json_key --password-stdin $DOCKER_REGISTRY_URL < "$GCP_SA_KEY_JSON_PATH"
158
+ - set -a && source ci-branch-config/${CI_COMMIT_REF_NAME}.env && set +a
159
+ - |
160
+ docker build \
161
+ -t "$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG" \
162
+ $(for var in $(cat ci-branch-config/${CI_COMMIT_REF_NAME}.env | sed 's/=.*//'); do echo "--build-arg $var=${!var} "; done) \
163
+ --build-arg "SECRETS_PATH=$SECRETS_PATH" \
164
+ .
165
+ - docker push "$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG"
166
+ needs:
167
+ - build image
168
+ - npm audit
169
+ - test
170
+ only:
171
+ - stage
172
+ - master
173
+
174
+ # Deploy to Google Cloud Run based on image stored on remote registry
175
+ deploy cloud run:
176
+ stage: deploy
177
+ image: google/cloud-sdk:slim
178
+ extends: .export_variables
179
+ script:
180
+ - gcloud auth activate-service-account --key-file "$GCP_SA_KEY_JSON_PATH"
181
+ - gcloud config set project $GCP_PROJECT_ID
182
+ - gcloud auth configure-docker
183
+ - |
184
+ gcloud run deploy wake-arena-project-api \
185
+ --image "$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG" \
186
+ --project "$GCP_PROJECT_ID" \
187
+ --platform managed \
188
+ --port 3000 \
189
+ --region "$GCP_REGION" \
190
+ --allow-unauthenticated \
191
+ --memory "$GCP_CLOUD_RUN_ALLOCATED_MEMORY" \
192
+ --service-account="$GCP_CLOUD_RUN_SA_NAME" \
193
+ --set-secrets=$SECRETS_PATH="$GCP_SECRETS_NAME:$GCP_SECRETS_VERSION" \
194
+ --set-cloudsql-instances="$GCP_PROJECT_ID:$GCP_REGION:$GCP_SQL_INSTANCE_NAME"
195
+ only:
196
+ - stage
197
+ - master
198
+ needs:
199
+ - build and push to registry
@@ -0,0 +1,6 @@
1
+ {
2
+ "reporterEnabled": "spec, mocha-junit-reporter",
3
+ "mochaJunitReporterReporterOptions": {
4
+ "mochaFile": "output/test.xml"
5
+ }
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extension": ["ts"],
3
+ "spec": "src/**/*.test.ts",
4
+ "parallel": false,
5
+ "enable-source-maps": true,
6
+ "node-option": ["import=tsx"],
7
+ "file": ["src/test/setup.ts"]
8
+ }
@@ -0,0 +1 @@
1
+ 24.5.0
@@ -0,0 +1,40 @@
1
+ # BUILDER IMAGE
2
+ FROM node:24.5.0 AS builder
3
+ ARG NPM_TOKEN
4
+ ENV NODE_PATH=.
5
+ ENV JOBS="max"
6
+ WORKDIR /usr/src/app
7
+
8
+ ENV DOCKERIZE_VERSION v0.6.1
9
+ RUN wget -q "https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz" && \
10
+ tar -C /usr/local/bin -xzvf "dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz" && \
11
+ rm "dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz"
12
+
13
+ ENV TINI_VERSION v0.19.0
14
+ RUN wget -q https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini -O /tini && \
15
+ chmod +x /tini
16
+
17
+ # important, otherwise postinstall hook fails
18
+ RUN npm set progress=false
19
+ RUN npm set loglevel=error
20
+ # copy all relevant files
21
+ COPY . .
22
+ # RUN echo "//registry.npmjs.org//:_authToken=$NPM_TOKEN" >> .npmrc
23
+ # install dependencies
24
+ RUN npm ci
25
+ # compile typescript
26
+ RUN npm run build
27
+
28
+ # MAIN IMAGE
29
+ FROM node:24.5.0-slim
30
+
31
+ ENV NODE_PATH=dist
32
+ ENV CFG_JSON_PATH="/config/secrets.json"
33
+ WORKDIR /usr/src/app
34
+ COPY --from=builder /usr/src/app /usr/src/app
35
+ COPY --from=builder /tini /tini
36
+ COPY --from=builder /usr/local/bin/dockerize /usr/local/bin/dockerize
37
+ EXPOSE 3000
38
+ USER node
39
+ ENTRYPOINT ["/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
40
+ CMD [ "node", "-r", "source-map-support/register", "dist/index.js"]
@@ -0,0 +1,7 @@
1
+ ENVIRONMENT=development
2
+ GCP_PROJECT_ID={{PROJECT_NAME}}-development
3
+ GCP_REGION=europe-west3
4
+ GCP_SECRETS_NAME={{PROJECT_NAME}}-development-config
5
+ GCP_SECRETS_VERSION=latest
6
+ GCP_SA_KEY=$SECRET_GCP_SA_KEY_DEVELOPMENT
7
+ GCP_CLOUD_RUN_SA_NAME=REPLACEME
@@ -0,0 +1,7 @@
1
+ ENVIRONMENT=development
2
+ GCP_PROJECT_ID={{PROJECT_NAME}}-development
3
+ GCP_REGION=europe-west3
4
+ GCP_SECRETS_NAME={{PROJECT_NAME}}-development-config
5
+ GCP_SECRETS_VERSION=latest
6
+ GCP_SA_KEY=$SECRET_GCP_SA_KEY_DEVELOPMENT
7
+ GCP_CLOUD_RUN_SA_NAME=REPLACEME
@@ -0,0 +1,7 @@
1
+ ENVIRONMENT=production
2
+ GCP_PROJECT_ID={{PROJECT_NAME}}-production
3
+ GCP_REGION=europe-west3
4
+ GCP_SECRETS_NAME={{PROJECT_NAME}}-production-config
5
+ GCP_SECRETS_VERSION=latest
6
+ GCP_SA_KEY=$SECRET_GCP_SA_KEY_PRODUCTION
7
+ GCP_CLOUD_RUN_SA_NAME=REPLACEME
@@ -0,0 +1,7 @@
1
+ ENVIRONMENT=stage
2
+ GCP_PROJECT_ID={{PROJECT_NAME}}-stage
3
+ GCP_REGION=europe-west3
4
+ GCP_SECRETS_NAME={{PROJECT_NAME}}-stage-config
5
+ GCP_SECRETS_VERSION=latest
6
+ GCP_SA_KEY=$SECRET_GCP_SA_KEY_PRODUCTION
7
+ GCP_CLOUD_RUN_SA_NAME=REPLACEME
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ if [ "$RUN_DOCKER_COMPOSE_DEPS" == true ]; then
4
+ dockerize -wait tcp://postgres:5432 -timeout 5m "$@"
5
+ else
6
+ exec $@
7
+ fi
@@ -0,0 +1,19 @@
1
+ version: '3.8'
2
+ services:
3
+ app:
4
+ build:
5
+ context: ..
6
+ image: '$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG'
7
+ user: root
8
+ depends_on:
9
+ - postgres
10
+ volumes:
11
+ - '$CI_PROJECT_DIR/docs-output:/usr/src/app/docs-output'
12
+ - '$CI_PROJECT_DIR/output:/usr/src/app/output'
13
+ - '$CI_PROJECT_DIR/secrets-test.json:/usr/src/app/secrets-test.json:ro'
14
+ - '$PWD/docker-compose-entrypoint.sh:/docker-entrypoint.sh:ro'
15
+ entrypoint: /docker-entrypoint.sh
16
+ environment:
17
+ - NODE_PATH=.
18
+ - ENABLE_TESTS=true
19
+ - CFG_JSON_PATH=secrets-test.json
@@ -0,0 +1,5 @@
1
+ version: '3.8'
2
+ services:
3
+ postgres:
4
+ ports:
5
+ - 5432:5432
@@ -0,0 +1,5 @@
1
+ version: '3.8'
2
+ services:
3
+ postgres:
4
+ ports:
5
+ - 5432:5432
@@ -0,0 +1,8 @@
1
+ version: '3.8'
2
+ services:
3
+ postgres:
4
+ image: postgres:15
5
+ environment:
6
+ - POSTGRES_DB={{PROJECT_NAME}}_docker
7
+ - POSTGRES_USER={{PROJECT_NAME}}_docker
8
+ - POSTGRES_PASSWORD={{PROJECT_NAME}}_docker
@@ -0,0 +1,12 @@
1
+ module.exports = {
2
+ preset: 'ts-jest',
3
+ roots: ['<rootDir>/src'],
4
+ transform: {
5
+ '^.+\\.(t|j)sx?$': 'ts-jest',
6
+ },
7
+ testEnvironment: 'node',
8
+ testMatch: ['<rootDir>/src/**/*.test.ts'],
9
+ collectCoverageFrom: ['<rootDir>/src/app/**/*.(t|j)s'],
10
+ moduleFileExtensions: ['ts', 'js', 'json', 'node'],
11
+ modulePaths: ['<rootDir>/src/'],
12
+ }
@@ -0,0 +1 @@
1
+ module.exports = require('@ackee/styleguide-backend-config/prettier')
@@ -0,0 +1 @@
1
+ // Add setup for tests (db connection, ...) if needed
@@ -0,0 +1,22 @@
1
+ {
2
+ "include": ["src/**/*"],
3
+ "exclude": ["dangerfile.ts"],
4
+ "ts-node": {
5
+ "files": true
6
+ },
7
+ "compilerOptions": {
8
+ "target": "ES2021",
9
+ "module": "node16",
10
+ "lib": ["ES2021", "DOM"],
11
+ "allowJs": true,
12
+ "incremental": true,
13
+ "checkJs": true,
14
+ "sourceMap": true,
15
+ "outDir": "dist",
16
+ "rootDir": "src",
17
+ "strict": true,
18
+ "moduleResolution": "node16",
19
+ "useUnknownInCatchVariables": false,
20
+ "esModuleInterop": true
21
+ }
22
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "include": ["src/**/*"],
3
+ "exclude": ["dangerfile.ts"],
4
+ "compilerOptions": {
5
+ "target": "ES2021",
6
+ "module": "node16",
7
+ "lib": ["ES2021", "DOM"],
8
+ "allowJs": true,
9
+ "incremental": true,
10
+ "checkJs": true,
11
+ "sourceMap": true,
12
+ "outDir": "lib",
13
+ "rootDir": "src",
14
+ "strict": true,
15
+ "moduleResolution": "node16",
16
+ "useUnknownInCatchVariables": false,
17
+ "esModuleInterop": true
18
+ }
19
+ }