microsoft/typescript-go · error · Error

usePublishedPlatformPackagesForVsix requires forRelease

Error message

usePublishedPlatformPackagesForVsix requires forRelease

What it means

checkPublishedPlatformPackagesForVsix (Herebyfile.mjs:2230) is the gate for building VSIXes from already-published platform packages: it demands hereby's --forRelease flag before even checking the published typescript version. Building VSIXes against published packages is a release-only operation because it stamps shipping artifacts, so local/non-release runs are rejected.

Source

Thrown at Herebyfile.mjs:2233

            return packageJson;
        }
    }

    throw new Error(`Could not find ${publishedTypeScriptAliasPackageName}; run npm install first.`);
});

function getPublishedTypeScriptVersion() {
    const version = getPublishedTypeScriptPackageJson().version;
    const expectedVersion = getVersion();
    if (usePublishedPlatformPackagesForVsix && version !== expectedVersion) {
        throw new Error(`usePublishedPlatformPackagesForVsix requires ${publishedTypeScriptAliasPackageName}'s installed version (${version}) to match release version ${expectedVersion}.`);
    }
    return version;
}

function checkPublishedPlatformPackagesForVsix() {
    if (!options.forRelease) {
        throw new Error("usePublishedPlatformPackagesForVsix requires forRelease");
    }
    getPublishedTypeScriptVersion();
}

const getPackageLock = memoize(() => JSON.parse(fs.readFileSync(path.join(__dirname, "package-lock.json"), "utf8")));

/**
 * @param {string} npmPackageName
 */
async function getPublishedPlatformPackageLibDir(npmPackageName) {
    let promise = publishedPlatformPackageLibDirs.get(npmPackageName);
    if (!promise) {
        promise = getPublishedPlatformPackageLibDirWorker(npmPackageName);
        publishedPlatformPackageLibDirs.set(npmPackageName, promise);
    }
    return promise;
}

View on GitHub (pinned to 1bcfa18d79)

Solutions

  1. Run the pipeline with release flags: `npx hereby native-preview:release --forRelease --setPrerelease=dev.N.M`
  2. For local packaging tests, disable usePublishedPlatformPackagesForVsix so VSIXes are packed from locally built platform packages
  3. Keep release-only task invocation in one CI script so the flags cannot be dropped

Example fix

# before
npx hereby native-preview:package-vsix  # with usePublishedPlatformPackagesForVsix enabled

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

Strategy: validation

Validate before calling

if (usePublishedPlatformPackagesForVsix && !args.includes("--forRelease")) {
  console.error("Published-package VSIX builds are release-only; add --forRelease");
  process.exit(1);
}

Prevention

When it happens

Trigger: usePublishedPlatformPackagesForVsix is true and a task that calls checkPublishedPlatformPackagesForVsix (runSignNativePreviewPackages early-return path, or runPackVsixExtensions) runs without --forRelease, e.g. `npx hereby native-preview:package-vsix` on a local build.

Common situations: A developer enables the published-packages VSIX path to test packaging but forgets the release flags; CI shares one script between local-mode and release-mode builds.

Related errors


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