@ackee/create-node-app 1.0.1 → 2.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.
- package/AUTHORS +2 -1
- package/README.md +26 -18
- package/docs/development.md +42 -0
- package/lib/Bootstrap.js +106 -65
- package/lib/Bootstrap.js.map +1 -1
- package/lib/Builder.js +111 -0
- package/lib/Builder.js.map +1 -0
- package/lib/Files.js +21 -0
- package/lib/Files.js.map +1 -0
- package/lib/Logger.js +26 -8
- package/lib/Logger.js.map +1 -1
- package/lib/Mergers/ConfigMerger.js +22 -0
- package/lib/Mergers/ConfigMerger.js.map +1 -0
- package/lib/Mergers/ContainerMerger.js +172 -0
- package/lib/Mergers/ContainerMerger.js.map +1 -0
- package/lib/Mergers/EnvJsoncMerger.js +20 -0
- package/lib/Mergers/EnvJsoncMerger.js.map +1 -0
- package/lib/Mergers/Merger.js +36 -0
- package/lib/Mergers/Merger.js.map +1 -0
- package/lib/Mergers/PackageJsonMerger.js +36 -0
- package/lib/Mergers/PackageJsonMerger.js.map +1 -0
- package/lib/Npm.js +40 -12
- package/lib/Npm.js.map +1 -1
- package/lib/PackageJson.js +4 -4
- package/lib/PackageJson.js.map +1 -1
- package/lib/StarterLoader.js +86 -0
- package/lib/StarterLoader.js.map +1 -0
- package/package.json +8 -5
- package/src/Bootstrap.ts +123 -82
- package/src/Builder.ts +172 -0
- package/src/Files.ts +22 -0
- package/src/Logger.ts +26 -7
- package/src/Mergers/ConfigMerger.ts +28 -0
- package/src/Mergers/ContainerMerger.ts +241 -0
- package/src/Mergers/EnvJsoncMerger.ts +24 -0
- package/src/Mergers/Merger.ts +51 -0
- package/src/Mergers/PackageJsonMerger.ts +45 -0
- package/src/Npm.ts +60 -15
- package/src/PackageJson.ts +6 -4
- package/src/Starter.ts +2 -2
- package/src/StarterLoader.ts +148 -0
- package/starter/{cloudrun → _base}/.env.jsonc +1 -5
- package/starter/{cloudrun → _base}/.eslintrc.cjs +3 -2
- package/starter/_base/README.md +53 -0
- package/starter/_base/package.json +45 -0
- package/starter/{cloudrun → _base}/src/adapters/pino.logger.ts +1 -1
- package/starter/_base/src/config.ts +16 -0
- package/starter/{cloudrun-graphql → _base}/src/container.ts +3 -1
- package/starter/_base/src/index.ts +14 -0
- package/starter/{cloudrun → _base}/src/view/cli/README.md +2 -6
- package/starter/api/graphql/.env.jsonc +8 -0
- package/starter/{cloudrun-graphql → api/graphql}/.eslintrc.cjs +4 -5
- package/starter/api/graphql/node-app.jsonc +6 -0
- package/starter/api/graphql/package.json +36 -0
- package/starter/{cloudrun-graphql → api/graphql}/src/config.ts +0 -4
- package/starter/api/graphql/src/index.ts +11 -0
- package/starter/{cloudrun-graphql → api/graphql}/src/test/helloWorld.test.ts +14 -3
- package/starter/api/graphql/src/view/graphql/context-factory.ts +13 -0
- package/starter/{cloudrun-graphql → api/graphql}/src/view/server.ts +16 -6
- package/starter/api/rest/.env.jsonc +6 -0
- package/starter/api/rest/.eslintrc.cjs +8 -0
- package/starter/api/rest/node-app.jsonc +6 -0
- package/starter/api/rest/package.json +25 -0
- package/starter/{cloudrun → api/rest}/src/config.ts +0 -5
- package/starter/api/rest/src/container.ts +13 -0
- package/starter/{cloudrun → api/rest}/src/index.ts +4 -4
- package/starter/{cloudrun → api/rest}/src/test/health-check.test.ts +3 -5
- package/starter/{cloudrun → api/rest}/src/test/util/openapi-test.util.ts +3 -3
- package/starter/{cloudrun → api/rest}/src/view/rest/middleware/error-handler.ts +1 -1
- package/starter/{cloudrun → api/rest}/src/view/rest/routes.ts +1 -1
- package/starter/{cloudrun → api/rest}/src/view/rest/util/openapi.util.ts +19 -19
- package/starter/{cloudrun → api/rest}/src/view/server.ts +6 -4
- package/starter/infra/postgresql-knex/.env.jsonc +5 -0
- package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.yml +1 -1
- package/starter/infra/postgresql-knex/knexfile.ts +16 -0
- package/starter/infra/postgresql-knex/node-app.jsonc +6 -0
- package/starter/infra/postgresql-knex/package.json +13 -0
- package/starter/infra/postgresql-knex/src/adapters/knex.database.test.ts +21 -0
- package/starter/infra/postgresql-knex/src/adapters/knex.database.ts +14 -0
- package/starter/infra/postgresql-knex/src/adapters/repositories/migration.repository.ts +24 -0
- package/starter/infra/postgresql-knex/src/config.ts +14 -0
- package/starter/infra/postgresql-knex/src/container.ts +23 -0
- package/starter/infra/postgresql-knex/src/db/migration.template.ts +4 -0
- package/starter/infra/postgresql-knex/src/db/migrations/.gitkeep +0 -0
- package/starter/infra/postgresql-knex/src/db/seed.template.ts +3 -0
- package/starter/infra/postgresql-knex/src/db/seeds/.gitkeep +0 -0
- package/starter/infra/postgresql-knex/src/domain/ports/database.d.ts +4 -0
- package/starter/infra/postgresql-knex/src/domain/ports/repositories/migration.repository.d.ts +9 -0
- package/starter/infra/postgresql-knex/src/test/setup.ts +16 -0
- package/starter/{shared → pipeline/cloudrun-gitlab}/.gitlab-ci.yml +15 -6
- package/starter/pipeline/cloudrun-gitlab/node-app.jsonc +6 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/Toolbelt.js +0 -102
- package/lib/Toolbelt.js.map +0 -1
- package/lib/cloudrun/CloudRunStarter.js +0 -127
- package/lib/cloudrun/CloudRunStarter.js.map +0 -1
- package/lib/cloudrun-graphql/GraphQLStarter.js +0 -118
- package/lib/cloudrun-graphql/GraphQLStarter.js.map +0 -1
- package/src/Toolbelt.ts +0 -132
- package/src/cloudrun/CloudRunStarter.ts +0 -182
- package/src/cloudrun-graphql/GraphQLStarter.ts +0 -182
- package/starter/cloudrun/README.md +0 -69
- package/starter/cloudrun/src/container.ts +0 -18
- package/starter/cloudrun/src/context.ts +0 -39
- package/starter/cloudrun/src/domain/errors/codes.ts +0 -9
- package/starter/cloudrun/src/domain/errors/errors.ts +0 -25
- package/starter/cloudrun/src/domain/ports/logger.d.ts +0 -21
- package/starter/cloudrun-graphql/.env.jsonc +0 -12
- package/starter/cloudrun-graphql/README.md +0 -53
- package/starter/cloudrun-graphql/src/adapters/pino.logger.ts +0 -44
- package/starter/cloudrun-graphql/src/index.ts +0 -11
- package/starter/shared/.gitignore_ +0 -5
- package/starter/shared/ci-branch-config/common.env +0 -7
- package/starter/shared/ci-branch-config/development.env +0 -7
- package/starter/shared/ci-branch-config/master.env +0 -7
- package/starter/shared/ci-branch-config/stage.env +0 -7
- package/starter/shared/docker-compose/docker-compose.override.yml +0 -5
- package/starter/shared/jest.config.js +0 -12
- /package/starter/{shared → _base}/.dockerignore +0 -0
- /package/starter/{cloudrun → _base}/.eslint.tsconfig.json +0 -0
- /package/starter/{shared → _base}/.mocha-junit-config.json +0 -0
- /package/starter/{shared → _base}/.mocharc.json +0 -0
- /package/starter/{shared → _base}/.nvmrc +0 -0
- /package/starter/{shared → _base}/Dockerfile +0 -0
- /package/starter/{shared → _base}/prettier.config.cjs +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/context.ts +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/domain/errors/codes.ts +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/domain/errors/errors.ts +0 -0
- /package/starter/{cloudrun-graphql → _base}/src/domain/ports/logger.d.ts +0 -0
- /package/starter/{shared → _base}/src/test/setup.ts +0 -0
- /package/starter/{cloudrun → _base}/src/view/cli/cli.ts +0 -0
- /package/starter/{shared → _base}/tsconfig.json +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/.eslint.tsconfig.json +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/codegen.yml +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/controller.ts +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/resolvers/greeting.resolver.ts +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/resolvers.ts +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/schema/schema.graphql +0 -0
- /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/schema.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/domain/health-check.service.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/cli/openapi/generate.ts +0 -0
- /package/starter/{cloudrun/src/view/rest/controller → api/rest/src/view/rest/controllers}/health-check.controller.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/middleware/context-middleware.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/middleware/request-logger.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/request.d.ts +0 -0
- /package/starter/{cloudrun → api/rest}/src/view/rest/spec/openapi.yml +0 -0
- /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose-entrypoint.sh +0 -0
- /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.ci.yml +0 -0
- /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.local.yml +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { config } from './src/config.js'
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
client: 'pg',
|
|
5
|
+
connection: config.db.connectionString,
|
|
6
|
+
migrations: {
|
|
7
|
+
directory: './src/db/migrations',
|
|
8
|
+
stub: './src/db/migration.template.ts',
|
|
9
|
+
extension: 'ts',
|
|
10
|
+
},
|
|
11
|
+
seeds: {
|
|
12
|
+
directory: './src/db/seeds',
|
|
13
|
+
stub: './src/db/seed.template.ts',
|
|
14
|
+
extension: 'ts',
|
|
15
|
+
},
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "infra-knex-postgresql",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "PostgreSQL infrastructure with Knex",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {},
|
|
7
|
+
"author": "",
|
|
8
|
+
"license": "ISC",
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"knex": "^3.1.0",
|
|
11
|
+
"pg": "^8.13.1"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { knexConnection } from './knex.database.js'
|
|
2
|
+
import { config } from '../config.js'
|
|
3
|
+
import { describe, test } from 'mocha'
|
|
4
|
+
import assert from 'node:assert'
|
|
5
|
+
import { Knex } from 'knex'
|
|
6
|
+
|
|
7
|
+
describe('knexConnection', () => {
|
|
8
|
+
test('connects to PostgreSQL and prints version', async () => {
|
|
9
|
+
let db: Knex | undefined
|
|
10
|
+
|
|
11
|
+
await assert.doesNotReject(
|
|
12
|
+
knexConnection.connect(config.db.connectionString).then(connection => {
|
|
13
|
+
db = connection
|
|
14
|
+
})
|
|
15
|
+
)
|
|
16
|
+
assert(db)
|
|
17
|
+
const version = await db.raw('SELECT version()')
|
|
18
|
+
assert(version.rows.length === 1)
|
|
19
|
+
await assert.doesNotReject(knexConnection.disconnect(db))
|
|
20
|
+
})
|
|
21
|
+
})
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DbConnection } from '../domain/ports/database.js'
|
|
2
|
+
import knex, { Knex } from 'knex'
|
|
3
|
+
|
|
4
|
+
export const knexConnection: DbConnection<Knex> = {
|
|
5
|
+
connect: async (connectionString: string) => {
|
|
6
|
+
return knex({
|
|
7
|
+
client: 'pg',
|
|
8
|
+
connection: connectionString,
|
|
9
|
+
})
|
|
10
|
+
},
|
|
11
|
+
disconnect: async (db: Knex) => {
|
|
12
|
+
await db.destroy()
|
|
13
|
+
},
|
|
14
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Migration,
|
|
3
|
+
MigrationRepository,
|
|
4
|
+
} from '../../domain/ports/repositories/migration.repository.js'
|
|
5
|
+
import { Knex } from 'knex'
|
|
6
|
+
|
|
7
|
+
const TABLE = 'knex_migrations'
|
|
8
|
+
|
|
9
|
+
const mapMigrationToDomain = (migration: any): Migration => {
|
|
10
|
+
return {
|
|
11
|
+
id: migration.id,
|
|
12
|
+
name: migration.name,
|
|
13
|
+
executedAt: migration.migration_time,
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const createMigrationsRepository: (knex: Knex) => MigrationRepository = (
|
|
18
|
+
knex: Knex
|
|
19
|
+
) => ({
|
|
20
|
+
list: async () => {
|
|
21
|
+
const migrations = await knex.select('*').from(TABLE)
|
|
22
|
+
return migrations.map(mapMigrationToDomain)
|
|
23
|
+
},
|
|
24
|
+
})
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createLoader, maskedValues, values } from 'configuru'
|
|
2
|
+
|
|
3
|
+
const loader = createLoader({
|
|
4
|
+
defaultConfigPath: '.env.jsonc',
|
|
5
|
+
})
|
|
6
|
+
|
|
7
|
+
const configSchema = {
|
|
8
|
+
db: {
|
|
9
|
+
connectionString: loader.string('DB_CONNECTION_STRING'),
|
|
10
|
+
},
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const config = values(configSchema)
|
|
14
|
+
export const safeConfig = maskedValues(configSchema)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Knex } from 'knex'
|
|
2
|
+
import { knexConnection } from './adapters/knex.database.js'
|
|
3
|
+
import { createMigrationsRepository } from './adapters/repositories/migration.repository.js'
|
|
4
|
+
import { config } from './config.js'
|
|
5
|
+
import { MigrationRepository } from './domain/ports/repositories/migration.repository.js'
|
|
6
|
+
|
|
7
|
+
export interface Container {
|
|
8
|
+
database: Knex
|
|
9
|
+
repositories: {
|
|
10
|
+
migrations: MigrationRepository
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const createContainer = async (): Promise<Container> => {
|
|
15
|
+
const database = await knexConnection.connect(config.db.connectionString)
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
database,
|
|
19
|
+
repositories: {
|
|
20
|
+
migrations: createMigrationsRepository(database),
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { knexConnection } from '../adapters/knex.database.js'
|
|
2
|
+
import { config } from '../config.js'
|
|
3
|
+
import { Knex } from 'knex'
|
|
4
|
+
import { before, after } from 'mocha'
|
|
5
|
+
|
|
6
|
+
let db: Knex
|
|
7
|
+
|
|
8
|
+
before(async () => {
|
|
9
|
+
db = await knexConnection.connect(config.db.connectionString)
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
after(async () => {
|
|
13
|
+
if (db) {
|
|
14
|
+
await knexConnection.disconnect(db)
|
|
15
|
+
}
|
|
16
|
+
})
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
# Define environments in GitLab UI with vars according to the branches for the pipeline
|
|
2
|
+
# ENVIRONMENT={{develpoment/stage/production}}
|
|
3
|
+
# GCP_PROJECT_ID={{PROJECT_NAME}}
|
|
4
|
+
# GCP_REGION={{europe-west3}}
|
|
5
|
+
# GCP_SECRETS_NAME={{PROJECT_NAME}}
|
|
6
|
+
# GCP_SECRETS_VERSION=latest
|
|
7
|
+
# GCP_SA_KEY={{base64 encoded string with SA key to deploy Cloud Run}}
|
|
8
|
+
# GCP_CLOUD_RUN_SA_NAME={{name of the service account for Cloud Run}}
|
|
9
|
+
|
|
1
10
|
variables:
|
|
2
11
|
# Default configuration, check .export_variables job for calculated env variables based on branch config
|
|
3
|
-
|
|
4
12
|
# Node image for pipeline runner
|
|
5
13
|
NODE_BASE_IMAGE: node:24.5.0
|
|
6
14
|
# Where to store json secrets from Cloud provider
|
|
@@ -41,11 +49,6 @@ stages:
|
|
|
41
49
|
# any of the branch configuration, docker image or CI SA
|
|
42
50
|
.export_variables:
|
|
43
51
|
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
52
|
- export DOCKER_REGISTRY_URL="$GCP_REGION-docker.pkg.dev"
|
|
50
53
|
- export DOCKER_IMAGE_NAME="$DOCKER_REGISTRY_URL/$GCP_PROJECT_ID/${GCP_PROJECT_ID}-docker/$CI_PROJECT_NAME"
|
|
51
54
|
- export DOCKER_IMAGE_BUILDER_NAME="$DOCKER_IMAGE_NAME-builder"
|
|
@@ -167,7 +170,10 @@ build and push to registry:
|
|
|
167
170
|
- build image
|
|
168
171
|
- npm audit
|
|
169
172
|
- test
|
|
173
|
+
environment:
|
|
174
|
+
name: $CI_COMMIT_REF_NAME
|
|
170
175
|
only:
|
|
176
|
+
- development
|
|
171
177
|
- stage
|
|
172
178
|
- master
|
|
173
179
|
|
|
@@ -193,7 +199,10 @@ deploy cloud run:
|
|
|
193
199
|
--set-secrets=$SECRETS_PATH="$GCP_SECRETS_NAME:$GCP_SECRETS_VERSION" \
|
|
194
200
|
--set-cloudsql-instances="$GCP_PROJECT_ID:$GCP_REGION:$GCP_SQL_INSTANCE_NAME"
|
|
195
201
|
only:
|
|
202
|
+
- development
|
|
196
203
|
- stage
|
|
197
204
|
- master
|
|
205
|
+
environment:
|
|
206
|
+
name: $CI_COMMIT_REF_NAME
|
|
198
207
|
needs:
|
|
199
208
|
- build and push to registry
|