Repository navigation
ci: enable the ISC corpus sweep as the conformance gate #376
This file contains hidden or 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: rake | |
| on: | |
| push: | |
| branches: [ main, v*, ci-check ] | |
| tags: [ v* ] | |
| pull_request: | |
| jobs: | |
| rspec: | |
| name: Test on Ruby ${{ matrix.ruby }} / ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| ruby: ["3.3", "3.4"] | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| env: | |
| BUNDLE_WITHOUT: "secryst" | |
| SKIP_JS: "1" | |
| SKIP_PYTHON: "1" | |
| ISC_SWEEP: "1" | |
| # The ISC corpus sweep: every map's own tests through every | |
| # supported compiler (Interpreter, Compiler::Ruby), against the | |
| # ../maps sibling from the monorepo checkout. The conformance gap | |
| # it measured is closed (16,482 examples, 0 failures — | |
| # interscript-ruby#779..#786); this is now the CI conformance | |
| # gate for the corpus. The experimental Python bridge is excluded | |
| # (SKIP_PYTHON) until its own corpus conformance work lands. | |
| steps: | |
| - name: Checkout monorepo | |
| uses: actions/checkout@v7 | |
| with: | |
| repository: interscript/interscript | |
| - name: Bootstrap packages | |
| run: ruby bootstrap.rb | |
| - name: Set up Ruby | |
| uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: ${{ matrix.ruby }} | |
| bundler-cache: true | |
| working-directory: ruby | |
| - name: Install Python helper and gems | |
| working-directory: ruby | |
| # bash everywhere: the PYBIN substitution is POSIX shell, which | |
| # PowerShell (the windows default) cannot parse. --break-system- | |
| # packages rides out PEP 668 on Homebrew-managed macos Pythons. | |
| shell: bash | |
| run: | | |
| bundle config set --local with jsexec | |
| bundle install | |
| if bundle exec ruby -e 'require "pycall"' >/dev/null 2>&1; then | |
| # PyCall binds whichever libpython it was built against, which | |
| # is not necessarily the python that bare `pip` targets — | |
| # install the regex helper into that interpreter. | |
| PYBIN=$(bundle exec ruby -e 'require "pycall"; v = PyCall.sys.version[/\d+\.\d+/]; puts "python#{v}"') | |
| if command -v "$PYBIN" >/dev/null 2>&1; then | |
| "$PYBIN" -m pip install --break-system-packages regex || "$PYBIN" -m pip install regex | |
| else | |
| echo "$PYBIN not on PATH — python helper not installed" | |
| fi | |
| else | |
| echo "pycall not bundled (SKIP_PYTHON) — python helper not installed" | |
| fi | |
| - name: RSpec | |
| working-directory: ruby | |
| run: bundle exec rspec | |
| standard: | |
| name: StandardRB | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| # The Gemfile's path dependency needs ../maps to exist for bundler | |
| # to resolve; linting itself never loads it. actions/checkout | |
| # cannot write outside the workspace, hence the plain clone. | |
| - run: git clone --depth 1 https://github.com/interscript/maps ../maps | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: "3.4" | |
| bundler-cache: true | |
| - run: bundle exec standardrb |