Cross Version Testing Locally and Faster CI (#8610)

Merge pull request 8610
This commit is contained in:
Adam Bell 2021-03-25 20:47:13 -04:00 committed by GitHub
parent c9c9dc7dac
commit df24131349
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 97 additions and 69 deletions

View File

@ -23,49 +23,13 @@ jobs:
- 2.5
- 2.7
- 3.0
- jruby-9.2.14.0
- jruby:9.2.14.0
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 5
- name: "Set up Ruby ${{ matrix.ruby_version }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
- name: Run Unit Tests
run: bash script/test
env:
CI: true
- name: Run Cucumber Features
run: bash script/cucumber
env:
CI: true
- name: Sanity Check
run: bash script/default-site
style_check:
if: "!contains(github.event.commits[0].message, '[ci skip]')"
name: 'Code Style Check (Ruby ${{ matrix.ruby_version }})'
runs-on: 'ubuntu-latest'
strategy:
fail-fast: false
matrix:
ruby_version:
- 2.5
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 5
- name: "Set up Ruby ${{ matrix.ruby_version }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
- name: Run RuboCop
run: bash script/fmt
- name: Download released earth
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.5.7/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Execute tests
run: earthly --build-arg RUBY=${{ matrix.ruby_version }} +test
profile_docs:
if: "!contains(github.event.commits[0].message, '[ci skip]')"
name: 'Profile Docs Site (Ruby ${{ matrix.ruby_version }})'
@ -77,28 +41,22 @@ jobs:
- 2.4 # Minimum required Ruby version in gemspec
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 5
- name: "Set up Ruby ${{ matrix.ruby_version }}"
uses: actions/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
- name: Cache dependencies
uses: actions/cache@v2.1.3
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
- name: 'Update Rubygems and Bundler'
run: |
gem update --system --no-document
gem update bundler --no-document
- name: Set up bundle
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Build Docs site with --profile
run: bash script/profile-docs
- name: Profile memory usage of building Docs site
run: bash script/memprof
- name: Download released earth
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.5.7/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Execute tests
run: earthly --build-arg RUBY=${{ matrix.ruby_version }} +profile-docs
style_check:
if: "!contains(github.event.commits[0].message, '[ci skip]')"
name: 'Style Check (Ruby ${{ matrix.ruby_version }})'
runs-on: 'ubuntu-latest'
strategy:
fail-fast: false
matrix:
ruby_version:
- 2.5
steps:
- uses: actions/checkout@v2
- name: Download released earth
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.5.7/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Execute tests
run: earthly --build-arg RUBY=${{ matrix.ruby_version }} +style-check

View File

@ -213,6 +213,8 @@ Minitest/RefutePathExists:
Enabled: true
Minitest/UnspecifiedException:
Enabled: true
Minitest/AssertEmptyLiteral:
Enabled: false
Naming/FileName:
Enabled: false

49
Earthfile Normal file
View File

@ -0,0 +1,49 @@
FROM alpine
# Run locally: `earthly +all` to run full CI process
all:
BUILD --build-arg RUBY=3.0 +test
BUILD --build-arg RUBY=2.7 +test
BUILD --build-arg RUBY=2.5 +test
BUILD --build-arg RUBY=jruby:9.2.14.0 +test
BUILD style-check
BUILD profile-docs
# Run locally: `earthly +test`
# Run with specific version: `earthly --build-arg RUBY=2.5 +test`
test:
FROM +deps
RUN script/test
RUN script/cucumber
RUN script/default-site
style-check:
FROM +deps
RUN script/fmt
profile-docs:
FROM +deps
RUN bundle install --jobs 4
RUN script/profile-docs
RUN script/memprof
# Install dependencies and copy in source
# used in above steps
deps:
ARG RUBY=3.0
IF case $RUBY in jruby*) ;; *) false; esac
FROM $RUBY
ENV JRUBY_OPTS="--dev -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-XX:CompileThreshold=10 -J-XX:ReservedCodeCacheSize=128M"
ELSE
FROM ruby:$RUBY
END
WORKDIR /src
RUN apt-get update && apt-get install nodejs dnsutils git make coreutils g++ build-essential -y
RUN gem install bundler
RUN gem install sassc -v '2.4.0' --source 'https://rubygems.org/'
COPY Gemfile .
COPY jekyll.gemspec .
COPY lib/jekyll/version.rb lib/jekyll/version.rb
COPY test test
RUN bundle install --jobs 4
COPY . .

View File

@ -153,6 +153,25 @@ script/cucumber features/blah.feature
Both `script/test` and `script/cucumber` can be run without arguments to
run its entire respective suite.
### Test Ruby Versions Locally
The CI process runs the build against with serveral [Ruby](https://github.com/jekyll/jekyll/blob/master/.github/workflows/ci.yml#L22) versions. This process can be repeated locally without changing your default installation by using [earthly](https://earthly.dev/get-earthly).
To run the full CI process across all supported Ruby Versions:
```sh
earthly +all
```
To run the tests for a specfic version of Ruby:
```sh
earthly --build-arg RUBY=2.5 +test
```
To run the tests for a specfic version of JRuby specify the full version:
```sh
earthly --build-arg RUBY=jruby:9.2.14.0 +test
```
## Visual Studio Code Development Container
If you've got [Visual Studio Code](https://code.visualstudio.com/) with the [Remote Development Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) installed then simply opening this repository in Visual Studio Code and following the prompts to "Re-open In A Development Container" will get you setup and ready to go with a fresh environment with all the requirements installed.

View File

@ -108,7 +108,7 @@ Feature: Post excerpts
Then I should get a zero exit status
And I should not see "Kramdown warning" in the build output
But I should see exactly "<p>Install Jekyll</p>" in "_site/just-text-excerpt.html"
And I should see "<p>Alpha <sup id=\"fnref:1\" role=\"doc-noteref\"><a href=\"#fn:1\" class=\"footnote\">1</a></sup></p>" in "_site/text-and-footnote.html"
And I should see "<p>Alpha <sup id=\"fnref:1\" role=\"doc-noteref\"><a href=\"#fn:1\" class=\"footnote\" rel=\"footnote\">1</a></sup></p>" in "_site/text-and-footnote.html"
And I should see "<p>Omega sigma <a href=\"#fnref:1\" class=\"reversefootnote\" role=\"doc-backlink\">&#8617;</a></p>" in "_site/text-and-footnote.html"
And I should see "<p>Read <a href=\"docs.jekyll.com\">docs</a></p>" in "_site/text-and-reference-link.html"
And I should see "<p>Check out <a href=\"jekyllrb.com\">jekyll</a></p>" in "_site/text-and-self-refencing-link.html"