When parsing an invalid write, still add to the local table #4
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: Main | |
concurrency: | |
group: "${{github.workflow}}-${{github.ref}}" | |
cancel-in-progress: true | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "3.3" | |
bundler-cache: true | |
- name: Lint | |
run: bundle exec rake lint | |
template: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "2.7.0" | |
- name: Install necessary gems | |
run: gem install rake rake-compiler | |
- name: Generate templates | |
run: rake templates | |
env: | |
LANG: "C" | |
typecheck: | |
runs-on: ubuntu-latest | |
env: | |
BUNDLE_GEMFILE: gemfiles/typecheck/Gemfile | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "3.3" | |
bundler-cache: true | |
- name: Check Sorbet | |
run: bundle exec rake typecheck:tapioca typecheck:sorbet | |
- name: Check Steep | |
run: bundle exec rake typecheck:steep | |
- name: Check field kinds | |
run: rm lib/prism/node.rb && CHECK_FIELD_KIND=true bundle exec rake | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Run Ruby tests | |
run: bundle exec rake | |
shell: bash | |
env: | |
TESTOPTS: "-v" | |
build-ffi: | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- { ruby: "head", gemfile: "3.4" } | |
- { ruby: "jruby", gemfile: "jruby" } | |
- { ruby: "truffleruby", gemfile: "truffleruby" } | |
runs-on: ubuntu-latest | |
env: | |
PRISM_FFI_BACKEND: "true" | |
BUNDLE_GEMFILE: gemfiles/${{ matrix.target.gemfile }}/Gemfile | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: ${{ matrix.target.ruby }} | |
bundler-cache: true | |
- name: Run Ruby tests | |
run: bundle exec rake | |
build-without-assertions: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-20.04, ubuntu-22.04] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Run Ruby tests | |
run: bundle exec rake compile_no_debug test | |
build-debug: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Run Ruby tests | |
run: bundle exec rake | |
env: | |
PRISM_BUILD_DEBUG: "1" | |
build-minimal: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Run Ruby tests | |
run: bundle exec rake compile_minimal test | |
env: | |
PRISM_BUILD_MINIMAL: "1" | |
build-java: | |
runs-on: ubuntu-latest | |
env: | |
JRUBY_OPTS: "--dev" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up JRuby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: jruby | |
bundler-cache: true | |
- name: Run Java Loader test | |
run: PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS=1 JRUBY_OPTS="-J-ea" bundle exec rake test:java_loader | |
lex-ruby: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Lex ruby/ruby | |
run: bundle exec rake lex:ruby | |
lex-discourse: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Lex discourse/discourse | |
run: bundle exec rake lex:discourse | |
lex-top-100: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Lex Top 100 Gems | |
run: bundle exec rake lex:topgems | |
- name: Parse Top 100 Gems | |
run: bundle exec rake parse:topgems | |
- name: Serialized size stats with all fields | |
run: bundle exec rake serialized_size:topgems | |
- name: Recompile with only semantic fields | |
run: PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS=1 bundle exec rake clobber compile | |
- name: Serialized size stats with only semantic fields | |
run: bundle exec rake serialized_size:topgems | |
memcheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install libc6-dbg | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libc6-dbg | |
- name: Cache valgrind | |
uses: actions/cache@v4 | |
id: cache-valgrind | |
with: | |
path: valgrind-3.23.0 | |
key: ${{ runner.os }}-valgrind-3.23.0 | |
- name: Download valgrind | |
if: steps.cache-valgrind.outputs.cache-hit != 'true' | |
run: | | |
wget https://sourceware.org/pub/valgrind/valgrind-3.23.0.tar.bz2 | |
tar xf valgrind-3.23.0.tar.bz2 | |
- name: Install valgrind | |
run: | | |
cd valgrind-3.23.0 | |
./configure | |
make | |
sudo make install | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Run Ruby tests with valgrind | |
run: bundle exec rake test:valgrind | |
gem-package: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- run: bundle config --local frozen false | |
- run: bundle exec rake build:dev | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: gem-package | |
path: pkg | |
retention-days: 1 | |
gem-install: | |
needs: ["gem-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- { ruby: "2.7", os: "ubuntu-latest", gemfile: "2.7" } | |
- { ruby: "3.0", os: "ubuntu-latest", gemfile: "3.0" } | |
- { ruby: "3.1", os: "ubuntu-latest", gemfile: "3.1" } | |
- { ruby: "3.2", os: "ubuntu-latest", gemfile: "3.2" } | |
- { ruby: "3.3", os: "ubuntu-latest", gemfile: "3.3" } | |
- { ruby: "head", os: "ubuntu-latest", gemfile: "3.4" } | |
- { ruby: "jruby", os: "ubuntu-latest", gemfile: "jruby" } | |
- { ruby: "truffleruby", os: "ubuntu-latest", gemfile: "truffleruby" } | |
- { ruby: "2.7", os: "macos-latest", gemfile: "2.7" } | |
- { ruby: "3.0", os: "macos-latest", gemfile: "3.0" } | |
- { ruby: "3.1", os: "macos-latest", gemfile: "3.1" } | |
- { ruby: "3.2", os: "macos-latest", gemfile: "3.2" } | |
- { ruby: "3.3", os: "macos-latest", gemfile: "3.3" } | |
- { ruby: "head", os: "macos-latest", gemfile: "3.4" } | |
- { ruby: "jruby", os: "macos-latest", gemfile: "jruby" } | |
- { ruby: "truffleruby", os: "macos-latest", gemfile: "truffleruby" } | |
- { ruby: "2.7", os: "windows-latest", gemfile: "2.7" } | |
- { ruby: "3.0", os: "windows-latest", gemfile: "3.0" } | |
- { ruby: "3.1", os: "windows-latest", gemfile: "3.1" } | |
- { ruby: "3.2", os: "windows-latest", gemfile: "3.2" } | |
- { ruby: "3.3", os: "windows-latest", gemfile: "3.3" } | |
- { ruby: "head", os: "windows-latest", gemfile: "3.4" } | |
- { ruby: "jruby", os: "windows-latest", gemfile: "jruby" } | |
env: | |
BUNDLE_GEMFILE: gemfiles/${{ matrix.target.gemfile }}/Gemfile | |
runs-on: ${{ matrix.target.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: ${{ matrix.target.ruby }} | |
- uses: actions/download-artifact@v4 | |
with: | |
name: gem-package | |
path: pkg | |
- run: | | |
gem install --local pkg/prism-*.gem | |
gem list -d prism | |
shell: bash | |
- name: Run tests | |
run: | | |
bundle install | |
rm -rf lib ext # ensure we don't use the local files | |
rake test | |
shell: bash | |
gcc-analyzer: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Run build with gcc-analyzer enabled | |
run: | | |
CFLAGS='-fanalyzer' bundle exec rake compile | |
clang-analyzer: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: head | |
bundler-cache: true | |
- name: Install clang-analyzer | |
run: sudo apt-get install -y clang-tools | |
- name: Run build with clang-analyzer | |
run: | | |
scan-build bundle exec rake compile 2>&1 | tee /tmp/scan_build_output.log | |
grep -q 'scan-build: No bugs found.' /tmp/scan_build_output.log |