Skip to content

Scaffold IPC-based API (#711) #1

Scaffold IPC-based API (#711)

Scaffold IPC-based API (#711) #1

Workflow file for this run

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")'