Improve optionality detection in mapped type indexed access substitut… #10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
- release-* | |
pull_request: | |
branches: | |
- main | |
- release-* | |
permissions: | |
contents: read | |
# Ensure scripts are run with pipefail. See: | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#exit-codes-and-error-action-preference | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
test: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-14 | |
node-version: | |
- '20' | |
- '18' | |
- '16' | |
- '14' | |
bundle: | |
- 'true' | |
include: | |
- node-version: '*' | |
bundle: false | |
os: ubuntu-latest | |
exclude: | |
# No Node 14 on ARM macOS | |
- node-version: '14' | |
os: macos-14 | |
runs-on: ${{ matrix.os }} | |
name: Test Node ${{ matrix.node-version }} on ${{ matrix.os }}${{ (!matrix.bundle && ' with --no-bundle') || '' }} | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Use node version ${{ matrix.node-version }} | |
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: ${{ matrix.node-version }} | |
check-latest: true | |
- run: npm ci | |
- name: Tests | |
id: test | |
# run tests, but lint separately | |
run: npm run test -- --no-lint --bundle=${{ matrix.bundle }} | |
- name: Print baseline diff on failure | |
if: ${{ failure() && steps.test.conclusion == 'failure' }} | |
run: git diff --diff-filter=AM --no-index -- ./tests/baselines/reference ./tests/baselines/local | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: npm ci | |
- name: Linter | |
run: npm run lint | |
format: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: npm ci | |
- uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1 | |
with: | |
path: ~/.cache/dprint | |
key: ${{ runner.os }}-dprint-${{ hashFiles('package-lock.json', '.dprint.jsonc') }} | |
restore-keys: | | |
${{ runner.os }}-dprint- | |
- name: Check formatting | |
run: npx dprint check | |
browser-integration: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: npm ci | |
- name: Installing browsers | |
run: npx playwright install --with-deps | |
- name: Validate the browser can import TypeScript | |
run: npx hereby test-browser-integration | |
typecheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: npm ci | |
- name: Build src | |
run: npx hereby build-src | |
smoke: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: | | |
npm --version | |
# corepack enable npm | |
npm install -g $(jq -r '.packageManager' < package.json) | |
npm --version | |
- run: npm ci | |
- run: npx hereby lkg | |
- run: | | |
npm pack | |
mv typescript*.tgz typescript.tgz | |
echo "package=$PWD/typescript.tgz" >> "$GITHUB_OUTPUT" | |
id: pack | |
- name: Smoke test | |
run: | | |
cd "$(mktemp -d)" | |
npm init --yes | |
npm install ${{ steps.pack.outputs.package }} | |
echo "Testing tsc..." | |
npx tsc --version | |
echo "Testing tsserver..." | |
echo '{"seq": 1, "command": "status"}' | npx tsserver | |
node $GITHUB_WORKSPACE/scripts/checkModuleFormat.mjs typescript | |
node $GITHUB_WORKSPACE/scripts/checkModuleFormat.mjs typescript/lib/tsserverlibrary | |
package-size: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request' | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
path: pr | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
path: base | |
ref: ${{ github.base_ref }} | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: | | |
npm --version | |
# corepack enable npm | |
- run: | | |
npm install -g $(jq -r '.packageManager' < package.json) | |
npm --version | |
working-directory: ./pr | |
- run: npm ci | |
working-directory: ./pr | |
- run: npm ci | |
working-directory: ./base | |
- run: npx hereby lkg | |
working-directory: ./pr | |
- run: npx hereby lkg | |
working-directory: ./base | |
- run: | | |
echo "See $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID for more info." | |
node ./pr/scripts/checkPackageSize.mjs ./base ./pr >> $GITHUB_STEP_SUMMARY | |
misc: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: npm ci | |
- name: Build scripts | |
run: npx hereby scripts | |
- name: ESLint tests | |
run: npx hereby run-eslint-rules-tests | |
self-check: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: npm ci | |
- name: Build tsc | |
run: npx hereby tsc | |
- name: Clean | |
run: npx hereby clean-src | |
- name: Self build | |
run: npx hereby build-src --built | |
baselines: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version: '*' | |
check-latest: true | |
- run: npm ci | |
- name: Remove all baselines | |
run: rm -rf tests/baselines/reference | |
- name: Run tests | |
run: npm test &> /dev/null || exit 0 | |
- name: Accept baselines | |
run: | | |
npx hereby baseline-accept | |
git add tests/baselines/reference | |
- name: Check baselines | |
run: | | |
function print_diff() { | |
if ! git diff --staged --exit-code --quiet --diff-filter=$1; then | |
echo "$2:" | |
git diff --staged --name-only --diff-filter=$1 | |
fi | |
} | |
if ! git diff --staged --exit-code --quiet; then | |
print_diff ACR "Missing baselines" | |
print_diff MTUXB "Modified baselines" | |
print_diff D "Unused baselines" | |
exit 1 | |
fi |