skuba 9.2.0-main-20250114234022 → 9.2.0-main-20250217113038

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 (76) hide show
  1. package/lib/cli/init/index.js +2 -2
  2. package/lib/cli/init/index.js.map +2 -2
  3. package/lib/cli/init/prompts.d.ts +1 -1
  4. package/lib/index.js +3 -3
  5. package/lib/utils/template.d.ts +2 -2
  6. package/lib/utils/template.js +0 -5
  7. package/lib/utils/template.js.map +2 -2
  8. package/package.json +14 -14
  9. package/template/base/tsconfig.json +2 -2
  10. package/template/express-rest-api/.buildkite/pipeline.yml +4 -4
  11. package/template/express-rest-api/.gantry/common.yml +1 -2
  12. package/template/express-rest-api/.nvmrc +1 -1
  13. package/template/express-rest-api/Dockerfile +1 -1
  14. package/template/express-rest-api/Dockerfile.dev-deps +2 -2
  15. package/template/express-rest-api/package.json +4 -4
  16. package/template/greeter/.buildkite/pipeline.yml +1 -1
  17. package/template/greeter/.nvmrc +1 -1
  18. package/template/greeter/Dockerfile +2 -2
  19. package/template/greeter/README.md +1 -1
  20. package/template/greeter/package.json +4 -4
  21. package/template/koa-rest-api/.buildkite/pipeline.yml +4 -4
  22. package/template/koa-rest-api/.gantry/common.yml +1 -2
  23. package/template/koa-rest-api/.nvmrc +1 -1
  24. package/template/koa-rest-api/Dockerfile +1 -1
  25. package/template/koa-rest-api/Dockerfile.dev-deps +2 -2
  26. package/template/koa-rest-api/package.json +3 -3
  27. package/template/koa-rest-api/src/framework/server.test.ts +0 -1
  28. package/template/koa-rest-api/tsconfig.json +2 -2
  29. package/template/lambda-sqs-worker-cdk/.buildkite/pipeline.yml +2 -2
  30. package/template/lambda-sqs-worker-cdk/.nvmrc +1 -1
  31. package/template/lambda-sqs-worker-cdk/Dockerfile +3 -3
  32. package/template/lambda-sqs-worker-cdk/infra/__snapshots__/appStack.test.ts.snap +2 -2
  33. package/template/lambda-sqs-worker-cdk/infra/appStack.ts +2 -2
  34. package/template/lambda-sqs-worker-cdk/infra/config.ts +1 -1
  35. package/template/lambda-sqs-worker-cdk/infra/index.ts +3 -5
  36. package/template/lambda-sqs-worker-cdk/package.json +4 -4
  37. package/template/lambda-sqs-worker-cdk/tsconfig.json +2 -2
  38. package/template/oss-npm-package/.github/workflows/release.yml +1 -1
  39. package/template/oss-npm-package/.github/workflows/validate.yml +1 -1
  40. package/template/oss-npm-package/.nvmrc +1 -1
  41. package/template/oss-npm-package/_package.json +1 -1
  42. package/template/private-npm-package/.nvmrc +1 -1
  43. package/template/private-npm-package/_package.json +2 -2
  44. package/template/lambda-sqs-worker/.buildkite/pipeline.yml +0 -108
  45. package/template/lambda-sqs-worker/.env +0 -1
  46. package/template/lambda-sqs-worker/.nvmrc +0 -1
  47. package/template/lambda-sqs-worker/Dockerfile +0 -17
  48. package/template/lambda-sqs-worker/README.md +0 -132
  49. package/template/lambda-sqs-worker/_.npmrc +0 -13
  50. package/template/lambda-sqs-worker/docker-compose.yml +0 -10
  51. package/template/lambda-sqs-worker/package.json +0 -45
  52. package/template/lambda-sqs-worker/serverless.yml +0 -213
  53. package/template/lambda-sqs-worker/skuba.template.js +0 -33
  54. package/template/lambda-sqs-worker/src/app.test.ts +0 -116
  55. package/template/lambda-sqs-worker/src/app.ts +0 -57
  56. package/template/lambda-sqs-worker/src/config.ts +0 -62
  57. package/template/lambda-sqs-worker/src/framework/handler.test.ts +0 -61
  58. package/template/lambda-sqs-worker/src/framework/handler.ts +0 -43
  59. package/template/lambda-sqs-worker/src/framework/logging.ts +0 -27
  60. package/template/lambda-sqs-worker/src/framework/metrics.ts +0 -14
  61. package/template/lambda-sqs-worker/src/framework/validation.test.ts +0 -84
  62. package/template/lambda-sqs-worker/src/framework/validation.ts +0 -10
  63. package/template/lambda-sqs-worker/src/hooks.ts +0 -95
  64. package/template/lambda-sqs-worker/src/mapping/jobScorer.ts +0 -22
  65. package/template/lambda-sqs-worker/src/services/aws.ts +0 -5
  66. package/template/lambda-sqs-worker/src/services/jobScorer.test.ts +0 -44
  67. package/template/lambda-sqs-worker/src/services/jobScorer.ts +0 -59
  68. package/template/lambda-sqs-worker/src/services/pipelineEventSender.test.ts +0 -40
  69. package/template/lambda-sqs-worker/src/services/pipelineEventSender.ts +0 -33
  70. package/template/lambda-sqs-worker/src/testing/handler.ts +0 -13
  71. package/template/lambda-sqs-worker/src/testing/logging.ts +0 -19
  72. package/template/lambda-sqs-worker/src/testing/services.ts +0 -28
  73. package/template/lambda-sqs-worker/src/testing/types.ts +0 -33
  74. package/template/lambda-sqs-worker/src/types/jobScorer.ts +0 -15
  75. package/template/lambda-sqs-worker/src/types/pipelineEvents.ts +0 -21
  76. package/template/lambda-sqs-worker/tsconfig.json +0 -13
@@ -102,8 +102,8 @@ const init = async (args = process.argv.slice(2)) => {
102
102
  import_logging.log.newline();
103
103
  await (0, import_git2.initialiseRepo)(destinationDir, templateData);
104
104
  const [manifest, packageManagerConfig] = await Promise.all([
105
- (0, import_manifest.getConsumerManifest)(),
106
- (0, import_packageManager.detectPackageManager)()
105
+ (0, import_manifest.getConsumerManifest)(destinationDir),
106
+ (0, import_packageManager.detectPackageManager)(destinationDir)
107
107
  ]);
108
108
  if (!manifest) {
109
109
  throw new Error("Repository doesn't contain a package.json file.");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/init/index.ts"],
4
- "sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport { commitAllChanges } from '../../api/git';\nimport { hasDebugFlag } from '../../utils/args';\nimport { copyFiles, createEjsRenderer } from '../../utils/copy';\nimport { createInclusionFilter } from '../../utils/dir';\nimport { createExec, ensureCommands } from '../../utils/exec';\nimport { createLogger, log } from '../../utils/logging';\nimport { showLogoAndVersionInfo } from '../../utils/logo';\nimport { getConsumerManifest } from '../../utils/manifest';\nimport { detectPackageManager } from '../../utils/packageManager';\nimport {\n BASE_TEMPLATE_DIR,\n ensureTemplateConfigDeletion,\n} from '../../utils/template';\nimport { runPrettier } from '../adapter/prettier';\nimport { tryPatchRenovateConfig } from '../lint/internalLints/patchRenovateConfig';\n\nimport { getConfig } from './getConfig';\nimport { initialiseRepo } from './git';\nimport type { Input } from './types';\nimport { writePackageJson } from './writePackageJson';\n\nexport const init = async (args = process.argv.slice(2)) => {\n const opts: Input = {\n debug: hasDebugFlag(args),\n };\n\n const skubaVersionInfo = await showLogoAndVersionInfo();\n\n const {\n destinationDir,\n entryPoint,\n packageManager,\n templateComplete,\n templateData,\n templateName,\n type,\n } = await getConfig();\n\n await ensureCommands(packageManager);\n\n const include = await createInclusionFilter([\n path.join(destinationDir, '.gitignore'),\n path.join(BASE_TEMPLATE_DIR, '_.gitignore'),\n ]);\n\n const processors = [createEjsRenderer(templateData)];\n\n await copyFiles({\n sourceRoot: BASE_TEMPLATE_DIR,\n destinationRoot: destinationDir,\n include,\n // prefer template-specific files\n overwrite: false,\n processors,\n // base template has files like _eslint.config.js\n stripUnderscorePrefix: true,\n });\n\n await copyFiles({\n sourceRoot: destinationDir,\n destinationRoot: destinationDir,\n include,\n processors,\n });\n\n await Promise.all([\n templateComplete\n ? ensureTemplateConfigDeletion(destinationDir)\n : Promise.resolve(),\n\n writePackageJson({\n cwd: destinationDir,\n entryPoint,\n template: templateName,\n type,\n version: skubaVersionInfo.local,\n }),\n ]);\n\n const exec = createExec({\n cwd: destinationDir,\n stdio: 'pipe',\n streamStdio: packageManager,\n });\n\n log.newline();\n await initialiseRepo(destinationDir, templateData);\n\n const [manifest, packageManagerConfig] = await Promise.all([\n getConsumerManifest(),\n detectPackageManager(),\n ]);\n\n if (!manifest) {\n throw new Error(\"Repository doesn't contain a package.json file.\");\n }\n\n // Patch in a baseline Renovate preset based on the configured Git owner.\n await tryPatchRenovateConfig({\n mode: 'format',\n dir: destinationDir,\n manifest,\n packageManager: packageManagerConfig,\n });\n\n const skubaSlug = `skuba@${skubaVersionInfo.local}`;\n\n let depsInstalled = false;\n try {\n // The `-D` shorthand is portable across our package managers.\n await exec(packageManager, 'add', '-D', skubaSlug);\n\n // Templating can initially leave certain files in an unformatted state;\n // consider a Markdown table with columns sized based on content length.\n await runPrettier('format', createLogger(opts.debug), destinationDir);\n\n depsInstalled = true;\n } catch (err) {\n log.warn(inspect(err));\n }\n\n await commitAllChanges({\n dir: destinationDir,\n message: `Clone ${templateName}`,\n });\n\n const logGitHubRepoCreation = () => {\n log.plain(\n 'Next, create an empty',\n log.bold(`${templateData.orgName}/${templateData.repoName}`),\n 'repository:',\n );\n log.ok('https://github.com/new');\n };\n\n if (!depsInstalled) {\n log.newline();\n log.warn(log.bold('\u2717 Failed to install dependencies.'));\n\n log.newline();\n logGitHubRepoCreation();\n\n log.newline();\n log.plain('Then, resume initialisation:');\n log.ok('cd', destinationDir);\n // The `-D` shorthand is portable across our package managers.\n log.ok(packageManager, 'add', '-D', skubaSlug);\n log.ok(packageManager, 'run', 'format');\n log.ok('git add --all');\n log.ok('git commit --message', `'Pin ${skubaSlug}'`);\n log.ok(`git push --set-upstream origin ${templateData.defaultBranch}`);\n\n log.newline();\n process.exitCode = 1;\n return;\n }\n\n log.newline();\n log.ok(log.bold('\u2714 Project initialised!'));\n\n log.newline();\n logGitHubRepoCreation();\n\n log.newline();\n log.plain('Then, push your local changes:');\n log.ok('cd', destinationDir);\n log.ok(`git push --set-upstream origin ${templateData.defaultBranch}`);\n\n log.newline();\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport { commitAllChanges } from '../../api/git';\nimport { hasDebugFlag } from '../../utils/args';\nimport { copyFiles, createEjsRenderer } from '../../utils/copy';\nimport { createInclusionFilter } from '../../utils/dir';\nimport { createExec, ensureCommands } from '../../utils/exec';\nimport { createLogger, log } from '../../utils/logging';\nimport { showLogoAndVersionInfo } from '../../utils/logo';\nimport { getConsumerManifest } from '../../utils/manifest';\nimport { detectPackageManager } from '../../utils/packageManager';\nimport {\n BASE_TEMPLATE_DIR,\n ensureTemplateConfigDeletion,\n} from '../../utils/template';\nimport { runPrettier } from '../adapter/prettier';\nimport { tryPatchRenovateConfig } from '../lint/internalLints/patchRenovateConfig';\n\nimport { getConfig } from './getConfig';\nimport { initialiseRepo } from './git';\nimport type { Input } from './types';\nimport { writePackageJson } from './writePackageJson';\n\nexport const init = async (args = process.argv.slice(2)) => {\n const opts: Input = {\n debug: hasDebugFlag(args),\n };\n\n const skubaVersionInfo = await showLogoAndVersionInfo();\n\n const {\n destinationDir,\n entryPoint,\n packageManager,\n templateComplete,\n templateData,\n templateName,\n type,\n } = await getConfig();\n\n await ensureCommands(packageManager);\n\n const include = await createInclusionFilter([\n path.join(destinationDir, '.gitignore'),\n path.join(BASE_TEMPLATE_DIR, '_.gitignore'),\n ]);\n\n const processors = [createEjsRenderer(templateData)];\n\n await copyFiles({\n sourceRoot: BASE_TEMPLATE_DIR,\n destinationRoot: destinationDir,\n include,\n // prefer template-specific files\n overwrite: false,\n processors,\n // base template has files like _eslint.config.js\n stripUnderscorePrefix: true,\n });\n\n await copyFiles({\n sourceRoot: destinationDir,\n destinationRoot: destinationDir,\n include,\n processors,\n });\n\n await Promise.all([\n templateComplete\n ? ensureTemplateConfigDeletion(destinationDir)\n : Promise.resolve(),\n\n writePackageJson({\n cwd: destinationDir,\n entryPoint,\n template: templateName,\n type,\n version: skubaVersionInfo.local,\n }),\n ]);\n\n const exec = createExec({\n cwd: destinationDir,\n stdio: 'pipe',\n streamStdio: packageManager,\n });\n\n log.newline();\n await initialiseRepo(destinationDir, templateData);\n\n const [manifest, packageManagerConfig] = await Promise.all([\n getConsumerManifest(destinationDir),\n detectPackageManager(destinationDir),\n ]);\n\n if (!manifest) {\n throw new Error(\"Repository doesn't contain a package.json file.\");\n }\n\n // Patch in a baseline Renovate preset based on the configured Git owner.\n await tryPatchRenovateConfig({\n mode: 'format',\n dir: destinationDir,\n manifest,\n packageManager: packageManagerConfig,\n });\n\n const skubaSlug = `skuba@${skubaVersionInfo.local}`;\n\n let depsInstalled = false;\n try {\n // The `-D` shorthand is portable across our package managers.\n await exec(packageManager, 'add', '-D', skubaSlug);\n\n // Templating can initially leave certain files in an unformatted state;\n // consider a Markdown table with columns sized based on content length.\n await runPrettier('format', createLogger(opts.debug), destinationDir);\n\n depsInstalled = true;\n } catch (err) {\n log.warn(inspect(err));\n }\n\n await commitAllChanges({\n dir: destinationDir,\n message: `Clone ${templateName}`,\n });\n\n const logGitHubRepoCreation = () => {\n log.plain(\n 'Next, create an empty',\n log.bold(`${templateData.orgName}/${templateData.repoName}`),\n 'repository:',\n );\n log.ok('https://github.com/new');\n };\n\n if (!depsInstalled) {\n log.newline();\n log.warn(log.bold('\u2717 Failed to install dependencies.'));\n\n log.newline();\n logGitHubRepoCreation();\n\n log.newline();\n log.plain('Then, resume initialisation:');\n log.ok('cd', destinationDir);\n // The `-D` shorthand is portable across our package managers.\n log.ok(packageManager, 'add', '-D', skubaSlug);\n log.ok(packageManager, 'run', 'format');\n log.ok('git add --all');\n log.ok('git commit --message', `'Pin ${skubaSlug}'`);\n log.ok(`git push --set-upstream origin ${templateData.defaultBranch}`);\n\n log.newline();\n process.exitCode = 1;\n return;\n }\n\n log.newline();\n log.ok(log.bold('\u2714 Project initialised!'));\n\n log.newline();\n logGitHubRepoCreation();\n\n log.newline();\n log.plain('Then, push your local changes:');\n log.ok('cd', destinationDir);\n log.ok(`git push --set-upstream origin ${templateData.defaultBranch}`);\n\n log.newline();\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,kBAAwB;AAExB,iBAAiC;AACjC,kBAA6B;AAC7B,kBAA6C;AAC7C,iBAAsC;AACtC,kBAA2C;AAC3C,qBAAkC;AAClC,kBAAuC;AACvC,sBAAoC;AACpC,4BAAqC;AACrC,sBAGO;AACP,sBAA4B;AAC5B,iCAAuC;AAEvC,uBAA0B;AAC1B,IAAAA,cAA+B;AAE/B,8BAAiC;AAE1B,MAAM,OAAO,OAAO,OAAO,QAAQ,KAAK,MAAM,CAAC,MAAM;AAC1D,QAAM,OAAc;AAAA,IAClB,WAAO,0BAAa,IAAI;AAAA,EAC1B;AAEA,QAAM,mBAAmB,UAAM,oCAAuB;AAEtD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,UAAM,4BAAU;AAEpB,YAAM,4BAAe,cAAc;AAEnC,QAAM,UAAU,UAAM,kCAAsB;AAAA,IAC1C,YAAAC,QAAK,KAAK,gBAAgB,YAAY;AAAA,IACtC,YAAAA,QAAK,KAAK,mCAAmB,aAAa;AAAA,EAC5C,CAAC;AAED,QAAM,aAAa,KAAC,+BAAkB,YAAY,CAAC;AAEnD,YAAM,uBAAU;AAAA,IACd,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB;AAAA;AAAA,IAEA,WAAW;AAAA,IACX;AAAA;AAAA,IAEA,uBAAuB;AAAA,EACzB,CAAC;AAED,YAAM,uBAAU;AAAA,IACd,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,IAAI;AAAA,IAChB,uBACI,8CAA6B,cAAc,IAC3C,QAAQ,QAAQ;AAAA,QAEpB,0CAAiB;AAAA,MACf,KAAK;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,SAAS,iBAAiB;AAAA,IAC5B,CAAC;AAAA,EACH,CAAC;AAED,QAAM,WAAO,wBAAW;AAAA,IACtB,KAAK;AAAA,IACL,OAAO;AAAA,IACP,aAAa;AAAA,EACf,CAAC;AAED,qBAAI,QAAQ;AACZ,YAAM,4BAAe,gBAAgB,YAAY;AAEjD,QAAM,CAAC,UAAU,oBAAoB,IAAI,MAAM,QAAQ,IAAI;AAAA,QACzD,qCAAoB,cAAc;AAAA,QAClC,4CAAqB,cAAc;AAAA,EACrC,CAAC;AAED,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAGA,YAAM,mDAAuB;AAAA,IAC3B,MAAM;AAAA,IACN,KAAK;AAAA,IACL;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AAED,QAAM,YAAY,SAAS,iBAAiB,KAAK;AAEjD,MAAI,gBAAgB;AACpB,MAAI;AAEF,UAAM,KAAK,gBAAgB,OAAO,MAAM,SAAS;AAIjD,cAAM,6BAAY,cAAU,6BAAa,KAAK,KAAK,GAAG,cAAc;AAEpE,oBAAgB;AAAA,EAClB,SAAS,KAAK;AACZ,uBAAI,SAAK,qBAAQ,GAAG,CAAC;AAAA,EACvB;AAEA,YAAM,6BAAiB;AAAA,IACrB,KAAK;AAAA,IACL,SAAS,SAAS,YAAY;AAAA,EAChC,CAAC;AAED,QAAM,wBAAwB,MAAM;AAClC,uBAAI;AAAA,MACF;AAAA,MACA,mBAAI,KAAK,GAAG,aAAa,OAAO,IAAI,aAAa,QAAQ,EAAE;AAAA,MAC3D;AAAA,IACF;AACA,uBAAI,GAAG,wBAAwB;AAAA,EACjC;AAEA,MAAI,CAAC,eAAe;AAClB,uBAAI,QAAQ;AACZ,uBAAI,KAAK,mBAAI,KAAK,wCAAmC,CAAC;AAEtD,uBAAI,QAAQ;AACZ,0BAAsB;AAEtB,uBAAI,QAAQ;AACZ,uBAAI,MAAM,8BAA8B;AACxC,uBAAI,GAAG,MAAM,cAAc;AAE3B,uBAAI,GAAG,gBAAgB,OAAO,MAAM,SAAS;AAC7C,uBAAI,GAAG,gBAAgB,OAAO,QAAQ;AACtC,uBAAI,GAAG,eAAe;AACtB,uBAAI,GAAG,wBAAwB,QAAQ,SAAS,GAAG;AACnD,uBAAI,GAAG,kCAAkC,aAAa,aAAa,EAAE;AAErE,uBAAI,QAAQ;AACZ,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,qBAAI,QAAQ;AACZ,qBAAI,GAAG,mBAAI,KAAK,6BAAwB,CAAC;AAEzC,qBAAI,QAAQ;AACZ,wBAAsB;AAEtB,qBAAI,QAAQ;AACZ,qBAAI,MAAM,gCAAgC;AAC1C,qBAAI,GAAG,MAAM,cAAc;AAC3B,qBAAI,GAAG,kCAAkC,aAAa,aAAa,EAAE;AAErE,qBAAI,QAAQ;AACd;",
6
6
  "names": ["import_git", "path"]
7
7
  }
@@ -63,5 +63,5 @@ export declare const BASE_PROMPT_PROPS: {
63
63
  };
64
64
  export declare const SHOULD_CONTINUE_PROMPT: Select<"yes" | "no">;
65
65
  export declare const GIT_PATH_PROMPT: Input;
66
- export declare const TEMPLATE_PROMPT: Select<"express-rest-api" | "greeter" | "koa-rest-api" | "lambda-sqs-worker" | "lambda-sqs-worker-cdk" | "oss-npm-package" | "private-npm-package" | "github →">;
66
+ export declare const TEMPLATE_PROMPT: Select<"express-rest-api" | "greeter" | "koa-rest-api" | "lambda-sqs-worker-cdk" | "oss-npm-package" | "private-npm-package" | "github →">;
67
67
  export {};
package/lib/index.js CHANGED
@@ -26,15 +26,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var src_exports = {};
30
- __export(src_exports, {
29
+ var index_exports = {};
30
+ __export(index_exports, {
31
31
  Buildkite: () => Buildkite,
32
32
  Git: () => Git,
33
33
  GitHub: () => GitHub,
34
34
  Jest: () => Jest,
35
35
  Net: () => Net
36
36
  });
37
- module.exports = __toCommonJS(src_exports);
37
+ module.exports = __toCommonJS(index_exports);
38
38
  var Buildkite = __toESM(require("./api/buildkite"));
39
39
  var Git = __toESM(require("./api/git"));
40
40
  var GitHub = __toESM(require("./api/github"));
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
- export declare const TEMPLATE_NAMES: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package"];
2
+ export declare const TEMPLATE_NAMES: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package"];
3
3
  export type TemplateName = (typeof TEMPLATE_NAMES)[number];
4
- export declare const TEMPLATE_NAMES_WITH_BYO: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package", "github →"];
4
+ export declare const TEMPLATE_NAMES_WITH_BYO: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package", "github →"];
5
5
  interface TemplateDocumentationConfig {
6
6
  /**
7
7
  * The semantic version in which the template was first added.
@@ -48,7 +48,6 @@ const TEMPLATE_NAMES = [
48
48
  "express-rest-api",
49
49
  "greeter",
50
50
  "koa-rest-api",
51
- "lambda-sqs-worker",
52
51
  "lambda-sqs-worker-cdk",
53
52
  "oss-npm-package",
54
53
  "private-npm-package"
@@ -67,10 +66,6 @@ const TEMPLATE_DOCUMENTATION_CONFIG = {
67
66
  added: "3.4.1",
68
67
  filename: "api.md"
69
68
  },
70
- "lambda-sqs-worker": {
71
- added: "3.4.1",
72
- filename: "worker.md"
73
- },
74
69
  "lambda-sqs-worker-cdk": {
75
70
  added: "3.13.0",
76
71
  filename: "worker.md"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/template.ts"],
4
- "sourcesContent": ["import path from 'path';\n\nimport fs from 'fs-extra';\nimport { z } from 'zod';\n\nimport { projectTypeSchema } from './manifest';\nimport { packageManagerSchema } from './packageManager';\n\nexport const TEMPLATE_NAMES = [\n 'express-rest-api',\n 'greeter',\n 'koa-rest-api',\n 'lambda-sqs-worker',\n 'lambda-sqs-worker-cdk',\n 'oss-npm-package',\n 'private-npm-package',\n] as const;\n\nexport type TemplateName = (typeof TEMPLATE_NAMES)[number];\n\nexport const TEMPLATE_NAMES_WITH_BYO = [...TEMPLATE_NAMES, 'github \u2192'] as const;\n\ninterface TemplateDocumentationConfig {\n /**\n * The semantic version in which the template was first added.\n *\n * This is used to filter out historical changelogs.\n */\n added: string;\n\n /**\n * The Markdown file for the template in our `/docs`.\n *\n * This is used to compile per-template changelogs for our documentation site.\n */\n filename: string;\n}\n\nexport const TEMPLATE_DOCUMENTATION_CONFIG: Record<\n TemplateName,\n TemplateDocumentationConfig\n> = {\n 'express-rest-api': {\n added: '3.8.0',\n filename: 'api.md',\n },\n greeter: {\n added: '3.4.1',\n filename: 'barebones.md',\n },\n 'koa-rest-api': {\n added: '3.4.1',\n filename: 'api.md',\n },\n 'lambda-sqs-worker': {\n added: '3.4.1',\n filename: 'worker.md',\n },\n 'lambda-sqs-worker-cdk': {\n added: '3.13.0',\n filename: 'worker.md',\n },\n 'oss-npm-package': {\n added: '3.7.0',\n filename: 'package.md',\n },\n 'private-npm-package': {\n added: '3.6.0',\n filename: 'package.md',\n },\n};\n\nexport type TemplateConfig = z.infer<typeof templateConfigSchema>;\n\nexport const templateConfigSchema = z.object({\n fields: z.array(\n z.object({\n name: z.string(),\n message: z.string(),\n initial: z.string(),\n validate: z\n .function()\n .args(z.string())\n .returns(z.union([z.boolean(), z.string()]))\n .optional(),\n }),\n ),\n entryPoint: z.string().optional(),\n noSkip: z.boolean().optional(),\n packageManager: packageManagerSchema,\n type: projectTypeSchema.optional(),\n});\n\nexport const TEMPLATE_CONFIG_FILENAME = 'skuba.template.js';\n\nexport const TEMPLATE_DIR = path.join(__dirname, '..', '..', 'template');\n\nexport const BASE_TEMPLATE_DIR = path.join(TEMPLATE_DIR, 'base');\n\nexport const ensureTemplateConfigDeletion = (dir: string): Promise<void> =>\n fs.promises.rm(path.join(dir, TEMPLATE_CONFIG_FILENAME));\n\nexport const readBaseTemplateFile = (src: string): Promise<string> =>\n fs.promises.readFile(path.join(BASE_TEMPLATE_DIR, src), 'utf8');\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAe;AACf,iBAAkB;AAElB,sBAAkC;AAClC,4BAAqC;AAE9B,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,MAAM,0BAA0B,CAAC,GAAG,gBAAgB,eAAU;AAkB9D,MAAM,gCAGT;AAAA,EACF,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,qBAAqB;AAAA,IACnB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAIO,MAAM,uBAAuB,aAAE,OAAO;AAAA,EAC3C,QAAQ,aAAE;AAAA,IACR,aAAE,OAAO;AAAA,MACP,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,OAAO;AAAA,MAClB,SAAS,aAAE,OAAO;AAAA,MAClB,UAAU,aACP,SAAS,EACT,KAAK,aAAE,OAAO,CAAC,EACf,QAAQ,aAAE,MAAM,CAAC,aAAE,QAAQ,GAAG,aAAE,OAAO,CAAC,CAAC,CAAC,EAC1C,SAAS;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,YAAY,aAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,gBAAgB;AAAA,EAChB,MAAM,kCAAkB,SAAS;AACnC,CAAC;AAEM,MAAM,2BAA2B;AAEjC,MAAM,eAAe,YAAAA,QAAK,KAAK,WAAW,MAAM,MAAM,UAAU;AAEhE,MAAM,oBAAoB,YAAAA,QAAK,KAAK,cAAc,MAAM;AAExD,MAAM,+BAA+B,CAAC,QAC3C,gBAAAC,QAAG,SAAS,GAAG,YAAAD,QAAK,KAAK,KAAK,wBAAwB,CAAC;AAElD,MAAM,uBAAuB,CAAC,QACnC,gBAAAC,QAAG,SAAS,SAAS,YAAAD,QAAK,KAAK,mBAAmB,GAAG,GAAG,MAAM;",
4
+ "sourcesContent": ["import path from 'path';\n\nimport fs from 'fs-extra';\nimport { z } from 'zod';\n\nimport { projectTypeSchema } from './manifest';\nimport { packageManagerSchema } from './packageManager';\n\nexport const TEMPLATE_NAMES = [\n 'express-rest-api',\n 'greeter',\n 'koa-rest-api',\n 'lambda-sqs-worker-cdk',\n 'oss-npm-package',\n 'private-npm-package',\n] as const;\n\nexport type TemplateName = (typeof TEMPLATE_NAMES)[number];\n\nexport const TEMPLATE_NAMES_WITH_BYO = [...TEMPLATE_NAMES, 'github \u2192'] as const;\n\ninterface TemplateDocumentationConfig {\n /**\n * The semantic version in which the template was first added.\n *\n * This is used to filter out historical changelogs.\n */\n added: string;\n\n /**\n * The Markdown file for the template in our `/docs`.\n *\n * This is used to compile per-template changelogs for our documentation site.\n */\n filename: string;\n}\n\nexport const TEMPLATE_DOCUMENTATION_CONFIG: Record<\n TemplateName,\n TemplateDocumentationConfig\n> = {\n 'express-rest-api': {\n added: '3.8.0',\n filename: 'api.md',\n },\n greeter: {\n added: '3.4.1',\n filename: 'barebones.md',\n },\n 'koa-rest-api': {\n added: '3.4.1',\n filename: 'api.md',\n },\n 'lambda-sqs-worker-cdk': {\n added: '3.13.0',\n filename: 'worker.md',\n },\n 'oss-npm-package': {\n added: '3.7.0',\n filename: 'package.md',\n },\n 'private-npm-package': {\n added: '3.6.0',\n filename: 'package.md',\n },\n};\n\nexport type TemplateConfig = z.infer<typeof templateConfigSchema>;\n\nexport const templateConfigSchema = z.object({\n fields: z.array(\n z.object({\n name: z.string(),\n message: z.string(),\n initial: z.string(),\n validate: z\n .function()\n .args(z.string())\n .returns(z.union([z.boolean(), z.string()]))\n .optional(),\n }),\n ),\n entryPoint: z.string().optional(),\n noSkip: z.boolean().optional(),\n packageManager: packageManagerSchema,\n type: projectTypeSchema.optional(),\n});\n\nexport const TEMPLATE_CONFIG_FILENAME = 'skuba.template.js';\n\nexport const TEMPLATE_DIR = path.join(__dirname, '..', '..', 'template');\n\nexport const BASE_TEMPLATE_DIR = path.join(TEMPLATE_DIR, 'base');\n\nexport const ensureTemplateConfigDeletion = (dir: string): Promise<void> =>\n fs.promises.rm(path.join(dir, TEMPLATE_CONFIG_FILENAME));\n\nexport const readBaseTemplateFile = (src: string): Promise<string> =>\n fs.promises.readFile(path.join(BASE_TEMPLATE_DIR, src), 'utf8');\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAe;AACf,iBAAkB;AAElB,sBAAkC;AAClC,4BAAqC;AAE9B,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,MAAM,0BAA0B,CAAC,GAAG,gBAAgB,eAAU;AAkB9D,MAAM,gCAGT;AAAA,EACF,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAIO,MAAM,uBAAuB,aAAE,OAAO;AAAA,EAC3C,QAAQ,aAAE;AAAA,IACR,aAAE,OAAO;AAAA,MACP,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,OAAO;AAAA,MAClB,SAAS,aAAE,OAAO;AAAA,MAClB,UAAU,aACP,SAAS,EACT,KAAK,aAAE,OAAO,CAAC,EACf,QAAQ,aAAE,MAAM,CAAC,aAAE,QAAQ,GAAG,aAAE,OAAO,CAAC,CAAC,CAAC,EAC1C,SAAS;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,YAAY,aAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,gBAAgB;AAAA,EAChB,MAAM,kCAAkB,SAAS;AACnC,CAAC;AAEM,MAAM,2BAA2B;AAEjC,MAAM,eAAe,YAAAA,QAAK,KAAK,WAAW,MAAM,MAAM,UAAU;AAEhE,MAAM,oBAAoB,YAAAA,QAAK,KAAK,cAAc,MAAM;AAExD,MAAM,+BAA+B,CAAC,QAC3C,gBAAAC,QAAG,SAAS,GAAG,YAAAD,QAAK,KAAK,KAAK,wBAAwB,CAAC;AAElD,MAAM,uBAAuB,CAAC,QACnC,gBAAAC,QAAG,SAAS,SAAS,YAAAD,QAAK,KAAK,mBAAmB,GAAG,GAAG,MAAM;",
6
6
  "names": ["path", "fs"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skuba",
3
- "version": "9.2.0-main-20250114234022",
3
+ "version": "9.2.0-main-20250217113038",
4
4
  "private": false,
5
5
  "description": "SEEK development toolkit for backend applications and packages",
6
6
  "homepage": "https://github.com/seek-oss/skuba#readme",
@@ -64,7 +64,7 @@
64
64
  "dotenv": "^16.0.0",
65
65
  "ejs": "^3.1.6",
66
66
  "enquirer": "^2.3.6",
67
- "esbuild": "~0.24.0",
67
+ "esbuild": "~0.25.0",
68
68
  "eslint": "^9.11.1",
69
69
  "execa": "^5.0.0",
70
70
  "fast-glob": "^3.3.2",
@@ -85,7 +85,7 @@
85
85
  "npm-run-path": "^4.0.1",
86
86
  "npm-which": "^3.0.1",
87
87
  "picomatch": "^4.0.0",
88
- "prettier": "~3.4.0",
88
+ "prettier": "~3.5.0",
89
89
  "prettier-plugin-packagejson": "^2.4.10",
90
90
  "read-pkg-up": "^7.0.1",
91
91
  "semantic-release": "^22.0.12",
@@ -99,15 +99,15 @@
99
99
  "typescript": "~5.7.0",
100
100
  "validate-npm-package-name": "^6.0.0",
101
101
  "zod": "^3.22.4",
102
- "eslint-config-skuba": "5.1.0-main-20250114234022"
102
+ "eslint-config-skuba": "5.1.0-main-20250217113038"
103
103
  },
104
104
  "devDependencies": {
105
- "@changesets/cli": "2.27.11",
105
+ "@changesets/cli": "2.27.12",
106
106
  "@changesets/get-github-info": "0.6.0",
107
107
  "@jest/reporters": "29.7.0",
108
108
  "@jest/test-result": "29.7.0",
109
109
  "@types/ejs": "3.1.5",
110
- "@types/express": "4.17.21",
110
+ "@types/express": "5.0.0",
111
111
  "@types/fs-extra": "11.0.4",
112
112
  "@types/koa": "2.15.0",
113
113
  "@types/libnpmsearch": "2.0.7",
@@ -115,20 +115,20 @@
115
115
  "@types/minimist": "1.2.5",
116
116
  "@types/module-alias": "2.0.4",
117
117
  "@types/npm-which": "3.0.3",
118
- "@types/picomatch": "3.0.1",
118
+ "@types/picomatch": "3.0.2",
119
119
  "@types/semver": "7.5.8",
120
120
  "@types/supertest": "6.0.2",
121
121
  "@types/validate-npm-package-name": "4.0.2",
122
- "enhanced-resolve": "5.18.0",
123
- "express": "4.21.2",
124
- "fastify": "5.2.0",
122
+ "enhanced-resolve": "5.18.1",
123
+ "express": "5.0.1",
124
+ "fastify": "5.2.1",
125
125
  "jest-diff": "29.7.0",
126
126
  "jsonfile": "6.1.0",
127
- "koa": "2.15.3",
128
- "memfs": "4.15.1",
127
+ "koa": "2.15.4",
128
+ "memfs": "4.17.0",
129
129
  "remark-cli": "12.0.1",
130
- "remark-preset-lint-recommended": "7.0.0",
131
- "semver": "7.6.3",
130
+ "remark-preset-lint-recommended": "7.0.1",
131
+ "semver": "7.7.1",
132
132
  "supertest": "7.0.0",
133
133
  "type-fest": "2.19.0"
134
134
  },
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "baseUrl": ".",
4
- "lib": ["ES2022"],
4
+ "lib": ["ES2024"],
5
5
  "outDir": "lib",
6
6
  "paths": {
7
7
  "src": ["src"]
8
8
  },
9
- "target": "ES2022"
9
+ "target": "ES2024"
10
10
  },
11
11
  "exclude": ["lib*/**/*"],
12
12
  "extends": "skuba/config/tsconfig.json"
@@ -57,7 +57,7 @@ steps:
57
57
  - *aws-sm
58
58
  - *private-npm
59
59
  - *docker-ecr-cache
60
- - docker-compose#v5.5.0:
60
+ - docker-compose#v5.6.0:
61
61
  run: app
62
62
  environment:
63
63
  - GITHUB_API_TOKEN
@@ -70,7 +70,7 @@ steps:
70
70
  - *aws-sm
71
71
  - *private-npm
72
72
  - *docker-ecr-cache
73
- - seek-jobs/gantry#v3.0.0:
73
+ - seek-jobs/gantry#v4.0.0:
74
74
  command: build
75
75
  file: gantry.build.yml
76
76
  region: <%- region %>
@@ -87,7 +87,7 @@ steps:
87
87
  concurrency_group: <%- teamName %>/deploy/gantry/<%- devGantryEnvironmentName %>
88
88
  key: deploy-dev
89
89
  plugins:
90
- - seek-jobs/gantry#v3.0.0:
90
+ - seek-jobs/gantry#v4.0.0:
91
91
  command: apply
92
92
  environment: <%- devGantryEnvironmentName %>
93
93
  file: gantry.apply.yml
@@ -102,7 +102,7 @@ steps:
102
102
  concurrency_group: <%- teamName %>/deploy/gantry/<%- prodGantryEnvironmentName %>
103
103
  depends_on: deploy-dev
104
104
  plugins:
105
- - seek-jobs/gantry#v3.0.0:
105
+ - seek-jobs/gantry#v4.0.0:
106
106
  command: apply
107
107
  environment: <%- prodGantryEnvironmentName %>
108
108
  file: gantry.apply.yml
@@ -9,6 +9,5 @@ image: '{{values "prodAccountId"}}.dkr.ecr.<%- region %>.amazonaws.com/{{values
9
9
  # datadogSecretId: arn:aws:secretsmanager:<%- region %>:<aws-account-id>:secret:<secret-name>
10
10
 
11
11
  tags:
12
- seek:source:sha: '{{.CommitSHA}}'
13
12
  seek:source:url: 'https://github.com/SEEK-Jobs/<%- repoName %>'
14
- # seek:system:name: 'TODO: https://rfc.skinfra.xyz/RFC019-AWS-Tagging-Standard.html#required-tags'
13
+ # seek:system:name: 'TODO: https://rfc.skinfra.xyz/RFC051-AWS-Tagging-Standard.html#tagging-schema'
@@ -1 +1 @@
1
- 20
1
+ 22
@@ -12,7 +12,7 @@ RUN pnpm install --offline --prod
12
12
 
13
13
  ###
14
14
 
15
- FROM gcr.io/distroless/nodejs20-debian12 AS runtime
15
+ FROM gcr.io/distroless/nodejs22-debian12 AS runtime
16
16
 
17
17
  WORKDIR /workdir
18
18
 
@@ -1,6 +1,6 @@
1
- # syntax=docker/dockerfile:1.12
1
+ # syntax=docker/dockerfile:1.13
2
2
 
3
- FROM public.ecr.aws/docker/library/node:20-alpine AS dev-deps
3
+ FROM public.ecr.aws/docker/library/node:22-alpine AS dev-deps
4
4
 
5
5
  RUN --mount=type=bind,source=package.json,target=package.json \
6
6
  corepack enable pnpm && corepack install
@@ -14,22 +14,22 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@seek/logger": "^9.0.0",
17
- "express": "^4.17.1",
17
+ "express": "^5.0.0",
18
18
  "hot-shots": "^10.0.0",
19
19
  "seek-datadog-custom-metrics": "^4.6.3",
20
20
  "skuba-dive": "^2.0.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/express": "^5.0.0",
24
- "@types/node": "^20.16.5",
24
+ "@types/node": "^22.13.1",
25
25
  "@types/supertest": "^6.0.0",
26
26
  "mime": "^4.0.1",
27
27
  "pino-pretty": "^13.0.0",
28
28
  "skuba": "*",
29
29
  "supertest": "^7.0.0"
30
30
  },
31
- "packageManager": "pnpm@9.15.3",
31
+ "packageManager": "pnpm@9.15.4",
32
32
  "engines": {
33
- "node": ">=20"
33
+ "node": ">=22"
34
34
  }
35
35
  }
@@ -38,7 +38,7 @@ steps:
38
38
  - *aws-sm
39
39
  - *private-npm
40
40
  - *docker-ecr-cache
41
- - docker-compose#v5.5.0:
41
+ - docker-compose#v5.6.0:
42
42
  run: app
43
43
  environment:
44
44
  - GITHUB_API_TOKEN
@@ -1 +1 @@
1
- 20
1
+ 22
@@ -1,6 +1,6 @@
1
- # syntax=docker/dockerfile:1.12
1
+ # syntax=docker/dockerfile:1.13
2
2
 
3
- FROM public.ecr.aws/docker/library/node:20-alpine AS dev-deps
3
+ FROM public.ecr.aws/docker/library/node:22-alpine AS dev-deps
4
4
 
5
5
  RUN --mount=type=bind,source=package.json,target=package.json \
6
6
  corepack enable pnpm && corepack install
@@ -69,7 +69,7 @@ It does not assume a deployment method or environment.
69
69
  For inspiration in this space, check out:
70
70
 
71
71
  - The `koa-rest-api` template for containerised deployments
72
- - The `lambda-sqs-worker` template for Lambda deployments
72
+ - The `lambda-sqs-worker-cdk` template for Lambda deployments
73
73
 
74
74
  ## Support
75
75
 
@@ -16,11 +16,11 @@
16
16
  "skuba-dive": "^2.0.0"
17
17
  },
18
18
  "devDependencies": {
19
- "@types/node": "^20.9.0",
20
- "skuba": "9.2.0-main-20250114234022"
19
+ "@types/node": "^22.13.1",
20
+ "skuba": "9.2.0-main-20250217113038"
21
21
  },
22
- "packageManager": "pnpm@9.15.3",
22
+ "packageManager": "pnpm@9.15.4",
23
23
  "engines": {
24
- "node": ">=20"
24
+ "node": ">=22"
25
25
  }
26
26
  }
@@ -57,7 +57,7 @@ steps:
57
57
  - *aws-sm
58
58
  - *private-npm
59
59
  - *docker-ecr-cache
60
- - docker-compose#v5.5.0:
60
+ - docker-compose#v5.6.0:
61
61
  run: app
62
62
  environment:
63
63
  - GITHUB_API_TOKEN
@@ -70,7 +70,7 @@ steps:
70
70
  - *aws-sm
71
71
  - *private-npm
72
72
  - *docker-ecr-cache
73
- - seek-jobs/gantry#v3.0.0:
73
+ - seek-jobs/gantry#v4.0.0:
74
74
  command: build
75
75
  file: gantry.build.yml
76
76
  region: <%- region %>
@@ -87,7 +87,7 @@ steps:
87
87
  concurrency_group: <%- teamName %>/deploy/gantry/<%- devGantryEnvironmentName %>
88
88
  key: deploy-dev
89
89
  plugins:
90
- - seek-jobs/gantry#v3.0.0:
90
+ - seek-jobs/gantry#v4.0.0:
91
91
  command: apply
92
92
  environment: <%- devGantryEnvironmentName %>
93
93
  file: gantry.apply.yml
@@ -102,7 +102,7 @@ steps:
102
102
  concurrency_group: <%- teamName %>/deploy/gantry/<%- prodGantryEnvironmentName %>
103
103
  depends_on: deploy-dev
104
104
  plugins:
105
- - seek-jobs/gantry#v3.0.0:
105
+ - seek-jobs/gantry#v4.0.0:
106
106
  command: apply
107
107
  environment: <%- prodGantryEnvironmentName %>
108
108
  file: gantry.apply.yml
@@ -9,6 +9,5 @@ image: '{{values "prodAccountId"}}.dkr.ecr.<%- region %>.amazonaws.com/{{values
9
9
  # datadogSecretId: arn:aws:secretsmanager:<%- region %>:<aws-account-id>:secret:<secret-name>
10
10
 
11
11
  tags:
12
- seek:source:sha: '{{.CommitSHA}}'
13
12
  seek:source:url: 'https://github.com/SEEK-Jobs/<%- repoName %>'
14
- # seek:system:name: 'TODO: https://rfc.skinfra.xyz/RFC019-AWS-Tagging-Standard.html#required-tags'
13
+ # seek:system:name: 'TODO: https://rfc.skinfra.xyz/RFC051-AWS-Tagging-Standard.html#tagging-schema'
@@ -1 +1 @@
1
- 20
1
+ 22
@@ -12,7 +12,7 @@ RUN pnpm install --offline --prod
12
12
 
13
13
  ###
14
14
 
15
- FROM gcr.io/distroless/nodejs20-debian12 AS runtime
15
+ FROM gcr.io/distroless/nodejs22-debian12 AS runtime
16
16
 
17
17
  WORKDIR /workdir
18
18
 
@@ -1,6 +1,6 @@
1
- # syntax=docker/dockerfile:1.12
1
+ # syntax=docker/dockerfile:1.13
2
2
 
3
- FROM public.ecr.aws/docker/library/node:20-alpine AS dev-deps
3
+ FROM public.ecr.aws/docker/library/node:22-alpine AS dev-deps
4
4
 
5
5
  RUN --mount=type=bind,source=package.json,target=package.json \
6
6
  corepack enable pnpm && corepack install
@@ -36,7 +36,7 @@
36
36
  "@types/co-body": "^6.1.3",
37
37
  "@types/koa": "^2.13.4",
38
38
  "@types/koa__router": "^12.0.0",
39
- "@types/node": "^20.16.5",
39
+ "@types/node": "^22.13.1",
40
40
  "@types/supertest": "^6.0.0",
41
41
  "chance": "^1.1.8",
42
42
  "mime": "^4.0.1",
@@ -44,8 +44,8 @@
44
44
  "skuba": "*",
45
45
  "supertest": "^7.0.0"
46
46
  },
47
- "packageManager": "pnpm@9.15.3",
47
+ "packageManager": "pnpm@9.15.4",
48
48
  "engines": {
49
- "node": ">=20"
49
+ "node": ">=22"
50
50
  }
51
51
  }
@@ -232,7 +232,6 @@ describe('createApp', () => {
232
232
  const err = chance.sentence();
233
233
 
234
234
  middleware.mockImplementation(() => {
235
- // eslint-disable-next-line @typescript-eslint/only-throw-error
236
235
  throw err;
237
236
  });
238
237
 
@@ -5,13 +5,13 @@
5
5
  // open-telemetry/opentelemetry-js#3580
6
6
  "DOM",
7
7
 
8
- "ES2022"
8
+ "ES2024"
9
9
  ],
10
10
  "outDir": "lib",
11
11
  "paths": {
12
12
  "src": ["src"]
13
13
  },
14
- "target": "ES2022"
14
+ "target": "ES2024"
15
15
  },
16
16
  "exclude": ["lib*/**/*"],
17
17
  "extends": "skuba/config/tsconfig.json"
@@ -33,7 +33,7 @@ configs:
33
33
  - *aws-sm
34
34
  - *private-npm
35
35
  - *docker-ecr-cache
36
- - docker-compose#v5.5.0:
36
+ - docker-compose#v5.6.0:
37
37
  dependencies: false
38
38
  run: app
39
39
  environment:
@@ -63,7 +63,7 @@ steps:
63
63
  - *aws-sm
64
64
  - *private-npm
65
65
  - *docker-ecr-cache
66
- - docker-compose#v5.5.0:
66
+ - docker-compose#v5.6.0:
67
67
  run: app
68
68
  environment:
69
69
  - GITHUB_API_TOKEN
@@ -1 +1 @@
1
- 20
1
+ 22
@@ -1,9 +1,9 @@
1
- # syntax=docker/dockerfile:1.12
1
+ # syntax=docker/dockerfile:1.13
2
2
 
3
- FROM public.ecr.aws/docker/library/node:20-alpine AS dev-deps
3
+ FROM public.ecr.aws/docker/library/node:22-alpine AS dev-deps
4
4
 
5
5
  # Needed for cdk
6
- RUN apk add --no-cache bash
6
+ RUN apk add --no-cache bash git
7
7
 
8
8
  RUN --mount=type=bind,source=package.json,target=package.json \
9
9
  corepack enable pnpm && corepack install
@@ -227,7 +227,7 @@ exports[`returns expected CloudFormation stack for dev 1`] = `
227
227
  "Arn",
228
228
  ],
229
229
  },
230
- "Runtime": "nodejs20.x",
230
+ "Runtime": "nodejs22.x",
231
231
  "Tags": [
232
232
  {
233
233
  "Key": "aws-codedeploy-hooks",
@@ -953,7 +953,7 @@ exports[`returns expected CloudFormation stack for prod 1`] = `
953
953
  "Arn",
954
954
  ],
955
955
  },
956
- "Runtime": "nodejs20.x",
956
+ "Runtime": "nodejs22.x",
957
957
  "Tags": [
958
958
  {
959
959
  "Key": "aws-codedeploy-hooks",
@@ -80,7 +80,7 @@ export class AppStack extends Stack {
80
80
 
81
81
  const worker = new aws_lambda_nodejs.NodejsFunction(this, 'worker', {
82
82
  architecture: aws_lambda.Architecture[architecture],
83
- runtime: aws_lambda.Runtime.NODEJS_20_X,
83
+ runtime: aws_lambda.Runtime.NODEJS_22_X,
84
84
  environmentEncryption: kmsKey,
85
85
  // aws-sdk-v3 sets this to true by default, so it is not necessary to set the environment variable
86
86
  // https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-reusing-connections.html
@@ -89,7 +89,7 @@ export class AppStack extends Stack {
89
89
  timeout: Duration.seconds(30),
90
90
  bundling: {
91
91
  sourceMap: true,
92
- target: 'node20',
92
+ target: 'node22',
93
93
  // aws-sdk-v3 is set as an external module by default, but we want it to be bundled with the function
94
94
  externalModules: [],
95
95
  nodeModules: ['datadog-lambda-js', 'dd-trace'],
@@ -4,7 +4,7 @@ const ENVIRONMENTS = ['dev', 'prod'] as const;
4
4
 
5
5
  type Environment = (typeof ENVIRONMENTS)[number];
6
6
 
7
- export const environment = Env.oneOf(ENVIRONMENTS)('ENVIRONMENT');
7
+ const environment = Env.oneOf(ENVIRONMENTS)('ENVIRONMENT');
8
8
 
9
9
  interface Config {
10
10
  appName: string;
@@ -2,17 +2,15 @@ import { HookStack } from '@seek/aws-codedeploy-infra';
2
2
  import { App } from 'aws-cdk-lib';
3
3
 
4
4
  import { AppStack } from './appStack';
5
- import { config, environment } from './config';
5
+ import { config } from './config';
6
6
 
7
7
  const app = new App();
8
8
 
9
9
  const appStack = new AppStack(app, 'appStack', {
10
10
  stackName: config.appName,
11
11
  tags: {
12
- 'seek:env:label': environment,
13
- 'seek:source:sha': process.env.BUILDKITE_COMMIT ?? 'na',
14
- // 'seek:source:url': 'TODO: add source URL',
15
- // 'seek:system:name': 'TODO: add system name',
12
+ 'seek:source:url': 'https://github.com/SEEK-Jobs/<%- repoName %>',
13
+ // 'seek:system:name': 'TODO: https://rfc.skinfra.xyz/RFC051-AWS-Tagging-Standard.html#tagging-schema',
16
14
  },
17
15
  });
18
16
 
@@ -27,7 +27,7 @@
27
27
  "@seek/aws-codedeploy-infra": "^2.1.0",
28
28
  "@types/aws-lambda": "^8.10.82",
29
29
  "@types/chance": "^1.1.3",
30
- "@types/node": "^20.16.5",
30
+ "@types/node": "^22.13.1",
31
31
  "aws-cdk": "^2.167.1",
32
32
  "aws-cdk-lib": "^2.167.1",
33
33
  "aws-sdk-client-mock": "^4.0.0",
@@ -36,10 +36,10 @@
36
36
  "constructs": "^10.0.17",
37
37
  "datadog-cdk-constructs-v2": "^1.18.0",
38
38
  "pino-pretty": "^13.0.0",
39
- "skuba": "9.2.0-main-20250114234022"
39
+ "skuba": "9.2.0-main-20250217113038"
40
40
  },
41
- "packageManager": "pnpm@9.15.3",
41
+ "packageManager": "pnpm@9.15.4",
42
42
  "engines": {
43
- "node": ">=20"
43
+ "node": ">=22"
44
44
  }
45
45
  }