Scaffold IPC-based API (#711) #1
This file contains hidden or 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 | |
pull_request: | |
branches: | |
- main | |
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: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: build | |
- run: npm ci | |
- run: npx hereby build | |
extension: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- run: npm ci | |
- run: npm run extension:build | |
test: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
coverage: true | |
- os: windows-latest | |
coverage: true | |
- os: macos-latest | |
coverage: true | |
- os: ubuntu-latest | |
name: 'no submodules' | |
no-submodules: true | |
- os: ['self-hosted', '1ES.Pool=TypeScript-1ES-GitHub-XL', '1ES.ImageOverride=mariner-2.0'] | |
name: 'race mode' | |
race: true | |
- os: ubuntu-latest | |
name: 'noembed' | |
noembed: true | |
- os: ubuntu-latest | |
name: 'concurrent test programs' | |
concurrent-test-programs: true | |
coverage: true | |
name: test (${{ matrix.name || matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
permissions: | |
id-token: write | |
contents: read | |
env: | |
TSGO_HEREBY_RACE: ${{ (matrix.race && 'true') || 'false' }} | |
TSGO_HEREBY_NOEMBED: ${{ (matrix.noembed && 'true') || 'false' }} | |
TSGO_HEREBY_CONCURRENT_TEST_PROGRAMS: ${{ (matrix.concurrent-test-programs && 'true') || 'false' }} | |
TSGO_HEREBY_COVERAGE: ${{ (matrix.coverage && 'true') || 'false' }} | |
steps: | |
- run: git config --system core.longpaths true | |
if: ${{ matrix.os == 'windows-latest' }} | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
submodules: ${{ !matrix.no-submodules }} | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
with: | |
node-version: 'lts/*' | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: test | |
- run: npm ci | |
- run: go install gotest.tools/gotestsum@latest | |
# Installing gotestsum is super slow on Windows. | |
# Also, avoid using it in race mode so we get the full output. | |
if: ${{ matrix.os != 'windows-latest' && !matrix.race }} | |
- name: Tests | |
id: test | |
run: npx hereby test | |
- name: Benchmarks | |
run: npx hereby test:benchmarks | |
- name: Tools Tests | |
run: npx hereby test:tools | |
- name: API Tests | |
run: npx hereby test:api | |
- run: git add . | |
- uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v5.4.0 | |
if: ${{ always() && matrix.coverage }} | |
with: | |
use_oidc: true | |
name: ${{ matrix.name || matrix.os }} | |
directory: ./coverage | |
- run: git diff --staged --exit-code --stat | |
- name: Print baseline diff on failure | |
if: ${{ failure() && steps.test.conclusion == 'failure' }} | |
run: | | |
npx hereby baseline-accept | |
git add testdata/baselines/reference | |
git diff --staged --exit-code | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
if: ${{ failure() && steps.test.conclusion == 'failure' }} | |
with: | |
name: ${{ matrix.os }}-${{ (matrix.race && 'race') || 'norace' }}-new-baselines-artifact | |
path: testdata/baselines/local | |
lint: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
- os: windows-latest | |
- os: macos-latest | |
- os: ubuntu-latest | |
name: 'noembed' | |
noembed: true | |
name: lint (${{ matrix.name || matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
env: | |
TSGO_HEREBY_NOEMBED: ${{ (matrix.noembed && 'true') || 'false' }} | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: lint${{ (matrix.noembed && '-noembed') || ''}} | |
- run: npm ci | |
- run: npx hereby lint | |
format: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: format | |
- run: npm ci | |
- run: npx hereby install-tools | |
- run: npx hereby check:format | |
generate: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
submodules: true | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: generate | |
- run: npm ci | |
- run: npx hereby generate | |
- run: node ./internal/lsp/lsproto/_generate/fetchModel.mjs | |
- run: node ./internal/lsp/lsproto/_generate/generate.mjs | |
- run: git add . | |
- run: git diff --staged --exit-code --stat | |
tidy: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: tidy | |
- run: go mod tidy -diff | |
- run: go -C ./_tools mod tidy -diff | |
smoke: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
submodules: true | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: smoke | |
- run: npm ci | |
- run: npx hereby build --race | |
- run: npm ci && npx hereby generate-diagnostics | |
working-directory: ./_submodules/TypeScript | |
- run: ./built/local/tsgo -p ./_submodules/TypeScript/src/compiler --singleThreaded | |
- run: ./built/local/tsgo -p ./_submodules/TypeScript/src/compiler | |
misc: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: misc | |
- run: go -C ./_tools run ./cmd/checkmodpaths $PWD | |
baselines: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
submodules: true | |
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 | |
- uses: dtolnay/rust-toolchain@fcf085fcb4b4b8f63f96906cd713eb52181b5ea4 # stable | |
- uses: ./.github/actions/setup-go | |
with: | |
cache-name: baselines | |
- run: npm ci | |
- name: Remove all baselines | |
run: rm -rf testdata/baselines/reference | |
- name: Run tests | |
run: npx hereby test &> /dev/null || exit 0 | |
- name: Accept baselines | |
run: | | |
npx hereby baseline-accept | |
git add testdata/baselines/reference | |
- name: Run tests | |
run: npx hereby test | |
- name: Check baselines | |
id: 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" | |
git diff --staged > fix_baselines.patch | |
exit 1 | |
fi | |
- name: Upload baseline diff artifact | |
if: ${{ failure() && steps.check-baselines.conclusion == 'failure' }} | |
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: fix_baselines.patch | |
path: fix_baselines.patch | |
required: | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
needs: | |
- build | |
- test | |
- lint | |
- format | |
- generate | |
- tidy | |
- smoke | |
steps: | |
- name: Check required jobs | |
env: | |
NEEDS: ${{ toJson(needs) }} | |
run: | | |
! echo $NEEDS | jq -e 'to_entries[] | { job: .key, result: .value.result } | select(.result != "success")' |