Continuous integration #9
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] | |
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 }} |