Skip to content

Continuous integration #9

Continuous integration

Continuous integration #9

Workflow file for this run

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]
env:
# cargo hack does not use the default-members in Cargo.toml, so we restrict to those explicitly
CARGO_HACK: cargo hack -p lsp-positions -p stack-graphs -p tree-sitter-stack-graphs --feature-powerset --exclude-features copious-debugging
steps:
- name: Install Rust environment
uses: hecrj/setup-rust-action@v1
with:
rust-version: ${{ matrix.rust }}
- name: Install cargo-hack
run: cargo install cargo-hack
- 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: Build library (all feature combinations)
run: ${{ env.CARGO_HACK }} --no-dev-deps build
- name: Run test suite (all feature combinations)
run: ${{ env.CARGO_HACK }} test
- name: Run test suite with all optimizations (default features)
run: cargo test --release
- name: Install cargo-valgrind
run: |
sudo apt-get update
sudo apt-get install -y valgrind
cargo install cargo-valgrind
- name: Run test suite under valgrind (default features)
# We only need to use valgrind to test the crates that have C bindings.
run: cargo valgrind test -p stack-graphs
- name: Ensure C headers are up to date
run: |
script/cbindgen
test -z "$(git status --porcelain)"
test-init:
needs: [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: Cache dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo
target
key: ${{ runner.OS }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.OS }}-cargo-
- name: Generate, build, and run new language project
run: script/ci-test-init
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: Install cargo-hack
run: cargo install cargo-hack
- 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 (all feature combinations)
run: cargo hack -p ${{ matrix.language }} --feature-powerset build
- name: Test (all features)
run: cargo test -p ${{ matrix.language }} --all-features
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 }}