Releases: seek-oss/skuba
[email protected]
[email protected]
Minor Changes
- format, lint: Set
package-manager-strict-version=true
for pnpm projects (#1572)
Patch Changes
[email protected]
Minor Changes
-
lint: Skip generation of config files when present in
.gitignore
(#1554)skuba lint
andskuba format
now skip the generation of config files, like.dockerignore
and.npmrc
, if they are ignored by.gitignore
files. -
deps: esbuild 0.21 (#1569)
-
deps: TypeScript 5.5 (#1596)
This major release includes breaking changes. See the TypeScript 5.5 announcement for more information.
-
api: Add Git.isFileGitIgnored (#1554)
-
lint: Add coverage to .prettierignore (#1552)
-
configure: Accept template data from stdin to allow for integration testing (#1558)
-
lint: Swap out
detect-package-manager
for manual lockfile detection (#1552)detect-package-manager
has been removed, in lieu of usingfind-up
to detect the closest
pnpm-lock.yaml
oryarn.lock
to infer the package manager. -
lint: Patch installing specific pnpm version via Corepack (#1534)
-
deps: prettier 3.3 (#1580)
Patch Changes
-
template: Add extension recommendations to
.vscode/extensions.json
(#1556) -
Git: Explicitly declare return types to enable compatibility with the
Node16
module (#1589) -
template/oss-npm-package: Skip excessive action runs (#1586)
-
template/lambda-sqs-worker-cdk: Add worker config file (#1548)
-
lint: Exclude
.vscode/extensions.json
from being ignored by.gitignore
(#1556) -
template: Make all configuration values explicit (#1560)
Previously,
src/config.ts
included optional configuration values and inheritance between environments in the spirit of DRY. While the templated file was wired up in a "safe" way—the production environment never inherited from other environments and explicitly specified all its configuration values—its pattern was misappropriated elsewhere and led to local configuration values affecting production environments.Instead, we now list all configuration values explicitly against each environment.
-
template: Remove deprecated
docker-compose.yml
version (#1570)Docker has ignored this for a while, and now generates a warning on every build:
https://github.com/compose-spec/compose-spec/blob/master/04-version-and-name.md -
template/*-rest-api: Clean up templated environment variables (#1562)
-
AWS_NODEJS_CONNECTION_REUSE_ENABLED
is no longer required with AWS SDK V3. -
The
env
boilerplate in Gantry values files was largely unnecessary and confusing.Our templates prefer to declare configuration values directly in
src/config.ts
.
-
[email protected]
[email protected]
Patch Changes
-
deps: eslint 8.56.0 (#1521)
This upgrade is required for eslint-config-seek 13.
-
template: Install specific pnpm version via Corepack (#1515)
Previously, our Dockerfiles ran
corepack enable pnpm
without installing a specific version. This does not guarantee installation of the pnpm version specified inpackage.json
, which could cause a subsequentpnpm install --offline
to run Corepack online or otherwise hang on stdin:FROM --platform=arm64 node:20-alpine RUN corepack enable pnpm
{ "packageManager": "[email protected]", "engines": { "node": ">=20" } }
Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-8.15.4.tgz. Do you want to continue? [Y/n]
To avoid this issue, modify (1) Buildkite pipelines to cache on the
packageManager
property inpackage.json
, and (2) Dockerfiles to mountpackage.json
and runcorepack install
:- seek-oss/docker-ecr-cache#v2.1.0: + seek-oss/docker-ecr-cache#v2.2.0: cache-on: - .npmrc + - package.json#.packageManager - pnpm-lock.yaml
FROM --platform=arm64 node:20-alpine - RUN corepack enable pnpm + RUN --mount=type=bind,source=package.json,target=package.json \ + corepack enable pnpm && corepack install
-
template/*-rest-api: Fix lint failure (#1514)
This resolves the following failure on a newly-initialised project due to a regression in the
@types/express
dependency chain:error TS2688: Cannot find type definition file for 'mime'. The file is in the program because: Entry point for implicit type library 'mime'
A temporary workaround is to install
mime
as a dev dependency. -
deps: @octokit/types ^13.0.0 (#1536)
-
template/lambda-sqs-worker-cdk: Align dead letter queue naming with Serverless template (#1542)
-
Jest.mergePreset: Fudge
Bundler
module resolution (#1513)This extends #1481 to work around a
ts-jest
issue where test cases fail to run. -
template/oss-npm-package: Set timeout to 20 minutes for GitHub Actions (#1501)
-
template/lambda-sqs-worker-cdk: Replace CDK context based config with TypeScript config (#1541)
[email protected]
This version of skuba looks more scary than it is. The major change is that our dependencies have bumped their minimum Node.js requirement from 18.12 to 18.18. Most SEEK projects do not pin minor Node.js versions and are unlikely to be affected by this change.
In the spirit of upgrades, we recently refreshed our ARM64 migration guide and also have one for pnpm. A previous release landed a skuba migrate
command to simplify upgrades to Node.js 20 (active LTS) before Node.js 18 reaches EOL in April 2025.
Major Changes
-
deps: eslint-config-seek 13 + eslint-config-skuba 4 + typescript-eslint ^7.2.0 (#1487)
These major upgrades bump our minimum requirement from Node.js 18.12 to 18.18.
See the typescript-eslint v7 announcement for more information, and consider upgrading your project to the active LTS release with
skuba migrate
before Node.js 18 reaches EOL in April 2025.
Minor Changes
-
deps: semantic-release 22 (#1492)
-
deps: TypeScript 5.4 (#1491)
This major release includes breaking changes. See the TypeScript 5.4 announcement for more information.
Patch Changes
-
template: Remove
BUILDPLATFORM
from Dockerfiles (#1350)Previously, the built-in templates made use of
BUILDPLATFORM
and a fallback value:FROM --platform=${BUILDPLATFORM:-arm64} gcr.io/distroless/nodejs20-debian11
- Choose the platform of the host machine running the Docker build. An AWS Graviton Buildkite agent or Apple Silicon laptop will build under
arm64
, while an Intel laptop will build underamd64
. - Fall back to
arm64
if the build platform is not available. This maintains compatibility with toolchains like Gantry that lack support for theBUILDPLATFORM
argument.
This approach allowed you to quickly build images and run containers in a local environment without emulation. For example, you could
docker build
anarm64
image on an Apple Silicon laptop for local troubleshooting, while your CI/CD solution employedamd64
hardware across its build and runtime environments. The catch is that your localarm64
image may exhibit different behaviour, and is unsuitable for use in youramd64
runtime environment without cross-compilation.The built-in templates now hardcode
--platform
as we have largely converged onarm64
across local, build and runtime environments:FROM --platform=arm64 gcr.io/distroless/nodejs20-debian11
This approach is more explicit and predictable, reducing surprises when working across different environments and toolchains. Building an image on a different platform will be slower and rely on emulation.
- Choose the platform of the host machine running the Docker build. An AWS Graviton Buildkite agent or Apple Silicon laptop will build under
-
Jest.mergePreset: Fudge
Node16
andNodeNext
module resolutions (#1481)This works around a
ts-jest
issue where test cases fail to run if yourmoduleResolution
is set to a modern mode:{ "compilerOptions": { "moduleResolution": "Node16 | NodeNext" } }
error TS5110: Option 'module' must be set to 'Node16' when option 'moduleResolution' is set to 'Node16'. error TS5110: Option 'module' must be set to 'NodeNext' when option 'moduleResolution' is set to 'NodeNext'.
-
pkg: Exclude
jest/*.test.ts
files (#1481) -
template: Remove account-level tags from resources (#1494)
This partially reverts #1459 and #1461 to avoid unnecessary duplication of account-level tags in our templates.
[email protected]
Major Changes
-
deps: eslint-config-seek 13 + typescript-eslint ^7.2.0 (#1487)
These major upgrades bump our minimum requirements:
- Node.js >=18.18.0
- ESLint >=8.56.0
- TypeScript >=4.7.5
See the typescript-eslint v7 announcement for more information.
v7.5.1
Patch Changes
-
template/lambda-sqs-worker: Comply with latest AWS tagging guidance (#1461)
-
GitHub.putIssueComment: Support
userId: 'seek-build-agency'
(#1474)The
userId
parameter is an optimisation to skip user lookup. A descriptive constant is now supported on SEEK build agents:await GitHub.putIssueComment({ body, - userId: 87109344, // https://api.github.com/users/buildagencygitapitoken[bot] + userId: 'seek-build-agency', });
-
deps: Remove
why-is-node-running
(#1476)why-is-node-running
was previously added to the skuba CLI to troubleshoot scenarios where commands were timing out in CI. This has now been removed to avoid disruption to commands such asjest --detectOpenHandles
. -
deps: Remove
fdir
(#1463)This dependency is no longer used internally.
-
template/*-rest-api: Comply with latest AWS tagging guidance (#1459)
This includes an upgrade to Gantry v3.
-
deps: @octokit/graphql ^8.0.0 (#1473)
-
deps: @octokit/graphql-schema ^15.3.0 (#1473)
v7.5.0
Minor Changes
-
cli: Add 30-minute timeout to skuba commands in CI to avoid potential hanging builds. (#1444)
If there are use cases this breaks, please file an issue. A
SKUBA_NO_TIMEOUT
environment variable is supported on all commands to use the old behaviour. Timeout duration can be adjusted with aSKUBA_TIMEOUT_MS
environment variable. -
migrate: Introduce
skuba migrate node20
to automatically upgrade a project's Node.js version (#1382)skuba migrate node20
will attempt to automatically upgrade projects to Node.js 20. It will look in the project root for Dockerfiles,.nvmrc
, and Serverless files, as well as CDK files ininfra/
and.buildkite/
files, and try to upgrade them to a Node.js 20 version.skuba might not be able to upgrade all projects, so please check your project for any files that skuba missed. It's possible that skuba will modify a file incorrectly, in which case please open an issue.
Node.js 20 comes with its own breaking changes, so please read the Node.js 20 release notes alongside the skuba release notes. In addition,
- For AWS Lambda runtime updates to
nodejs20.x
, consider reading the release announcement as there are some breaking changes with this upgrade. - You may need to upgrade your versions of CDK and Serverless as appropriate to support nodejs20.x.
- For AWS Lambda runtime updates to
Patch Changes
-
lint: Remove
Dockerfile-incunabulum
rule (#1441)Previously,
skuba lint
would search for and delete a file namedDockerfile-incunabulum
to correct a historical issue that had it committed to source control. This rule has been removed as the file has been cleaned up from most SEEK repositories. -
template/lambda-sqs-worker-cdk: Update tests to use a stable identifier for the
AWS::Lambda::Version
logical IDs in snapshots. This avoid snapshot changes on unrelated source code changes. (#1450) -
deps: picomatch ^4.0.0 (#1442)