Merge pull request #304 from github/update-perf-base #1253
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: Continuous integration | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
schedule: | |
- cron: "0 0 1,15 * *" | |
# In the event that there is a new push to the ref, cancel any running jobs because there are now obsolete, and wasting resources. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
test-rust: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
rust: [stable] | |
steps: | |
- name: Install Rust environment | |
uses: hecrj/setup-rust-action@v1 | |
with: | |
rust-version: ${{ matrix.rust }} | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Check formatting | |
run: cargo fmt --all -- --check | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo | |
target | |
key: ${{ runner.OS }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.OS }}-cargo- | |
- name: Install cargo-valgrind | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y valgrind | |
cargo install cargo-valgrind | |
- name: Build library | |
run: cargo build | |
- name: Ensure C headers are up to date | |
run: | | |
script/cbindgen | |
test -z "$(git status --porcelain)" | |
- name: Run test suite | |
run: cargo test | |
- name: Run test suite under valgrind | |
# We only need to use valgrind to test the crates that have C bindings. | |
run: cargo valgrind test -p stack-graphs | |
- name: Run lsp-positions tests without tree-sitter | |
run: cargo test -p lsp-positions --no-default-features | |
- name: Run test suite with all features enabled | |
run: cargo test --all-features | |
- name: Run test suite with all optimizations | |
run: cargo test --release | |
# Do the new project test last, because it adds the crate in the current source | |
# folder, and that shouldn't influence other tests. | |
- name: Generate, build, and run new language project | |
run: | | |
cargo run --bin tree-sitter-stack-graphs --features cli -- init \ | |
--language-name InitTest \ | |
--language-id init_test \ | |
--language-file-extension it \ | |
--grammar-crate-name tree-sitter-python \ | |
--grammar-crate-version 0.20.0 \ | |
--internal \ | |
--non-interactive | |
cargo check -p tree-sitter-stack-graphs-init_test --all-features | |
cargo test -p tree-sitter-stack-graphs-init_test | |
cargo run -p tree-sitter-stack-graphs-init_test --features cli -- help | |
list-languages: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: languages | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: List languages | |
id: language-list | |
run: echo "languages=$(find -mindepth 1 -maxdepth 1 -type d -printf '%P\n' | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT | |
outputs: | |
languages: ${{ steps.language-list.outputs.languages }} | |
test-languages: | |
needs: [list-languages] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
language: ${{ fromJson(needs.list-languages.outputs.languages) }} | |
rust: [stable] | |
steps: | |
- name: Install Rust environment | |
uses: hecrj/setup-rust-action@v1 | |
with: | |
rust-version: ${{ matrix.rust }} | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo | |
target | |
key: ${{ runner.OS }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.OS }}-cargo- | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Build | |
run: cargo build -p ${{ matrix.language }} | |
- name: Test | |
run: cargo test -p ${{ matrix.language }} | |
test-cli: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
rust: [stable] | |
env: | |
TEST_NAME: typescript_minimal_project | |
TSSG_TS: tree-sitter-stack-graphs-typescript | |
steps: | |
- name: Install Rust environment | |
uses: hecrj/setup-rust-action@v1 | |
with: | |
rust-version: ${{ matrix.rust }} | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo | |
target | |
key: ${{ runner.OS }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.OS }}-cargo- | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
lfs: true | |
- name: Build | |
run: cargo build --release -p ${{ env.TSSG_TS }} --features cli | |
- name: Checkout test code | |
run: unzip ${{ env.TEST_NAME }}.zip | |
working-directory: data | |
- name: Index | |
run: | | |
target/release/${{ env.TSSG_TS }} index \ | |
-D data/${{ env.TEST_NAME }}.sqlite \ | |
--verbose \ | |
--hide-error-details \ | |
data/${{ env.TEST_NAME }} | |
- name: Status | |
run: | | |
target/release/${{ env.TSSG_TS }} status \ | |
-D data/${{ env.TEST_NAME }}.sqlite \ | |
--all | |
- name: Query | |
run: | | |
target/release/${{ env.TSSG_TS }} query \ | |
-D data/${{ env.TEST_NAME }}.sqlite \ | |
definition \ | |
data/${{ env.TEST_NAME }}/index.ts:3:10 | |
- name: Index (forced) | |
run: | | |
target/release/${{ env.TSSG_TS }} index \ | |
-D data/${{ env.TEST_NAME }}.sqlite \ | |
--verbose \ | |
--hide-error-details \ | |
data/${{ env.TEST_NAME }} |