feat: add validate command #699
Workflow file for this run
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: rake | |
on: | |
push: | |
branches: [ main ] | |
paths-ignore: | |
- 'docs/**' | |
- '**.adoc' | |
- '**.md' | |
- .github/workflows/release.yml | |
- .github/workflows/codeql.yml | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}' | |
cancel-in-progress: true | |
env: | |
RUBYGEM_VER: 3.4.22 | |
BUNDLER_VER: 2.4.22 | |
# Forcing bundler version to ensure that it is consistent everywhere and | |
# does not cause bundler gem reinstalls | |
# bundler/rubygems 2.3.22 is a minimal requirement to support gnu/musl differentiation | |
# https://github.com/rubygems/rubygems/pull/4488 | |
jobs: | |
rubocop: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: 3.1 | |
bundler: ${{ env.BUNDLER_VER }} | |
bundler-cache: true | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Rubocop | |
run: bundle exec rake rubocop | |
rake: | |
name: test on ruby-${{ matrix.ruby }} ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
os: [ ubuntu-latest, windows-latest, macos-latest ] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup packages | |
if: startsWith(matrix.os, 'macos') | |
run: brew install autoconf automake libtool | |
- name: Install Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: ${{ matrix.ruby }} | |
bundler: ${{ env.BUNDLER_VER }} | |
# Rice gem has issues with bundler cache | |
# more info https://github.com/lutaml/expressir/runs/2097658383?check_suite_focus=true#step:7:2126 | |
# but it is not the only issue | |
bundler-cache: false | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Process cache | |
uses: actions/cache@v4 | |
id: cache | |
with: | |
path: lib/expressir/express/express_parser.* | |
key: v4-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('ext/express_parser/extconf.rb', 'ext/express_parser/antlrgen/**', 'ext/express_parser/express_parser.cpp', '.git/modules/ext/express_parser/antlr4-upstream/HEAD') }} | |
- name: Build native extension | |
if: steps.cache.outputs.cache-hit != 'true' | |
run: bundle exec rake compile | |
- name: Run tests | |
run: | | |
bundle exec rake | |
cat .rspec_status | |
rake-alpine: | |
name: test on ruby-${{ matrix.ruby }} alpine container | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
container: ruby:${{ matrix.ruby }}-alpine | |
steps: | |
- name: Install packages | |
run: | | |
apk --no-cache --upgrade add build-base git bash tar | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Upgrade RubyGems | |
if: matrix.ruby == '3.0' || matrix.ruby == '2.7' | |
run: gem update --system ${{ env.RUBYGEM_VER }} --no-document | |
- name: Bundle | |
run: | | |
git config --global --add safe.directory $PWD | |
bundle install --jobs 4 --retry 3 | |
- name: Process cache | |
uses: actions/cache@v4 | |
id: cache | |
with: | |
path: lib/expressir/express/express_parser.* | |
key: v4-alpine-${{ matrix.ruby }}-${{ hashFiles('ext/express_parser/extconf.rb', 'ext/express_parser/antlrgen/**', 'ext/express_parser/express_parser.cpp', '.git/modules/ext/express_parser/antlr4-upstream/HEAD') }} | |
- name: Build native extension | |
if: steps.cache.outputs.cache-hit != 'true' | |
run: bundle exec rake compile | |
- name: Run tests | |
run: | | |
bundle exec rake | |
cat .rspec_status | |
# test release workflow | |
pack-ruby: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: '3.1' | |
bundler: ${{ env.BUNDLER_VER }} | |
bundler-cache: false | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Build gem without native extension | |
run: gem build expressir.gemspec | |
- name: Package gem without native extension | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pkg-ruby | |
path: expressir-*.gem | |
pack: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ linux-gnu, linux-musl, windows, darwin ] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: '3.1' | |
bundler-cache: false | |
bundler: ${{ env.BUNDLER_VER }} | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Enable swap | |
run: | | |
sudo fallocate -l 15g /compile.swap | |
sudo chmod 600 /compile.swap | |
sudo mkswap /compile.swap | |
sudo swapon /compile.swap | |
sudo swapon --all --verbose | |
- name: Build gem with native extension | |
run: bundle exec rake gem:${{ matrix.platform }} | |
- name: Package gem with native extension | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pkg-${{ matrix.platform }} | |
path: pkg/*.gem | |
verify-ruby: | |
name: verify ruby gem on ruby-${{ matrix.ruby }} ${{ matrix.os }} | |
needs: pack-ruby | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
os: [ ubuntu-latest, windows-latest, macos-latest ] | |
steps: | |
- name: Install Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: ${{ matrix.ruby }} | |
bundler-cache: false | |
bundler: ${{ env.BUNDLER_VER }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Download packaged gem | |
uses: actions/download-artifact@v4 | |
with: | |
name: pkg-ruby | |
path: pkg | |
- name: Install gem | |
run: gem install -l pkg/expressir-*.gem | |
- name: Verify | |
run: | | |
cd $(ruby -e "puts Gem::Specification.find_by_name('expressir').gem_dir") | |
ruby bin/rspec | |
cat .rspec_status || echo ".rspec_status was not found" | |
verify-ruby-linux-musl: | |
name: verify ruby gem on ruby-${{ matrix.ruby }} on alpine container | |
needs: pack-ruby | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
container: ruby:${{ matrix.ruby }}-alpine | |
steps: | |
- name: Install packages | |
run: | | |
apk --no-cache --upgrade add build-base git bash tar | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Upgrade RubyGems | |
if: matrix.ruby == '3.0' || matrix.ruby == '2.7' | |
run: gem update --system ${{ env.RUBYGEM_VER }} --no-document | |
- name: Bundle | |
run: | | |
git config --global --add safe.directory $PWD | |
bundle install --jobs 4 --retry 3 | |
- name: Download packaged gem | |
uses: actions/download-artifact@v4 | |
with: | |
name: pkg-ruby | |
path: pkg | |
- name: Install gem | |
run: gem install -l pkg/expressir-*.gem | |
- name: Verify | |
run: | | |
cd $(ruby -e "puts Gem::Specification.find_by_name('expressir').gem_dir") | |
ruby bin/rspec | |
cat .rspec_status || echo ".rspec_status was not found" | |
verify-darwin: | |
name: verify MacOS binary gem on ruby-${{ matrix.ruby }} | |
needs: pack | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
steps: | |
- name: Install Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: ${{ matrix.ruby }} | |
bundler-cache: false | |
bundler: ${{ env.BUNDLER_VER }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Download packaged gem | |
uses: actions/download-artifact@v4 | |
with: | |
name: pkg-darwin | |
path: pkg | |
- name: Install binary gem | |
run: gem install -l pkg/expressir-*-$(ruby -e "puts RUBY_PLATFORM.sub(/darwin\d{2}$/, 'darwin')").gem | |
# MacOS with have something like x86_64-darwin19, others just x86_64-linux | |
- name: Verify | |
run: | | |
cd $(ruby -e "puts Gem::Specification.find_by_name('expressir').gem_dir") | |
ruby bin/rspec | |
cat .rspec_status || echo ".rspec_status was not found" | |
verify-linux-gnu: | |
name: verify Linux (gnu) binary gem on ruby-${{ matrix.ruby }} | |
needs: pack | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
steps: | |
- name: Install Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: ${{ matrix.ruby }} | |
bundler-cache: false | |
bundler: ${{ env.BUNDLER_VER }} | |
- name: Upgrade RubyGems | |
if: matrix.ruby == '3.0' || matrix.ruby == '2.7' | |
run: gem update --system ${{ env.RUBYGEM_VER }} --no-document | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Download packaged gem | |
uses: actions/download-artifact@v4 | |
with: | |
name: pkg-linux-gnu | |
path: pkg | |
- name: Install binary gem | |
run: gem install -l pkg/expressir-*-$(ruby -e "puts RUBY_PLATFORM")-gnu.gem | |
- name: Verify | |
run: | | |
cd $(ruby -e "puts Gem::Specification.find_by_name('expressir').gem_dir") | |
ruby bin/rspec | |
cat .rspec_status || echo ".rspec_status was not found" | |
verify-windows: | |
name: verify Windows binary gem on ruby-${{ matrix.ruby }} | |
needs: pack | |
continue-on-error: true | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
steps: | |
- name: Install Ruby | |
uses: ruby/setup-ruby@master | |
with: | |
ruby-version: ${{ matrix.ruby }} | |
bundler-cache: false | |
bundler: ${{ env.BUNDLER_VER }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Bundle | |
run: bundle install --jobs 4 --retry 3 | |
- name: Download packaged gem | |
uses: actions/download-artifact@v4 | |
with: | |
name: pkg-windows | |
path: pkg | |
- name: Install binary gem | |
run: gem install -l pkg/expressir-*-$(ruby -e "puts RUBY_PLATFORM").gem | |
- name: Verify | |
run: | | |
cd $(ruby -e "puts Gem::Specification.find_by_name('expressir').gem_dir") | |
ruby bin/rspec | |
cat .rspec_status || echo ".rspec_status was not found" | |
verify-linux-musl: | |
name: verify Linux (musl) binary gem on ruby-${{ matrix.ruby }} | |
needs: pack | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: [ '3.2', '3.1', '3.0', '2.7' ] | |
container: ruby:${{ matrix.ruby }}-alpine | |
steps: | |
- name: Install packages | |
run: | | |
apk --no-cache --upgrade add build-base git bash tar | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Upgrade RubyGems | |
if: matrix.ruby == '3.0' || matrix.ruby == '2.7' | |
run: gem update --system ${{ env.RUBYGEM_VER }} --no-document | |
- name: Bundle | |
run: | | |
git config --global --add safe.directory $PWD | |
bundle install --jobs 4 --retry 3 | |
- name: Download packaged gem | |
uses: actions/download-artifact@v4 | |
with: | |
name: pkg-linux-musl | |
path: pkg | |
- name: Install binary gem | |
run: gem install -l pkg/expressir-*-$(ruby -e "puts RUBY_PLATFORM").gem | |
- name: Verify | |
run: | | |
cd $(ruby -e "puts Gem::Specification.find_by_name('expressir').gem_dir") | |
ruby bin/rspec | |
cat .rspec_status || echo ".rspec_status was not found" |