From 9c574fd760b2f24cc1a228fa7ccc54076b03ace5 Mon Sep 17 00:00:00 2001 From: benjamin wil Date: Thu, 30 Dec 2021 14:21:23 -0800 Subject: [PATCH] Improve test suite and CI run performance (#1796) * Simplify test I came across this test because it was failing JRuby CI runs. I should emphasize, though, that this test was only failing due do an upstream bug in Nokogiri v1.12.5. When I was reviewing the test, to understand why it was failing at all, I noticed that the assertion was rather obfuscated. Specifically, we were post-processing the entire `response.body` and using that as an expectation. * Use an older version of Nokogiri in our test env This is a temporary fix. See the commit diff for more information. * Split JRuby CI runs from MRI CI runs We can improve the performance of our MRI test runs by not installing Java as part of their run. (Java is only required for JRuby.) * Use latest Ruby patch versions during CI runs * Simplify GitHub Action workflow steps Judging by the output in the GitHub Actions workflow UI, the `echo` steps were not providing much value to us. We can get rid of them to slightly increase run performance. I've also named the other steps to make it easier to skim the Actions workflow output. * Remove `twitter_cldr` development dependency This is no longer being used. * Change GitHub Actions workflow Ruby matrix We can drop Ruby 2.4 from our test run matrix. It is beyond EOL. Let's add 2.7 instead. --- .github/workflows/test.yaml | 37 +++++++++++++++++++++++++++---------- Gemfile | 25 +++++++++++++++++++++---- gollum.gemspec | 1 - test/helper.rb | 1 - test/test_app.rb | 28 +++++++++++++--------------- 5 files changed, 61 insertions(+), 31 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 902c2dcb..8ae50122 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,29 +1,46 @@ name: Ruby Build on: [push, pull_request] jobs: - build: + jruby_build: + name: JRuby (${{ matrix.ruby }}) runs-on: ubuntu-latest strategy: matrix: - ruby: [2.4.0, 2.6.0, 3.0.0, jruby-9.2.18.0] + ruby: [jruby-9.2.18] steps: - - run: echo "The job was automatically triggered by a ${{ github.event_name }} event." - - run: echo "This job is now running on a ${{ runner.os }} server hosted by GitHub!" - - run: echo "The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}." - name: Check out repository code uses: actions/checkout@v2 - - run: echo "The ${{ github.repository }} repository has been cloned to the runner." - - run: echo "The workflow is now ready to test your code on the runner." - name: List files in the repository run: | ls ${{ github.workspace }} - - uses: actions/setup-java@v2 + - name: Set up Java + uses: actions/setup-java@v2 with: distribution: 'adopt' java-version: '11' - - uses: ruby/setup-ruby@v1 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} bundler-cache: true - - name: exec rake + - name: Run tests + run: bundle exec rake + mri_build: + name: Ruby (${{ matrix.ruby }}) + runs-on: ubuntu-latest + strategy: + matrix: + ruby: [2.6, 2.7, 3.0] + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - name: List files in the repository + run: | + ls ${{ github.workspace }} + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + - name: Run tests run: bundle exec rake diff --git a/Gemfile b/Gemfile index 1d210903..c79d5637 100644 --- a/Gemfile +++ b/Gemfile @@ -1,9 +1,26 @@ source 'https://rubygems.org' -if RUBY_PLATFORM == 'java' - gem 'warbler' -end +gem 'warbler', platforms: :jruby + +# FIXME: +# +# There's an issue in 1.12.5 that causes XHTML elements to be generated badly, +# causing Gollum's test suite to fail.[1] The issue has been fixed upstream, +# but we're still waiting for a new Nokogiri point release. +# +# However, 1.12.5 is a security patch, so we don't want end users to use an +# older version of Nokogiri. But this is safe to do in our CI environment. +# +# Once there's a new Nokogiri release, we can remove this dependency and JRuby +# CI should pass normally again. +# +# Note that Nokogiri 1.11+ does not support Ruby v2.4.x anymore. So to make our +# current CI workflows pass, we should only try to install this version of +# Nokogiri for newer Ruby versions. +# +# [1]: https://github.com/gollum/gollum/issues/1779 +gem 'nokogiri', '1.12.4' unless RUBY_VERSION.include? '2.4' gemspec -gem 'rake', '~> 13.0' \ No newline at end of file +gem 'rake', '~> 13.0' diff --git a/gollum.gemspec b/gollum.gemspec index 4fcb20fc..a0449f65 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -44,7 +44,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'rack-test', '~> 0.6.3' s.add_development_dependency 'shoulda', '~> 3.6.0' s.add_development_dependency 'minitest-reporters', '~> 1.3.6' - s.add_development_dependency 'twitter_cldr', '~> 3.2.0' s.add_development_dependency 'mocha', '~> 1.8.0' s.add_development_dependency 'test-unit', '~> 3.3.0' diff --git a/test/helper.rb b/test/helper.rb index 17c0ec92..8bf4c7dc 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -6,7 +6,6 @@ require 'mocha/setup' require 'fileutils' require 'minitest/reporters' require 'minitest/spec' -require 'twitter_cldr' require 'tmpdir' # Silence locale validation warning diff --git a/test/test_app.rb b/test/test_app.rb index 906ec8a8..48836f83 100644 --- a/test/test_app.rb +++ b/test/test_app.rb @@ -39,31 +39,29 @@ context "Frontend" do assert_match /
one\ntwo\nthree\nfour\n<\/code><\/pre>\n/m, last_response.body
   end
 
-  def nfd utf8
-    TwitterCldr::Normalization.normalize(utf8, using: :nfd)
-  end
-  
   test 'mathjax assets are served' do
     get '/gollum/assets/mathjax/MathJax.js'
     assert last_response.ok?
   end
 
   test "UTF-8 headers href preserved" do
-    page = 'utfh1'
-    text = nfd('한글')
+    page_content = <<~TEXT
+      ## 한글
 
-    # don't use h1 or it will be promoted to replace file name
-    # which doesn't generate a normal header link
-    @wiki.write_page(page, :markdown, '## ' + text,
-                     { :name => 'user1', :email => 'user1' });
+      Test page "utfh1" content.
+    TEXT
 
-    get page
-    expected = "

#{text}

" - actual = nfd(last_response.body) + @wiki.write_page('utfh1', + :markdown, + page_content, + {name: 'user1', email: 'user1'}) - assert_match /#{expected}/, actual + get 'utfh1' + expected = "

한글

" + + assert_match /#{expected}/, last_response.body end - + test 'rss feed' do channel_title = <Gollum Wiki Latest Changes