diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f014077728ab..308e803d77804 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -86,6 +86,66 @@ jobs: - name: Build src run: npx hereby build-src + smoke: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: "*" + check-latest: true + - run: npm ci + + - run: npx hereby lkg + - run: | + npm pack + mv typescript*.tgz typescript.tgz + echo "PACKAGE=$PWD/typescript.tgz" >> $GITHUB_ENV + + - name: Smoke test + run: | + cd "$(mktemp -d)" + npm init --yes + npm install $PACKAGE tslib + + npx tsc --version + echo '{"seq": 1, "command": "status"}' | npx tsserver + + cat > smoke.js << EOF + const { __importDefault, __importStar } = require("tslib"); + const ts = require(process.argv[2]); + + // See: https://github.com/microsoft/TypeScript/pull/51474#issuecomment-1310871623 + const fns = [ + [() => ts.version, true], + [() => ts.default.version, false], + [() => __importDefault(ts).version, false], + [() => __importDefault(ts).default.version, true], + [() => __importStar(ts).version, true], + [() => __importStar(ts).default.version, true], + ]; + + for (const [fn, shouldSucceed] of fns) { + let success = false; + try { + success = !!fn(); + } + catch {} + if (success !== shouldSucceed) { + if (success) { + console.error(`${fn.toString()} unexpectedly succeeded.`); + } + else { + console.error(`${fn.toString()} did not succeed.`); + } + process.exitCode = 1; + } + } + EOF + + node ./smoke.js typescript + node ./smoke.js typescript/lib/tsserverlibrary misc: runs-on: ubuntu-latest