Cross Version Testing Locally and Faster CI (#8610)
Merge pull request 8610
This commit is contained in:
parent
c9c9dc7dac
commit
df24131349
|
@ -23,49 +23,13 @@ jobs:
|
||||||
- 2.5
|
- 2.5
|
||||||
- 2.7
|
- 2.7
|
||||||
- 3.0
|
- 3.0
|
||||||
- jruby-9.2.14.0
|
- jruby:9.2.14.0
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
- name: Download released earth
|
||||||
fetch-depth: 5
|
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: "Set up Ruby ${{ matrix.ruby_version }}"
|
- name: Execute tests
|
||||||
uses: ruby/setup-ruby@v1
|
run: earthly --build-arg RUBY=${{ matrix.ruby_version }} +test
|
||||||
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
|
|
||||||
|
|
||||||
profile_docs:
|
profile_docs:
|
||||||
if: "!contains(github.event.commits[0].message, '[ci skip]')"
|
if: "!contains(github.event.commits[0].message, '[ci skip]')"
|
||||||
name: 'Profile Docs Site (Ruby ${{ matrix.ruby_version }})'
|
name: 'Profile Docs Site (Ruby ${{ matrix.ruby_version }})'
|
||||||
|
@ -76,29 +40,23 @@ jobs:
|
||||||
ruby_version:
|
ruby_version:
|
||||||
- 2.4 # Minimum required Ruby version in gemspec
|
- 2.4 # Minimum required Ruby version in gemspec
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
- name: Download released earth
|
||||||
fetch-depth: 5
|
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: "Set up Ruby ${{ matrix.ruby_version }}"
|
- name: Execute tests
|
||||||
uses: actions/setup-ruby@v1
|
run: earthly --build-arg RUBY=${{ matrix.ruby_version }} +profile-docs
|
||||||
with:
|
style_check:
|
||||||
ruby-version: ${{ matrix.ruby_version }}
|
if: "!contains(github.event.commits[0].message, '[ci skip]')"
|
||||||
- name: Cache dependencies
|
name: 'Style Check (Ruby ${{ matrix.ruby_version }})'
|
||||||
uses: actions/cache@v2.1.3
|
runs-on: 'ubuntu-latest'
|
||||||
with:
|
strategy:
|
||||||
path: vendor/bundle
|
fail-fast: false
|
||||||
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
matrix:
|
||||||
restore-keys: |
|
ruby_version:
|
||||||
${{ runner.os }}-gems-
|
- 2.5
|
||||||
- name: 'Update Rubygems and Bundler'
|
steps:
|
||||||
run: |
|
- uses: actions/checkout@v2
|
||||||
gem update --system --no-document
|
- name: Download released earth
|
||||||
gem update bundler --no-document
|
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: Set up bundle
|
- name: Execute tests
|
||||||
run: |
|
run: earthly --build-arg RUBY=${{ matrix.ruby_version }} +style-check
|
||||||
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
|
|
|
@ -213,6 +213,8 @@ Minitest/RefutePathExists:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Minitest/UnspecifiedException:
|
Minitest/UnspecifiedException:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
Minitest/AssertEmptyLiteral:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
Naming/FileName:
|
Naming/FileName:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
|
@ -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 . .
|
|
@ -153,6 +153,25 @@ script/cucumber features/blah.feature
|
||||||
Both `script/test` and `script/cucumber` can be run without arguments to
|
Both `script/test` and `script/cucumber` can be run without arguments to
|
||||||
run its entire respective suite.
|
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
|
## 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.
|
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.
|
||||||
|
|
|
@ -108,7 +108,7 @@ Feature: Post excerpts
|
||||||
Then I should get a zero exit status
|
Then I should get a zero exit status
|
||||||
And I should not see "Kramdown warning" in the build output
|
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"
|
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\">↩</a></p>" in "_site/text-and-footnote.html"
|
And I should see "<p>Omega sigma <a href=\"#fnref:1\" class=\"reversefootnote\" role=\"doc-backlink\">↩</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>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"
|
And I should see "<p>Check out <a href=\"jekyllrb.com\">jekyll</a></p>" in "_site/text-and-self-refencing-link.html"
|
||||||
|
|
Loading…
Reference in New Issue