ci #30
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: ci | |
concurrency: | |
group: "${{github.workflow}}-${{github.ref}}" | |
cancel-in-progress: true | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 8 * * 3" # At 08:00 on Wednesday # https://crontab.guru/#0_8_*_*_3 | |
push: | |
branches: | |
- main | |
- v*.*.x | |
tags: | |
- v*.*.* | |
pull_request: | |
types: [opened, synchronize] | |
branches: | |
- '*' | |
jobs: | |
# | |
# SECTION pre-checks for fast feedback loops, and to gate the rest of the suite | |
# | |
rubocop: | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:mri-3.1 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake rubocop | |
basic: | |
needs: ["rubocop"] | |
strategy: | |
fail-fast: false | |
matrix: | |
image: ["ubuntu", "ubuntu32"] | |
sys: ["enable"] | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:${{matrix.image}} | |
env: | |
NOKOGIRI_TEST_GC_LEVEL: normal # for fast feedback | |
steps: | |
- uses: actions/checkout@v1 # v1 because of https://github.com/actions/checkout/issues/334 | |
with: | |
submodules: true | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test | |
- run: bundle exec rake test:bench | |
gumbo: | |
needs: ["rubocop"] | |
strategy: | |
fail-fast: false | |
matrix: | |
plat: ["ubuntu", "windows", "macos"] | |
runs-on: ${{matrix.plat}}-latest | |
steps: | |
- name: configure git crlf | |
if: matrix.plat == 'windows' | |
run: | | |
git config --system core.autocrlf false | |
git config --system core.eol lf | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "3.1" | |
bundler-cache: true | |
bundler: latest | |
- run: bundle exec rake gumbo:test | |
# | |
# SECTION run the test suite across a broad matrix of rubies, configs, and systems | |
# | |
linux: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:mri-${{matrix.ruby}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/cache@v3 | |
if: matrix.sys == 'disable' | |
with: | |
path: ports | |
key: ports-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test | |
- run: bundle exec rake test:bench | |
valgrind: | |
needs: ["linux"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:mri-${{matrix.ruby}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/cache@v3 | |
if: matrix.sys == 'disable' | |
with: | |
path: ports | |
key: ports-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test:valgrind | |
musl: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable"] | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:alpine | |
steps: | |
- uses: actions/checkout@v1 # v1 because of https://github.com/actions/checkout/issues/334 | |
with: | |
submodules: true | |
# skip cache because of https://github.com/actions/cache/issues/675 | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test | |
musl-valgrind: | |
needs: ["musl"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["disable"] | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:alpine | |
steps: | |
- uses: actions/checkout@v1 # v1 because of https://github.com/actions/checkout/issues/334 | |
with: | |
submodules: true | |
# skip cache because of https://github.com/actions/cache/issues/675 | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test:valgrind | |
libxmlruby: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable"] | |
ruby: ["3.1"] | |
env: | |
BUNDLE_GEMFILE: "Gemfile-libxml-ruby" | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:mri-${{matrix.ruby}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/cache@v3 | |
if: matrix.sys == 'disable' | |
with: | |
path: ports | |
key: ports-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test | |
libxmlruby-valgrind: | |
needs: ["libxmlruby"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["disable"] | |
ruby: ["3.1"] | |
env: | |
BUNDLE_GEMFILE: "Gemfile-libxml-ruby" | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:mri-${{matrix.ruby}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/cache@v3 | |
if: matrix.sys == 'disable' | |
with: | |
path: ports | |
key: ports-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test:valgrind | |
osx: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: ${{matrix.ruby}} | |
bundler-cache: true | |
bundler: latest | |
- uses: actions/cache@v3 | |
if: matrix.sys == 'disable' | |
with: | |
path: ports | |
key: ports-macos-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test | |
windows: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["2.7", "3.0", "3.1", "3.2", "mingw"] | |
runs-on: windows-2022 | |
steps: | |
- name: configure git crlf | |
run: | | |
git config --system core.autocrlf false | |
git config --system core.eol lf | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby-pkgs@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
mingw: "libxml2 libxslt" | |
bundler-cache: true | |
bundler: latest | |
- uses: actions/cache@v3 | |
if: matrix.sys == 'disable' | |
with: | |
path: ports | |
key: ports-windows-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test | |
jruby: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["jruby-9.4"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: ${{matrix.ruby}} | |
bundler-cache: true | |
bundler: latest | |
- run: bundle exec rake compile | |
- run: bundle exec rake test | |
- run: bundle exec rake test:bench | |
truffleruby-head: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
flags: | |
- "--disable-system-libraries --disable-static" | |
- "--disable-system-libraries --enable-static" | |
- "--enable-system-libraries" | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:truffle-nightly | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/cache@v3 | |
with: | |
path: ports/archives | |
key: tarballs-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- ${{matrix.flags}} | |
- run: bundle exec rake test | |
bsd: | |
continue-on-error: true # we're seeing VMs hang and fail the whole workflow | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
runs-on: macos-12 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: vmactions/freebsd-vm@v0 | |
with: | |
usesh: true | |
prepare: pkg install -y ruby devel/ruby-gems pkgconf libxml2 libxslt | |
run: | | |
gem install bundler | |
bundle install --local || bundle install | |
bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
bundle exec rake test | |
# | |
# SECTION let's look for memory leaks | |
# | |
memcheck: | |
needs: ["basic"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["disable"] | |
ruby: ["3.1"] | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:mri-${{matrix.ruby}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/cache@v3 | |
if: matrix.sys == 'disable' | |
with: | |
path: ports | |
key: ports-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: bundle install --local || bundle install | |
- run: bundle exec rake compile -- --${{matrix.sys}}-system-libraries | |
- run: bundle exec rake test:memcheck | |
# | |
# SECTION the end-to-end gem installation tests | |
# | |
rcd_image_version: | |
needs: ["basic"] | |
runs-on: ubuntu-latest | |
outputs: | |
rcd_image_version: ${{steps.rcd_image_version.outputs.rcd_image_version}} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "3.1" | |
bundler-cache: true | |
bundler: latest | |
- id: rcd_image_version | |
run: bundle exec ruby -e 'require "rake_compiler_dock"; puts "rcd_image_version=#{RakeCompilerDock::IMAGE_VERSION}"' >> $GITHUB_OUTPUT | |
generic-package: | |
needs: ["rcd_image_version"] | |
name: "generic-package" | |
runs-on: ubuntu-latest | |
container: | |
image: "ghcr.io/rake-compiler/rake-compiler-dock-image:${{needs.rcd_image_version.outputs.rcd_image_version}}-mri-x86_64-linux" | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- run: git config --global --add safe.directory /__w/nokogiri/nokogiri # shrug | |
- uses: actions/cache@v3 | |
with: | |
path: ports/archives | |
key: tarballs-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- run: ./scripts/test-gem-build gems ruby | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: generic-gem | |
path: gems | |
retention-days: 1 | |
generic-linux-install: | |
needs: ["generic-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby-pkgs@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
apt-get: "libxml2-dev libxslt1-dev pkg-config" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: generic-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems --${{matrix.sys}}-system-libraries | |
generic-darwin-install: | |
needs: ["generic-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: generic-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems --${{matrix.sys}}-system-libraries | |
generic-windows-install: | |
needs: ["generic-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["2.7", "3.0"] | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby-pkgs@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
mingw: "libxml2 libxslt" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: generic-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems --${{matrix.sys}}-system-libraries | |
shell: bash | |
generic-windows-install-ucrt: | |
needs: ["generic-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: ["enable", "disable"] | |
ruby: ["3.1", "3.2"] | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby-pkgs@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
mingw: "libxml2 libxslt" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: generic-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems --${{matrix.sys}}-system-libraries | |
shell: bash | |
cruby-package: | |
needs: ["rcd_image_version"] | |
name: "cruby-package" | |
strategy: | |
fail-fast: false | |
matrix: | |
plat: | |
- "aarch64-linux" | |
- "arm-linux" | |
- "arm64-darwin" # github actions does not support this runtime as of 2022-12, but let's build anyway | |
- "x64-mingw-ucrt" | |
- "x64-mingw32" | |
- "x86-linux" | |
- "x86-mingw32" # github actions does not support this runtime as of 2022-12, but let's build anyway | |
- "x86_64-darwin" | |
- "x86_64-linux" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/cache@v3 | |
with: | |
path: ports/archives | |
key: tarballs-ubuntu-${{hashFiles('dependencies.yml', 'patches/**/*.patch')}} | |
- env: | |
DOCKER_IMAGE: "ghcr.io/rake-compiler/rake-compiler-dock-image:${{needs.rcd_image_version.outputs.rcd_image_version}}-mri-${{matrix.plat}}" | |
run: | | |
docker run --rm -v "$(pwd):/nokogiri" -w /nokogiri \ | |
${DOCKER_IMAGE} \ | |
./scripts/test-gem-build gems ${{matrix.plat}} | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: "cruby-${{matrix.plat}}-gem" | |
path: gems | |
retention-days: 1 | |
cruby-x86-linux-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-x86-linux-gem | |
path: gems | |
- run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
docker run --rm -v "$(pwd):/nokogiri" -w /nokogiri \ | |
--platform=linux/386 \ | |
ruby:${{matrix.ruby}} \ | |
./scripts/test-gem-install gems | |
cruby-aarch64-linux-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-aarch64-linux-gem | |
path: gems | |
- run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
docker run --rm -v "$(pwd):/nokogiri" -w /nokogiri \ | |
--platform=linux/arm64/v8 \ | |
ruby:${{matrix.ruby}} \ | |
./scripts/test-gem-install gems | |
cruby-arm-linux-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-arm-linux-gem | |
path: gems | |
- run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
docker run --rm -v "$(pwd):/nokogiri" -w /nokogiri \ | |
--platform=linux/arm/v7 \ | |
ruby:${{matrix.ruby}} \ | |
./scripts/test-gem-install gems | |
cruby-x86_64-linux-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-x86_64-linux-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems | |
cruby-x86_64-musl-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/sparklemotion/nokogiri-test:alpine | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-x86_64-linux-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems | |
cruby-x86_64-darwin-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["2.7", "3.0", "3.1", "3.2"] | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-x86_64-darwin-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems | |
cruby-x64-mingw32-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["2.7", "3.0"] | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-x64-mingw32-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems | |
shell: bash | |
cruby-x64-mingw-ucrt-install: | |
needs: ["cruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["3.1", "3.2"] | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: cruby-x64-mingw-ucrt-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems | |
shell: bash | |
jruby-package: | |
needs: ["rcd_image_version"] | |
name: "jruby-package" | |
runs-on: ubuntu-latest | |
container: | |
image: "ghcr.io/rake-compiler/rake-compiler-dock-image:${{needs.rcd_image_version.outputs.rcd_image_version}}-jruby" | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- run: ./scripts/test-gem-build gems java | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: jruby-gem | |
path: gems | |
retention-days: 1 | |
jruby-install: | |
needs: ["jruby-package"] | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby: ["jruby-9.4"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "${{matrix.ruby}}" | |
- uses: actions/download-artifact@v3 | |
with: | |
name: jruby-gem | |
path: gems | |
- run: ./scripts/test-gem-install gems |