Skip to content

Latest commit

 

History

History
1727 lines (1083 loc) · 85.3 KB

CHANGELOG.md

File metadata and controls

1727 lines (1083 loc) · 85.3 KB

skuba

4.4.0

Minor Changes

  • deps: Jest 29 (#953)

    This major release includes breaking changes. See the announcement post for more information.

    The collectCoverageOnlyFrom configuration option has been removed, and the default snapshot format has been simplified:

    - Expected: \\"a\\"
    + Expected: "a"
    
    - Object {
    -   Array []
    - }
    + {
    +   []
    + }
  • configure, init: Format package.json with sort-package-json (#951)

  • deps: TypeScript 4.8 (#954)

    This major release includes breaking changes. See the TypeScript 4.8 announcement for more information.

Patch Changes

  • configure, template: Ignore linting on .cdk.staging directory (#957)

  • configure, template: Ignore linting on cdk.out directory (#940)

  • template/*-npm-package: Use SSH scheme in repository URL (#955)

    We have changed the package.json#repository/url format from git+https://github.com/org/repo.git to git+ssh://git@github.com/org/repo.git. This may resolve skuba release errors that reference Git password authentication is shutting down on the GitHub Blog.

  • configure, template: Allow .idea and .vscode ignore overrides (#956)

    You can now append lines like !.vscode/launch.json to your ignore files to allow specific editor files to be committed, formatted and/or linted.

4.3.1

Patch Changes

  • deps: jest-watch-typeahead ^2.0.0 (#925)

  • template/*-rest-api: seek-jobs/gantry v2.0.0 (#935)

  • template/lambda-sqs-worker: Remove tty disable from pipeline (#918)

  • test: Prefer verbose failure message in execution error annotations (#910)

  • template/lambda-sqs-worker: Remove unnecessary IAM permission (#908)

  • template: Fix README link to ARM64 guide (#913)

  • template/*-rest-api: Fix Gantry documentation links (#931)

4.3.0

Minor Changes

  • test: Add jest-watch-typeahead plugin (#893)

    This enables typeahead suggestions when filtering by file or test name in watch mode.

  • Git: Add fastForwardBranch function (#882)

  • deps: TypeScript 4.7 (#877)

    This major release includes breaking changes. See the TypeScript 4.7 announcement for more information.

    While ECMAScript Module support for Node.js is now stable in TypeScript, other aspects of our toolchain have not caught up yet; notably, Node.js still lacks stable APIs for Jest to implement its usual suite of mocking capabilities. We are holding off on recommending existing repositories to make the switch and on providing reference implementations via our templates. As it stands, migrating from CJS to ESM is still an arduous exercise in rewriting import statements and restructuring mocks and test suites at the bare minimum.

  • GitHub: Add functions to create and upload verified commits using the GitHub GraphQL API (#882)

    See our GitHub API documentation for more information.

  • deps: Prettier 2.7 (#899)

    See the release notes for more information.

Patch Changes

  • test: Improve file detection for GitHub annotations (#885)

  • deps: package-json ^7.0.0 (#903)

    Resolves SNYK-JS-GOT-2932019.

  • template/*-rest-api: seek-jobs/gantry v1.8.1 (#887)

  • template/*: Remove .me files (#902)

    SEEK is moving away from Codex to off-the-shelf software powered by Backstage catalog-info.yaml files.

    At the moment we're only asking teams to document their systems, which typically span across multiple repositories. We may add catalog-info.yaml files back to the templates if there's a need for teams to document their components at a repository level.

  • lint: Use GitHub GraphQL API to upload verified autofix commits (#882)

  • template: Use ARM64 architecture (#873)

    We now recommend building and running projects on ARM64 hardware for greater cost efficiency. This requires a Graviton-based Buildkite cluster; see our ARM64 guide for more information.

4.2.2

Patch Changes

  • template/lambda-sqs-worker: Avoid mutation of logger context (#879)

    We now perform a shallow copy when retrieving the logger context from AsyncLocalStorage.

    - mixin: () => loggerContext.getStore() ?? {},
    + mixin: () => ({ ...loggerContext.getStore() }),

4.2.1

Patch Changes

  • template/private-npm-package: Use npm2 build agent queue (#843)

  • lint, test: Set timeout for Buildkite and GitHub integrations (#835)

    Transient network failures can impact annotations and autofixes. We now specify a 30 second timeout for these integration features to prevent them from hanging and indefinitely preoccupying your build agents.

  • template: Time out Buildkite test steps after 10 minutes (#842)

    Successful testing and linting should complete within this window. This timeout prevents commands from hanging and indefinitely preoccupying your Buildkite agents.

    steps:
      - label: 🧪 Test & Lint
    +   timeout_in_minutes: 10
  • cli: Make warning logs more verbose (#826)

  • template/lambda-sqs-worker: Change deployment method to direct (#868)

  • template/koa-rest-api: Use AsyncLocalStorage to track logger context (#864)

    We now employ RequestLogging.createContextStorage to thread logging context through the middleware stack of your Koa application. This enables use of a singleton logger instance instead of manually propagating Koa context and juggling rootLoggers and contextLoggers.

    Before:

    import createLogger from '@seek/logger';
    import Koa, { Context } from 'koa';
    import { RequestLogging } from 'seek-koala';
    
    const rootLogger = createLogger();
    
    const contextLogger = (ctx: Context) =>
      rootLogger.child(RequestLogging.contextFields(ctx));
    
    const app = new Koa().use((ctx) => {
      rootLogger.info('Has no context');
    
      contextLogger(ctx).info('Has context');
    });

    After:

    import createLogger from '@seek/logger';
    import Koa from 'koa';
    import { RequestLogging } from 'seek-koala';
    
    const { createContextMiddleware, mixin } =
      RequestLogging.createContextStorage();
    
    const contextMiddleware = createContextMiddleware();
    
    const logger = createLogger({ mixin });
    
    const app = new Koa().use(contextMiddleware).use((ctx) => {
      logger.info('Has context');
    });
  • template/lambda-sqs-worker: Use AsyncLocalStorage to track logger context (#871)

    We now employ this Node.js API to thread logging context through the handler of your Lambda function. This enables use of a singleton logger instance instead of manually propagating Lambda context and juggling rootLoggers and contextLoggers, and is equivalent to #864.

    Before:

    import createLogger from '@seek/logger';
    import { Context } from 'aws-lambda';
    
    const rootLogger = createLogger();
    
    const contextLogger = ({ awsRequestId }: Context) =>
      rootLogger.child({ awsRequestId });
    
    const handler = async (_event: unknown, ctx: Context) => {
      rootLogger.info('Has no context');
    
      contextLogger(ctx).info('Has context');
    };

    After:

    import { AsyncLocalStorage } from 'async_hooks';
    
    import createLogger from '@seek/logger';
    import { Context } from 'aws-lambda';
    
    const loggerContext = new AsyncLocalStorage<{ awsRequestId: string }>();
    
    const logger = createLogger({
      mixin: () => ({ ...loggerContext.getStore() }),
    });
    
    const handler = (_event: unknown, { awsRequestId }: Context) =>
      loggerContext.run({ awsRequestId }, async () => {
        logger.info('Has context');
      });
  • template/lambda-sqs-worker*: Bump Node.js version to 16 (#862)

  • build-package, lint: Improve detection of SEEK Buildkite queues for serial execution (#829)

  • lint: Detect and autofix ESLint warnings (#844)

  • lint: Skip autofixing when ESLint reports no fixable issues (#844)

  • format, lint: Avoid unnecessary template literals (#849)

    We now automatically convert unnecessary template literals into single-quoted strings for consistency.

  • deps: Jest 28 (#856)

    This major release includes breaking changes. See the announcement post for more information.

4.2.0

Minor Changes

  • deps: TypeScript 4.6 (#811)

    This major release includes breaking changes. See the TypeScript 4.5 and TypeScript 4.6 announcements for more information.

  • lint: Autofix in CI (#800)

    skuba lint can now automatically push ESLint and Prettier autofixes. This eases adoption of linting rule changes and automatically resolves issues arising from a forgotten skuba format.

    You'll need to configure your CI environment to support this feature. See our GitHub autofixes documentation to learn more.

  • deps: ESLint 8 + eslint-config-seek 9 (#806)

    These major upgrades bundle new parser and plugin versions. See the ESLint 8 guide and eslint-config-seek 9 release for more details on the underlying changes.

    We've introduced new linting rules like @typescript-eslint/no-unsafe-argument, and resolved the following installation warning:

    babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.

    If you wish to relax some of the new rules, extend your .eslintrc.js config:

    module.exports = {
      extends: ['skuba'],
      rules: {
        // Demote new TypeScript ESLint rule from 'error' to 'warn'.
        '@typescript-eslint/no-unsafe-argument': 'warn',
      },
    };

Patch Changes

  • template/lambda-sqs-worker-cdk: Fix progress configuration in cdk.json (#797)

  • Jest.mergePreset: Allow additional props via type parameter (#806)

  • Git.currentBranch: Add helper function (#804)

  • test: Strip ANSI escape codes from error messages for GitHub annotations (#825)

  • Git.commitAllChanges: Skip commit and return undefined when there are no changes (#804)

  • template/oss-npm-package: Lock down GitHub workflow permissions (#807)

    This aligns with OpenSSF guidance.

  • template: Propagate Buildkite environment variables for lint autofixing (#800)

  • template: Exclude DOM type definitions by default (#822)

    TypeScript will now raise compiler errors when DOM globals like document and window are referenced in new projects. This catches unsafe usage of Web APIs that will throw exceptions in a Node.js context.

    If you are developing a new npm package for browser use or require specific Node.js-compatible Web APIs like the Encoding API, you can opt in to DOM type definitions in your tsconfig.json:

    {
      "compilerOptions": {
    -   "lib": ["ES2020"]
    +   "lib": ["DOM", "ES2020"]
      }
    }

    If you have an existing backend project, you can opt out of DOM type definitions in your tsconfig.json.

    For Node.js 14:

    {
      "compilerOptions": {
    +   "lib": ["ES2020"],
        "target": "ES2020"
      }
    }

    For Node.js 16:

    {
      "compilerOptions": {
    +   "lib": ["ES2021"],
        "target": "ES2021"
      }
    }
  • Git.getOwnerAndRepo: Support reading from CI environment variables (#804)

  • Git.getHeadCommitMessage: Add helper function (#804)

  • template/*-rest-api: Avoid alternative syntax for ENV instructions (#823)

    Omitting the = symbol in ENV instructions is discouraged and may be disallowed in future.

    - ENV NODE_ENV production
    + ENV NODE_ENV=production
  • template/oss-npm-package: Pin GitHub action versions (#805)

  • template/*-rest-api: seek-jobs/gantry v1.7.0 (#824)

4.1.1

Patch Changes

  • template: Disable type checking in tests (#787)

    Newly initialised projects will skip TypeScript type checking on skuba test as it's already covered by skuba lint. You can now iterate on your tests without running into annoying compilation errors like TS6133 (unused declarations).

    This will be defaulted for existing projects in a future major version. You can opt in early by setting the globals configuration option in your jest.config.ts:

    export default Jest.mergePreset({
      globals: {
        'ts-jest': {
          // seek-oss/skuba#626
          isolatedModules: true,
        },
      },
      // Rest of config
    });
  • template: Specify default Buildkite agent (#775)

  • format, lint: Suppress eslint-plugin-react warning (#786)

    Warning: React version was set to "detect" in eslint-plugin-react settings, but the "react" package is not installed. Assuming latest React version for linting.
  • deps: Prettier 2.6 (#792)

    See the release notes for more information.

  • node: Throw unhandled rejections under Node.js 14 (#777)

    When a rejected promise is left unhandled in Node.js 14, it simply logs a warning. This caused skuba node to effectively swallow such failures and report a process exit code of 0. We now override this behaviour with --unhandled-rejections=throw to predictably fail with a non-zero exit code across supported Node.js versions.

  • template/*-rest-api: seek-jobs/gantry v1.6.2 (#778)

4.1.0

Minor Changes

  • node, start: Load environment variables from .env file (#774)

  • deps: ts-node ^10.5.0 (#764)

    This major release includes breaking changes. If your project uses a complex ts-node configuration either directly or on top of skuba node and skuba start, see the changelog for more information.

Patch Changes

  • template: skuba-dive ^2.0.0 (#766)

  • template/lambda-sqs-worker: Remove variablesResolutionMode (#768)

    This resolves the following deprecation warning in Serverless Framework v3:

    Starting with v3.0, the "variablesResolutionMode" option is now useless. You can safely remove it from the configuration
    More info: https://serverless.com/framework/docs/deprecations/#VARIABLES_RESOLUTION_MODE
  • template/*-rest-api: Ignore deployment alarms and ECR scanning (#773)

  • configure: Fix @seek/seek-module-toolkit migration guide link (#762)

  • template/lambda-sqs-worker-cdk: Add NODE_ENV=production to environment variables (#763)

  • template/lambda-sqs-worker: Add NODE_ENV=production to environment variables (#763)

  • deps: ts-node-dev ^2.0.0-0 (#764)

  • template/lambda-sqs-worker: Move environment variables to provider.environment to reduce repetition (#767)

4.0.0

Major Changes

  • deps: Require Node.js 14.18+ (#760)

    Node.js 12 will reach end of life by April 2022. The semantic-release package and stable --enable-source-maps flag necessitate this new minimum version.

    Consider upgrading the Node.js version for your project across:

    • .nvmrc
    • package.json#/engines/node
    • CI/CD configuration (.buildkite/pipeline.yml, Dockerfile, etc.)
  • deps: semantic-release ^19.0.0 (#757)

    Resolves SNYK-JS-MARKED-2342073 and SNYK-JS-MARKED-2342082.

    This may alleviate the following skuba release error:

    [semantic-release] › ✖  EGHNOPERMISSION The GitHub token doesn't allow to push on the repository owner/repo.
    The user associated with the GitHub token (https://github.com/semantic-release/github/blob/master/README.md#github-authentication) configured in the GH_TOKEN or GITHUB_TOKEN environment variable must allows to push to the repository owner/repo.
  • template: Use --enable-source-maps (#761)

    Stable source map support has landed in Node.js 14.18+ via the built-in --enable-source-maps option.

    We recommend migrating off of custom source map implementations in favour of this option. Upgrading to skuba-dive v2 will remove source-map-support from the skuba-dive/register hook.

    For a containerised application, update your Dockerfile:

    - FROM gcr.io/distroless/nodejs:12 AS runtime
    + FROM gcr.io/distroless/nodejs:16 AS runtime
    
    + # https://nodejs.org/api/cli.html#cli_node_options_options
    + ENV NODE_OPTIONS=--enable-source-maps

    For a Serverless Lambda application, update your serverless.yml:

    provider:
    - runtime: nodejs12.x
    + runtime: nodejs14.x
    
    functions:
      Worker:
        environment:
    +     # https://nodejs.org/api/cli.html#cli_node_options_options
    +     NODE_OPTIONS: --enable-source-maps

    For a CDK Lambda application, update your stack:

    new aws_lambda.Function(this, 'worker', {
    - runtime: aws_lambda.Runtime.NODEJS_12_X,
    + runtime: aws_lambda.Runtime.NODEJS_14_X,
      environment: {
    +   // https://nodejs.org/api/cli.html#cli_node_options_options
    +   NODE_OPTIONS: '--enable-source-maps',
      },
    });

Patch Changes

  • template/lambda-sqs-worker: Disable tty on deploy step (#753)

    Serverless Framework v3 renders progress spinners on interactive terminals. We recommend disabling tty in CI/CD for cleaner log output.

  • template/lambda-sqs-worker: serverless ^3.0.0 (#748)

  • template/lambda-sqs-worker: Replace custom.env configuration with params (#752)

    You can now define environment specific variables using the new Serverless parameters feature. See https://www.serverless.com/framework/docs/guides/parameters for more details.

  • template/*-rest-api: seek-jobs/gantry v1.6.1 (#759)

  • template/lambda-sqs-worker: Remove provider.lambdaHashingVersion (#751)

    This resolves the following deprecation warning in Serverless Framework v3:

    Setting "20201221" for "provider.lambdaHashingVersion" is no longer effective as new hashing algorithm is now used by default. You can safely remove this property from your configuration.
  • deps: eslint-config-skuba 1.0.14 (#758)

    This disables the tsdoc/syntax ESLint rule in tests for compatibility with /** @jest-environment env */ directives.

  • deps: isomorphic-git ^1.11.1 (#750)

    Resolves SNYK-JS-SIMPLEGET-2361683.

3.17.2

Patch Changes

  • init: Fix GitHub template cloning (#739)

    This resolves the following error when cloning a project template from GitHub:

    UnknownTransportError: Git remote "git@github.com:owner/repo.git" uses an unrecognized transport protocol: "ssh"
  • template/lambda-sqs-worker: Remove qualifier from smoke test invocation (#743)

    Previously, this template's smoke test hook specified a $LATEST qualifier in its Lambda.Invoke API call. AWS authorised the call based on the unqualified Lambda ARN in our serverless.yml IAM policy, but will stop doing so after April 2022.

    To avoid deployment failures, remove the qualifier in src/hooks.ts. An unqualified call is equivalent to targeting $LATEST.

    - Qualifier: '$LATEST',
    + Qualifier: undefined,
  • node: Register tsconfig-paths in REPL (#745)

    This resolves the following error:

    Error: Cannot find module '/node_modules/skuba/lib/register'
    Require stack:
    - internal/preload

3.17.1

Patch Changes

  • deps: ts-jest ^27.1.2 (#729)

    This resolves the following import issue in older 27.0.x versions of ts-jest:

    TypeError: pathsToModuleNameMapper is not a function
  • test: Restore Node.js 12 compatibility (#730)

    This resolves the following error in Node.js 12 environments:

    Object.entries(parsedConfig.options.paths ?? DEFAULT_PATHS).flatMap(
                                               ^
    
    SyntaxError: Unexpected token '?'

    Note that Node.js 12 will reach its end of life in May 2022.

3.17.0

Minor Changes

  • template/koa-rest-api: Add opt-in OpenTelemetry support (#706)

  • deps: Prettier 2.5 (#701)

    See the release notes for more information.

  • node, start: Register tsconfig-paths (#678)

    You can now define module aliases other than src for local development and scripting. Specify these through the paths compiler option in your tsconfig.json:

    // tsconfig.json
    {
      "compilerOptions": {
        "baseUrl": ".",
        "paths": {
          "src": ["src"]
        }
      }
    }
  • GitHub.buildNameFromEnvironment: Export helper function (#676)

  • jest: Support tsconfig.json paths (#698)

    Module aliases other than src are now supported in skuba test. Our Jest preset includes a dynamic moduleNameMapper that reads the paths compiler option from your tsconfig.json.

  • git: Export helper functions (#689)

  • test: Add GitHub check run annotations (#648)

    skuba test can now automatically annotate GitHub commits when you propagate CI environment variables and a GitHub API token. These annotations also appear inline with code under the “Files changed” tab in pull requests.

  • GitHub.getPullRequestNumber: Export helper function (#690)

  • GitHub.putIssueComment: Export helper function (#690)

    This enables use cases like a persistent bot comment at the top of a pull request a la Changesets that reflects the current status of a CI check.

  • GitHub.enabledFromEnvironment: Export helper function (#676)

Patch Changes

  • GitHub.createCheckRun: Support text parameter (#673)

  • template: Retrieve GitHub token on Test & Lint (#667)

  • template: serverless-prune-plugin ^2.0.0 (#719)

  • test: Fix ts-jest imports (#715)

    This resolves the following warning:

    Replace any occurrences of "ts-jest/utils" with just "ts-jest".

    If you're using the mocked utility from ts-jest, switch over to the built-in Jest function:

    import git from 'isomorphic-git';
    - import { mocked } from 'ts-jest';
    
    jest.mock('isomorphic-git');
    
    - mocked(git.commit).mockResolvedValue('');
    + jest.mocked(git.commit).mockResolvedValue('');
  • template/lambda-sqs-worker-cdk: Migrate to AWS CDK v2 (#714)

  • node, start: Deregister source-map-support (#679)

    ts-node takes care of this for us.

  • template/lambda-sqs-worker-cdk: Fix docker-compose volume mount and deploy output (#695)

  • Jest.mergePreset: Allow displayName and projects (#648)

3.16.2

Patch Changes

  • format, lint: Skip reading unsupported Prettier files into memory (#662)

  • format, lint: Fix file descriptor warnings (#664)

    This resolves the following warning when processing files that Prettier cannot parse:

    (node:123) Warning: File descriptor 456 closed but not opened in unmanaged mode

3.16.1

Patch Changes

  • deps: Include @octokit/types (#660)

    This should fix the following compilation error:

    node_modules/skuba/lib/api/github/checkRun.d.ts(2,45): error TS2339: Property 'POST /repos/{owner}/{repo}/check-runs' does not exist on type 'Endpoints'.
    

3.16.0

Minor Changes

  • GitHub.createCheckRun: Add development API for writing annotations (#625)

  • lint: Add GitHub check run annotations (#625)

    skuba lint can now automatically annotate GitHub commits when you propagate Buildkite environment variables and a GitHub API token. These annotations also appear inline with code under the “Files changed” tab in pull requests.

  • format, lint: Enable ESLint caching (#645)

    ESLint now writes to a local .eslintcache store. This speeds up subsequent runs of skuba format and skuba lint as they can skip unchanged files.

  • deps: eslint-config-skuba 1.0.12 (#623)

    This adds a couple new linting rules:

    Run skuba format to automatically align your code with these rules.

  • format, lint: Synchronise ignore files (#646)

    skuba format and skuba lint will now keep .eslintignore, .gitignore and .prettierignore in sync. This automatically applies new exclusions like .eslintcache without the need for a manual skuba configure.

Patch Changes

  • template: Use correct environment key in docker-compose.yml (#654)

  • template/lambda-sqs-worker: Switch to ARM64 architecture (#640)

    These are a bit cheaper and a bit faster than x86 Lambdas: https://aws.amazon.com/blogs/aws/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/

    The underlying Lambda architecture should be invisible to typical TypeScript Lambdas.

  • template: Bump non-Lambda templates to Node.js 16 (#633)

    Node.js 16 is now in active LTS. The Lambda templates are stuck on Node.js 14 until the new AWS Lambda runtime is released.

  • template: seek-jobs/gantry v1.5.2 (#634)

  • deps: typescript 4.4.4 (#616)

  • start: Add a ? placeholder for unnamed function arguments (#647)

  • deps: Relax ranges (#622)

    Projects can now upgrade to new Prettier and TypeScript patches and ts-node-dev minors without us having to cut a new release.

  • template: hot-shots ^9.0.0 (#639)

  • template/lambda-sqs-worker: Remove pino.Logger indirection (#624)

  • template: @seek/logger ^5.0.0 (#621)

  • template: Ignore .gantry YAML paths via .prettierignore (#636)

    Gantry resource and value files often live in the .gantry subdirectory and may use non-standard template syntax.

  • template: Propagate environment variables for GitHub annotations (#642)

    This enables GitHub annotations for newly-initialised projects with the appropriate Buildkite configuration.

3.15.2

Patch Changes

  • Jest.mergePreset: Do not mutate underlying defaults (#595)

    Jest.mergePreset no longer mutates the internal jest-preset object. Subsequent calls to Jest.mergePreset will no longer return results merged in from previous calls.

    Warning: If you rely on mutating the core jest-preset object for later access, this is a Breaking Change.

  • template/lambda-sqs-worker: Convert Serverless isProduction config value to boolean (#602)

    This avoids potentially surprising behaviour if you try to make use of this config value in a context that tests for truthiness. The boolean is still correctly applied as a string seek:env:production tag value.

  • node, start: Handle void function inputs and outputs (#597)

    When running a function entrypoint, skuba node and skuba start now handle an omitted request body the same as an empty JSON array of arguments []. The function can also return undefined to omit a response body.

  • template/lambda-sqs-worker: Opt in to new Serverless variables resolver (#601)

  • lint: Use worker threads when running --serially (#607)

    This aims to reduce the memory footprint of skuba lint --serial. ESLint and Prettier are now run in worker threads so their memory can be more readily freed on thread exit.

  • template: Remove README tables of contents (#596)

    GitHub's Markdown renderer now generates its own table of contents.

  • configure, init: Drop dependency on external Git installation (#599)

    We now interface with isomorphic-git internally, which ensures compatibility and affords finer control over log output.

  • format, lint: Run Prettier serially on files (#606)

    This aims to reduce the memory footprint of skuba lint.

  • template: seek-jobs/gantry v1.5.1 (#604)

  • Jest.mergePreset: Allow configuration of test environment (#592)

    Jest's testEnvironment can now be passed to Jest.mergePreset:

    export default Jest.mergePreset({
      testEnvironment: 'jsdom',
    });
  • template/lambda-sqs-worker: Fail fast on invalid Serverless config (#605)

  • template: pino-pretty ^6.0.0 (#594)

    pino-pretty@7 requires pino@7, which has not been released on its stable channel yet.

  • node, start: Print function entrypoint parameters (#600)

    When running a function entrypoint, skuba node and skuba start now print the function and parameter names as a usage hint:

    yarn skuba node 'src/api/buildkite/annotate.ts#annotate'
    // annotate (markdown, opts)
    // listening on port 9001
    
    curl --data '["_Hello there_", {}]' --include localhost:9001

3.15.1

Patch Changes

  • configure: Tone down Dockerfile outDir processing (#585)

    This avoids rewriting sequences like "distroless" as "libroless".

  • template: Remove unknown specifier in catch clauses (#580)

    Strict TypeScript 4.4 now defaults to typing catch clause variables as unknown.

  • build-package, lint: Handle worker thread errors more gracefully (#583)

    The worker threads now correctly propagate an exit code and log errors instead of triggering an UnhandledPromiseRejectionWarning.

  • format, lint: Limit Prettier to 25 parallel file I/O operations (#584)

    This should alleviate file descriptor issues that are not handled by graceful-fs such as EBADF: bad file description, close.

3.15.0

Minor Changes

  • lint: Run ESLint and Prettier in worker threads (#548)

    This reduces the number of Node.js processes spawned by skuba lint. We've also been able to significantly enhance our logging output as a result, particularly when the --debug flag is supplied.

  • build-package, lint: Add --serial flag (#556)

    This explicitly disables concurrent command execution.

    Propagating the BUILDKITE environment variable to these commands no longer constrains their concurrency. If you were relying on this behaviour to reduce resource contention on undersized Buildkite agents, update your commands to pass in the flag:

    - build-package
    + build-package --serial
    
    - lint
    + lint --serial

    See our Buildkite guide for more information.

  • node: Run REPL in process (#534)

    This avoids creating a separate Node.js process just to run the REPL.

  • Buildkite.annotate: Add development API for writing annotations (#558)

  • format: Execute ESLint with --report-unused-disable-directives (#512)

    skuba format will now flag unused disable directives, and will automatically remove them once ESLint v8 is released.

  • deps: Prettier 2.4 (#507)

    This includes TypeScript 4.4 support. See the release notes for more information.

  • deps: TypeScript 4.4 (#497)

    This major release includes breaking changes. See the announcement for more information.

    Note that new syntax in TypeScript 4.4 will only be supported by skuba format and skuba lint once ESLint v8 is released.

  • format: Run ESLint and Prettier in process (#539)

    This eliminates the overhead of spinning up separate Node.js processes. We've also been able to significantly enhance our logging output as a result, particularly when the --debug flag is supplied.

  • build: Remove experimental Babel support (#513)

    There's limited upside to switching to Babel-based builds for backend use cases, and it would be difficult to guarantee backwards compatibility with existing tsconfig.json-based configuration. Dropping Babel dependencies reduces our package size and resolves SNYK-JS-SETVALUE-1540541.

  • lint: Support Buildkite annotations (#558)

    skuba lint can now output issues as Buildkite annotations.

    See our Buildkite guide for more information.

Patch Changes

  • template: pino-pretty ^7.0.0 (#506)

  • template: Configure environment variables and volume mounts for Buildkite annotations (#558)

  • template: serverless-plugin-canary-deployments ^0.7.0 (#508)

  • template/lambda-sqs-worker*: Prime dev ECR cache in Buildkite pipeline (#503)

    This should result in faster "Deploy Dev" times as the ECR cache will already be warm.

  • template: seek-jobs/gantry v1.4.1 (#504)

  • template: Remove @types/node resolution override (#498)

    Jest 27.1 is compatible with newer versions of @types/node.

  • template/*-rest-api: Suggest using a secure header middleware (#579)

  • template/lambda-sqs-worker-cdk: Run "Test, Lint & Build" step in prod (#503)

    This reduces our dependence on a dev environment to successfully deploy to prod.

  • build-package, lint: Simplify logging prefix (#535)

  • Jest.mergePreset: Allow watchPathIgnorePatterns (#555)

  • build-package, lint: Limit max concurrency to CPU core count (#540)

  • template: Remove Yarn cache from worker Docker images (#499)

    This shrinks the cached Docker images that our worker templates generate.

3.14.4

Patch Changes

  • template: @types/node ^14.17.19 (#490)
  • template: seek-jobs/gantry v1.4.0 (#483)
  • deps: @types/jest ^27.0.0 (#489)
  • template/*-rest-api: Parameterise AWS region (#488)

3.14.3

Patch Changes

  • template: seek-oss/docker-ecr-cache v1.11.0 (#467)

  • template: Add test:ci script (#473)

  • template: Force @jest/types resolution to fix clean installs (#468)

  • template/lambda-sqs-worker: Use Docker Build secrets (#476)

  • template/greeter: Use Docker Build secrets (#476)

  • template/lambda-sqs-worker-cdk: Use Docker Build secrets (#476)

  • template: Group Buildkite pipeline anchors (#474)

    This provides a bit more structure to our pipeline.ymls and allows anchored plugins to be recognised by Renovate.

  • deps: ts-node-dev 1.1.8 (#462)

  • template/express-rest-api: Use Docker Build secrets (#471)

  • template/*-rest-api: Reduce app boilerplate (#478)

  • template: Default Docker Compose image to empty string (#469)

    This suppresses Docker Compose CLI warnings and errors when running outside of Buildkite.

  • template: Use BUILDKITE_PIPELINE_DEFAULT_BRANCH in pipeline.yml (#475)

  • configure, init: Deduplicate dependencies (#470)

  • template: Add placeholder test coverage configuration (#472)

  • template/lambda-sqs-worker-*: Build once upfront (#477)

    This employs Buildkite artifacts to share compiled code with each subsequent deployment step.

  • deps: TypeScript 4.3.5 (#463)

  • template/koa-rest-api: Use Docker Build secrets (#471)

3.14.2

Patch Changes

  • deps: TypeScript 4.3.4 (#455)

  • deps: prettier 2.3.2 (#460)

  • template/koa-rest-api: Include success message in smoke test body (#459)

  • template/greeter: Use seek-oss/docker-ecr-cache Buildkite plugin (#453)

  • template/lambda-sqs-worker: Set memorySize for smoke test hook to 128 MiB (#457)

  • template/koa-rest-api: Use seek-oss/docker-ecr-cache Buildkite plugin (#453)

  • template/express-rest-api: Use seek-oss/docker-ecr-cache Buildkite plugin (#453)

  • template: Reuse ECR cache in Docker Compose (#453)

  • deps: ts-node-dev 1.1.7 (#461)

    Resolves CVE-2021-33623.

3.14.1

Patch Changes

  • deps: Prettier 2.3.1 (#446)

    skuba format and skuba lint now support TypeScript 4.3 syntax. See the full Prettier changelog for more information.

  • template: pino-pretty ^5.0.0 (#441)

  • template: seek-jobs/gantry v1.3.0 (#452)

3.14.0

Minor Changes

  • deps: Prettier 2.3 (#434)

    This release may require reformatting of your code. If your lint step is failing in CI, run your format command locally then push the resulting changes.

    yarn format
  • deps: TypeScript 4.3 (#434)

    This major release includes breaking changes. See the announcement for more information.

    skuba format and skuba lint will error on new TypeScript 4.3 syntax that are not yet supported by Prettier.

  • deps: Jest 27 (#433)

    This major release includes breaking changes. See the Jest 27 blog post and changelog for more information.

Patch Changes

  • Jest.mergePreset: Type snapshotSerializers option (#436)

  • template: Banish typeof undefined syntax (#429)

  • template/lambda-sqs-worker-cdk: Always build before deploy (#428)

    This prevents stale compiled code from being cached and deployed from ECR.

  • template/koa-rest-api: Log returned error responses (#430)

  • template: Prune devDependencies instead of installing twice in Docker (#435)

    The template-bundled Dockerfiles would previously run yarn install twice to build a separate stage for production dependencies only. These have been updated to correctly share the Yarn cache across stages and to use yarn install --production to perform offline pruning.

  • deps: fs-extra ^10.0.0 (#424)

3.13.1

Patch Changes

  • template/*-npm-package: Add yarn commit script (#418)

  • template/lambda-sqs-worker-cdk: Trim CDK deployment output (#423)

  • template: @types/node ^15.0.0 (#422)

  • deps: typescript 4.2.4 (#376)

    See the announcement for features and breaking changes. Note that the currently bundled version of Prettier does not support abstract construct signatures.

  • template/lambda-sqs-worker-cdk: Fix npm token in Buildkite pipeline (#423)

3.13.0

Minor Changes

  • template/lambda-sqs-worker-cdk: Add new template (#395)

  • format, lint: Support --debug flag (#367)

  • template: Upgrade to Node 14 (#347)

    Node.js 14 is now supported on AWS Lambda. This lets us upgrade the Node.js requirement for skuba's templates.

    This should only impact newly created projects. You can use the template changes in this PR as an example of how to upgrade an existing project. A future version of skuba may include a fixup command to automatically upgrade your project to the most recent LTS release.

Patch Changes

  • template/lambda-sqs-worker: Use new serverless.yml#/provider/iam grouping (#357)

    The provider.iamRoleStatements property will be removed in Serverless v3.

  • template/lambda-sqs-worker: serverless-plugin-canary-deployments ^0.5.0 (#394)

    The plugin now patches in CodeDeploy permissions to your iamRoleStatements, so you can clean your serverless.yml:

    - - Action: codedeploy:PutLifecycleEventHookExecutionStatus
    -   Effect: Allow
    -   Resource: !Sub arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:*/${WorkerLambdaFunctionDeploymentGroup}
  • template: runtypes-filter ^0.6.0 (#408)

  • template/koa-rest-api: Fix ineffectual smoke test (#361)

  • template: Drop region parameterisation (#363)

  • deps: semantic-release ^17.3.8 (#353)

    Resolves SNYK-JS-MARKED-1070800.

  • template/*-rest-api: Fail Gantry build if ECR scanning reports vulnerabilities (#373)

  • template: runtypes ^6.0.0 (#404)

  • template/koa-rest-api: Remove awkward request body from GET test (#362)

  • deps: ejs ^3.1.6 (#354)

    Resolves SNYK-JS-EJS-1049328.

  • init: Mention GitHub repo creation (#382)

    skuba doesn't have access to GitHub credentials to create a repository on your behalf. The CLI now makes it clearer that you should create an empty GitHub repository.

  • template/lambda-sqs-worker: Remove custom Serverless variable syntax (#350)

    serverless@2.3.0 bundled native support for CloudFormation pseudo parameters. This even works with arbitrary logical IDs like !Sub ${WorkerLambdaFunctionDeploymentGroup}.

  • deps: runtypes ^6.0.0 (#406)

  • deps: ts-node-dev 1.1.6 (#371)

  • Jest: Expose testTimeout in Jest.mergePreset options (#389)

  • template/lambda-sqs-worker: Use new serverless.yml#/package/patterns property (#415)

    The package.exclude and package.include properties will be removed in Serverless v3.

  • deps: concurrently ^6.0.0 (#379)

  • deps: typescript 4.1.5 (#355)

  • configure: Rewrite dist => lib in serverless.ymls (#387)

  • template/*-rest-api: Move Gantry region config to plugin options (#374)

  • template: Add GitHub repository settings and Renovate to init checklist (#388)

3.12.2

Patch Changes

  • node: Fix src module alias registration (#344)

3.12.1

Patch Changes

  • node, start: Propagate process.argv (#341)

    Passing command-line arguments into a script now works as expected:

    yarn skuba node src/script.ts arg1 arg2 arg3
  • node: Support Node.js inspector options when running a script (#341)

    Passing an inspector option for script debugging now works as expected:

    yarn skuba node --inspect-brk src/script.ts
  • build-package, lint: Run serially on Buildkite (#343)

    These commands now run their underlying processes serially when the BUILDKITE environment variable is set. This reduces the chance of resource exhaustion on smaller instance sizes but slows down builds.

  • template/koa-rest-api: Tidy custom Koa types (#336)

  • test: Exclude Jest config.ts files from coverage (#340)

  • template: seek-jobs/gantry v1.2.11 (#336)

3.12.0

Minor Changes

  • node: Add command (#298)

    skuba node lets you run a TypeScript source file, or open a REPL if none is provided:

    • skuba node src/some-cli-script.ts
    • skuba node

    This automatically registers a src module alias for ease of local development. For example, you can run a prospective src/someLocalCliScript.ts without having to register a module alias resolver:

    // This `src` module alias just works under `skuba node` and `skuba start`
    import { rootLogger } from 'src/framework/logging';
    yarn skuba node src/someLocalCliScript

    If you use this alias in your production code, your entry point(s) will need to import a runtime module alias resolver like skuba-dive/register. For example, your src/app.ts may look like:

    // This must be imported directly within the `src` directory
    import 'skuba-dive/register';
    
    // You can use the `src` module alias after registration
    import { rootLogger } 'src/framework/logging';
  • node, start: Support function entry points (#301)

    You can now specify an entry point that targets an exported function:

    skuba start --port 12345 src/app.ts#handler

    This starts up a local HTTP server that you can POST arguments to:

    curl --data '["event", {"awsRequestId": "123"}]' --include localhost:12345

    You may find this useful to run Lambda function handlers locally.

  • configure, help, init: Check for newer skuba versions (#300)

    skuba will now print an upgrade command if there is a newer version available. You can now use a global installation without worrying that you're setting up new repos using outdated templates.

Patch Changes

  • template/lambda-sqs-worker: Simplify Buildkite pipeline (#314)

  • deps: typescript 4.1.3 (#297)

  • template/koa-rest-api: Type context (#299)

  • lint: Detect incomplete templating (#315)

  • template: Use jest.config.ts (#303)

  • template/lambda-sqs-worker: Add smoke test (#328)

    This brings back versioned functions along with serverless-prune-plugin to control Lambda storage consumption. By default we configure serverless-plugin-canary-deployments for an instantaneous switch once the smoke test has passed, but this can be customised as necessary.

  • configure: Add test:watch script (#303)

  • configure: Migrate jest.config.js to jest.config.ts (#303)

  • template: Enable retry of successful deployment steps (#311)

    This should be used with caution, but may be necessary if you need to rapidly roll back a broken deployment.

  • template/*-rest-api: Supply custom autoscaling policy (#322)

  • init: Pick random server port (#333)

  • template/lambda-sqs-worker: Add start script (#301)

  • template/*-rest-api: Explicitly register listen.ts (#332)

  • deps: Bump caret ranges (#309)

    Resolves SNYK-JS-SEMVERREGEX-1047770.

  • template/koa-rest-api: Limit request logging to errors (#294)

  • start: Improve support for non-HTTP server entry points (#298)

    You can now run arbitrary TypeScript files without them exiting on a You must export callback or requestListener error.

  • configure, init: Improve error messaging in offline scenarios (#305)

  • template/*-rest-api: Clarify health checks and smoke tests (#332)

  • template/lambda-sqs-worker: Require deployment bucket (#330)

  • pkg: Remove ESM from skuba's bundle (#296)

    This simplifies our bundle; Node.js and skuba's CLI have always defaulted to CommonJS anyway.

  • start: Support src module alias (#298)

  • node, start: Support --port option (#301)

  • configure: Remove package-lock.json (#324)

  • test: Set NODE_ENV=test (#326)

    This is something that Jest itself does in its bin/jest.

  • template: Bump caret ranges (#331)

  • start: Support source maps (#298)

  • template/lambda-sqs-worker: Lock Serverless lambdaHashingVersion (#329)

    This gets rid of the following warning when deploying:

    Deprecation warning: Starting with next major version, default value of provider.lambdaHashingVersion will be equal to "20201221"
    More Info: https://www.serverless.com/framework/docs/deprecations/#LAMBDA_HASHING_VERSION_V2
    
  • deps: Bump minor and patch versions (#331)

  • configure: Ensure workspaced package.json is private (#306)

  • template/*-rest-api: Use Distroless runtime images (#316)

  • template: Uplift READMEs (#334)

3.11.0

Minor Changes

  • deps: TypeScript 4.1 (#269)

    This includes formatting and linting support for new syntax features.

    See the release notes for more information.

  • lint: Check for unused eslint-disable directives (#272)

    skuba lint will now report on unnecessary eslint-disable directives that should be removed:

    - /* eslint-disable-next-line new-cap */
    const camelCase = 'no problems here';

Patch Changes

  • template: Check coverage on default test script (#290)

  • deps: babel-plugin-macros ^3.0.0 (#277)

  • deps: ts-node-dev 1.1.1 (#288)

    If you see the following error on npm install:

    npm ERR! enoent ENOENT: no such file or directory, chmod '.../node_modules/ts-node-dev/lib\bin.js'

    Try updating npm:

    npm -g install npm
  • template: Include test:watch script (#290)

  • build: Fix --out-dir requires filenames error on experimental Babel builds (#291)

  • deps: eslint-config-skuba 1.0.10 (#284)

  • deps: prettier 2.2.1 (#278)

  • start: Support default export of Express listener (#289)

  • template/express-rest-api: Fix server listener and port (#289)

  • template: Lock .nvmrcs to Node.js 12 (#281)

3.10.2

Patch Changes

  • deps: typescript 4.0.5 (#241)

  • template: Add .me files (#248)

  • deps: semantic-release ^17.2.3 (#263)

  • template/lambda-sqs-worker: Remove redundant ecr plugin (#259)

  • template: seek-jobs/gantry v1.2.9 (#249)

  • template/koa-rest-api: seek-koala ^5.0.0 (#260)

  • template: supertest ^6.0.0 (#243)

  • template: runtypes-filter ^0.4.0 (#257)

  • template: @koa/router ^10.0.0 (#249)

  • template: Mount working directory in Docker Compose (#247)

  • template/lambda-sqs-worker: Default to unversioned Lambdas (#245)

    Our baseline template does not do canary deployments, and this makes it less likely to hit code storage limits down the road.

  • template: seek-datadog-custom-metrics ^4.0.0 (#261)

3.10.1

Patch Changes

  • deps: Pin ts-node-dev 1.0.0-pre.63 (#239)

    This fixes errors on npm install on macOS and Linux. Yarn 1.x was unaffected by this issue.

  • template: seek-jobs/gantry v1.2.8 (#238)

3.10.0

Minor Changes

  • start: Support default exports (#90)

    skuba start now works with a Koa application exported with export default. This syntax is preferred over export = for compatibility with tooling such as Babel.

  • start: Support Node.js debugging options (#230)

    skuba start now accepts --inspect and --inspect-brk options. This allows you to attach a debugger to the process.

  • init: Redesign base prompt (#234)

    The base prompt no longer mandates a team name and supports copy+paste.

Patch Changes

  • template/lambda-sqs-worker: Remove region from subscription example snippet (#223)

  • template: supertest ^5.0.0 (#220)

  • template/koa-rest-api: hot-shots ^8.0.0 (#217)

  • deps: Bump caret ranges (#235)

  • template: Recommend @seek/logger (#225)

    This provides logging structure, trimming and redaction over plain Pino.

  • template: docker-compose v3.7.0 (#224)

  • template: Unset initial skuba version (#216)

  • template/greeter: Align Dockerfile stages (#219)

  • template/koa-rest-api: Avoid export = syntax (#90)

  • deps: normalize-package-data ^3.0.0 (#231)

  • template: Skip pre-build in Docker Compose service (#222)

  • template: Add start:debug scripts (#230)

3.9.2

Patch Changes

  • deps: prettier 2.1.2 (#207)

  • template: docker-compose v3.6.0 (#210)

  • template/lambda-sqs-worker: serverless ^2.0.0 (#203)

  • deps: eslint-config-skuba 1.0.8 (#214)

    This patch should reduce @typescript-eslint noise across JS files.

  • template/*-rest-api: seek-jobs/gantry v1.2.6 (#211)

  • deps: typescript 4.0.3 (#208)

  • template/koa-rest-api: Remove koa-cluster (#206)

    While Fargate environments with <= 1 vCPU appear to expose multiple threads, clustering does not improve performance and only serves to increase idle memory usage.

    You may add koa-cluster yourself if you have a CPU-bound workload running on multiple vCPUs. Even in such cases, it may be better to run multiple tasks with one vCPU each rather than one task with multiple vCPUs.

  • template: Bump dep ranges (#212)

  • deps: Bump minor ranges (#214)

3.9.1

Patch Changes

  • start: Allow execution despite typechecking errors (#201)

  • template/lambda-sqs-worker: Include aws-sdk in bundle (#198)

  • build: Support tsc --build flag (#200)

  • configure: Remove direct eslint-config-skuba and semantic-release dependencies (#195)

  • build-package, lint: Colour code subprocess output (#190)

  • build-package, lint: Clean up error output (#190)

  • configure: Clean up select lint:xxx scripts in package.json (#196)

  • test: Resolve @typescript-eslint/typescript-estree warnings with TypeScript 4.0: (#202)

    WARNING: You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree.
    
  • configure: Use TypeScript 4.0 node factory API (#193)

  • lint: eslint-plugin-jest ^24.0.0 (#202)

    This enables a few additional linting rules by default.

3.9.0

Minor Changes

  • deps: TypeScript 4.0 (#188)

    This includes compatible versions of ESLint, Jest and Prettier. You may need to reformat your code with yarn skuba format.

    TypeScript 4.0 is largely backward compatible, but you may see errors if you delete a required property:

    const fn = (arg: { prop: string }) => {
      delete arg.prop;
      //     ~~~~~~
      // error! The operand of a 'delete' operator must be optional.
    };
  • lint: Allow incremental typechecking (#188)

Patch Changes

  • configure: Fix bad import (#187)
  • template: Use unknown catch clause variables (#189)
  • template/*-npm-package: Retain comments out of the box (#184)
  • template/lambda-sqs-worker: Qualify awsRequestId log field (#186)

3.8.0

Minor Changes

  • template/express-rest-api: Add new template (#176)

Patch Changes

  • deps: ts-node ^9.0.0 (#180)
  • configure, template/*-npm-package: Pack JSON files (#182)
  • configure: Retain package comments on first run (#181)
  • template: seek-jobs/gantry v1.2.5 (#174)
  • template/*-npm-package: Avoid TSDoc linting errors on init (#171)

3.7.7

Patch Changes

  • template/koa-rest-api: Use per-Gantry environment concurrency group in dev (#165)
  • template: seek-jobs/gantry v1.2.4 (#170)
  • template/koa-rest-api: Simplify supertest-koa bootstrap (#163)
  • template: Remove explicitly set NPM_READ_TOKEN from Dockerfile commands (#168)
  • deps: Limit direct lodash usage to lodash.mergewith (#167)

3.7.6

Patch Changes

  • template: runtypes-filter ^0.3.0 (#160)
  • template/koa-rest-api: Keep AWS SDK connections alive (#159)
  • deps: runtypes ^5.0.0 (#155)
  • template: seek-jobs/gantry v1.2.3 (#161)
  • deps: typescript 3.9.7 (#158)
  • template: docker-compose v3.5.0 (#153)
  • template: runtypes ^5.0.0 (#156)
  • deps: eslint-config-skuba 1.0.4 (#157)

3.7.5

Patch Changes

  • template/lambda-sqs-worker: Default VERSION to local (#148)

  • template/koa-rest-api: Add intermediate Dockerfile stages (#147)

  • template: ecr v2.1.1 (#144)

  • template/koa-rest-api: Switch to Runtypes (#152)

    Yup has overly permissive input coercion (see #151) and weaker type guarantees.

    We already use Runtypes in the Lambda template; other options could be explored in future.

  • template/lambda-sqs-worker: Use better Runtypes syntax (#152)

  • template: docker-compose v3.4.0 (#144)

  • template: Add basic deployment documentation (#148)

3.7.4

Patch Changes

  • template/lambda-sqs-worker: Use connection reuse environment variable (#130)
  • template: Redact err.config.agent path from logs (#140)
  • deps: typescript 3.9.6 (#139)
  • deps: eslint-config-skuba 1.0.3 (#139)

3.7.3

Patch Changes

  • test: Fix passWithNoTests warning (#128)

3.7.2

Patch Changes

  • configure: Avoid stripping of _ filename prefixes (#119)
  • configure: Remove duplicate lib exclusions from tsconfig.json (#124)
  • test: Add Jest.mergePreset helper function (#126)
  • format, lint: Include tsx files in ESLint linting (#123)
  • deps: eslint ^7.3.1 + eslint-config-skuba 1.0.1 (#120)
  • test: Collect coverage from TSX files (#125)
  • configure: Use simple ESLint extends syntax (#122)

3.7.1

Patch Changes

  • configure: Format Renovate config (#111)
  • configure, init: Format package.json consistently (#112)

3.7.0

Minor Changes

  • configure: Support migration from seek-module-toolkit (#66)

    seek-module-toolkit users can now install skuba and run skuba configure to migrate their configuration.

    Care should be taken around the change in build directories.

  • eslint: skuba is now usable as a shareable config (#81)

    // .eslintrc.js
    
    module.exports = {
      // This can be used in place of require.resolve('skuba/config/eslint')
      extends: ['skuba'],
    };
  • build, start: Support experimental Babel toolchain (#85)

    You can now build your project with Babel instead of tsc. Experimentally.

    See our Babel topic for details.

  • jest: skuba is now usable as a preset (#50)

    // jest.config.js
    
    const { testPathIgnorePatterns } = require('skuba/config/jest');
    
    module.exports = {
      // This can be used in place of ...require('skuba/config/jest')
      preset: 'skuba',
    
      // This is still necessary as Jest doesn't deep-merge presets
      testPathIgnorePatterns: [...testPathIgnorePatterns, '/test\\.ts'],
    };
  • configure: Replace relocated dependencies (#54)

    skuba configure now replaces the following dependencies and updates their import paths via naive find-and-replace:

    • @seek/koala → seek-koala
    • @seek/node-datadog-custom-metrics → seek-datadog-custom-metrics
    • @seek/skuba → skuba
    • @seek/skuba-dive → skuba-dive
  • init: Commit initial template files and configure default remote (#51)

  • format, lint: Enforce TSDoc syntax (#75)

  • template/oss-npm-package: Add new template (#73)

    This is intended for seek-oss projects.

Patch Changes

  • configure: Delete test:build and test:jest scripts (#95)
  • configure: List skuba upgrade upfront (#68)
  • configure, init: Avoid unnecessary file writes during templating (#48)
  • template/lambda-sqs-worker: Drop hot-shots dependency (#57)
  • configure, init: Sort dependencies (#52)
  • template: Redact Authorization headers in logs (#59)
  • template/*-npm-package: Make prompt unskippable (#76)
  • configure, init: Exclude lib- directories from compilation (#102)
  • template/private-npm-package: Fix ReferenceError on init (#60)
  • help: Show build-package correctly (#55)
  • configure: Migrate collectCoverageFrom Jest option (#105)
  • configure: Tame newlines in ignore files (#89)
  • configure: List filtered devDependencies upfront (#67)
  • configure, init: .dockerignore the .gantry folder. This should decrease build times. (#62)
  • template/koa-rest-api: Ensure lint passes on init (#70)
  • configure: Sort more package.json props (#101)
  • init: Install matching skuba version (#83)
  • init: Extend validation on initial GitHub fields (#49)
  • template/*-npm-package: Drop module aliasing from tsconfig.json (#75)
  • template: Redact err.config.sockets from logs (#82)
  • template/koa-rest-api: Support improved Runtypes error messaging (#96)
  • configure: Handle skuba-dive dependency upfront (#79)
  • configure: Migrate select Jest options (#100)
  • configure: Reserve skuba-managed sections in ignore files (#58)
  • configure, init: .gitignore archives created by npm pack (#78)
  • template/private-npm-package: Include a half-decent README (#74)
  • configure, init: Make mentioned commands actually runnable (#104)
  • configure: Clean up ignore files during migration (#94)
  • configure, init: .dockerignore the .git folder. This should decrease build times. (#61)
  • configure: Add notice for smt migrations (#77)
  • cli: Suppress dependency deprecation warnings (#108)
  • configure: Delete .npmignore (#93)
  • template: Drop duplicate team name prompt (#72)
  • template/koa-rest-api: Use Koala's error handler (#44)
  • configure, init: Reduce unintended stripping of _ filename prefix (#106)

3.6.0

Minor Changes

  • template/private-npm-package: Add new template (#40)

    The private-npm-package template replaces smt init.

    This change also defaults TypeScript's moduleResolution to node. This shouldn't break any existing consumers as it is the default resolution strategy for CommonJS.

Patch Changes

  • template/koa-rest-api: Remove unused function (#35)

  • init: Redesign first prompt (#42)

  • cli: Tweak prompt spacing and wording (#39)

  • template/koa-rest-api: Pass through Gantry environment as ENVIRONMENT (#37)

  • deps: Bump bundled and template dependencies (#43)

    This includes TypeScript 3.9.5.

3.5.1

Patch Changes

  • format, lint: Relax on Jest config files (#31)

3.5.0

Minor Changes

  • format, lint: ESLint 7 + typescript-eslint 3 (#19)

    This upgrade introduces stricter rules around any and object usage for type safety.

    Consider the following alternatives:

    • Use unknown for a value whose type is truly unknown. This is a type-safe alternative to any that the TypeScript ecosystem is moving towards.

      - const data = JSON.parse(str);
      + const data = JSON.parse(str) as unknown;
    • Prove the value has a specific type using a type guard or runtime validation library.

      - const safeData = inputData as any;
      + const safeData = RuntimeValidator.check(inputData);
    • Use Record<PropertyKey, unknown> to indicate an object with unknown properties.

      - const isObject = (data: unknown): data is object => { ... };
      + const isObject = (data: unknown): data is Record<PropertyKey, unknown> => { ... };
    • Disable the specific ESLint rule for the problematic line.

      /* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */
      const takeAnyBody = ctx.request.body;
  • build-package: Add opinionated command to replace smt build (#15)

    See the migration documentation for more information.

Patch Changes

  • init: Restore --silent arg for yarn add (#30)

  • configure, init: Tweak ignore file patterns (#11)

    Directory names like /lib-es2015 are ignored based on prefix now, but certain patterns have been restricted to the root to allow for /src/lib.

  • configure: Use latest-version to check package versions (#24)

  • configure, init: Switch to oss skuba-dive package (#21)

  • template: Switch to seek-datadog-custom-metrics (#28)

  • template/koa-rest-api: Switch to seek-koala (#28)

  • configure: Keep name, readme and version fields in package.json (#18)

  • configure: Drop --ignore-optional from yarn install (#25)

  • start: Remove support for a custom port logging function (#16)

  • init: Drop --ignore-optional --silent from yarn add (#25)

  • template/koa-rest-api: Bump Gantry plugin to v1.2.2 (#8)

  • deps: Declare @types/jest as a peer dependency (#22)

  • format, lint: Group 'src' import along with 'src/**' (#7)

  • configure, init: Exclude files from templating based on .gitignore (#20)

3.4.1

Patch Changes

  • pkg: Release on seek-oss (#4)