Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Dec 2, 2025

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
skuba-dive (source) ^2.0.0 -> ^3.0.0 age adoption passing confidence

Release Notes

seek-oss/skuba (skuba-dive)

v3.0.0

Compare Source

This major release includes patches and configuration changes to migrate TypeScript projects onto modern module patterns. It partially automates Step 2 of our transition to ECMAScript modules.

[!NOTE]

If you are migrating from an earlier skuba version, we recommend upgrading to version 12 first before migrating to version 13. This ensures a smoother migration path with incremental changes.

Changing the module patterns of your project may result in Jest and/or TypeScript errors that require manual triage. Refer to the below troubleshooting sections to begin with, and reach out in #skuba-support if you're stuck.

[!CAUTION]

Test the changes in a non-production environment before deploying to production. The automated migration cannot account for all custom deployment configurations.

If your project is not configured for GitHub autofixes in CI, skuba lint will not be able to push the patch commit.

Failed to push fix commit.
Does your CI environment have write access to your Git repository?

You can either set up GitHub autofixes in CI, or run skuba format then commit and push locally.

Major Changes
  • build, lint, test: Replace src aliases with #src subpath imports (#​1958)

    This patch rewrites src module aliases dependent on CommonJS monkeypatching via skuba-dive/register. The new, ESM-compatible #src approach is enabled by Node.js subpath imports and TypeScript custom conditions.

    // Before
    import 'skuba-dive/register';
    import { getAccountInfo } from 'src/services/accounts.js';
    
    // After
    import { getAccountInfo } from '#src/services/accounts.js';

    The following files will be updated to support the new subpath pattern:

    • tsconfig*.json
    • package.json
    • jest.config*.ts
    • serverless*.yml
    • Dockerfile*
    • CDK infrastructure files
Troubleshooting
Jest configuration

If your Jest configuration differs from the standard skuba configuration, you may need to manually update your moduleNameMapper:

Standard projects:

moduleNameMapper: {
  '^#src/(.*)\\.js$': ['<rootDir>/src/$1'],
  '^#src/(.*)$': ['<rootDir>/src/$1'],
},

Monorepo projects:

moduleNameMapper: {
  '^#src/(.*)\\.js$': [
    '<rootDir>/apps/api/src/$1',
    '<rootDir>/apps/worker/src/$1',
    // ...
  ],
  '^#src/(.*)$': [
    '<rootDir>/apps/api/src/$1',
    '<rootDir>/apps/worker/src/$1',
    // ...
  ],
},
TypeScript errors with pure-parse types

If you encounter TypeScript errors related to pure-parse types:

tsc      │ node_modules/@&#8203;seek/logger/lib-types/eeeoh/eeeoh.d.ts(2,15): error TS2305: Module '"pure-parse"' has no exported member 'Infer'.
tsc      | node_modules/pure-parse/dist/index.d.ts(1,15): error TS2834: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path.

Upgrade @seek/logger to version 11.2.1 or later:

pnpm update --latest @&#8203;seek/logger
Custom conditions error

If you see the error:

Option 'customConditions' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'

Packages should not publish with node16 module resolution until their consumers have migrated themselves. We recommend the following workaround in the interim:

Create a separate tsconfig.base.json that tsconfig.json extends. This allows you to apply customConditions selectively:

tsconfig.base.json:

{
  "extends": "skuba/config/tsconfig.json",
  "compilerOptions": {
    "baseUrl": ".",
    "target": "ES2024",
    "lib": ["ES2024"]
  }
}

tsconfig.json:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "customConditions": ["@&#8203;seek/YOUR_REPO/source"]
  }
}

tsconfig.build.json:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "lib",
    "rootDir": "src"
  },
  "include": ["src"]
}
  • build, lint: Update default module and module resolution (#​1958)

    Our base TypeScript configuration file in skuba/config/tsconfig.json has been updated with modern options for module output format and resolution:

      {
        "compilerOptions": {
    -     "module": "commonjs",
    -     "moduleResolution": "node",
    +     "module": "node20",
    +     "moduleResolution": "node16",
          // ...
        }
      }
Troubleshooting

Your project may depend on third-party packages with TypeScript types that are not strictly compatible with CommonJS. This may cause skuba build and skuba lint to fail type checking:

node_modules/.pnpm/[email protected]/node_modules/date-fns/addDays.d.cts:1:46 - error TS1541: Type-only import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute.

To work around such errors, you can either:

  1. Add a // @&#8203;ts-ignore comment above the import statement. (These can be removed once we have fully migrated to ESM).

    + // @&#8203;ts-ignore - date-fns does not support Node16 module resolution, remove this when we move to ESM.
      import { addDays } from 'date-fns';
  2. Add skipLibCheck: true to your tsconfig.json compiler options.

      {
        "compilerOptions": {
    +     "skipLibCheck": true,
          // ...
        }
      }
Minor Changes
  • lint: Update file extension detection logic (#​2099)

    This resolves an issue where file extensions were not being appended to imports with multiple dots in their path, such as .vocab files.

  • build: Forward custom conditions to esbuild (#​2092)

    Note: This only affects projects that have manually set package.json#/skuba/build to "esbuild". There are less than 10 of these at time of writing.

    When using esbuild as the bundler, any custom conditions specified in tsconfig.json will now be forwarded to esbuild via the conditions option.

Patch Changes
  • template: Remove Splunk references (#​2096)

Configuration

📅 Schedule: Branch creation - "after 3:00 am and before 6:00 am on Monday and Friday" in timezone Australia/Melbourne, Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@changeset-bot
Copy link

changeset-bot bot commented Dec 2, 2025

🦋 Changeset detected

Latest commit: b175e91

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@seek/aws-codedeploy-infra Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@renovate renovate bot force-pushed the renovate-skuba-dive-3.x branch from aee7b9f to 79b9088 Compare December 7, 2025 18:11
@72636c 72636c requested a review from a team as a code owner December 7, 2025 23:39
Copy link
Member

@72636c 72636c left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We only use the Env bit

@72636c 72636c enabled auto-merge (squash) December 7, 2025 23:40
@72636c 72636c merged commit f7d65c1 into main Dec 7, 2025
7 checks passed
@72636c 72636c deleted the renovate-skuba-dive-3.x branch December 7, 2025 23:40
@seek-oss-ci seek-oss-ci mentioned this pull request Dec 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants