microsoft/typescript-go · error · Error

native-preview:release requires --forRelease and --setPrerel

Error message

native-preview:release requires --forRelease and --setPrerelease flags, unless nativePreviewReleaseVersion is hardcoded and VSIX production is disabled. Example: npx hereby native-preview:release --forRelease --setPrerelease=dev.1.0

What it means

The `native-preview:release` task validates its invocation up front: it requires --forRelease, and also requires --setPrerelease unless `nativePreviewReleaseVersion` is hardcoded in Herebyfile.mjs AND VSIX production is disabled (produceAnyVsix false). Every sub-step it chains (sign packages, pack packages, pack/sign VSIXes) assumes those flags, so an invalid invocation fails fast with an example command rather than mid-pipeline.

Source

Thrown at Herebyfile.mjs:2397

    }

    await sign({
        SignFileRecordList: [
            {
                SignFileList: extensions.map(({ vsixSignaturePath }) => ({ SrcPath: vsixSignaturePath, DstPath: null })),
                Certs: "VSCodePublisher",
                MacAppName: undefined,
            },
        ],
    });
}

export const nativePreviewRelease = task({
    name: "native-preview:release",
    hiddenFromTaskList: true,
    run: async () => {
        if (!options.forRelease || !options.setPrerelease && (!nativePreviewReleaseVersion || produceAnyVsix)) {
            throw new Error("native-preview:release requires --forRelease and --setPrerelease flags, unless nativePreviewReleaseVersion is hardcoded and VSIX production is disabled. Example: npx hereby native-preview:release --forRelease --setPrerelease=dev.1.0");
        }
        await runBuildNativePreviewPackages();
        await runSignNativePreviewPackages();
        await runPackNativePreviewPackages();
        await runPackVsixExtensions();
        await runSignVsixExtensions();
        await runCleanSignTempDirectory();
    },
});

export const nativePreview = task({
    name: "native-preview",
    hiddenFromTaskList: true,
    dependencies: options.forRelease ? undefined : [packNativePreviewPackages, packVsixExtensions],
    run: options.forRelease ? async () => {
        throw new Error("This task should not be run in release builds.");
    } : undefined,
});

View on GitHub (pinned to 1bcfa18d79)

Solutions

  1. Run with both flags: `npx hereby native-preview:release --forRelease --setPrerelease=dev.1.0`
  2. If you intended the hardcoded-version path, ensure nativePreviewReleaseVersion is set in Herebyfile.mjs and VSIX production is disabled, then omit --setPrerelease
  3. Audit CI scripts to always pass --forRelease and a correctly-formatted --setPrerelease (dev.N.M)

Example fix

# before
npx hereby native-preview:release

# after
npx hereby native-preview:release --forRelease --setPrerelease=dev.1.0
Defensive patterns

Strategy: validation

Validate before calling

function validateReleaseInvocation({ forRelease, setPrerelease, nativePreviewReleaseVersion, produceAnyVsix }) {
  if (!forRelease || (!setPrerelease && (!nativePreviewReleaseVersion || produceAnyVsix))) {
    throw new Error("Use: npx hereby native-preview:release --forRelease --setPrerelease=dev.N.M");
  }
}

Prevention

When it happens

Trigger: Running `npx hereby native-preview:release` with no flags; or with --forRelease but no --setPrerelease while nativePreviewReleaseVersion is not hardcoded or any VSIX production (produceNativePreviewVsix / produceTypeScriptNightlyVsix) is enabled.

Common situations: Copy-pasting the task name without flags; CI scripts that set --forRelease but compute the prerelease variable to empty; a release engineer assuming the hardcoded-version path works while VSIX production is on.

Related errors


AI-assisted analysis of microsoft/typescript-go@1bcfa18d79 (2026-08-16). Data as JSON: /api/errors/05a520d2fa387d76. Report an issue: GitHub.