Skip to content

Commit

Permalink
test external sources on CI
Browse files Browse the repository at this point in the history
  • Loading branch information
resolritter committed Apr 10, 2023
1 parent 2c7b630 commit 2a6f227
Show file tree
Hide file tree
Showing 5 changed files with 270 additions and 3 deletions.
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: CI

on:
push:
branches:
- main

pull_request:
branches:
- main
types:
- opened
- synchronize
- reopened
- unlocked
- ready_for_review

jobs:
test-parser:
if: github.event.pull_request.draft != true
concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3

- name: Install the tools
run: npm install

- name: Run the parsing tests
run: npm run test-parsing
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ target
/bindings/c/tree-sitter-*.pc
/build
/node_modules
/test/sources
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
"tree-sitter-cli": "^0.20.1"
},
"scripts": {
"test": "tree-sitter test"
}
,
"test": "tree-sitter test",
"test-parsing": "scripts/test-parsing"
},
"tree-sitter": [
{
"scope": "source.zig",
Expand Down
147 changes: 147 additions & 0 deletions scripts/known-parsing-failures.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
zig/test/cases/aarch64-linux/hello_world_with_updates.0.zig
zig/test/cases/aarch64-linux/conditional_branches.1.zig
zig/test/cases/aarch64-linux/hello_world_with_updates.2.zig
zig/test/cases/aarch64-linux/hello_world_with_updates.1.zig
zig/test/cases/aarch64-linux/conditional_branches.0.zig
zig/test/cases/arm-linux/arithmetic_operations.3.zig
zig/test/cases/arm-linux/hello_world_with_updates.0.zig
zig/test/cases/arm-linux/arithmetic_operations.1.zig
zig/test/cases/arm-linux/errors.1.zig
zig/test/cases/arm-linux/arithmetic_operations.4.zig
zig/test/cases/arm-linux/hello_world_with_updates.2.zig
zig/test/cases/arm-linux/hello_world_with_updates.1.zig
zig/test/cases/arm-linux/arithmetic_operations.2.zig
zig/test/cases/arm-linux/print_u32s.zig
zig/test/cases/arm-linux/errors.0.zig
zig/test/cases/arm-linux/arithmetic_operations.0.zig
zig/test/cases/arm-linux/function_pointers.zig
zig/test/cases/arm-linux/parameters_and_return_values.0.zig
zig/test/cases/plan9/hello_world_with_updates.0.zig
zig/test/cases/safety/array slice sentinel mismatch non-scalar.zig
zig/test/cases/safety/array slice sentinel mismatch vector.zig
zig/test/cases/x86_64-linux/inline_assembly.2.zig
zig/test/cases/x86_64-linux/hello_world_with_updates.3.zig
zig/test/cases/x86_64-linux/inline_assembly.0.zig
zig/test/cases/x86_64-linux/hello_world_with_updates.4.zig
zig/test/cases/x86_64-linux/hello_world_with_updates.2.zig
zig/test/cases/x86_64-linux/only_1_function_and_it_gets_updated.1.zig
zig/test/cases/x86_64-linux/assert_function.8.zig
zig/test/cases/x86_64-linux/only_1_function_and_it_gets_updated.0.zig
zig/test/cases/x86_64-linux/inline_assembly.3.zig
zig/test/cases/x86_64-linux/comptime_var.6.zig
zig/test/cases/x86_64-linux/assert_function.18.zig
zig/test/cases/x86_64-linux/assert_function.7.zig
zig/test/cases/x86_64-linux/hello_world_with_updates.5.zig
zig/test/cases/x86_64-linux/comptime_var.2.zig
zig/test/cases/x86_64-macos/assert_function.18.zig
zig/test/cases/llvm/f_segment_address_space_reading_and_writing.zig
zig/test/link/macho/headerpad/build.zig
zig/test/link/macho/entry/build.zig
zig/test/link/wasm/stack_pointer/build.zig
zig/test/compile_errors.zig
zig/test/standalone/brace_expansion/main.zig
zig/lib/std/hash/benchmark.zig
zig/lib/std/x/net/bpf.zig
zig/lib/std/x/os/net.zig
zig/lib/std/zig/string_literal.zig
zig/lib/std/zig/parser_test.zig
zig/lib/std/zig/fmt.zig
zig/lib/std/zig/tokenizer.zig
zig/lib/std/zig/system/x86.zig
zig/lib/std/testing.zig
zig/lib/std/target/amdgpu.zig
zig/lib/std/crypto/sha2.zig
zig/lib/std/crypto/benchmark.zig
zig/lib/std/crypto/utils.zig
zig/lib/std/os/windows/ws2_32.zig
zig/lib/std/os/linux/riscv64.zig
zig/lib/std/os/linux/mips.zig
zig/lib/std/os/linux/powerpc.zig
zig/lib/std/os/linux/x86_64.zig
zig/lib/std/os/linux/thumb.zig
zig/lib/std/os/linux/arm-eabi.zig
zig/lib/std/os/linux/powerpc64.zig
zig/lib/std/os/linux/i386.zig
zig/lib/std/os/linux/arm64.zig
zig/lib/std/os/linux/sparc64.zig
zig/lib/std/os/plan9/x86_64.zig
zig/lib/std/os/uefi.zig
zig/lib/std/build/InstallRawStep.zig
zig/lib/std/build/CheckObjectStep.zig
zig/lib/std/start.zig
zig/lib/std/target.zig
zig/lib/std/fmt.zig
zig/lib/std/valgrind.zig
zig/lib/std/debug.zig
zig/lib/std/atomic/Atomic.zig
zig/lib/std/c/tokenizer.zig
zig/lib/compiler_rt/aarch64_outline_atomics.zig
zig/src/test.zig
zig/src/link/Wasm/types.zig
zig/src/link/Wasm/Atom.zig
zig/src/link/MachO.zig
zig/src/link/Wasm.zig
zig/src/link/Coff.zig
zig/src/codegen/spirv/Section.zig
zig/src/codegen/llvm.zig
zig/src/codegen/c.zig
zig/src/Module.zig
zig/src/type.zig
zig/src/print_zir.zig
zig/src/print_air.zig
zig/src/TypedValue.zig
zig/src/translate_c.zig
zig/src/arch/x86_64/CodeGen.zig
zig/src/arch/wasm/CodeGen.zig
zig/src/Compilation.zig
zig/src/DepTokenizer.zig
zig/tools/generate_linux_syscalls.zig
zig/tools/gen_outline_atomics.zig
zig/tools/gen_spirv_spec.zig
zig/test/cases/safety/slice with sentinel out of bounds - runtime len.zig
zig/test/behavior/struct.zig
zig/test/behavior/slice.zig
zig/test/behavior/array.zig
zig/test/behavior/pointers.zig
zig/test/behavior/slice_sentinel_comptime.zig
zig/test/behavior/bugs/12972.zig
zig/test/behavior/packed_struct_explicit_backing_int.zig
zig/lib/std/os.zig
zig/lib/std/array_hash_map.zig
zig/lib/std/hash/auto_hash.zig
zig/lib/std/fs.zig
zig/lib/std/mem.zig
zig/lib/std/zig/c_translation.zig
zig/lib/std/zig/system/windows.zig
zig/lib/std/os/test.zig
zig/lib/std/os/linux/bpf/btf.zig
zig/lib/std/os/linux/bpf.zig
zig/lib/std/os/windows.zig
zig/lib/std/os/uefi/protocols/ip6_protocol.zig
zig/lib/std/os/uefi/protocols/hii.zig
zig/lib/std/os/uefi/protocols/simple_text_input_ex_protocol.zig
zig/lib/std/os/uefi/protocols/simple_network_protocol.zig
zig/lib/std/os/uefi/protocols/absolute_pointer_protocol.zig
zig/lib/std/os/uefi/protocols/edid_override_protocol.zig
zig/lib/std/os/uefi/tables/boot_services.zig
zig/lib/std/unicode.zig
zig/lib/std/meta/trait.zig
zig/lib/std/Thread.zig
zig/lib/std/mem/Allocator.zig
zig/lib/std/json/test.zig
zig/lib/std/child_process.zig
zig/lib/std/macho.zig
zig/lib/std/process.zig
zig/lib/std/dwarf.zig
zig/lib/std/json.zig
zig/lib/std/c/openbsd.zig
zig/lib/std/meta.zig
zig/src/main.zig
zig/src/link/Wasm/Object.zig
zig/src/link/Wasm/Archive.zig
zig/src/link/MachO/Archive.zig
zig/src/Air.zig
zig/src/codegen/llvm/bindings.zig
zig/src/Autodoc.zig
zig/src/Zir.zig
zig/tools/process_headers.zig
86 changes: 86 additions & 0 deletions scripts/test-parsing
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/bin/env bash
# adapted from tree-sitter-typescript/script/parse-examples

set -Eeu -o pipefail
shopt -s inherit_errexit

this_file="${BASH_SOURCE[0]}"
if [ "${this_file::1}" != '/' ]; then
this_file="$PWD/$this_file"
fi

this_dir="${this_file%/*}"
project_root="${this_dir%/*}"
testing_dir="$project_root/test/sources"

cd "$project_root"

clone_repo() {
local owner=$1
local name=$2
local sha=$3
local path="$testing_dir/$name"

if [ -d "$path" ]; then
pushd "$path" > /dev/null
if [ "$(git rev-parse HEAD 2>/dev/null)" == "$sha" ]; then
popd > /dev/null
return
else
popd > /dev/null
rm -rf "$path"
echo "Updating $owner/$name to $sha"
fi
else
echo "Cloning $owner/$name"
fi

mkdir -p "$path"
pushd "$path" > /dev/null
git init --quiet
git remote add origin "https://github.com/$owner/$name"
git pull --quiet --ff-only --depth 1 origin "$sha"
popd > /dev/null
}

clone_repo ziglang zig b57081f039bd3f8f82210e8896e336e3c3a6869b

known_failures=()
while IFS= read -r line; do
if [[ "$line" =~ [^[:space:]] ]]; then
full_path="$testing_dir/$line"
if [ -e "$full_path" ]; then
if tree-sitter parse "$full_path" &>/dev/null; then
>&2 echo "File $full_path can be parsed without errors, but it's listed in $this_dir/known-parsing-failures.txt"
exit 1
else
known_failures+=("$testing_dir/$line")
fi
else
>&2 echo "File $full_path (listed in $this_dir/known-parsing-failures.txt) does not exist"
exit 1
fi
fi
done < "$this_dir/known-parsing-failures.txt"

while IFS= read -r line; do
for known_failure in "${known_failures[@]}"; do
if [ "$known_failure" == "$line" ]; then
continue 2
fi
done
parse_args+=("$line")
done < <(
find "$testing_dir" \
-name "*.zig" \
-not -path "**/compile_errors/**"
)
if [ ${#parse_args[*]} -eq 0 ]; then
>&2 echo "No files found to test"
exit 1
fi

echo "[STEP] The following files will be tested:"
printf "%s\n" "${parse_args[@]}"

tree-sitter parse -q "${parse_args[@]}"

0 comments on commit 2a6f227

Please sign in to comment.