Compare commits

..

14 Commits

Author SHA1 Message Date
Pat Hawks
177c1ca09e Cache all the things! 2018-08-13 13:17:14 -05:00
Pat Hawks
07c5ddde4a Cache converted Markdown 2018-08-07 16:26:49 -05:00
Pat Hawks
4081044178 Cache highlights 2018-08-07 16:25:50 -05:00
Pat Hawks
139073430f Fix stupid test in a stupid way 2018-08-07 16:19:46 -05:00
Pat Hawks
575bf51fa2 Use disk for persistent cache 2018-08-07 16:19:32 -05:00
Pat Hawks
62a65cd358 Always clear cache when config changes 2018-08-04 14:27:11 -05:00
Pat Hawks
3e077bba84 Use key? instead of has_key? because Rubocop 2018-08-04 14:27:10 -05:00
Pat Hawks
2b33b3df23 Add getset method 2018-08-04 14:27:10 -05:00
Pat Hawks
f7d5559f10 Add basic Cache class 2018-08-04 14:27:07 -05:00
Ashwin Maroli
66ac9b8675 Merge 'master' into optimize-liquid-rendering 2018-07-24 23:23:16 +05:30
Ashwin Maroli
f034f624cc document change in behavior and its workaround 2018-07-17 09:58:18 +05:30
Ashwin Maroli
c58d747506 Merge branch 'master' of https://github.com/jekyll/jekyll into optimize-liquid-rendering 2018-07-17 08:50:53 +05:30
Ashwin Maroli
cf9176efba parse variables in our tags directly via Liquid 2018-07-16 14:15:35 +05:30
Ashwin Maroli
8256ff1757 cache templates parsed by Liquid 2018-07-16 14:14:58 +05:30
531 changed files with 8227 additions and 20127 deletions

View File

@@ -1,53 +1,36 @@
version: "2"
checks:
argument-count:
enabled: true
config:
threshold: 5
file-lines:
enabled: true
config:
threshold: 300
method-complexity:
enabled: true
config:
threshold: 15
method-count:
enabled: true
config:
threshold: 50
method-lines:
enabled: true
config:
threshold: 30
plugins:
engines:
fixme:
enabled: false
rubocop:
enabled: true
channel: rubocop-0-60
channel: rubocop-0-54
exclude_patterns:
- "*.*"
- ".*"
exclude_paths:
- .codeclimate.yml
- .gitignore
- .rspec
- .rubocop.yml
- .travis.yml
- Gemfile
- Gemfile.lock
- CHANGELOG.{md,markdown,txt,textile}
- CONTRIBUTING.{md,markdown,txt,textile}
- readme.{md,markdown,txt,textile}
- README.{md,markdown,txt,textile}
- Readme.{md,markdown,txt,textile}
- ReadMe.{md,markdown,txt,textile}
- COPYING
- LICENSE
- Rakefile
- benchmark/
- docs/
- exe/
- features/
- rake/
- rubocop/
- script/
- spec/
- test/
- vendor/
- features/**/*
- script/**/*
- docs/**/*
- spec/**/*
- test/**/*
- vendor/**/*
- lib/blank_template/
- lib/site_template/
- lib/theme_template/
- lib/jekyll/mime.types
- lib/jekyll/commands/serve/livereload_assets/livereload.js
ratings:
paths:
- lib/**/*.rb

View File

@@ -1,55 +0,0 @@
#-------------------------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------
FROM ruby:2
# Avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# This Dockerfile adds a non-root user with sudo access. Use the "remoteUser"
# property in devcontainer.json to use it. On Linux, the container user's GID/UIDs
# will be updated to match your local UID/GID (when using the dockerFile property).
# See https://aka.ms/vscode-remote/containers/non-root-user for details.
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
# Configure apt and install packages
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils dialog locales 2>&1 \
# Verify git, process tools installed
&& apt-get -y install git openssh-client iproute2 procps lsb-release \
#
# Install ruby-debug-ide and debase
&& gem install ruby-debug-ide \
&& gem install debase \
#
# Install node.js
&& apt-get -y install curl software-properties-common \
&& curl -sL https://deb.nodesource.com/setup_13.x | bash - \
&& apt-get -y install nodejs \
#
# Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user.
&& groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
# [Optional] Add sudo support for the non-root user
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\
&& chmod 0440 /etc/sudoers.d/$USERNAME \
#
# Clean up
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=en_US.UTF-8
ENV LANG en_US.UTF-8
# Switch back to dialog for any ad-hoc use of apt-get
ENV DEBIAN_FRONTEND=dialog

View File

@@ -1,26 +0,0 @@
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.101.1/containers/ruby-2
{
"name": "Ruby 2",
"dockerFile": "Dockerfile",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"rebornix.Ruby"
]
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bundle install",
// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
// "remoteUser": "vscode"
}

1
.gitattributes vendored
View File

@@ -1 +0,0 @@
* text=auto

View File

@@ -1,76 +0,0 @@
# Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)

View File

@@ -4,30 +4,30 @@ Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is a
## Where to get help or report a problem
See the [support guidelines](https://jekyllrb.com/docs/support/)
See [the support guidelines](https://jekyllrb.com/docs/support/)
## Ways to contribute
Whether you're a developer, a designer, or just a Jekyll devotee, there are lots of ways to contribute. Here's a few ideas:
- [Install Jekyll on your computer](https://jekyllrb.com/docs/installation/) and kick the tires. Does it work? Does it do what you'd expect? If not, [open an issue](https://github.com/jekyll/jekyll/issues/new) and let us know.
- Comment on some of the project's [open issues](https://github.com/jekyll/jekyll/issues). Have you experienced the same problem? Know a work around? Do you have a suggestion for how the feature could be better?
- Read through the [documentation](https://jekyllrb.com/docs/home/), and click the "improve this page" button, any time you see something confusing, or have a suggestion for something that could be improved.
- Browse through the [Jekyll discussion forum](https://talk.jekyllrb.com/), and lend a hand answering questions. There's a good chance you've already experienced what another user is experiencing.
- Find an [open issue](https://github.com/jekyll/jekyll/issues) (especially [those labeled `help-wanted`](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted)), and submit a proposed fix. If it's your first pull request, we promise we won't bite, and are glad to answer any questions.
- Help evaluate [open pull requests](https://github.com/jekyll/jekyll/pulls), by testing the changes locally and reviewing what's proposed.
* [Install Jekyll on your computer](https://jekyllrb.com/docs/installation/) and kick the tires. Does it work? Does it do what you'd expect? If not, [open an issue](https://github.com/jekyll/jekyll/issues/new) and let us know.
* Comment on some of the project's [open issues](https://github.com/jekyll/jekyll/issues). Have you experienced the same problem? Know a work around? Do you have a suggestion for how the feature could be better?
* Read through [the documentation](https://jekyllrb.com/docs/home/), and click the "improve this page" button, any time you see something confusing, or have a suggestion for something that could be improved.
* Browse through [the Jekyll discussion forum](https://talk.jekyllrb.com/), and lend a hand answering questions. There's a good chance you've already experienced what another user is experiencing.
* Find [an open issue](https://github.com/jekyll/jekyll/issues) (especially [those labeled `help-wanted`](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted)), and submit a proposed fix. If it's your first pull request, we promise we won't bite, and are glad to answer any questions.
* Help evaluate [open pull requests](https://github.com/jekyll/jekyll/pulls), by testing the changes locally and reviewing what's proposed.
## Submitting a pull request
### Pull requests generally
- The smaller the proposed change, the better. If you'd like to propose two unrelated changes, submit two pull requests.
* The smaller the proposed change, the better. If you'd like to propose two unrelated changes, submit two pull requests.
- The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
* The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
- If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
* Pull requests are easy and fun. If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
- If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
* If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
### Submitting a pull request via github.com
@@ -49,7 +49,7 @@ That's it! You'll be automatically subscribed to receive updates as others revie
2. Clone the repository locally `git clone https://github.com/<you-username>/jekyll`.
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
4. Hack away, add tests. Not necessarily in that order.
5. Make sure everything still passes by running `script/cibuild` (see the [tests section](#running-tests-locally) below)
5. Make sure everything still passes by running `script/cibuild` (see [the tests section](#running-tests-locally) below)
6. Push the branch up ( `git push origin my-awesome-feature` ).
7. Create a pull request by visiting `https://github.com/<your-username>/jekyll` and following the instructions at the top of the screen.
@@ -76,12 +76,11 @@ If you ever need to update our documentation with an icon that is not already av
5. Click `Generate Font` on the bottom-horizontal-bar.
6. Inspect the included icons and proceed by clicking `Download`.
7. Extract the font files and adapt the CSS to the paths we use in Jekyll:
- Copy the entire `fonts` directory over and overwrite existing ones at `<jekyll>/docs/`.
- Copy the contents of `selection.json` and overwrite existing content inside `<jekyll>/docs/icomoon-selection.json`.
- Copy the entire `@font-face {}` declaration and only the **new-icon(s)' css declarations** further below, to update the
- Copy the entire `fonts` directory over and overwrite existing ones at `<jekyll>/docs/`.
- Copy the contents of `selection.json` and overwrite existing content inside `<jekyll>/docs/icomoon-selection.json`.
- Copy the entire `@font-face {}` declaration and only the **new-icon(s)' css declarations** further below, to update the
`<jekyll>/docs/_sass/_font-awesome.scss` sass partial.
- Fix paths in the `@font-face {}` declaration by adding `../` before `fonts/FontAwesome.*` like so:
- Fix paths in the `@font-face {}` declaration by adding `../` before `fonts/FontAwesome.*` like so:
`('../fonts/Fontawesome.woff?9h6hxj')`.
### Adding plugins
@@ -90,7 +89,7 @@ If you want to add your plugin to the [list of plugins](https://jekyllrb.com/doc
## Code Contributions
Interested in submitting a pull request? Awesome. Read on. There's a few common gotchas that we'd love to help you avoid.
Interesting in submitting a pull request? Awesome. Read on. There's a few common gotchas that we'd love to help you avoid.
### Tests and documentation
@@ -102,21 +101,19 @@ If your contribution changes any Jekyll behavior, make sure to update the docume
#### Tests
- If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
* If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
- If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
* If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
### Code contributions generally
- Jekyll uses the [Rubocop](https://github.com/bbatsov/rubocop) static analyzer to ensure that contributions follow the [GitHub Ruby Styleguide](https://github.com/styleguide/ruby). Please check your code using `script/fmt` and resolve any errors before pushing your branch.
* Jekyll uses the [Rubocop](https://github.com/bbatsov/rubocop) static analyzer to ensure that contributions follow the [GitHub Ruby Styleguide](https://github.com/styleguide/ruby). Please check your code using `script/fmt` and resolve any errors before pushing your branch.
- Don't bump the Gem version in your pull request (if you don't know what that means, you probably didn't).
* Don't bump the Gem version in your pull request (if you don't know what that means, you probably didn't).
- You can use the command `script/console` to start a REPL to explore the result of
Jekyll's methods. It also provides you with helpful methods to quickly create a
site or configuration. [Feel free to check it out!](https://github.com/jekyll/jekyll/blob/master/script/console)
- Previously, we've used the WIP Probot app to help contributors determine whether their pull request is ready for review. Please use a [draft pull request](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests) instead. When you're ready, [mark the pull request as ready for review](https://help.github.com/en/articles/changing-the-stage-of-a-pull-request)
* You can use the command `script/console` to start a REPL to explore the result of
Jekyll's methods. It also provides you with helpful methods to quickly create a
site or configuration. [Feel free to check it out!](https://github.com/jekyll/jekyll/blob/master/script/console)
## Running tests locally
@@ -149,10 +146,6 @@ script/cucumber features/blah.feature
Both `script/test` and `script/cucumber` can be run without arguments to
run its entire respective suite.
## 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.
## A thank you
Thanks! Hacking on Jekyll should be fun. If you find any of this hard to figure out, let us know so we can improve our process or documentation!

5
.github/FUNDING.yml vendored
View File

@@ -1,5 +0,0 @@
# These are supported funding model platforms
# github: jekyll
open_collective: jekyll
tidelift: rubygems/jekyll

78
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,78 @@
<!--
Hi! Thanks for considering to file a bug with Jekyll. Please take the time to
answer the basic questions. You can convert `[ ]` into `[x]` to check boxes (or submit
and check.) If there is no need for certain fields like output and redirection, please delete
those headers before submitting. We know not all tickets require those steps.
Otherwise, please try to be as detailed as possible.
If you are unsure this is a bug in Jekyll, or this is a bug caused
by a plugin that isn't directly related to Jekyll, or if this is just
a generic usage question, please consider asking your question at
https://talk.jekyllrb.com where non-bug questions go.
Thanks!
-->
- [ ] I believe this to be a bug, not a question about using Jekyll.
- [ ] I updated to the latest Jekyll (or) if on GitHub Pages to the latest `github-pages`
- [ ] I ran `jekyll doctor` to check my configuration
- [ ] I read the CONTRIBUTION file at https://jekyllrb.com/docs/contributing/
- [ ] This is a feature request.
---
- [ ] I am on (or have tested on) ***macOS*** 10+
- [ ] I am on (or have tested on) ***Debian/Ubuntu*** GNU/Linux
- [ ] I am on (or have tested on) ***Fedora*** GNU/Linux
- [ ] I am on (or have tested on) ***Arch*** GNU/Linux
- [ ] I am on (or have tested on) ***Other*** GNU/Linux
- [ ] I am on (or have tested on) ***Windows*** 10+
<!--
Other GNU/Linux includes Scientific GNU/Linux, CentOS GNU/Linux, and others.
If you are on a minor sub-distro (such as ElementaryOS which does not diverge from
Ubuntu much, please check the parent distro. Kubuntu, Edubuntu, Lubuntu should
also be flagged as Ubuntu as their packages come from upstream Ubuntu.
-->
---
- [ ] I was trying to install.
- [ ] There is a broken Plugin API.
- [ ] I had an error on GitHub Pages, and I have reproduced it locally.
- [ ] I had an error on GitHub Pages, and GitHub Support said it was a Jekyll Bug.
- [ ] I had an error on GitHub Pages and I did not test it locally.
- [ ] I was trying to build.
- [ ] It was another bug.
## My Reproduction Steps
<!--
If this error occurred on GitHub Pages, please try to provide us with logs,
and look at them yourself, to determine if this is an actual Jekyll bug. In
the event you are unsure, file a ticket, however, when you do please provide
the logs (strip them of personal information.)
If you have trouble finding your logs, please email support@github.com and
they will happily help you. If you cannot find logs, please try your best to
replicate it locally because we cannot fix a problem if we do not know
exactly what caused it, or within a relatively close distance.
-->
<!--
Insert the steps you took to for this problem to exist. Such as the
directories you created and, the full command you ran, and include any
plugins you have installed, this is very important.
If your steps are complicated, you can also submit a GitHub
repository (please no zips, they will be removed and rejected by maintainers,)
and just supply a command for us to reproduce it ourselves.
-->
## The Output I Wanted
<!--
Insert the output from the command. Alter it as little as you can.
The minimum should be personal information. Though we normally don't log
anything like that so there should be no need to alter it.
-->

View File

@@ -1,104 +0,0 @@
name: Bug Report
description: "Is something not working as expected?"
title: "[Bug]: "
body:
- type: markdown
attributes:
value: |
Hi! Thank you for taking the time to report a bug with Jekyll.
Please consider asking your question at https://talk.jekyllrb.com if one or more of the following is applicable to your situation:
- You are not sure if the issue is a bug in Jekyll.
- The issue is caused by a third-party plugin.
- This is just a generic usage question.
Additionally, please note that this platform is meant for bugs in Jekyll core only.
Issues regarding dependencies and plugins should be reported in their respective repositories.
- type: input
id: os
attributes:
label: Operating System
description: The operating system of your computer.
placeholder: "Ubuntu 21.10"
validations:
required: true
- type: input
id: ruby-version
attributes:
label: Ruby Version
description: |
The Ruby version you were using at the time.
Run `ruby -v` in your terminal and paste the output in the input field.
placeholder: "ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x64-mingw32]"
validations:
required: true
- type: input
id: jekyll-version
attributes:
label: Jekyll Version
description: |
The version of Jekyll used in your project.
Run `bundle exec jekyll -v` and paste the output in the input field.
*If you are not using a Gemfile, run `jekyll -v` instead.*
placeholder: "jekyll 4.2.1"
validations:
required: true
- type: input
id: ghp-version
attributes:
label: GitHub Pages Version
description: |
Are you deploying your site using GitHub Pages?
If yes, then we need to know the `github-pages` version used by your project. Proceed ahead otherwise.
If you're using the `github-pages` gem in your Gemfile, paste the output from running the following:
```
bundle exec github-pages -v
```
Otherwise, enter `Latest` in the input field and proceed ahead.
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: Briefly describe what you expected to see or get with a certain functionality.
placeholder: |
I expected my site to be built successfully when I run the following:
```
bundle exec jekyll build
```
validations:
required: true
- type: textarea
id: actual
attributes:
label: Current Behavior
description: >
Describe the details of the bug.
Be sure to include any steps you took for the problem to exist, such as the directories
you created and the full command you ran.
Include any plugins you have configured for use in the site.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: |
Please copy and paste any relevant log output from your terminal.
*Note: This will be automatically formatted into code, so no need for backticks.*
render: shell
- type: textarea
id: sample
attributes:
label: Code Sample
description: >
The easiest way for someone to understand an issue is if they could reproduce your issue
in their environment. Therefore, please provide a link to your project repository alongwith
instructions to reproduce your issue. If your project is not publicly accessible, please
consider setting up a minimal test repository complete with necessary instructions.
placeholder: |
### Steps to reproduce issue
- Clone [my repo](https://github.com/owner/repo)
- Install site dependencies
- Run `bundle exec jekyll build -s src -d src/dist`

View File

@@ -1,5 +0,0 @@
blank_issues_enabled: true
contact_links:
- name: Jekyll Community Forum
url: https://talk.jekyllrb.com/
about: Please ask and answer questions here.

View File

@@ -1,24 +0,0 @@
---
name: Documentation
about: Found a typo or something that isn't crystal clear in our docs?
title: '[Docs]: '
labels: documentation
assignees: ''
---
<!-- Thanks for taking the time to open an issue and help us make Jekyll better! -->
## Motivation
<!-- Why should we update our docs? -->
## Suggestion
<!-- What should we do instead? -->
<!-- Thanks for taking the time to open an issue and help us make Jekyll better! -->

View File

@@ -1,73 +0,0 @@
---
name: Feature Request
about: Want us to add any features to Jekyll?
title: 'feat: '
labels: feature
assignees: ''
---
<!--
Hi! Thanks for considering to file a feature request with Jekyll. Please take the time to
answer the basic questions. Please try to be as detailed as possible.
Thanks!
-->
## Summary
<!--
A one-paragraph explanation of the feature.
-->
## Motivation
<!--
Why do you want to see this feature in Jekyll? What makes you sure that it should not be
implemented at the plugin level, but in Jekyll core? What use cases does it support?
NOTE: Please be mindful of the Jekyll philosophy (https://jekyllrb.com/philosophy/),
particularly Section 5. Think about if 90% of the users would benefit from your
feature request, and whether your feature would be better off in a plugin.
-->
## Guide-level explanation
<!--
Explain the proposal as if it was already included in the project and you
were teaching it to another programmer. That generally means:
- Introducing new named concepts.
- Explaining the feature largely in terms of examples.
- If applicable, provide sample error messages, deprecation warnings, or
migration guidance.
If this is a small feature, you may omit this section.
-->
## Reference-level explanation
<!--
This is the technical portion of the feature request. Explain the design in
sufficient detail that:
- Its interaction with other features is clear.
- It is reasonably clear how the feature would be implemented.
- Corner cases are dissected by example.
If you do not know how to answer this, you can omit it. No worries!
-->
## Drawbacks
<!--
Why should we *not* do this?
-->
## Unresolved Questions
<!--
What related issues do you consider out of scope for this feature that could be
addressed in the future independently of the solution that comes out of this
feature?
-->

View File

@@ -1,46 +0,0 @@
<!--
Thanks for creating a Pull Request! Before you submit, please make sure
you've done the following:
- I read the contributing document at https://jekyllrb.com/docs/contributing/
-->
<!--
Make our lives easier! Choose one of the following by uncommenting it:
-->
<!-- This is a 🐛 bug fix. -->
<!-- This is a 🙋 feature or enhancement. -->
<!-- This is a 🔦 documentation change. -->
<!-- This is a 🔨 code refactoring. -->
<!--
Before you submit this pull request, make sure to have a look at the following
checklist. If you don't know how to do some of these, that's fine! Submit
your pull request and we will help you out on the way.
- I've added tests (if it's a bug, feature or enhancement)
- I've adjusted the documentation (if it's a feature or enhancement)
- The test suite passes locally (run `script/cibuild` to verify this)
-->
## Summary
<!--
Provide a description of what your pull request changes.
-->
## Context
<!--
Is this related to any GitHub issue(s)?
You can use keywords to automatically close the related issue.
For example, (all of) the following will close issue #4567 when your PR is merged.
Closes #4567
Fixes #4567
Resolves #4567
Use any one of the above as applicable.
-->

View File

@@ -1,32 +0,0 @@
# Security Policy
## Supported Versions
Security updates are applied to the latest MINOR version of Jekyll, and the version used by GitHub Pages, v3.9.x.
| Version | Supported |
| ------- | ------------------ |
| 4.2.x | :white_check_mark: |
| 3.9.x | :white_check_mark: |
| < 3.9.x | :x: |
## Reporting a Vulnerability
Please report vulnerabilities by sending an email to security@jekyllrb.com with the following information:
1. A description of the vulnerability
2. Reproduction steps and/or a sample site (share a private repo to the [Jekyll Security Team](docs/pages/team.md))
3. Your contact information
The Jekyll security team will respond to your submission and notify you whether it has been confirmed by the team.
Your confidentiality is kindly requested as we work on a fix. We will provide our patch to you to test and verify that the vulnerability has
been closed.
If you have created a patch and would like to submit that to us as well, we will happily consider it though we cannot guarantee that we will
use it. If we use your patch, we will attribute authorship to you either as the commit author, or as a co-author.
Once a fix is verified, we will release PATCH versions of the supported MINOR versions and assign a CVE to the vulnerability. You will receive
credit in our release post.
Once the patched version has been released, we will no longer request you to maintain confidentiality and you may choose to share details on
how you found the vulnerability with the community.

View File

@@ -1,15 +0,0 @@
# check-spelling/check-spelling configuration
File | Purpose | Format | Info
-|-|-|-
[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
[advice.txt](advice.txt) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
Note: you can replace any of these files with a directory by the same name (minus the `.txt` extension) and
then include multiple files (with a `.txt` extension) inside that directory to merge multiple files together.

View File

@@ -1,28 +0,0 @@
<!-- See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice --> <!-- markdownlint-disable MD033 MD041 -->
<details><summary>If you see a bunch of garbage</summary>
If it relates to a ...
<details><summary>well-formed pattern</summary>
See if there's a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it.
If not, try writing one and adding it to the `patterns.txt` file.
Patterns are Perl 5 Regular Expressions - you can [test](
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
Note that patterns can't match multiline strings.
</details>
<details><summary>binary-ish string</summary>
Please add a file path to the `excludes.txt` file instead of just accepting the garbage.
File paths are Perl 5 Regular Expressions - you can [test](
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
../tree/HEAD/README.md) (on whichever branch you're using).
</details>
</details>

View File

View File

@@ -1,35 +0,0 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
(?:^|/)(?i)COPYRIGHT
(?:^|/)(?i)LICEN[CS]E
(?:^|/)package(?:-lock|)\.json$
(?:^|/)vendor/
/fonts/
ignore$
\.avi$
\.eot$
\.ico$
\.jpe?g$
\.lock$
\.map$
\.min\.
\.mod$
\.mp[34]$
\.png$
\.svg$
\.ttf$
\.wav$
\.woff$
\.woff2$
^docs/pages/redirects/github\.html$
^lib/jekyll/mime\.types$
^lib/theme_template/example/index\.html$
^lib/theme_template/example/_post\.md$
^test/fixtures/empty_permalink\.erb$
^test/fixtures/webrick/bar/baz\.html$
^test/fixtures/webrick/bar/foo\.xhtml$
^test/source/_posts/2009-06-22-no-yaml\.markdown$
^\.github/

View File

@@ -1,760 +0,0 @@
acl
activesupport
adaoraul
addons
aeiou
AFile
afterall
Alexey
alfredxing
algolia
allowfullscreen
Anatoliy
andreyvit
Ankit
Anning
apps
appveyor
arengu
args
ariejan
arounds
asciinema
asdf
ashmaroli
attr
Autobuild
autocompletion
autogenerated
Autolink
autoload
autoreconf
autosave
awood
aws
awscli
backend
backport
backtick
barcamp
baseurl
bashrc
baz
bbatsov
bdimcheff
bellvat
benbalter
Beney
binstubs
bip
bitbucket
blog
Blogger
blogging
bonafide
Bou
breadcrumbs
briandoll
bridgetown
bridgetownrb
brightbox
brighterplanet
buddyworks
Bugfix
Burela
byparker
cachegrind
calavera
callgraphs
cartera
cavalle
CDNs
cgi
changefreq
changelog
chango
charset
Chayoung
chcp
chdir
Cheatsheet
Checkoway
chmod
chown
Chrononaut
chruby
cibuild
cimg
circleci
CJK
classname
cloudcannon
Cloudinary
cloudsh
CLT
codebase
codeclimate
CODEOWNERS
coderay
codeslinger
coffeescript
colorator
commandline
commonmark
compat
compatibilize
concat
config
configyml
contentblocks
CORS
Cov
CRLFs
cron
crontab
cruft
css
csv
Currin
CVE
CWD
cygwin
daringfireball
Dassonville
datafiles
datetime
DCEU
Debian
debuggability
defunkt
delegators
deployer
deps
dest
Devkit
devops
digitalocean
dirs
disqus
ditaa
dnf
doclist
doctype
doeorg
dommmel
dotfile
Dousse
downcase
downcased
duckduckgo
duritong
Dusseau
dysinger
ecf
editorconfig
eduardoboucas
Elasticsearch
elsif
Emacs
emails
emoji
endcapture
endcomment
endfor
endhighlight
endif
endraw
endrender
endtablerow
Enumerables
EOL
erb
errordocument
Espinaco
eugenebolshakov
evaled
exe
execjs
extensionpack
extname
exts
favicon
Fengyun
ffi
figcaption
filesystem
Finazzo
firstimage
FIXME
flakey
flickr
fnmatch
fontello
forloop
formcake
formcarry
formester
formingo
formkeep
formspark
formspree
formx
Forwardable
frameborder
freenode
frontmatter
fsnotify
ftp
fullstory
Gaudino
gcc
gcnovus
gemfile
gemset
gemspec
getform
getset
getsimpleform
gettalong
gfm
ghp
ghpages
giraffeacademy
github
githubcom
githubusercontent
gitignore
gitlab
gjtorikian
globbed
globbing
google
gotcha
Goulven
gridism
GSo
gsub
gsubbing
Hakiri
hardcode
hashbang
hashmap
helaili
henrik
heredoc
heroku
highlighter
hilighting
Hoizey
homepage
hostman
hostname
href
htaccess
htm
html
htmlproofer
http
httpd
httpdocs
hyperlinks
Iaa
ial
ico
icomoon
iconset
ified
iframe
img
Impl
Inlining
invokables
irc
ivey
ize
jalali
jameshamann
jamstackthemes
jan
javascript
Jax
jayferd
jcon
jdoe
jeffreytse
jeffrydegrande
Jekpack
jekyllbot
jekyllconf
Jekyllers
Jekyllin
Jekylling
jekyllized
jekylllayoutconcept
jekyllrb
jekyllthemes
jemoji
jmcglone
jneen
johnreilly
jpg
jqr
jruby
json
jsonify
juretta
jwarby
Kacper
Kasberg
kbd
Kentico
Kewin
keycdn
kickster
Kinnula
kiwifruit
Kolesky
konklone
kontent
Kotvinsky
kramdown
Kulig
Kwokfu
Lamprecht
laquo
lastmod
launchctl
launchy
laurilehmijoki
ldquo
learnxinyminutes
lexer
LGTM
libcurl
libffi
lifecycle
lightgray
limjh
linenos
linkify
linux
liufengyun
livereload
localheinz
localhost
localtime
Locher
loglevel
Losslessly
lovin
lsi
lsquo
lstrip
lyche
macos
macromates
mademistakes
mailto
Manmeet
markdownify
Maroli
Marsceill
maruku
mathjax
mathml
mattr
Maximiliano
mchung
mdash
memberspace
Memoize
memoized
memoizing
mentoring
mergable
Mertcan
mertkahyaoglu
metadata
microdata
microsoft
mimetype
mingw
minibundle
minifier
minitest
Mittal
mixin
mkasberg
mkd
mkdir
mkdn
mkdown
mmistakes
modernizr
mojombo
moncefbelyamani
moz
mreid
msdn
mswin
MSYS
mtime
multiline
munging
Mvvm
myblog
mycontent
mydata
mydoc
myimage
mypage
myposts
myproject
myrepo
mysite
myvalue
myvar
myvariable
Nadjib
nakanishi
namespace
namespaced
navbar
nbsp
nearlyfreespeech
nethack
netlify
netlifycms
Neue
nginx
ngx
nielsenramon
nior
nodejs
noifniof
nokogiri
notextile
onclick
onebox
oneclick
onschedule
opensource
openssl
Optim
orderofinterpretation
orgs
OSVDB
osx
packagecontrol
pacman
paginator
pandoc
pantulis
params
parkr
parseable
paspagon
passthrough
pathawks
Pathutil
paywall
pdf
Pelykh
permalink
PHP
pinboard
Piwigo
pjhyett
pkill
pkpass
placeholders
planetjekyll
plantuml
plugin
png
podcasts
popen
Porcel
Posterous
postfiles
postlayout
postmodern
preinstalled
prepends
Prioritise
Probot
projectlist
pubstorm
pufuwozu
pwa
pwd
pygments
qrush
Quaid
quickstart
rackup
Rakefile
raquo
razorops
rbenv
rdiscount
rdoc
rdquo
readme
realz
rebund
redcarpet
redcloth
redgreen
redhat
refactor
refactoring
Refheap
regen
regex
regexp
remi
reqs
Responsify
revertable
rfc
rfelix
RHEL
ridk
roadmap
rowspan
rspec
rsquo
rss
rstrip
rsync
rtomayko
Rubo
rubocop
rubychan
rubygem
rubyinstaller
rubyprof
Ruparelia
Rusiczki
rvm
ryanflorence
saas
samplelist
samrayner
sandboxed
Sassc
sassify
schemastore
Schroers
Schwartzian
scp
screenshot
scrollbar
scroller
scss
scssify
sdk
SDKROOT
sectore
semver
seo
serverless
setenv
SFTP
shingo
shopify
shortlog
shoulda
sieversii
sigpipe
simplecov
Singhaniya
siteleaf
sitemap
SITENAME
Slicehost
slugified
slugify
smartforms
smartify
snipcart
socio
somedir
sonnym
Sonomy
sourced
sourcemaps
spam
spotify
src
ssg
ssh
SSL
stackoverflow
standalone
staticfiles
staticman
statictastic
STDERR
stdout
Stickyposts
strftime
stringified
Stringify
styleguide
stylesheet
subdir
subdomain
subfolder
subfolderitems
subnav
subpages
subpath
subpiece
subsubfolderitems
subthing
subvalues
subwidget
sudo
superdirectories
superdirs
SUSE
sverrirs
svg
svn
swfobject
swupd
symlink
symlinking
tablerow
tada
Taillandier
talkyard
tbody
technicalpickles
templating
templatize
Termux
textilize
textpattern
thead
therubyracer
Theunissen
Thornquest
thoughtbot
throughs
Tidelift
timeago
timezone
titleize
TLS
tmm
tmp
toc
tok
tomjoht
toml
tomo
toolset
toshimaru
triaged
triaging
truncatewords
tsv
ttf
Tudou
Tumblr
Tweetsert
txtpen
Tyborska
tzinfo
ubuntu
uby
ujh
ultron
undumpable
unencode
Unescape
unescaping
unicode
uniq
upcase
uppercasing
uri
url
urlset
username
usr
utf
utils
utime
utm
vanpelt
Vasovi
vendored
vercel
versioned
versioning
vertycal
Veyor
vilcans
Vishesh
visualstudio
vnd
vohedge
vps
vscode
vwochnik
Walkthroughs
wdm
We'd
webfont
webhook
webhosting
webmentions
webrick
website
weekdate
whitelist
whitelisting
wiki
wikipedia
wildcards
willcodeforfoo
woff
wordpress
Workaround
workflow
wsl
www
xcode
xcrun
xdg
Xhmikos
xhtml
Xiaoiver
XMinutes
xml
xmlns
xmlschema
yajl
yaml
Yarp
Yashu
Yastreb
yml
Youku
youtube
yunbox
zeropadding
Zlatan
zlib
zoneinfo
zpinter
Zsh
zshrc
zypper
zzot
frontend
prefetching

View File

@@ -1 +0,0 @@
^docs/.*\.md$

View File

@@ -1,75 +0,0 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
# data urls
(['"])data:.*?\g{-1}
data:[-a-zA-Z=;:/0-9+]*,\S*
# YouTube
https?://(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_]*
<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
youtube_id:\s*[-a-zA-Z0-9?&=_]*
# Google Analytics
\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
# Google APIs
\bgoogleapis\.com/[a-z]+/v\d+/[a-z]+/[@./?=\w]+
\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
# Google Calendar
\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
\w+\@group\.calendar\.google\.com\b
# Google DataStudio
\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
# The leading `/` here is as opposed to the `\b` above
# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
# Google Docs
/docs\.google\.com/[a-z]+/d/(?:e/|)[0-9a-zA-Z_-]+/?
# Google Groups
https://groups\.google\.com/d/topic/[^/]+/[a-zA-Z0-9]+/discussion
https://groups\.google\.com/d/msg/[^/]+/[a-zA-Z0-9]+/[a-zA-Z0-9]+
# Google themes
themes\.googleusercontent\.com/static/fonts/[^/]+/v\d+/[^.]+.
# Google CDN
\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
# Goo.gl
/goo\.gl/[a-zA-Z0-9]+
# Google Chrome Store
\bchrome\.google\.com/webstore/detail/\w*(?:/\w*|)
# google_site_verification:
google_site_verification: [-a-zA-Z=;:/0-9+]*
# Ruby-doc.org
https://ruby-doc\.org/.*
# Contributors
alphabetical order.*:.*
twitter_handle: .*
# apiKey
apiKey: '[a-f0-9]+'
# FontAwesome
/(?:(?i)FontAwesome\.\w+\?\w+)
# Lorem
(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus|ultrices)\b(?:\w|\s|[,.])*
# URL escaped characters
\%[0-9A-F]{2}
# c99 hex digits (not the full format, just one I've seen)
# hex digits including css/html color classes:
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9a-fA-FgGrR_]{2,}(?:[uU]?[lL]{0,2}|u\d+)\b
# ignore long runs of a single character:
\b([A-Za-z])\g{-1}{3,}\b

View File

@@ -1,7 +0,0 @@
^attache$
benefitting
occurence
Sorce
^[Ss]pae
^untill
^wether

15
.github/config.yml vendored
View File

@@ -1,15 +0,0 @@
updateDocsComment: >
Thanks for opening this pull request! The maintainers of this repository would appreciate it if you would update some of our documentation based on your changes.
updateDocsWhiteList:
- bug
- fix
- Backport
- dev
- Update
- WIP
- chore
updateDocsTargetFiles:
- README
- docs/

View File

@@ -1,6 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

View File

@@ -1,14 +0,0 @@
# frozen_string_literal: true
require 'jekyll'
require 'memory_profiler'
MemoryProfiler.report(allow_files: ['lib/jekyll/', 'lib/jekyll.rb']) do
Jekyll::PluginManager.require_from_bundler
Jekyll::Commands::Build.process({
"source" => File.expand_path(ARGV[0]),
"destination" => File.expand_path("#{ARGV[0]}/_site"),
"disable_disk_cache" => true,
})
puts ''
end.pretty_print(scale_bytes: true, normalize_paths: true)

View File

@@ -1,30 +0,0 @@
name: Micro Benchmark Runs
on:
workflow_dispatch:
inputs:
path:
description: "Path to benchmark script relative to 'benchmark' directory."
required: true
default: "capture-assign.rb"
ruby_version:
description: "Ruby version to use (via `ruby/setup-ruby@v1`) action."
required: false
default: "2.7"
jobs:
benchmark:
name: "Benchmark (${{ github.event.inputs.path }}) (Ruby ${{ github.event.inputs.ruby_version }})"
runs-on: "ubuntu-latest"
env:
BENCHMARK: true
steps:
- name: Checkout Jekyll
uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ github.event.inputs.ruby_version }}
bundler-cache: true
- name: Run Benchmark
run: "bundle exec ruby benchmark/${{ github.event.inputs.path }}"

View File

@@ -1,73 +0,0 @@
name: Continuous Integration
on:
push:
branches:
- master
- "*-stable"
pull_request:
branches:
- master
- "*-stable"
jobs:
ci:
name: "Run Tests (${{ matrix.label }})"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
include:
- label: Ruby 2.7
ruby_version: "2.7"
- label: Ruby 3.0
ruby_version: "3.0"
- label: Ruby 3.1
ruby_version: "3.1"
- label: JRuby 9.3.4.0
ruby_version: "jruby-9.3.4.0"
- label: Liquid 4
ruby_version: 3.1
liquid_version: "~> 4.0"
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: "Set up ${{ matrix.label }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
env:
LIQUID_VERSION: ${{ matrix.liquid_version }}
- name: Run Minitest based tests
run: bash script/test
- name: Run Cucumber based tests
run: bash script/cucumber
- name: Generate and Build a new site
run: bash script/default-site
xtras:
name: "${{ matrix.job_name }} (Ruby ${{ matrix.ruby_version }})"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
include:
- job_name: "Profile Docs Site"
step_name: "Build and Profile docs site"
script_file: "profile-docs"
ruby_version: "2.7"
- job_name: "Style Check"
step_name: "Run RuboCop"
script_file: "fmt"
ruby_version: "2.7"
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: "Set up Ruby ${{ matrix.ruby_version }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
- name: ${{ matrix.step_name }}
run: bash script/${{ matrix.script_file }}

View File

@@ -1,52 +0,0 @@
name: Build and deploy Jekyll documentation site
on:
push:
branches:
- master
env:
RUBY_VERSION: 2.7
jobs:
deploy_docs:
if: "!contains(github.event.commits[0].message, '[ci skip]')"
runs-on: 'ubuntu-latest'
env:
BUNDLE_PATH: "vendor/bundle"
BUNDLE_JOBS: 4
BUNDLE_RETRY: 3
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY_VERSION }}
bundler-cache: true
- name: Clone target branch
run: |
REMOTE_BRANCH="${REMOTE_BRANCH:-gh-pages}"
REMOTE_REPO="https://${GITHUB_ACTOR}:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git"
echo "Publishing to ${GITHUB_REPOSITORY} on branch ${REMOTE_BRANCH}"
rm -rf docs/_site/
git clone --depth=1 --branch="${REMOTE_BRANCH}" --single-branch --no-checkout \
"${REMOTE_REPO}" docs/_site/
- name: Build site
run: bundle exec jekyll build --source docs --destination docs/_site --verbose --trace
env:
# For jekyll-github-metadata
JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy to GitHub Pages
run: |
SOURCE_COMMIT="$(git log -1 --pretty="%an: %B" "$GITHUB_SHA")"
pushd docs/_site &>/dev/null
: > .nojekyll
git add --all
git -c user.name="${GITHUB_ACTOR}" -c user.email="${GITHUB_ACTOR}@users.noreply.github.com" \
commit --quiet \
--message "Deploy docs from ${GITHUB_SHA}" \
--message "$SOURCE_COMMIT"
git push
popd &>/dev/null

View File

@@ -1,34 +0,0 @@
name: Release Gem
on:
push:
branches:
- master
- "*-stable"
paths:
- "lib/**/version.rb"
jobs:
release:
if: "github.repository_owner == 'jekyll'"
name: "Release Gem (Ruby ${{ matrix.ruby_version }})"
runs-on: "ubuntu-latest"
strategy:
fail-fast: true
matrix:
ruby_version:
- 2.7
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: "Set up Ruby ${{ matrix.ruby_version }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
- name: Build and Publish Gem
uses: ashmaroli/release-gem@dist
with:
gemspec_name: jekyll
env:
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_GEM_PUSH_API_KEY }}

View File

@@ -1,22 +0,0 @@
name: Spell Check
on:
push:
branches:
- master
- "*-stable"
# Switch from `pull_request_target` event to reduce distraction from comments
# regarding errors reported in unmodified files.
pull_request:
branches:
- master
- "*-stable"
jobs:
build:
name: Spell Check
runs-on: "ubuntu-latest"
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Check Spellings
uses: check-spelling/check-spelling@v0.0.19

View File

@@ -1,41 +0,0 @@
name: Third-Party Repository Profiling
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build_n_profile:
if: "!contains(github.event.commits[0].message, '[ci skip]')"
runs-on: 'ubuntu-latest'
env:
BUNDLE_GEMFILE: "sandbox/Gemfile"
BUNDLE_PATH: "vendor/bundle"
BUNDLE_JOBS: 4
BUNDLE_RETRY: 3
steps:
- name: Checkout Jekyll
uses: actions/checkout@v3
with:
fetch-depth: 5
path: jekyll
- name: Checkout Third-Party Repository
uses: actions/checkout@v3
with:
repository: ashmaroli/tomjoht.github.io
path: sandbox
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
bundler-cache: true
- name: Run Jekyll Build 3 times
run: |
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
- name: Memory Analysis of Jekyll Build
run: bundle exec ruby jekyll/.github/workflows/actions/memprof.rb sandbox

31
.gitignore vendored
View File

@@ -1,28 +1,23 @@
# Jekyll
_site/
*-cache/
.jekyll-metadata
# Ruby
.bundle/
.byebug_history
.ruby-gemset
.ruby-version
*.gem
Gemfile.lock
# Files
.analysis
.DS_Store
*.swp
*~
# Folders
.DS_Store
.analysis
.bundle/
.byebug_history
.jekyll-metadata
.ruby-gemset
.ruby-version
.sass-cache
/test/source/file_name.txt
/vendor
bbin/
Gemfile.lock
_site/
bin/
bbin/
coverage
gh-pages/
pkg/
site/_site/
test/dest
tmp/*

View File

@@ -1,11 +1,6 @@
---
inherit_from: .rubocop_todo.yml
require:
- rubocop-minitest
- rubocop-performance
- rubocop-rake
- rubocop-rspec
- ./rubocop/jekyll
Jekyll/NoPutsAllowed:
@@ -13,7 +8,7 @@ Jekyll/NoPutsAllowed:
- rake/*.rake
AllCops:
TargetRubyVersion: 2.7
TargetRubyVersion: 2.3
Include:
- lib/**/*.rb
- test/**/*.rb
@@ -24,137 +19,32 @@ AllCops:
- script/**/*
- vendor/**/*
- tmp/**/*
Gemspec/DateAssignment:
Enabled: true
Layout/BeginEndAlignment:
Enabled: true
Layout/EmptyComment:
Enabled: false
Layout/EmptyLinesAroundAttributeAccessor:
Enabled: true
Layout/EndAlignment:
Severity: error
Layout/FirstArrayElementIndentation:
EnforcedStyle: consistent
Layout/FirstHashElementIndentation:
EnforcedStyle: consistent
Layout/HashAlignment:
Layout/AlignHash:
EnforcedHashRocketStyle: table
Layout/IndentationWidth:
Severity: error
Layout/LineLength:
Exclude:
- !ruby/regexp /features\/.*.rb/
- Rakefile
- rake/*.rake
- Gemfile
Max: 100
Severity: warning
Layout/IndentArray:
EnforcedStyle: consistent
Layout/IndentHash:
EnforcedStyle: consistent
Layout/MultilineMethodCallIndentation:
EnforcedStyle: indented
Layout/MultilineOperationIndentation:
EnforcedStyle: indented
Layout/SpaceAroundMethodCallOperator:
Enabled: true
Layout/SpaceBeforeBrackets:
Enabled: true
Layout/SpaceInsideHashLiteralBraces:
Enabled: true
Exclude:
- test/**/*.rb
Lint/AmbiguousAssignment:
Enabled: true
Lint/BinaryOperatorWithIdenticalOperands:
Enabled: true
Lint/ConstantDefinitionInBlock:
Enabled: true
Exclude:
- test/**/*.rb
Lint/DeprecatedConstants:
Enabled: true
Lint/DeprecatedOpenSSLConstant:
Enabled: true
Lint/DuplicateBranch:
Enabled: true
Lint/DuplicateElsifCondition:
Enabled: true
Lint/DuplicateRegexpCharacterClassElement:
Enabled: true
Lint/DuplicateRequire:
Enabled: true
Lint/DuplicateRescueException:
Enabled: true
Lint/EmptyBlock:
Enabled: true
Lint/EmptyClass:
Enabled: true
Lint/EmptyConditionalBody:
Enabled: true
Lint/EmptyFile:
Enabled: true
Lint/FloatComparison:
Enabled: true
Lint/HashCompareByIdentity:
Enabled: true
Lint/IdentityComparison:
Enabled: true
Lint/LambdaWithoutLiteralBlock:
Enabled: true
Lint/MissingSuper:
Enabled: false
Lint/MixedRegexpCaptureTypes:
Enabled: false
Lint/NestedPercentLiteral:
Exclude:
- test/test_site.rb
Lint/NoReturnInBeginEndBlocks:
Enabled: true
Lint/NumberedParameterAssignment:
Enabled: true
Lint/OrAssignmentToConstant:
Enabled: true
Lint/OutOfRangeRegexpRef:
Enabled: true
Lint/RaiseException:
Enabled: true
Lint/RedundantDirGlobSort:
Enabled: true
Lint/RedundantSafeNavigation:
Enabled: true
Lint/SelfAssignment:
Enabled: true
Lint/StructNewOverride:
Enabled: true
Lint/SymbolConversion:
Enabled: true
Lint/ToEnumArguments:
Layout/EmptyComment:
Enabled: false
Lint/TopLevelReturnWithArgument:
Enabled: true
Lint/TrailingCommaInAttributeDeclaration:
Enabled: true
Lint/TripleQuotes:
Enabled: true
Lint/UnexpectedBlockArity:
Enabled: true
Lint/UnmodifiedReduceAccumulator:
Enabled: true
Layout/EndAlignment:
Severity: error
Lint/UnreachableCode:
Severity: error
Lint/UnreachableLoop:
Enabled: true
Lint/UselessMethodDefinition:
Enabled: true
Lint/UselessTimes:
Enabled: true
Lint/Void:
Exclude:
- lib/jekyll/site.rb
Metrics/AbcSize:
Max: 23
Max: 21
Metrics/BlockLength:
Exclude:
- test/**/*.rb
@@ -173,49 +63,24 @@ Metrics/CyclomaticComplexity:
Exclude:
- lib/jekyll/utils.rb
- lib/jekyll/commands/serve.rb
Max: 11
Metrics/LineLength:
Exclude:
- !ruby/regexp /features\/.*.rb/
- Rakefile
- rake/*.rake
- Gemfile
Max: 100
Severity: warning
Metrics/MethodLength:
CountComments: false
Max: 20
Severity: error
Metrics/ModuleLength:
Exclude:
- lib/jekyll/filters.rb
Max: 240
Metrics/ParameterLists:
Max: 4
Metrics/PerceivedComplexity:
Max: 13
Minitest/AssertInDelta:
Enabled: true
Minitest/AssertionInLifecycleHook:
Enabled: true
Minitest/AssertKindOf:
Enabled: true
Minitest/AssertOutput:
Enabled: true
Minitest/AssertPathExists:
Enabled: true
Minitest/AssertSilent:
Enabled: true
Minitest/LiteralAsActualArgument:
Enabled: true
Minitest/TestMethodName:
Enabled: false
Minitest/MultipleAssertions:
Enabled: true
Minitest/RefuteInDelta:
Enabled: true
Minitest/RefuteKindOf:
Enabled: true
Minitest/RefutePathExists:
Enabled: true
Minitest/UnspecifiedException:
Enabled: true
Minitest/AssertEmptyLiteral:
Enabled: false
Max: 8
Naming/FileName:
Enabled: false
Naming/HeredocDelimiterNaming:
@@ -223,44 +88,12 @@ Naming/HeredocDelimiterNaming:
- test/**/*.rb
Naming/MemoizedInstanceVariableName:
Exclude:
- lib/jekyll/convertible.rb
- lib/jekyll/drops/site_drop.rb
- lib/jekyll/drops/unified_payload_drop.rb
- lib/jekyll/page_without_a_file.rb
Performance/AncestorsInclude:
Enabled: false
Performance/ArraySemiInfiniteRangeSlice:
Enabled: true
Performance/BigDecimalWithNumericArgument:
Enabled: true
Performance/BlockGivenWithExplicitBlock:
Enabled: true
Performance/ChainArrayAllocation:
Enabled: true
Performance/CollectionLiteralInLoop:
Enabled: true
Performance/ConstantRegexp:
Enabled: true
Performance/MethodObjectAsBlock:
Enabled: true
Performance/RedundantSortBlock:
Enabled: true
Performance/RedundantStringChars:
Enabled: true
Performance/ReverseFirst:
Enabled: true
Performance/SortReverse:
Enabled: false
Performance/Squeeze:
Enabled: true
Performance/StringInclude:
Enabled: true
Exclude:
- lib/jekyll/utils/platforms.rb
Performance/Sum:
Enabled: true
- lib/jekyll/drops/unified_payload_drop.rb
- lib/jekyll/drops/site_drop.rb
Naming/UncommunicativeMethodParamName:
AllowedNames:
- _
Security/MarshalLoad:
Exclude:
- !ruby/regexp /test\/.*.rb$/
@@ -269,78 +102,29 @@ Security/YAMLLoad:
Exclude:
- !ruby/regexp /features\/.*.rb/
- !ruby/regexp /test\/.*.rb$/
Style/AccessModifierDeclarations:
Enabled: false
Style/AccessorGrouping:
Enabled: true
Style/Alias:
EnforcedStyle: prefer_alias_method
Style/AndOr:
Severity: error
Style/ArgumentsForwarding:
Enabled: false
Style/ArrayCoercion:
Enabled: true
Style/BisectedAttrAccessor:
Enabled: true
Style/CaseLikeIf:
Enabled: true
Style/StringChars:
Enabled: true
Style/ClassAndModuleChildren:
Exclude:
- test/**/*.rb
Style/ClassEqualityComparison:
Enabled: true
Style/CollectionCompact:
Enabled: true
Style/CombinableLoops:
Enabled: true
Style/DocumentDynamicEvalDefinition:
Enabled: true
Style/FrozenStringLiteralComment:
EnforcedStyle: always
Style/Documentation:
Enabled: false
Style/DoubleNegation:
Enabled: false
Style/EndlessMethod:
Enabled: true
Style/ExplicitBlockArgument:
Enabled: false
Style/ExponentialNotation:
Enabled: true
Style/FormatStringToken:
Exclude:
- lib/jekyll/utils/ansi.rb
- lib/jekyll/liquid_renderer/table.rb
- lib/jekyll/profiler.rb
Style/FrozenStringLiteralComment:
EnforcedStyle: always
Style/GlobalStdStream:
Enabled: true
Style/GuardClause:
Enabled: false
Style/HashAsLastArrayItem:
Enabled: true
Style/HashConversion:
Enabled: true
Style/HashEachMethods:
Enabled: true
Style/HashExcept:
Enabled: true
Style/HashLikeCase:
Enabled: true
Style/HashSyntax:
EnforcedStyle: hash_rockets
Severity: error
Style/HashTransformKeys:
Enabled: false
Style/HashTransformValues:
Enabled: true
Style/IfWithBooleanLiteralBranches:
Enabled: true
Style/KeywordParametersOrder:
Enabled: true
Style/MixinUsage:
Exclude:
- test/helper.rb
@@ -348,35 +132,15 @@ Style/ModuleFunction:
Enabled: false
Style/MultilineTernaryOperator:
Severity: error
Style/NegatedIfElseCondition:
Enabled: true
Style/NilLambda:
Enabled: true
Style/OptionalBooleanParameter:
Enabled: true
Style/PercentLiteralDelimiters:
PreferredDelimiters:
"%Q": "{}"
"%W": ()
"%q": "{}"
"%Q": "{}"
"%r": "!!"
"%s": ()
"%w": ()
"%x": ()
Style/RedundantArgument:
Enabled: true
Style/RedundantAssignment:
Enabled: true
Style/RedundantFetchBlock:
Enabled: false
Style/RedundantFileExtensionInRequire:
Enabled: true
Style/RedundantRegexpCharacterClass:
Enabled: true
Style/RedundantRegexpEscape:
Enabled: true
Style/RedundantSelfAssignment:
Enabled: true
"%s": "()"
"%w": "()"
"%W": "()"
"%x": "()"
Style/RegexpLiteral:
EnforcedStyle: percent_r
Style/RescueModifier:
@@ -386,23 +150,10 @@ Style/SafeNavigation:
- lib/jekyll/document.rb
Style/SignalException:
EnforcedStyle: only_raise
Style/SingleArgumentDig:
Enabled: true
Style/SlicingWithRange:
Enabled: false
Style/SoleNestedConditional:
Enabled: true
Style/StringConcatenation:
Enabled: true
Exclude:
- lib/jekyll/commands/*.rb
- test/**/*.rb
Style/StringLiterals:
EnforcedStyle: double_quotes
Style/StringLiteralsInInterpolation:
EnforcedStyle: double_quotes
Style/SwapValues:
Enabled: true
Style/SymbolArray:
EnforcedStyle: brackets
Style/TrailingCommaInArrayLiteral:

View File

@@ -1,25 +0,0 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude`
# on 2022-04-06 10:48:47 UTC using RuboCop version 1.26.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 1
# This cop supports safe auto-correction (--auto-correct).
Performance/BindCall:
Exclude:
- 'test/helper.rb'
# Offense count: 1
Style/CombinableLoops:
Exclude:
- 'lib/jekyll/tags/post_url.rb'
# Offense count: 1
# Configuration parameters: AllowedMethods.
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
Exclude:
- 'lib/jekyll/log_adapter.rb'

57
.travis.yml Normal file
View File

@@ -0,0 +1,57 @@
bundler_args: --without benchmark:site:development
script: script/cibuild
cache: bundler
language: ruby
sudo: false
rvm:
- &ruby1 2.5.1
- &ruby2 2.4.4
- &ruby3 2.3.7
- &jruby jruby-9.1.16.0
matrix:
include:
- rvm: *ruby1
env: TEST_SUITE=fmt
name: "🤖️ Code Format"
- rvm: *ruby1
env: TEST_SUITE=default-site
name: "🏠️ Default Site"
exclude:
- rvm: *jruby
env: TEST_SUITE=cucumber
env:
matrix:
- TEST_SUITE=test
- TEST_SUITE=cucumber
branches:
only:
- master
- themes
- /*-stable/
notifications:
slack:
secure: "\
dNdKk6nahNURIUbO3ULhA09/vTEQjK0fNbgjVjeYPEvROHgQBP1cIP3AJy8aWs8rl5Yyow4Y\
GEilNRzKPz18AsFptVXofpwyqcBxaCfmHP809NX5PHBaadydveLm+TNVao2XeLXSWu+HUNAY\
O1AanCUbJSEyJTju347xCBGzESU=\
"
addons:
code_climate:
repo_token:
secure: "\
mAuvDu+nrzB8dOaLqsublDGt423mGRyZYM3vsrXh4Tf1sT+L1PxsRzU4gLmcV27HtX2Oq9\
DA4vsRURfABU0fIhwYkQuZqEcA3d8TL36BZcGEshG6MQ2AmnYsmFiTcxqV5bmlElHEqQuT\
5SUFXLafgZPBnL0qDwujQcHukID41sE=\
"
# regular test configuration
after_success:
- bundle exec codeclimate-test-reporter
before_install:
- gem update --system
- gem install bundler --version 1.16.2

46
CODE_OF_CONDUCT.markdown Normal file
View File

@@ -0,0 +1,46 @@
# Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting a project maintainer. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html][version]
[homepage]: https://www.contributor-covenant.org/
[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

View File

@@ -1,49 +0,0 @@
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 . .

87
Gemfile
View File

@@ -3,51 +3,41 @@
source "https://rubygems.org"
gemspec :name => "jekyll"
gem "rake", "~> 13.0"
if ENV["LIQUID_VERSION"] && ENV["LIQUID_VERSION"] != ""
gem "liquid", ENV["LIQUID_VERSION"]
end
gem "rake", "~> 12.0"
group :development do
gem "launchy", "~> 2.3"
gem "pry"
gem "pry-byebug" unless RUBY_ENGINE == "jruby"
end
#
group :test do
gem "cucumber", RUBY_VERSION >= "2.5" ? "~> 5.1.2" : "~> 4.1"
gem "httpclient"
gem "jekyll_test_plugin"
gem "jekyll_test_plugin_malicious"
gem "memory_profiler"
gem "nokogiri", "~> 1.7"
gem "rspec"
gem "rspec-mocks"
gem "rubocop", "~> 1.26.0"
gem "rubocop-minitest"
gem "rubocop-performance"
gem "rubocop-rake"
gem "rubocop-rspec"
gem "test-dependency-theme", :path => File.expand_path("test/fixtures/test-dependency-theme", __dir__)
gem "test-theme", :path => File.expand_path("test/fixtures/test-theme", __dir__)
gem "test-theme-skinny", :path => File.expand_path("test/fixtures/test-theme-skinny", __dir__)
gem "test-theme-symlink", :path => File.expand_path("test/fixtures/test-theme-symlink", __dir__)
gem "test-theme-w-empty-data", :path => File.expand_path("test/fixtures/test-theme-w-empty-data", __dir__)
if RUBY_ENGINE == "jruby"
gem "http_parser.rb", "~> 0.6.0"
gem "jruby-openssl"
unless RUBY_ENGINE == "jruby"
gem "pry-byebug"
end
end
#
group :test do
gem "codeclimate-test-reporter", "~> 1.0.5"
gem "cucumber", "~> 3.0"
gem "httpclient"
gem "jekyll_test_plugin"
gem "jekyll_test_plugin_malicious"
gem "nokogiri", "~> 1.7"
gem "rspec"
gem "rspec-mocks"
gem "rubocop", "~> 0.57.2"
gem "test-dependency-theme", :path => File.expand_path("test/fixtures/test-dependency-theme", __dir__)
gem "test-theme", :path => File.expand_path("test/fixtures/test-theme", __dir__)
gem "jruby-openssl" if RUBY_ENGINE == "jruby"
end
#
group :test_legacy do
gem "test-unit" if RUBY_PLATFORM =~ %r!cygwin!
if RUBY_PLATFORM =~ %r!cygwin!
gem "test-unit"
end
gem "minitest"
gem "minitest-profile"
@@ -70,36 +60,35 @@ end
#
group :jekyll_optional_dependencies do
gem "coderay", "~> 1.1.0"
gem "jekyll-coffeescript"
gem "jekyll-docs", :path => "../docs" if Dir.exist?("../docs") && ENV["JEKYLL_VERSION"]
gem "jekyll-feed", "~> 0.9"
gem "jekyll-gist"
gem "jekyll-paginate"
gem "jekyll-redirect-from"
gem "kramdown-syntax-coderay"
gem "matrix"
gem "kramdown", "~> 1.14"
gem "mime-types", "~> 3.0"
gem "rdoc", "~> 6.3.0"
gem "tomlrb"
gem "rdoc", "~> 6.0"
gem "tomlrb", "~> 1.2"
platforms :ruby, :mswin, :mingw, :x64_mingw do
gem "classifier-reborn", "~> 2.2"
gem "liquid-c", "~> 4.0"
gem "yajl-ruby", "~> 1.4"
platform :ruby, :mswin, :mingw, :x64_mingw do
gem "classifier-reborn", "~> 2.2.0"
gem "liquid-c", "~> 3.0"
gem "pygments.rb", "~> 1.0"
gem "yajl-ruby", "~> 1.3"
end
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library
platforms :jruby, :mswin, :mingw, :x64_mingw do
gem "tzinfo", ENV["TZINFO_VERSION"] if ENV["TZINFO_VERSION"]
gem "tzinfo-data"
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem "tzinfo-data", :platforms => [:mingw, :mswin, :x64_mingw, :jruby]
end
#
group :site do
gem "html-proofer", "~> 3.4" if ENV["PROOF"]
if ENV["PROOF"]
gem "html-proofer", "~> 3.4"
end
gem "jekyll-avatar"
gem "jekyll-mentions"

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2008-present Tom Preston-Werner and Jekyll contributors
Copyright (c) 2008-2018 Tom Preston-Werner and Jekyll contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,13 +1,19 @@
# [Jekyll](https://jekyllrb.com/)
[![Gem Version](https://img.shields.io/gem/v/jekyll.svg)][ruby-gems]
[![Linux Build Status](https://github.com/jekyll/jekyll/workflows/Continuous%20Integration/badge.svg)][ci-workflow]
[![Linux Build Status](https://img.shields.io/travis/jekyll/jekyll/master.svg?label=Linux%20build)][travis]
[![Windows Build status](https://img.shields.io/appveyor/ci/jekyll/jekyll/master.svg?label=Windows%20build)][appveyor]
[![Maintainability](https://api.codeclimate.com/v1/badges/8ba0cb5b17bb9848e128/maintainability)][codeclimate]
[![Test Coverage](https://api.codeclimate.com/v1/badges/8ba0cb5b17bb9848e128/test_coverage)][coverage]
[![Security](https://hakiri.io/github/jekyll/jekyll/master.svg)][hakiri]
[![Backers on Open Collective](https://opencollective.com/jekyll/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/jekyll/sponsors/badge.svg)](#sponsors)
[![Sponsors on Open Collective](https://opencollective.com/jekyll/sponsors/badge.svg)](#sponsors)
[ruby-gems]: https://rubygems.org/gems/jekyll
[ci-workflow]: https://github.com/jekyll/jekyll/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Amaster
[codeclimate]: https://codeclimate.com/github/jekyll/jekyll
[coverage]: https://codeclimate.com/github/jekyll/jekyll/coverage
[hakiri]: https://hakiri.io/github/jekyll/jekyll/master
[travis]: https://travis-ci.org/jekyll/jekyll
[appveyor]: https://ci.appveyor.com/project/jekyll/jekyll/branch/master
Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind [GitHub Pages](https://pages.github.com), which you can use to host sites right from your GitHub repositories.
@@ -16,34 +22,24 @@ Jekyll is a simple, blog-aware, static site generator perfect for personal, proj
Jekyll does what you tell it to do — no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.
See: [https://jekyllrb.com/philosophy](https://jekyllrb.com/philosophy)
See: https://jekyllrb.com/philosophy
## Having trouble?
See: https://jekyllrb.com/docs/troubleshooting/
## Getting Started
* [Install](https://jekyllrb.com/docs/installation/) the gem
* Read up about its [Usage](https://jekyllrb.com/docs/usage/) and [Configuration](https://jekyllrb.com/docs/configuration/)
* Take a gander at some existing [Sites](https://github.com/jekyll/jekyll/wiki/sites)
* Take a gander at some existing [Sites](https://wiki.github.com/jekyll/jekyll/sites)
* [Fork](https://github.com/jekyll/jekyll/fork) and [Contribute](https://jekyllrb.com/docs/contributing/) your own modifications
* Have questions? Check out our official forum community [Jekyll Talk](https://talk.jekyllrb.com/) and [`#jekyll` Channel on Libera IRC](https://libera.chat)
## Diving In
* [Migrate](http://import.jekyllrb.com/docs/home/) from your previous system
* Learn how [Front Matter](https://jekyllrb.com/docs/front-matter/) works
* Put information on your site with [Variables](https://jekyllrb.com/docs/variables/)
* Customize the [Permalinks](https://jekyllrb.com/docs/permalinks/) your posts are generated with
* Use the built-in [Liquid Extensions](https://jekyllrb.com/docs/templates/) to make your life easier
* Use custom [Plugins](https://jekyllrb.com/docs/plugins/) to generate content specific to your site
* Watch [video tutorials from Giraffe Academy](https://jekyllrb.com/tutorials/video-walkthroughs/)
## Need help?
If you don't find the answer to your problem in our [docs](https://jekyllrb.com/docs/), or in the [troubleshooting section](https://jekyllrb.com/docs/troubleshooting/), ask the [community](https://jekyllrb.com/docs/community/) for help.
* Have questions? Check out our official forum community [Jekyll Talk](https://talk.jekyllrb.com/) or [`#jekyll` on irc.freenode.net](https://botbot.me/freenode/jekyll/)
## Code of Conduct
In order to have a more open and welcoming community, Jekyll adheres to a
[code of conduct](https://jekyllrb.com/docs/conduct/) adapted from the Ruby on Rails code of
[code of conduct](CODE_OF_CONDUCT.markdown) adapted from the Ruby on Rails code of
conduct.
Please adhere to this code of conduct in any interactions you have in the
@@ -51,32 +47,36 @@ Jekyll community. It is strictly enforced on all official Jekyll
repositories, websites, and resources. If you encounter someone violating
these terms, please let one of our [core team members](https://jekyllrb.com/team/#core-team) know and we will address it as soon as possible.
## Diving In
* [Migrate](http://import.jekyllrb.com/docs/home/) from your previous system
* Learn how the [YAML Front Matter](https://jekyllrb.com/docs/frontmatter/) works
* Put information on your site with [Variables](https://jekyllrb.com/docs/variables/)
* Customize the [Permalinks](https://jekyllrb.com/docs/permalinks/) your posts are generated with
* Use the built-in [Liquid Extensions](https://jekyllrb.com/docs/templates/) to make your life easier
* Use custom [Plugins](https://jekyllrb.com/docs/plugins/) to generate content specific to your site
## Credits
### Sponsors
Support this project by becoming a sponsor. Your logo will show up in this README with a link to your website. [Become a sponsor!](https://opencollective.com/jekyll#sponsor)
[![Jekyll Sponsor 0](https://opencollective.com/jekyll/sponsor/0/avatar.svg)](https://opencollective.com/jekyll/sponsor/0/website)
[![Jekyll Sponsor 1](https://opencollective.com/jekyll/sponsor/1/avatar.svg)](https://opencollective.com/jekyll/sponsor/1/website)
[![Jekyll Sponsor 2](https://opencollective.com/jekyll/sponsor/2/avatar.svg)](https://opencollective.com/jekyll/sponsor/2/website)
[![Jekyll Sponsor 3](https://opencollective.com/jekyll/sponsor/3/avatar.svg)](https://opencollective.com/jekyll/sponsor/3/website)
[![Jekyll Sponsor 4](https://opencollective.com/jekyll/sponsor/4/avatar.svg)](https://opencollective.com/jekyll/sponsor/4/website)
[![Jekyll Sponsor 5](https://opencollective.com/jekyll/sponsor/5/avatar.svg)](https://opencollective.com/jekyll/sponsor/5/website)
[![Jekyll Sponsor 6](https://opencollective.com/jekyll/sponsor/6/avatar.svg)](https://opencollective.com/jekyll/sponsor/6/website)
[![Jekyll Sponsor 7](https://opencollective.com/jekyll/sponsor/7/avatar.svg)](https://opencollective.com/jekyll/sponsor/7/website)
[![Jekyll Sponsor 8](https://opencollective.com/jekyll/sponsor/8/avatar.svg)](https://opencollective.com/jekyll/sponsor/8/website)
[![Jekyll Sponsor 9](https://opencollective.com/jekyll/sponsor/9/avatar.svg)](https://opencollective.com/jekyll/sponsor/9/website)
### Contributors
This project exists thanks to all the people who contribute.
[![Jekyll Contributors](https://opencollective.com/jekyll/contributors.svg?width=890&button=false)](../../graphs/contributors)
<a href="graphs/contributors"><img src="https://opencollective.com/jekyll/contributors.svg?width=890&button=false" /></a>
### Backers
Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/jekyll#backer)
[![Jekyll Backers](https://opencollective.com/jekyll/backers.svg?width=890)](https://opencollective.com/jekyll#backers)
<a href="https://opencollective.com/jekyll#backers" target="_blank"><img src="https://opencollective.com/jekyll/backers.svg?width=890" /></a>
### Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor!](https://opencollective.com/jekyll#sponsor)
<a href="https://opencollective.com/jekyll/sponsor/0/website" target="_blank"><img src="https://opencollective.com/jekyll/sponsor/0/avatar.svg" /></a>
<a href="https://opencollective.com/jekyll/sponsor/1/website" target="_blank"><img src="https://opencollective.com/jekyll/sponsor/1/avatar.svg" /></a>
<a href="https://opencollective.com/jekyll/sponsor/2/website" target="_blank"><img src="https://opencollective.com/jekyll/sponsor/2/avatar.svg" /></a>
## License

View File

@@ -159,5 +159,5 @@ end
desc "Open an irb session preloaded with this library"
task :console do
sh "irb -r ./lib/#{name}.rb"
sh "irb -rubygems -r ./lib/#{name}.rb"
end

View File

@@ -1,41 +1,34 @@
version: "{build}"
clone_depth: 5
clone_depth: 10
branches:
only:
- master
- themes
- /.*-stable/
build: off
environment:
BUNDLE_WITHOUT: "benchmark:development"
matrix:
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 1.2"
TEST_SUITE: "test"
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 2.0"
TEST_SUITE: "test"
- RUBY_FOLDER_VER: "26"
TEST_SUITE: "default-site"
- RUBY_FOLDER_VER: "26"
TEST_SUITE: "profile-docs"
- RUBY_FOLDER_VER: "26"
TEST_SUITE: "memprof"
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 1.2"
TEST_SUITE: "cucumber"
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 2.0"
TEST_SUITE: "cucumber"
install:
- SET PATH=C:\Ruby%RUBY_FOLDER_VER%-x64\bin;%PATH%
- SET PATH=C:\Ruby%RUBY_FOLDER_VER%\bin;%PATH%
- bundle install --retry 5 --jobs=%NUMBER_OF_PROCESSORS% --clean --path vendor\bundle
environment:
BUNDLE_WITHOUT: "benchmark:site:development"
matrix:
- RUBY_FOLDER_VER: "25"
TEST_SUITE: "test"
- RUBY_FOLDER_VER: "25"
TEST_SUITE: "cucumber"
- RUBY_FOLDER_VER: "25"
TEST_SUITE: "default-site"
- RUBY_FOLDER_VER: "25-x64"
TEST_SUITE: "test"
- RUBY_FOLDER_VER: "24"
TEST_SUITE: "test"
- RUBY_FOLDER_VER: "23"
TEST_SUITE: "test"
test_script:
- ruby --version
- gem --version
@@ -43,5 +36,5 @@ test_script:
- bash ./script/cibuild
cache:
# If one of the files after the right arrow changes, cache will be invalidated
# If one of the files after the right arrow changes, cache will be skipped
- 'vendor\bundle -> appveyor.yml,Gemfile,jekyll.gemspec'

View File

@@ -1,49 +0,0 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'benchmark/ips'
require_relative '../lib/jekyll'
puts ''
print 'Setting up... '
SITE = Jekyll::Site.new(
Jekyll.configuration({
"source" => File.expand_path("../docs", __dir__),
"destination" => File.expand_path("../docs/_site", __dir__),
"disable_disk_cache" => true,
"quiet" => true,
})
)
TEMPLATE_1 = Liquid::Template.parse(<<~HTML)
{%- assign doc = site.documents | where: 'url', '/docs/assets/' | first -%}
{{- doc.title -}}
HTML
TEMPLATE_2 = Liquid::Template.parse(<<~HTML)
{%- assign doc = site.documents | find: 'url', '/docs/assets/' -%}
{{- doc.title -}}
HTML
[:reset, :read, :generate].each { |phase| SITE.send(phase) }
puts 'done.'
puts 'Testing... '
puts " #{'where + first'.cyan} results in #{TEMPLATE_1.render(SITE.site_payload).inspect.green}"
puts " #{'find'.cyan} results in #{TEMPLATE_2.render(SITE.site_payload).inspect.green}"
if TEMPLATE_1.render(SITE.site_payload) == TEMPLATE_2.render(SITE.site_payload)
puts 'Success! Proceeding to run benchmarks.'.green
puts ''
else
puts 'Something went wrong. Aborting.'.magenta
puts ''
return
end
Benchmark.ips do |x|
x.report('where + first') { TEMPLATE_1.render(SITE.site_payload) }
x.report('find') { TEMPLATE_2.render(SITE.site_payload) }
x.compare!
end

View File

@@ -1,25 +0,0 @@
#!/usr/bin/env ruby
require_relative '../lib/jekyll'
require 'benchmark/ips'
date = "2014-08-02 14:43:06 PDT".freeze
time = Time.parse(date)
Benchmark.ips do |x|
x.report('Time.parse') do
Time.parse(date)
end
x.report('localtime') do
Time.parse(date).localtime
end
x.report('localtime parsed') do
time.localtime
end
x.report('Utils.parse_date') do
Jekyll::Utils.parse_date(date)
end
end

View File

@@ -1,91 +0,0 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
# For pull request: https://github.com/jekyll/jekyll/pull/8192
require 'benchmark/ips'
require 'bundler/setup'
require 'memory_profiler'
require 'jekyll'
CONTEXT = {"bar"=>"The quick brown fox"}
MARKUP_1 = %Q(foo=bar lorem="ipsum \\"dolor\\"" alpha='beta \\'gamma\\'').freeze
MARKUP_2 = %Q(foo=bar lorem="ipsum 'dolor'" alpha='beta "gamma"').freeze
#
def old_parse_params(markup)
params = {}
while (match = Jekyll::Tags::IncludeTag::VALID_SYNTAX.match(markup))
markup = markup[match.end(0)..-1]
value = if match[2]
match[2].gsub('\\"', '"')
elsif match[3]
match[3].gsub("\\'", "'")
elsif match[4]
CONTEXT[match[4]]
end
params[match[1]] = value
end
params
end
def new_parse_params(markup)
params = {}
markup.scan(Jekyll::Tags::IncludeTag::VALID_SYNTAX) do |key, d_quoted, s_quoted, variable|
value = if d_quoted
d_quoted.include?('\\"') ? d_quoted.gsub('\\"', '"') : d_quoted
elsif s_quoted
s_quoted.include?("\\'") ? s_quoted.gsub("\\'", "'") : s_quoted
elsif variable
CONTEXT[variable]
end
params[key] = value
end
params
end
#
def report(label, markup, color)
prof_report = MemoryProfiler.report { yield }
allocated_memory = prof_report.scale_bytes(prof_report.total_allocated_memsize)
allocated_objects = prof_report.total_allocated
retained_memory = prof_report.scale_bytes(prof_report.total_retained_memsize)
retained_objects = prof_report.total_retained
puts <<~MSG.send(color)
#{(label + " ").ljust(49, "-")}
MARKUP: #{markup}
RESULT: #{yield}
Total allocated: #{allocated_memory} (#{allocated_objects} objects)
Total retained: #{retained_memory} (#{retained_objects} objects)
MSG
end
report('old w/ escaping', MARKUP_1, :magenta) { old_parse_params(MARKUP_1) }
report('new w/ escaping', MARKUP_1, :cyan) { new_parse_params(MARKUP_1) }
report('old no escaping', MARKUP_2, :green) { old_parse_params(MARKUP_2) }
report('new no escaping', MARKUP_2, :yellow) { new_parse_params(MARKUP_2) }
#
Benchmark.ips do |x|
x.report("old + esc".magenta) { old_parse_params(MARKUP_1) }
x.report("new + esc".cyan) { new_parse_params(MARKUP_1) }
x.compare!
end
Benchmark.ips do |x|
x.report("old - esc".green) { old_parse_params(MARKUP_2) }
x.report("new - esc".yellow) { new_parse_params(MARKUP_2) }
x.compare!
end

View File

@@ -1,65 +0,0 @@
# frozen_string_literal: true
require 'benchmark/ips'
require 'jekyll'
class FooPage
def initialize(dir:, name:)
@dir = dir
@name = name
end
def slow_path
File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).sub(%r!\A/!, "")
end
def fast_path
Jekyll::PathManager.join(@dir, @name).sub(%r!\A/!, "")
end
end
nil_page = FooPage.new(:dir => nil, :name => nil)
empty_page = FooPage.new(:dir => "", :name => "")
root_page = FooPage.new(:dir => "", :name => "ipsum.md")
nested_page = FooPage.new(:dir => "lorem", :name => "ipsum.md")
slashed_page = FooPage.new(:dir => "/lorem/", :name => "/ipsum.md")
if nil_page.slow_path == nil_page.fast_path
Benchmark.ips do |x|
x.report('nil_page slow') { nil_page.slow_path }
x.report('nil_page fast') { nil_page.fast_path }
x.compare!
end
end
if empty_page.slow_path == empty_page.fast_path
Benchmark.ips do |x|
x.report('empty_page slow') { empty_page.slow_path }
x.report('empty_page fast') { empty_page.fast_path }
x.compare!
end
end
if root_page.slow_path == root_page.fast_path
Benchmark.ips do |x|
x.report('root_page slow') { root_page.slow_path }
x.report('root_page fast') { root_page.fast_path }
x.compare!
end
end
if nested_page.slow_path == nested_page.fast_path
Benchmark.ips do |x|
x.report('nested_page slow') { nested_page.slow_path }
x.report('nested_page fast') { nested_page.fast_path }
x.compare!
end
end
if slashed_page.slow_path == slashed_page.fast_path
Benchmark.ips do |x|
x.report('slashed_page slow') { slashed_page.slow_path }
x.report('slashed_page fast') { slashed_page.fast_path }
x.compare!
end
end

View File

@@ -90,21 +90,26 @@ end
Correctness.new(site_docs, "redirect_from".freeze).assert!
Correctness.new(site_docs, "title".freeze).assert!
def property(property, meta_key)
Benchmark.ips do |x|
x.config(time: 10, warmup: 5)
x.report("sort_by_property_directly with #{property} property") do
sort_by_property_directly(site_docs, meta_key)
end
x.report("schwartzian_transform with #{property} property") do
schwartzian_transform(site_docs, meta_key)
end
x.compare!
# First, test with a property only a handful of documents have.
Benchmark.ips do |x|
x.config(time: 10, warmup: 5)
x.report('sort_by_property_directly with sparse property') do
sort_by_property_directly(site_docs, "redirect_from".freeze)
end
x.report('schwartzian_transform with sparse property') do
schwartzian_transform(site_docs, "redirect_from".freeze)
end
x.compare!
end
# First, test with a property only a handful of documents have.
test_property('sparse', 'redirect_from')
# Next, test with a property they all have.
test_property('non-sparse', 'title')
Benchmark.ips do |x|
x.config(time: 10, warmup: 5)
x.report('sort_by_property_directly with non-sparse property') do
sort_by_property_directly(site_docs, "title".freeze)
end
x.report('schwartzian_transform with non-sparse property') do
schwartzian_transform(site_docs, "title".freeze)
end
x.compare!
end

View File

@@ -1,83 +0,0 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
require "forwardable"
require "colorator"
require "liquid"
require "benchmark/ips"
require "memory_profiler"
# Set up (memory) profiler
class Profiler
def self.run
yield new(ARGV[0] || 10_000)
end
def initialize(count)
@count = count.to_i
end
def report(label, color, &block)
prof_report = MemoryProfiler.report { @count.to_i.times(&block) }
allocated_memory = prof_report.scale_bytes(prof_report.total_allocated_memsize)
allocated_objects = prof_report.total_allocated
retained_memory = prof_report.scale_bytes(prof_report.total_retained_memsize)
retained_objects = prof_report.total_retained
puts <<~MSG.send(color)
With #{label} calls
Total allocated: #{allocated_memory} (#{allocated_objects} objects)
Total retained: #{retained_memory} (#{retained_objects} objects)
MSG
end
end
# Set up stage
class Drop < Liquid::Drop
def initialize(obj)
@obj = obj
end
end
class ForwardDrop < Drop
extend Forwardable
def_delegators :@obj, :name
end
class StaticDrop < Drop
def name
@obj.name
end
end
class Document
def name
"lipsum"
end
end
# Set up actors
document = Document.new
alpha = ForwardDrop.new(document)
beta = StaticDrop.new(document)
count = ARGV[0] || 10_000
# Run profilers
puts "\nMemory profiles for #{count} calls to invoke drop key:"
Profiler.run do |x|
x.report("forwarded", :cyan) { alpha["name"] }
x.report("static", :green) { beta["name"] }
end
# Benchmark
puts "\nBenchmarking the two scenarios..."
Benchmark.ips do |x|
x.report("forwarded".cyan) { alpha["name"] }
x.report("static".green) { beta["name"] }
x.compare!
end

2
docs/.gitignore vendored
View File

@@ -1,5 +1,5 @@
_site/
.idea/
*.swp
pkg/
test/
.idea/

View File

@@ -18,10 +18,18 @@ sitemap: false
<p>The resource you requested was not found. Here are some links to help you find your way:</p>
<nav class="main-nav">
<ul>
<li><a href="{{ '/' | relative_url }}">Home</a></li>
<li><a href="{{ '/docs/home/' | relative_url }}">Documentation</a></li>
<li><a href="{{ '/news/' | relative_url }}">News</a></li>
<li><a href="{{ '/help/' | relative_url }}">Help</a></li>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/docs/home/">Documentation</a>
</li>
<li>
<a href="/news/">News</a>
</li>
<li>
<a href="/help/">Help</a>
</li>
</ul>
</nav>
</div>

View File

@@ -1,5 +1,5 @@
---
version: 4.2.2
version: 3.8.3
name: Jekyll • Simple, blog-aware, static sites
description: Transform your plain text into static websites and blogs
url: https://jekyllrb.com
@@ -10,7 +10,6 @@ twitter:
logo: "/img/logo-2x.png"
google_analytics_id: UA-50755011-1
google_site_verification: onQcXpAvtHBrUI5LlroHNE_FP0b2qvFyPq7VZw36iEY
cloudinary_url: https://res.cloudinary.com/jekyll/image/upload/f_auto,q_auto,w_404
collections:
docs:
permalink: "/:collection/:path/"
@@ -19,7 +18,6 @@ collections:
permalink: "/news/:year/:month/:day/:title/"
output: true
tutorials:
permalink: "/:collection/:path/"
output: true
defaults:
- scope:
@@ -32,16 +30,7 @@ defaults:
type: posts
values:
layout: news_item
- scope:
path: _tutorials
type: tutorials
values:
layout: tutorials
- scope:
path: ''
values:
image: "/img/jekyll-og.png"
future: true
image: "/img/twitter-card.png"
plugins:
- jekyll-avatar
- jekyll-feed
@@ -50,15 +39,10 @@ plugins:
- jekyll-seo-tag
- jekyll-sitemap
- jemoji
feed:
categories:
- release
kramdown:
syntax_highlighter_opts:
default_lang: plaintext
sass:
style: compressed
strict_front_matter: true
exclude:
- ".gitignore"
- CNAME
- icomoon-selection.json
- readme.md

View File

@@ -1,123 +0,0 @@
- name: Regeneration
description: Enable auto-regeneration of the site when files are modified.
flag: "-w, --[no-]watch"
- name: Configuration
description: >-
Specify config files instead of using <code>_config.yml</code> automatically.
Settings in later files override settings in earlier files.
flag: "--config FILE1[,FILE2,...]"
- name: Plugins
description: >-
Specify plugin directories instead of using <code>_plugins/</code> automatically.
option: "plugins_dir: [ DIR1,... ]"
flag: "-p, --plugins DIR1[,DIR2,...]"
- name: Layouts
description: >-
Specify layout directory instead of using <code>_layouts/</code> automatically.
option: "layouts_dir: DIR"
flag: --layouts DIR
- name: Drafts
description: Process and render draft posts.
option: "show_drafts: BOOL"
flag: -D, --drafts
- name: Environment
description: Use a specific environment value in the build.
flag: JEKYLL_ENV=production
- name: Future
description: Publish posts or collection documents with a future date.
option: "future: BOOL"
flag: --future
- name: Unpublished
description: Render posts that were marked as unpublished.
option: "unpublished: BOOL"
flag: --unpublished
- name: LSI
description: >-
Produce an index for related posts. Requires the
<a href="https://jekyll.github.io/classifier-reborn/">classifier-reborn</a> plugin.
option: "lsi: BOOL"
flag: --lsi
- name: Limit posts
description: Limit the number of posts to parse and publish.
option: "limit_posts: NUM"
flag: --limit_posts NUM
- name: Force polling
description: Force watch to use polling.
option: "force_polling: BOOL"
flag: --force_polling
- name: Verbose output
description: Print verbose output.
option: "verbose: BOOL"
flag: -V, --verbose
- name: Silence output
description: Silence the normal output from Jekyll during a build.
option: "quiet: BOOL"
flag: -q, --quiet
- name: Log level
description: Specify a log level among debug, info, warn, or error.
flag: JEKYLL_LOG_LEVEL=info
- name: Incremental build
description: >-
Enable the experimental
<a href="/docs/configuration/incremental-regeneration/">incremental
build</a> feature. Incremental build only re-builds posts and pages that
have changed, resulting in significant performance improvements for large
sites, but may also break site generation in certain cases.
option: "incremental: BOOL"
flag: -I, --incremental
- name: Disable bundle require
description: Disables the need to require gems in `:jekyll_plugins` Gemfile
flag: JEKYLL_NO_BUNDLER_REQUIRE=true
- name: Liquid profiler
description: Generate a Liquid rendering profile to help you identify performance bottlenecks.
option: "profile: BOOL"
flag: --profile
- name: Strict front matter
description: Cause a build to fail if there is a YAML syntax error in a page's front matter.
option: "strict_front_matter: BOOL"
flag: --strict_front_matter
- name: Base URL
description: Serve the website from the given base URL.
option: "baseurl: URL"
flag: -b, --baseurl URL
- name: Trace
description: Show the full backtrace when an error occurs.
flag: -t, --trace

View File

@@ -1,77 +0,0 @@
- name: Site source
description: Change the directory where Jekyll will read files
option: "source: DIR"
flag: -s, --source DIR
- name: Site destination
description: Change the directory where Jekyll will write files
option: "destination: DIR"
flag: -d, --destination DIR
- name: Safe
description: >-
Disable <a href="/docs/plugins/">non-whitelisted plugins</a>, caching to disk, and ignore symbolic links.
option: "safe: BOOL"
flag: --safe
- name: Disable disk cache
version-badge: 4.1.0
description: >-
Disable caching of content to disk in order to skip creating a <code>.jekyll-cache</code> or similar directory at
the source to avoid interference with virtual environments and third-party directory watchers. Caching to disk is
always disabled in <code>safe</code> mode.
option: "disable_disk_cache: BOOL"
flag: --disable-disk-cache
- name: Ignore theme configuration
version-badge: 4.1.0
description: >-
Jekyll 4.0 started allowing themes to bundle a <code>_config.yml</code> to simplify theme-onboarding for new users.
In the unfortunate situation that importing a bundled theme configuration messes up the merged site-configuration,
the user can configure Jekyll to not import the theme-config entirely.
option: "ignore_theme_config: BOOL"
- name: Exclude
description: >-
Exclude directories and/or files from the conversion. These exclusions are relative to the site's source directory
and cannot be outside the source directory.
option: "exclude: [DIR, FILE, ...]"
- name: Include
description: >-
Force inclusion of directories and/or files in the conversion. <code>.htaccess</code> is a good example since
dotfiles are excluded by default.
option: "include: [DIR, FILE, ...]"
- name: Keep files
description: >-
When clobbering the site destination, keep the selected files. Useful for files that are not generated by jekyll;
e.g. files or assets that are generated by your build tool. The paths are relative to the <code>destination</code>.
option: "keep_files: [DIR, FILE, ...]"
- name: Time zone
description: >-
Set the time zone for site generation. This sets the <code>TZ</code> environment variable, which Ruby uses to handle
time and date creation and manipulation. Any entry from the
<a href="https://en.wikipedia.org/wiki/Tz_database">IANA Time Zone Database</a>
is valid, e.g. <code>America/New_York</code>. A list of all available values can be found
<a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"> here</a>.
When serving on a local machine, the default time zone is set by your operating system. But when served on a remote
host/server, the default time zone depends on the server's setting or location.
option: "timezone: TIMEZONE"
- name: Encoding
description: >-
Set the encoding of files by name (only available for Ruby 1.9 or later). The default value is <code>utf-8</code>
starting in 2.0.0, and <code>nil</code> before 2.0.0, which will yield the Ruby default of <code>ASCII-8BIT</code>.
Available encodings can be shown by the command <code>ruby -e 'puts Encoding::list.join("\n")'</code>.
option: "encoding: ENCODING"

View File

@@ -1,71 +0,0 @@
- name: Local server port
description: Listen on the given port. The default is `4000`.
option: "port: PORT"
flag: "-P, --port PORT"
- name: Local server hostname
description: Listen at the given hostname. The default is `localhost`.
option: "host: HOSTNAME"
flag: "-H, --host HOSTNAME"
- name: Live reload
description: Reload a page automatically on the browser when its content is edited.
option: "livereload: BOOL"
flag: "-l, --livereload"
- name: Live reload ignore
description: File glob patterns for LiveReload to ignore.
option: "livereload_ignore: [ GLOB1,... ]"
flag: "--livereload-ignore GLOB1[,GLOB2,...]"
- name: Live reload min/max delay
description: Minimum/Maximum delay before automatically reloading page.
options:
- "livereload_min_delay: SECONDS"
- "livereload_max_delay: SECONDS"
flags:
- "--livereload-min-delay SECONDS"
- "--livereload-max-delay SECONDS"
- name: Live reload port
description: Port for LiveReload to listen on.
flag: "--livereload-port PORT"
- name: Open URL
description: Open the site's URL in the browser.
option: "open_url: BOOL"
flag: "-o, --open-url"
- name: Detach
description: Detach the server from the terminal.
option: "detach: BOOL"
flag: "-B, --detach"
- name: Skips the initial site build
description: Skips the initial site build which occurs before the server is started.
option: "skip_initial_build: BOOL"
flag: "--skip-initial-build"
- name: Show directory listing
description: Show a directory listing instead of loading your index file.
option: "show_dir_listing: BOOL"
flag: "--show-dir-listing"
- name: X.509 (SSL) private key
description: "SSL Private Key, stored or symlinked in the site source."
flag: "--ssl-key"
- name: X.509 (SSL) certificate
description: "SSL Public certificate, stored or symlinked in the site source."
flag: "--ssl-cert"

53
docs/_data/docs.yml Normal file
View File

@@ -0,0 +1,53 @@
- title: Getting Started
docs:
- home
- quickstart
- installation
- windows
- usage
- structure
- configuration
- title: Your Content
docs:
- frontmatter
- posts
- drafts
- pages
- static-files
- variables
- collections
- datafiles
- assets
- migrations
- title: Customization
docs:
- templates
- includes
- permalinks
- pagination
- plugins
- themes
- extras
- title: Deployment
docs:
- github-pages
- deployment-methods
- continuous-integration
- title: Miscellaneous
docs:
- troubleshooting
- sites
- resources
- upgrading/0-to-2
- upgrading/2-to-3
- title: Meta
docs:
- contributing
- maintaining
- conduct
- history

View File

@@ -1,37 +0,0 @@
- title: Getting Started
docs:
- link: /docs/
- link: /docs/installation/
- link: /docs/ruby-101/
- link: /docs/community/
- link: /docs/step-by-step/01-setup/
- title: Build
docs:
- link: /docs/usage/
- link: /docs/configuration/
- link: /docs/rendering-process/
- title: Content
docs:
- link: /docs/pages/
- link: /docs/posts/
- link: /docs/front-matter/
- link: /docs/collections/
- link: /docs/datafiles/
- link: /docs/assets/
- link: /docs/static-files/
- title: Site Structure
docs:
- link: /docs/structure/
- link: /docs/liquid/
- link: /docs/variables/
- link: /docs/includes/
- link: /docs/layouts/
- link: /docs/permalinks/
- link: /docs/themes/
- link: /docs/pagination/
- title: Guides
docs:
- link: /docs/plugins/
- link: /docs/migrations/
- link: /docs/upgrading/
- link: /docs/deployment/

View File

@@ -1,348 +0,0 @@
#
# ---------------------------------------------------------------------------------------
# List of Liquid Filters provided by Jekyll Core that will be utilized for their
# documentation.
#
# To document a new filter, create a new "list-item" below with the following keys:
# name: : [REQUIRED] A string label that identifies the filter
# description: : [REQUIRED] A short description of what to expect from the filter
# version_badge: : [OPTIONAL] Jekyll version that introduced the filter
# examples: : [REQUIRED] A 'nested list' comprised of inputs and outputs
# input: : [REQUIRED] The filter syntax and usage
# output: : [OPTIONAL] The output from the filter
#
# Tip: Use YAML Block notations to "fold" a long string, or to "break" a long string
# to the following line. Block notations can also be used to avoid having to use
# backslashes to escape quotes.
# ---------------------------------------------------------------------------------------
#
- name: Relative URL
description: >-
Prepend <code>baseurl</code> config value to the input to convert a URL path into a relative URL.
This is recommended for a site that is hosted on a subpath of a domain.
examples:
- input: '{{ "/assets/style.css" | relative_url }}'
output: '/my-baseurl/assets/style.css'
#
- name: Absolute URL
description: >-
Prepend <code>url</code> and <code>baseurl</code> values to the input to convert a URL path to an absolute URL.
examples:
- input: '{{ "/assets/style.css" | absolute_url }}'
output: 'http://example.com/my-baseurl/assets/style.css'
#
- name: Date to XML Schema
description: Convert a Date into XML Schema (ISO 8601) format.
examples:
- input: '{{ site.time | date_to_xmlschema }}'
output: '2008-11-07T13:07:54-08:00'
#
- name: Date to RFC-822 Format
description: Convert a Date into the RFC-822 format used for RSS feeds.
examples:
- input: '{{ site.time | date_to_rfc822 }}'
output: 'Mon, 07 Nov 2008 13:07:54 -0800'
#
- name: Date to String
description: Convert a date to short format.
examples:
- input: '{{ site.time | date_to_string }}'
output: '07 Nov 2008'
#
- name: Date to String in ordinal US style
description: 'Format a date to ordinal, US, short format.'
version_badge: 3.8.0
examples:
- input: '{{ site.time | date_to_string: "ordinal", "US" }}'
output: 'Nov 7th, 2008'
#
- name: Date to Long String
description: Format a date to long format.
examples:
- input: '{{ site.time | date_to_long_string }}'
output: '07 November 2008'
#
- name: Date to Long String in ordinal UK style
description: 'Format a date to ordinal, UK, long format.'
version_badge: 3.8.0
examples:
- input: '{{ site.time | date_to_long_string: "ordinal" }}'
output: '7th November 2008'
#
- name: Where
description: Select all the objects in an array where the key has the given value.
examples:
- input: '{{ site.members | where:"graduation_year","2014" }}'
output:
#
- name: Where Expression
description: Select all the objects in an array where the expression is true.
version_badge: 3.2.0
examples:
- input: |-
{{ site.members | where_exp:"item",
"item.graduation_year == 2014" }}
output:
- input: |-
{{ site.members | where_exp:"item",
"item.graduation_year < 2014" }}
output:
- input: |-
{{ site.members | where_exp:"item",
"item.projects contains 'foo'" }}
output:
#
- name: Find
description: >-
Return <strong>the first object</strong> in an array for which the queried
attribute has the given value or return <code>nil</code> if no item in
the array satisfies the given criteria.
version_badge: 4.1.0
examples:
- input: '{{ site.members | find: "graduation_year", "2014" }}'
output:
#
- name: Find Expression
description: >-
Return <strong>the first object</strong> in an array for which the given
expression evaluates to true or return <code>nil</code> if no item in
the array satisfies the evaluated expression.
version_badge: 4.1.0
examples:
- input: |-
{{ site.members | find_exp:"item",
"item.graduation_year == 2014" }}
output:
- input: |-
{{ site.members | find_exp:"item",
"item.graduation_year < 2014" }}
output:
- input: |-
{{ site.members | find_exp:"item",
"item.projects contains 'foo'" }}
output:
#
- name: Group By
description: Group an array's items by a given property.
examples:
- input: '{{ site.members | group_by:"graduation_year" }}'
output: |-
[{"name"=>"2013", "items"=>[...]},
{"name"=>"2014", "items"=>[...]}]
#
- name: Group By Expression
description: Group an array's items using a Liquid expression.
version_badge: 3.4.0
examples:
- input: |-
{{ site.members | group_by_exp: "item",
"item.graduation_year | truncate: 3, ''" }}
output: |-
[{"name"=>"201", "items"=>[...]},
{"name"=>"200", "items"=>[...]}]
#
- name: XML Escape
description: Escape some text for use in XML.
examples:
- input: '{{ page.content | xml_escape }}'
output:
#
- name: CGI Escape
description: >-
CGI escape a string for use in a URL. Replaces any special characters
with appropriate <code>%XX</code> replacements. CGI escape normally
replaces a space with a plus <code>+</code> sign.
examples:
- input: '{{ "foo, bar; baz?" | cgi_escape }}'
output: 'foo%2C+bar%3B+baz%3F'
#
- name: URI Escape
description: >-
Percent encodes any special characters in a URI.
URI escape normally replaces a space with <code>%20</code>.
<a href="https://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters">Reserved characters</a>
will not be escaped.
examples:
- input: '{{ "http://foo.com/?q=foo, \bar?" | uri_escape }}'
output: 'http://foo.com/?q=foo,%20%5Cbar?'
#
- name: Number of Words
description: >-
Count the number of words in some text.<br/>
From <span class="version-badge">v4.1.0</span>, this filter takes an optional
argument to control the handling of Chinese-Japanese-Korean (CJK) characters
in the <code>input</code> string.<br/>
Passing <code>'cjk'</code> as the argument will count every CJK character
detected as one word irrespective of being separated by whitespace.<br/>
Passing <code>'auto'</code> (auto-detect) works similar to <code>'cjk'</code>
but is more performant if the filter is used on a variable string that may
or may not contain CJK chars.
examples:
- input: '{{ "Hello world!" | number_of_words }}'
output: 2
- input: '{{ "你好hello世界world" | number_of_words }}'
output: 1
- input: '{{ "你好hello世界world" | number_of_words: "cjk" }}'
output: 6
- input: '{{ "你好hello世界world" | number_of_words: "auto" }}'
output: 6
#
- name: Array to Sentence
description: >-
Convert an array into a sentence. Useful for listing tags.
Optional argument for connector.
examples:
- input: '{{ page.tags | array_to_sentence_string }}'
output: 'foo, bar, and baz'
- input: '{{ page.tags | array_to_sentence_string: "or" }}'
output: 'foo, bar, or baz'
#
- name: Markdownify
description: Convert a Markdown-formatted string into HTML.
examples:
- input: '{{ page.excerpt | markdownify }}'
output:
#
- name: Smartify
description: 'Convert "quotes" into &ldquo;smart quotes.&rdquo;'
examples:
- input: '{{ page.title | smartify }}'
output:
#
- name: Converting Sass/SCSS
description: Convert a Sass- or SCSS-formatted string into CSS.
examples:
- input: '{{ some_sass | sassify }}'
output:
- input: '{{ some_scss | scssify }}'
output:
#
- name: Slugify
description: Convert a string into a lowercase URL "slug". See below for options.
examples:
- input: '{{ "The _config.yml file" | slugify }}'
output: 'the-config-yml-file'
- input: '{{ "The _config.yml file" | slugify: "pretty" }}'
output: 'the-_config.yml-file'
- input: '{{ "The _cönfig.yml file" | slugify: "ascii" }}'
output: 'the-c-nfig-yml-file'
- input: '{{ "The cönfig.yml file" | slugify: "latin" }}'
output: 'the-config-yml-file'
#
- name: Data To JSON
description: Convert Hash or Array to JSON.
examples:
- input: '{{ site.data.projects | jsonify }}'
output:
#
- name: Normalize Whitespace
description: Replace any occurrence of whitespace with a single space.
examples:
- input: '{{ "a \n b" | normalize_whitespace }}'
output:
#
- name: Sort
description: >-
Sort an array. Optional arguments for hashes
1.&nbsp;property name
2.&nbsp;nils order (<em>first</em> or <em>last</em>).
examples:
- input: '{{ page.tags | sort }}'
output:
- input: '{{ site.posts | sort: "author" }}'
output:
- input: '{{ site.pages | sort: "title", "last" }}'
output:
#
- name: Sample
description: 'Pick a random value from an array. Optionally, pick multiple values.'
examples:
- input: '{{ site.pages | sample }}'
output:
- input: '{{ site.pages | sample: 2 }}'
output:
#
- name: To Integer
description: Convert a string or boolean to integer.
examples:
- input: '{{ some_var | to_integer }}'
output:
#
- name: Array Filters
description: >-
Push, pop, shift, and unshift elements from an Array.
These are <strong>NON-DESTRUCTIVE</strong>, i.e. they do not mutate the array,
but rather make a copy and mutate that.
examples:
- input: '{{ page.tags | push: "Spokane" }}'
output: '["Seattle", "Tacoma", "Spokane"]'
- input: '{{ page.tags | pop }}'
output: '["Seattle"]'
- input: '{{ page.tags | shift }}'
output: '["Tacoma"]'
- input: '{{ page.tags | unshift: "Olympia" }}'
output: '["Olympia", "Seattle", "Tacoma"]'
#
- name: Inspect
description: Convert an object into its String representation for debugging.
examples:
- input: '{{ some_var | inspect }}'
output:

View File

@@ -1,175 +0,0 @@
# Variables provided by Jekyll core
#
# name: : name of the variable
# description: : content returned by the variable
global:
- name: site
description: >-
Site wide information + configuration settings from <code>_config.yml</code>.
See below for details.
- name: page
description: >-
Page specific information + the <a href="/docs/front-matter/">front matter</a>.
Custom variables set via the front matter will be available here. See below for details.
- name: layout
description: >-
Layout specific information + the <a href="/docs/front-matter/">front matter</a>.
Custom variables set via front matter in layouts will be available here.
- name: content
description: >-
In layout files, the rendered content of the Post or Page being wrapped.
Not defined in Post or Page files.
- name: paginator
description: >-
When the <code>paginate</code> configuration option is set, this variable becomes available
for use. See <a href="../pagination/">Pagination</a> for details.
site:
- name: site.time
description: >-
The current time (when you run the <code>jekyll</code> command).
- name: site.pages
description: >-
A list of all Pages.
- name: site.posts
description: >-
A reverse chronological list of all Posts.
- name: site.related_posts
description: >-
If the page being processed is a Post, this contains a list of up to ten related Posts.
By default, these are the ten most recent posts. For high quality but slow to compute
results, run the <code>jekyll</code> command with the <code>--lsi</code>
(<a href="https://en.wikipedia.org/wiki/Latent_semantic_analysis#Latent_semantic_indexing">latent semantic indexing</a>)
option. Also note GitHub Pages does not support the
<code>lsi</code> option when generating sites.
- name: site.static_files
description: >-
A list of all <a href="/docs/static-files/">static files</a> (i.e.
files not processed by Jekyll's converters or the Liquid renderer).
Each file has five properties: <code>path</code>, <code>modified_time</code>,
<code>name</code>, <code>basename</code> and <code>extname</code>.
- name: site.html_pages
description: >-
A subset of <code>site.pages</code> listing those which end in <code>.html</code>.
- name: site.html_files
description: >-
A subset of <code>site.static_files</code> listing those which end in <code>.html</code>.
- name: site.collections
description: >-
A list of all the collections (including posts).
- name: site.data
description: >-
A list containing the data loaded from the YAML files located in the <code>_data</code>
directory.
- name: site.documents
description: >-
A list of all the documents in every collection.
- name: site.categories.CATEGORY
description: >-
The list of all Posts in category <code>CATEGORY</code>.
- name: site.tags.TAG
description: >-
The list of all Posts with tag <code>TAG</code>.
- name: site.url
description: >-
Contains the url of your site as it is configured in the <code>_config.yml</code>.
For example, if you have <code>url: http://mysite.com</code> in your configuration file,
then it will be accessible in Liquid as <code>site.url</code>. For the development
environment there is <a href="/news/2016/10/06/jekyll-3-3-is-here/#3-siteurl-is-set-by-the-development-server">an
exception</a>, if you are running <code>jekyll serve</code> in a development environment
<code>site.url</code> will be set to the value of <code>host</code>, <code>port</code>,
and SSL-related options. This defaults to <code>url: http://localhost:4000</code>.
- name: "site.[CONFIGURATION_DATA]"
description: >-
All the variables set via the command line and your <code>_config.yml</code> are available
through the <code>site</code> variable. For example, if you have <code>foo: bar</code> in
your configuration file, then it will be accessible in Liquid as <code>site.foo</code>.
Jekyll does not parse changes to <code>_config.yml</code> in
<code>watch</code> mode, you must restart Jekyll to see changes to variables.
page:
- name: page.content
description: >-
The content of the Page, rendered or un-rendered depending upon
what Liquid is being processed and what <code>page</code> is.
- name: page.title
description: >-
The title of the Page.
- name: page.excerpt
description: >-
The un-rendered excerpt of a document.
- name: page.url
description: >-
The URL of the Post without the domain, but with a leading slash, e.g.
<code>/2008/12/14/my-post.html</code>
- name: page.date
description: >-
The Date assigned to the Post. This can be overridden in a Posts front matter by specifying
a new date/time in the format <code>YYYY-MM-DD HH:MM:SS</code> (assuming UTC), or
<code>YYYY-MM-DD HH:MM:SS +/-TTTT</code> (to specify a time zone using an offset from UTC.
e.g. <code>2008-12-14 10:30:00 +0900</code>).
- name: page.id
description: >-
An identifier unique to a document in a Collection or a Post (useful in RSS feeds). e.g.
<code>/2008/12/14/my-post</code><code>/my-collection/my-document</code>
- name: page.categories
description: >-
The list of categories to which this post belongs. Categories are derived from the directory
structure above the <code>_posts</code> directory. For example, a post at
<code>/work/code/_posts/2008-12-24-closures.md</code> would have this field set to
<code>['work', 'code']</code>. These can also be specified in the
<a href="/docs/front-matter/">front matter</a>.
- name: page.collection
description: >-
The label of the collection to which this document belongs. e.g. <code>posts</code> for a post, or
<code>puppies</code> for a document at path <code>_puppies/rover.md</code>. If not part of a
collection, an empty string is returned.
- name: page.tags
description: >-
The list of tags to which this post belongs. These can be specified in the
<a href="/docs/front-matter/">front matter</a>.
- name: page.dir
description: >-
The path between the source directory and the file of the post or page, e.g.
<code>/pages/</code>.
This can be overridden by <code>permalink</code> in the <a href="/docs/front-matter/">front matter</a>.
- name: page.name
description: >-
The filename of the post or page, e.g. <code>about.md</code>
- name: page.path
description: >-
The path to the raw post or page. Example usage: Linking back to the page or posts source
on GitHub. This can be overridden in the <a href="/docs/front-matter/">front matter</a>.
- name: page.next
description: >-
The next post relative to the position of the current post in <code>site.posts</code>.
Returns <code>nil</code> for the last entry.
- name: page.previous
description: >-
The previous post relative to the position of the current post in <code>site.posts</code>.
Returns <code>nil</code> for the first entry.
paginator:
- name: paginator.page
description: The number of the current page
- name: paginator.per_page
description: Number of posts per page
- name: paginator.posts
description: Posts available for the current page
- name: paginator.total_posts
description: Total number of posts
- name: paginator.total_pages
description: Total number of pages
- name: paginator.previous_page
description: >-
The number of the previous page, or <code>nil</code> if no previous page exists
- name: paginator.previous_page_path
description: >-
The path to the previous page, or <code>nil</code> if no previous page exists
- name: paginator.next_page
description: >-
The number of the next page, or <code>nil</code> if no subsequent page exists
- name: paginator.next_page_path
description: >-
The path to the next page, or <code>nil</code> if no subsequent page exists

View File

@@ -53,7 +53,7 @@
year: 2016
- speaker: Amy Johnston
twitter_handle: AmyJohnstonXL
twitter_handle: amybeukenex
youtube_id: HR12JiUI2Zc
topic: Jekyll for Technical Documentation
year: 2016
@@ -83,7 +83,7 @@
year: 2016
- speaker: Julio Faerman
twitter_handle: juliodevrel
twitter_handle: jmfaerman
youtube_id: SOMonG8Iqak
topic: Jekyll on AWS
year: 2016
@@ -131,7 +131,7 @@
year: 2016
- speaker: Nils Borchers
twitter_handle: nilsbo
twitter_handle: nilsborchers
youtube_id: DtNMjuv6Rbo
topic: Building a living brand guide with Jekyll and Hologram
year: 2016
@@ -165,45 +165,3 @@
youtube_id: nq1AUB72GCQ
topic: Overcoming challenges in using Jekyll for documentation projects
year: 2016
- speaker: Pieter Roozen
twitter_handle: Pieter_Roozen
youtube_id: moQP0SqEPsw
topic: Jekyll As An API Endpoint
year: 2019
- speaker: Chen Hui Jing
twitter_handle: hj_chen
youtube_id: CERXESTZ5w4
topic: Why I love Jekyll Data Files
year: 2019
- speaker: Chris Ferdinandi
twitter_handle: ChrisFerdinandi
youtube_id: vR1aI_kQ4-A
topic: The Lean Web
year: 2019
- speaker: Catherine Roebuck
twitter_handle:
youtube_id: zTAP1m1BaDM
topic: Jekyll For City Government
year: 2019
- speaker: Joost van der Schee
twitter_handle: jhvanderschee
youtube_id: ztJJ1GSlYgI
topic: "Jekyll Codex - Jekyll for front-end developers"
year: 2019
- speaker: Matthew Loberg
twitter_handle: mloberg
youtube_id: 6eiAjAtSGqw
topic: Leverage AWS S3 And CloudFront To Deploy Blazing Fast Jekyll Sites
year: 2019
- speaker: George Phillips
twitter_handle: gphillips_nz
youtube_id: nEvdOwFJBVc
topic: Structuring Jekyll Sites For Enterprise Design Systems
year: 2019

View File

@@ -1,15 +0,0 @@
- title: Home
link: /
show_on_mobile: true
- title: Docs
link: /docs/
show_on_mobile: true
- title: Resources
link: /resources/
show_on_mobile: true
- title: Showcase
link: /showcase/
show_on_mobile: false
- title: News
link: /news/
show_on_mobile: true

View File

@@ -1,3 +0,0 @@
min_version: 2.5.0
current_version: 3.1.1
current_version_output: ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236)

View File

@@ -1,322 +0,0 @@
- name: Tom Preston Werner Blog
url: http://tom.preston-werner.com/
image: tom-preston-werner.png
categories:
- personal
- blog
# - name: White House Social and Behavioral Sciences Team
# url: https://sbst.gov/
# image: sbst.png
# categories:
# - government
- name: SiteLeaf
url: https://siteleaf.com
image: siteleaf.png
categories:
- software
- marketing-site
- name: CloudCannon
url: https://cloudcannon.com/
image: cloudcannon.png
categories:
- software
- marketing-site
- name: Vesterheim Norwegian-American Museum
url: http://vesterheim.org/
image: vesterheim.png
categories:
- marketing-site
- name: KOTN
url: https://kotn.com/
image: kotn.png
categories:
- marketing-site
- name: MvvmCross
url: https://www.mvvmcross.com/
image: mvvm.png
categories:
- software
- marketing-site
- name: Vidgrid
url: https://www.vidgrid.com/
image: vidgrid.png
categories:
- software
- marketing-site
- name: Bitcoin
url: https://bitcoin.org/en/
image: bitcoin.png
categories:
- software
- marketing-site
- name: Mapwize
url: https://www.mapwize.io/
image: mapwize.png
categories:
- software
- marketing-site
- name: Auth0 Blog
url: https://auth0.com/blog/
image: auth0-blog.png
categories:
- software
- blog
- name: Freedom of Information Act
url: https://www.foia.gov/
image: foia-gov.png
categories:
- government
- name: "Art & About Sydney"
url: https://www.artandabout.com.au/
image: art-sydney.png
categories:
- government
- name: Passbolt Help
url: https://help.passbolt.com/
image: passbolt-help.png
categories:
- knowledgebase
- name: We are COLLINS
url: https://www.wearecollins.com/
image: collins.png
categories:
- agency
- name: Lightburn
url: https://lightburn.co/
image: lightburn.png
categories:
- agency
- name: italia.it
url: https://developers.italia.it/
image: italia-it.png
categories:
- community
- name: Sydney New Years Eve
url: https://www.sydneynewyearseve.com/
image: nsw.png
categories:
- government
- name: Login.gov
url: https://login.gov/
image: login-gov.png
categories:
- government
- name: plainlanguage.gov
url: https://plainlanguage.gov/
image: plainlanguage-gov.png
categories:
- government
- name: U.S. Web Design Standards
url: https://standards.usa.gov/
image: uswds.png
categories:
- government
- name: Grantmaker Search
url: https://www.grantmakers.io/
image: grantmakers.png
categories:
- marketing-site
- name: Rehan Butt
url: http://rehanbutt.com/
image: rehn.png
categories:
- personal
- portfolio
- name: The Markdown Guide
url: https://www.markdownguide.org/
image: markdown-guide.png
categories:
- knowledgebase
- name: Probot
url: https://probot.github.io/
image: probot.png
categories:
- documentation
- name: Matt Grey
url: https://himatt.com/
image: matt-grey.png
categories:
- personal
- portfolio
- name: Lattice
url: https://latticehq.com/
image: lattice.png
categories:
- software
- marketing-site
- name: MailTape
url: https://www.mailta.pe/
image: mailtape.png
categories:
- other
- name: Digital Democracy
url: http://www.digital-democracy.org/
image: digital-democracy.png
categories:
- other
- name: HTML Reference
url: http://htmlreference.io/
image: htmlreference.png
categories:
- documentation
- name: CSS Reference
url: http://cssreference.io/
image: cssreference.png
categories:
- documentation
- name: Chain
url: https://chain.com/
image: chain.png
categories:
- marketing-site
- name: IBM MobileFirst Foundation
url: https://mobilefirstplatform.ibmcloud.com/
image: ibm-mobile-foundation.png
categories:
- documentation
- name: "18F"
url: https://18f.gsa.gov/
image: 18f.png
categories:
- agency
- government
- name: Development Seed
url: https://developmentseed.org/
image: development-seed.png
categories:
- agency
- name: Isomer - Singapore Government Static Websites
url: https://isomer.gov.sg/
image: isomer.png
categories:
- government
- name: French Government Digital Services
url: https://beta.gouv.fr/
image: beta-gouv-fr.png
categories:
- government
- name: Paris Call for Trust and Security in Cyberspace
url: https://pariscall.international/
image: appel-de-paris.png
categories:
- government
- name: GitHub On Demand Training
url: https://services.github.com/on-demand/
image: github-learning-lab.png
categories:
- software
- knowledgebase
- name: TwitchCon
url: https://www.twitchcon.com/
image: twitchcon.png
categories:
- marketing-site
- conference
- name: UN World Statistics
url: https://worldstatisticsday.org
image: world-statistics-day.png
categories:
- government
- name: Netflix Devices
url: https://devices.netflix.com/en/
image: netflix.png
categories:
- marketing-site
- name: Twitch Developer Documentation
url: https://dev.twitch.tv/
image: twitch-developers.png
categories:
- marketing-site
- documentation
- name: Yeoman
url: http://yeoman.io/
image: yeoman.png
categories:
- open-source
- marketing-site
- name: Release Management Blog
url: https://release.mozilla.org/
image: mozilla-release-blog.png
categories:
- software
- blog
- name: frame.ai
url: https://frame.ai/
image: frame-ai.png
categories:
- software
- marketing-site
- name: Ionic Framework
url: https://ionicframework.com/
image: ionic-framework.png
categories:
- software
- marketing-site
- name: Spotify for Developers
url: https://developer.spotify.com
image: spotify-developers.png
categories:
- marketing-site
- documentation
- software
- name: Sketch
url: https://sketch.com/
image: sketch.png
categories:
- software
- marketing-site
- name: Ruby on Rails
url: http://rubyonrails.org/
image: ruby-on-rails.png
categories:
- marketing-site
- documentation

15
docs/_data/sponsors.yml Normal file
View File

@@ -0,0 +1,15 @@
- name: Forestry.io
image: /img/forestry-logo.png
url: https://forestry.io
width: 140
height: 30
- name: CloudCannon
image: /img/cloudcannon-logo.png
url: https://cloudcannon.com
width: 75
height: 30
- name: Siteleaf
image: /img/siteleaf-logo.png
url: https://siteleaf.com
width: 40
height: 50

View File

@@ -7,7 +7,6 @@
- custom-404-page
- convert-site-to-jekyll
- using-jekyll-with-bundler
- csv-to-table
#- title: Another section
# tutorials:

View File

@@ -3,11 +3,10 @@ title: Assets
permalink: /docs/assets/
---
Jekyll provides built-in support for [Sass](https://sass-lang.com/)
and can work with [CoffeeScript](https://coffeescript.org/) via a Ruby gem.
In order to use them, you must first create a file with the proper extension
name (one of `.sass`, `.scss`, or `.coffee`) and
***start the file with two lines of triple dashes***, like this:
Jekyll provides built-in support for Sass and can work with CoffeeScript via
a Ruby gem. In order to use them, you must first create a file with the
proper extension name (one of `.sass`, `.scss`, or `.coffee`) and ***start the
file with two lines of triple dashes***, like this:
```sass
---
@@ -28,7 +27,7 @@ will process it and put it in your site's destination folder under
<h5>Jekyll processes all Liquid filters and tags in asset files</h5>
<p>If you are using <a href="https://mustache.github.io">Mustache</a>
or another JavaScript templating language that conflicts with
the <a href="{{ '/docs/templates/' | relative_url }}">Liquid template syntax</a>, you
the <a href="/docs/templates/">Liquid template syntax</a>, you
will need to place <code>{&#37; raw &#37;}</code> and
<code>{&#37; endraw &#37;}</code> tags around your code.</p>
</div>
@@ -43,7 +42,8 @@ them to be in the output file, such as `<source>/css`. For an example, take
a look at [this example site using Sass support in Jekyll][example-sass].
If you are using Sass `@import` statements, you'll need to ensure that your
`sass_dir` is set to the base directory that contains your Sass files:
`sass_dir` is set to the base directory that contains your Sass files. You
can do that thusly:
```yaml
sass:
@@ -61,8 +61,8 @@ The Sass converter will default the `sass_dir` configuration option to
Note that the <code>sass_dir</code> becomes the load path for Sass imports,
nothing more. This means that Jekyll does not know about these files
directly. Any files here should not contain the empty front matter as
described above. If they do, they'll not be transformed as described above. This
directly, so any files here should not contain the YAML Front Matter as
described above nor will they be transformed as described above. This
folder should only contain imports.
</p>
@@ -79,7 +79,6 @@ sass:
These are passed to Sass, so any output style options Sass supports are valid
here, too.
For more information on Sass configuration options, see the [Sass configuration]({{ '/docs/configuration/sass/' | relative_url }}) docs.
## Coffeescript
@@ -90,5 +89,5 @@ To enable Coffeescript in Jekyll 3.0 and up you must
```yaml
plugins:
- jekyll-coffeescript
- jekyll-coffeescript
```

View File

@@ -1,47 +1,30 @@
---
title: Code of Conduct
permalink: "/docs/code_of_conduct/"
note: This file is autogenerated. Edit /.github/CODE_OF_CONDUCT.markdown instead.
note: This file is autogenerated. Edit /CODE_OF_CONDUCT.markdown instead.
redirect_from: "/conduct/index.html"
editable: false
---
## Our Pledge
As contributors and maintainers of this project, and in the interest of
fostering an open and welcoming community, we pledge to respect all people who
contribute through reporting issues, posting feature requests, updating
documentation, submitting pull requests or patches, and other activities.
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
We are committed to making participation in this project a harassment-free
experience for everyone, regardless of level of experience, gender, gender
identity and expression, sexual orientation, disability, personal appearance,
body size, race, ethnicity, age, religion, or nationality.
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* The use of sexualized language or imagery
* Personal attacks
* Trolling or insulting/derogatory comments
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
* Publishing other's private information, such as physical or electronic
addresses, without explicit permission
* Other unethical or unprofessional conduct
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
@@ -49,34 +32,24 @@ that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
By adopting this Code of Conduct, project maintainers commit themselves to
fairly and consistently applying these principles to every aspect of managing
this project. Project maintainers who do not follow or enforce the Code of
Conduct may be permanently removed from the project team.
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
when an individual is representing the project or its community.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
reported by opening an issue or contacting a project maintainer. All complaints
will be reviewed and investigated and will result in a response that is deemed
necessary and appropriate to the circumstances. Maintainers are obligated to
maintain confidentiality with regard to the reporter of an incident.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 1.3.0, available at
[http://contributor-covenant.org/version/1/3/0/][version]
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/3/0/

View File

@@ -3,33 +3,48 @@ title: Collections
permalink: /docs/collections/
---
Collections are a great way to group related content like members of a team or
talks at a conference.
Not everything is a post or a page. Maybe you want to document the various
methods in your open source project, members of a team, or talks at a
conference. Collections allow you to define a new type of document that behave
like Pages or Posts do normally, but also have their own unique properties and
namespace.
## Setup
## Using Collections
To use a Collection you first need to define it in your `_config.yml`. For
example here's a collection of staff members:
To start using collections, follow these 3 steps:
* [Step 1: Tell Jekyll to read in your collection](#step1)
* [Step 2: Add your content](#step2)
* [Step 3: Optionally render your collection's documents into independent files](#step3)
### Step 1: Tell Jekyll to read in your collection {#step1}
Add the following to your site's `_config.yml` file, replacing `my_collection`
with the name of your collection:
```yaml
collections:
- staff_members
- my_collection
```
In this case `collections` is defined as a sequence (i.e., array) with no additional metadata defined for each collection.
You can optionally specify metadata for your collection by defining `collections` as a mapping (i.e., hashmap) instead of sequence, and then defining additional fields in it:
You can optionally specify metadata for your collection in the configuration:
```yaml
collections:
staff_members:
people: true
my_collection:
foo: bar
```
{: .note .info}
When defining a collection as a sequence, its pages will not be rendered by
default. To enable this, <code>output: true</code> must be specified on the
collection, which requires defining the collection as a mapping. For more
information, see the section <a href="#output">Output</a>.
Default attributes can also be set for a collection:
```yaml
defaults:
- scope:
path: ""
type: my_collection
values:
layout: page
```
<div class="note">
<h5>Gather your collections {%- include docs_version_badge.html version="3.7.0" -%}</h5>
@@ -46,35 +61,12 @@ information, see the section <a href="#output">Output</a>.
<p>If you specify a directory to store all your collections in the same place with <code>collections_dir: my_collections</code>, then you will need to move your <code>_drafts</code> and <code>_posts</code> directory to <code>my_collections/_drafts</code> and <code>my_collections/_posts</code>. Note that, the name of your collections directory cannot start with an underscore (`_`).</p>
</div>
## Add content
### Step 2: Add your content {#step2}
Create a corresponding folder (e.g. `<source>/_staff_members`) and add
documents. Front matter is processed if the front matter exists, and everything
after the front matter is pushed into the document's `content` attribute. If no front
matter is provided, Jekyll will consider it to be a [static file]({{ '/docs/static-files/' | relative_url }})
and the contents will not undergo further processing. If front matter is provided,
Jekyll will process the file contents into the expected output.
Regardless of whether front matter exists or not, Jekyll will write to the destination
directory (e.g. `_site`) only if `output: true` has been set in the collection's
metadata.
For example here's how you would add a staff member to the collection set above.
The filename is `./_staff_members/jane.md` with the following content:
```markdown
---
name: Jane Doe
position: Developer
---
Jane has worked on Jekyll for the past *five years*.
```
<em>
Do note that in spite of being considered as a collection internally, the above
doesn't apply to [posts](/docs/posts/). Posts with a valid filename format will be
marked for processing even if they do not contain front matter.
</em>
Create a corresponding folder (e.g. `<source>/_my_collection`) and add
documents. YAML front matter is processed if the front matter exists, and everything
after the front matter is pushed into the document's `content` attribute. If no YAML front
matter is provided, Jekyll will not generate the file in your collection.
<div class="note info">
<h5>Be sure to name your directories correctly</h5>
@@ -84,108 +76,190 @@ your <code>_config.yml</code> file, with the addition of the preceding <code>_</
</p>
</div>
## Output
### Step 3: Optionally render your collection's documents into independent files {#step3}
Now you can iterate over `site.staff_members` on a page and output the content
for each staff member. Similar to posts, the body of the document is accessed
using the `content` variable:
{% raw %}
```liquid
{% for staff_member in site.staff_members %}
<h2>{{ staff_member.name }} - {{ staff_member.position }}</h2>
<p>{{ staff_member.content | markdownify }}</p>
{% endfor %}
```
{% endraw %}
If you'd like Jekyll to create a rendered page for each document in your
collection, you can set the `output` key to `true` in your collection
metadata in `_config.yml`:
If you'd like Jekyll to create a public-facing, rendered version of each
document in your collection, set the `output` key to `true` in your collection
metadata in your `_config.yml`:
```yaml
collections:
staff_members:
my_collection:
output: true
```
You can link to the generated page using the `url` attribute:
This will produce a file for each document in the collection.
For example, if you have `_my_collection/some_subdir/some_doc.md`,
it will be rendered using Liquid and the Markdown converter of your
choice and written out to `<dest>/my_collection/some_subdir/some_doc.html`.
If you wish a specific page to be shown when accessing `/my_collection/`,
simply add `permalink: /my_collection/index.html` to a page.
To list items from the collection, on that page or any other, you can use:
{% raw %}
```liquid
{% for staff_member in site.staff_members %}
<h2>
<a href="{{ staff_member.url }}">
{{ staff_member.name }} - {{ staff_member.position }}
</a>
</h2>
<p>{{ staff_member.content | markdownify }}</p>
{% for item in site.my_collection %}
<h2>{{ item.title }}</h2>
<p>{{ item.description }}</p>
<p><a href="{{ item.url }}">{{ item.title }}</a></p>
{% endfor %}
```
{% endraw %}
## Permalinks
<div class="note info">
<h5>Don't forget to add YAML for processing</h5>
<p>
Files in collections that do not have front matter are treated as
<a href="/docs/static-files">static files</a> and simply copied to their
output location without processing.
</p>
</div>
There are special [permalink variables for collections]({{ '/docs/permalinks/#collections' | relative_url }}) to
help you control the output url for the entire collection.
## Configuring permalinks for collections {#permalinks}
## Custom Sorting of Documents {%- include docs_version_badge.html version="4.0" -%}
{: #custom-sorting-of-documents}
By default, two documents in a collection are sorted by their `date` attribute when both of them have the `date` key in their front matter. However, if either or both documents do not have the `date` key in their front matter, they are sorted by their respective paths.
You can control this sorting via the collection's metadata.
### Sort By Front Matter Key
Documents can be sorted based on a front matter key by setting a `sort_by` metadata to the front matter key string. For example,
to sort a collection of tutorials based on key `lesson`, the configuration would be:
If you wish to specify a custom pattern for the URLs where your Collection pages
will reside, you may do so with the [`permalink` property](../permalinks/):
```yaml
collections:
tutorials:
sort_by: lesson
my_collection:
output: true
permalink: /:collection/:name
```
The documents are arranged in the increasing order of the key's value. If a document does not have the front matter key defined
then that document is placed immediately after sorted documents. When multiple documents do not have the front matter key defined,
those documents are sorted by their dates or paths and then placed immediately after the sorted documents.
### Examples
### Manually Ordering Documents
For a collection with the following source file structure,
You can also manually order the documents by setting an `order` metadata with **the filenames listed** in the desired order.
For example, a collection of tutorials would be configured as:
```yaml
collections:
tutorials:
order:
- hello-world.md
- introduction.md
- basic-concepts.md
- advanced-concepts.md
```
_my_collection/
└── some_subdir
└── some_doc.md
```
Any documents with filenames that do not match the list entry simply gets placed after the rearranged documents. If a document is
nested under subdirectories, include them in entries as well:
each of the following `permalink` configurations will produce the document structure shown below it.
```yaml
collections:
tutorials:
order:
- hello-world.md
- introduction.md
- concepts/basics.md
- concepts/advanced.md
```
* **Default**
Same as `permalink: /:collection/:path`.
If both metadata keys have been defined properly, `order` list takes precedence.
```
_site/
├── my_collection
│   └── some_subdir
│   └── some_doc.html
...
```
* `permalink: pretty`
Same as `permalink: /:collection/:path/`.
```
_site/
├── my_collection
│   └── some_subdir
│   └── some_doc
│   └── index.html
...
```
* `permalink: /doc/:path`
```
_site/
├── doc
│   └── some_subdir
│   └── some_doc.html
...
```
* `permalink: /doc/:name`
```
_site/
├── doc
│   └── some_doc.html
...
```
* `permalink: /:name`
```
_site/
├── some_doc.html
...
```
### Template Variables
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p><code>:collection</code></p>
</td>
<td>
<p>Label of the containing collection.</p>
</td>
</tr>
<tr>
<td>
<p><code>:path</code></p>
</td>
<td>
<p>Path to the document relative to the collection's directory.</p>
</td>
</tr>
<tr>
<td>
<p><code>:name</code></p>
</td>
<td>
<p>The document's base filename, with every sequence of spaces
and non-alphanumeric characters replaced by a hyphen.</p>
</td>
</tr>
<tr>
<td>
<p><code>:title</code></p>
</td>
<td>
<p>
The <code>:title</code> template variable will take the
<code>slug</code> <a href="/docs/frontmatter/">front matter</a>
variable value if any is present in the document; if none is
defined then <code>:title</code> will be equivalent to
<code>:name</code>, aka the slug generated from the filename.
</p>
</td>
</tr>
<tr>
<td>
<p><code>:output_ext</code></p>
</td>
<td>
<p>Extension of the output file. (Included by default and usually unnecessary.)</p>
</td>
</tr>
</tbody>
</table>
</div>
## Liquid Attributes
### Collections
Collections are also available under `site.collections`, with the metadata
Each collection is accessible as a field on the `site` variable. For example, if
you want to access the `albums` collection found in `_albums`, you'd use
`site.albums`.
Each collection is itself an array of documents (e.g., `site.albums` is an array of documents, much like `site.pages` and
`site.posts`). See the table below for how to access attributes of those documents.
The collections are also available under `site.collections`, with the metadata
you specified in your `_config.yml` (if present) and the following information:
<div class="mobile-side-scroller">
@@ -279,7 +353,7 @@ you specified in your `_config.yml` (if present) and the following information:
<p>Except for documents in hard-coded default collection <code>posts</code>, all documents in collections
you create, are accessible via Liquid irrespective of their assigned date, if any, and therefore renderable.
</p>
<p>Documents are attempted to be written to disk only if the concerned collection
<p>However documents are attempted to be written to disk only if the concerned collection
metadata has <code>output: true</code>. Additionally, future-dated documents are only written if
<code>site.future</code> <em>is also true</em>.
</p>
@@ -288,9 +362,10 @@ you specified in your `_config.yml` (if present) and the following information:
</p>
</div>
### Documents
In addition to any front matter provided in the document's corresponding
In addition to any YAML Front Matter provided in the document's corresponding
file, each document has the following attributes:
<div class="mobile-side-scroller">
@@ -308,9 +383,9 @@ file, each document has the following attributes:
</td>
<td>
<p>
The (unrendered) content of the document. If no front matter is
The (unrendered) content of the document. If no YAML Front Matter is
provided, Jekyll will not generate the file in your collection. If
front matter is used, then this is all the contents of the file
YAML Front Matter is used, then this is all the contents of the file
after the terminating
`---` of the front matter.
</p>
@@ -380,3 +455,51 @@ file, each document has the following attributes:
</tbody>
</table>
</div>
## Accessing Collection Attributes
Attributes from the YAML front matter can be accessed as data anywhere in the
site. Using the above example for configuring a collection as `site.albums`,
you might have front matter in an individual file structured as follows (which
must use a supported markup format, and cannot be saved with a `.yaml`
extension):
```yaml
title: "Josquin: Missa De beata virgine and Missa Ave maris stella"
artist: "The Tallis Scholars"
director: "Peter Phillips"
works:
- title: "Missa De beata virgine"
composer: "Josquin des Prez"
tracks:
- title: "Kyrie"
duration: "4:25"
- title: "Gloria"
duration: "9:53"
- title: "Credo"
duration: "9:09"
- title: "Sanctus & Benedictus"
duration: "7:47"
- title: "Agnus Dei I, II & III"
duration: "6:49"
```
Every album in the collection could be listed on a single page with a template:
```liquid
{% raw %}
{% for album in site.albums %}
<h2>{{ album.title }}</h2>
<p>Performed by {{ album.artist }}{% if album.director %}, directed by {{ album.director }}{% endif %}</p>
{% for work in album.works %}
<h3>{{ work.title }}</h3>
<p>Composed by {{ work.composer }}</p>
<ul>
{% for track in work.tracks %}
<li>{{ track.title }} ({{ track.duration }})</li>
{% endfor %}
</ul>
{% endfor %}
{% endfor %}
{% endraw %}
```

View File

@@ -1,8 +0,0 @@
---
title: Report a bug
permalink: "/docs/community/bug/"
---
If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository &mdash; First [look for the plugin on rubygems](https://rubygems.org/) then click on the `Homepage` link to access the plugin repository.
If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).

View File

@@ -1,44 +0,0 @@
---
title: Community
permalink: /docs/community/
redirect_from: "/help/index.html"
---
## Jekyll Contributor Code of Conduct
As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
Read the full [code of conduct]({{ '/docs/conduct/' | relative_url }})
## Reporting Security Vulnerabilities
Find something in our codebase that could be exploited by malicious elements?
Consult our [Security Policy]({{ '/docs/security/' | relative_url }}) to see if a product version is considered *outdated* and how to report
the situation responsibly.
## Where to get support
If you're looking for support for Jekyll, there are a lot of options:
* Read the [Jekyll Documentation]({{ '/docs/' | relative_url }})
* If you have a question about using Jekyll, start a discussion on the [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll)
* Chat with Jekyllers &mdash; Join our [Gitter channel](https://gitter.im/jekyll/jekyll) or our IRC channel #jekyll on [Libera](irc://irc.libera.chat/#jekyll).
There are a bunch of helpful community members on these services who are willing to point you in the right direction.
**Reminder: Jekyll's issue tracker is not a support forum.**
## Ways to contribute
* [How to Contribute]({{ '/docs/contributing/' | relative_url }})
* [How to file a bug]({{ '/docs/community/bug/' | relative_url }})
* [Guide for maintaining Jekyll]({{ '/docs/maintaining/' | relative_url }})
## Jekyllconf
[Watch videos]({{ '/jekyllconf/' | relative_url }}) from members of the Jekyll community speak about interesting use cases, tricks theyve learned or meta Jekyll topics.
## Jekyll on Twitter
The [official Jekyll Twitter account](https://twitter.com/jekyllrb).

View File

@@ -6,42 +6,25 @@ redirect_from: "/conduct/index.html"
editable: false
---
## Our Pledge
As contributors and maintainers of this project, and in the interest of
fostering an open and welcoming community, we pledge to respect all people who
contribute through reporting issues, posting feature requests, updating
documentation, submitting pull requests or patches, and other activities.
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
We are committed to making participation in this project a harassment-free
experience for everyone, regardless of level of experience, gender, gender
identity and expression, sexual orientation, disability, personal appearance,
body size, race, ethnicity, age, religion, or nationality.
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* The use of sexualized language or imagery
* Personal attacks
* Trolling or insulting/derogatory comments
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
* Publishing other's private information, such as physical or electronic
addresses, without explicit permission
* Other unethical or unprofessional conduct
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
@@ -49,34 +32,24 @@ that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
By adopting this Code of Conduct, project maintainers commit themselves to
fairly and consistently applying these principles to every aspect of managing
this project. Project maintainers who do not follow or enforce the Code of
Conduct may be permanently removed from the project team.
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
when an individual is representing the project or its community.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
reported by opening an issue or contacting a project maintainer. All complaints
will be reviewed and investigated and will result in a response that is deemed
necessary and appropriate to the circumstances. Maintainers are obligated to
maintain confidentiality with regard to the reporter of an incident.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 1.3.0, available at
[http://contributor-covenant.org/version/1/3/0/][version]
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/3/0/

View File

@@ -3,17 +3,831 @@ title: Configuration
permalink: /docs/configuration/
---
Jekyll gives you a lot of flexibility to customize how it builds your site. These
options can either be specified in a `_config.yml` or `_config.toml` file placed
in your sites root directory, or can be specified as flags for the `jekyll`
executable in the terminal.
Jekyll allows you to concoct your sites in any way you can dream up, and its
thanks to the powerful and flexible configuration options that this is possible.
These options can either be specified in a `_config.yml` file placed in your
sites root directory, or can be specified as flags for the `jekyll` executable
in the terminal.
* [Configuration Options]({{ '/docs/configuration/options/' | relative_url }})
* [Default Configuration]({{ '/docs/configuration/default/' | relative_url }})
* [Front Matter Defaults]({{ '/docs/configuration/front-matter-defaults/' | relative_url }})
* [Environments]({{ '/docs/configuration/environments/' | relative_url }})
* [Markdown Options]({{ '/docs/configuration/markdown/' | relative_url }})
* [Liquid Options]({{ '/docs/configuration/liquid/' | relative_url }})
* [Sass/SCSS Options]({{ '/docs/configuration/sass/' | relative_url }})
* [Webrick Options]({{ '/docs/configuration/webrick/' | relative_url }})
* [Incremental Regeneration]({{ '/docs/configuration/incremental-regeneration/' | relative_url }})
## Configuration Settings
### Global Configuration
The table below lists the available settings for Jekyll, and the various <code
class="option">options</code> (specified in the configuration file) and <code
class="flag">flags</code> (specified on the command-line) that control them.
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th>
<span class="option">Options</span> and <span class="flag">Flags</span>
</th>
</tr>
</thead>
<tbody>
<tr class="setting">
<td>
<p class="name"><strong>Site Source</strong></p>
<p class="description">Change the directory where Jekyll will read files</p>
</td>
<td class="align-center">
<p><code class="option">source: DIR</code></p>
<p><code class="flag">-s, --source DIR</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Site Destination</strong></p>
<p class="description">Change the directory where Jekyll will write files</p>
</td>
<td class="align-center">
<p><code class="option">destination: DIR</code></p>
<p><code class="flag">-d, --destination DIR</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Safe</strong></p>
<p class="description">Disable <a href="../plugins/">custom plugins, and ignore symbolic links</a>.</p>
</td>
<td class="align-center">
<p><code class="option">safe: BOOL</code></p>
<p><code class="flag">--safe</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Exclude</strong></p>
<p class="description">
Exclude directories and/or files from the
conversion. These exclusions are relative to the site's
source directory and cannot be outside the source directory.
</p>
</td>
<td class="align-center">
<p><code class="option">exclude: [DIR, FILE, ...]</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Include</strong></p>
<p class="description">
Force inclusion of directories and/or files in the conversion.
<code>.htaccess</code> is a good example since dotfiles are excluded
by default.
</p>
</td>
<td class="align-center">
<p><code class="option">include: [DIR, FILE, ...]</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Keep files</strong></p>
<p class="description">
When clobbering the site destination, keep the selected files.
Useful for files that are not generated by jekyll; e.g. files or
assets that are generated by your build tool.
The paths are relative to the <code>destination</code>.
</p>
</td>
<td class="align-center">
<p><code class="option">keep_files: [DIR, FILE, ...]</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Time Zone</strong></p>
<p class="description">
Set the time zone for site generation. This sets the <code>TZ</code>
environment variable, which Ruby uses to handle time and date
creation and manipulation. Any entry from the
<a href="https://en.wikipedia.org/wiki/Tz_database">IANA Time Zone
Database</a> is valid, e.g. <code>America/New_York</code>. A list of all
available values can be found <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">
here</a>. When serving on a local machine, the default time zone is set by your operating system. But when served on a remote host/server, the default time zone depends on the server's setting or location.
</p>
</td>
<td class="align-center">
<p><code class="option">timezone: TIMEZONE</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Encoding</strong></p>
<p class="description">
Set the encoding of files by name (only available for Ruby
1.9 or later).
The default value is <code>utf-8</code> starting in 2.0.0,
and <code>nil</code> before 2.0.0, which will yield the Ruby
default of <code>ASCII-8BIT</code>.
Available encodings can be shown by the
command <code>ruby -e 'puts Encoding::list.join("\n")'</code>.
</p>
</td>
<td class="align-center">
<p><code class="option">encoding: ENCODING</code></p>
</td>
</tr>
<tr>
<td>
<p class='name'><strong>Defaults</strong></p>
<p class='description'>
Set defaults for <a href="../frontmatter/" title="YAML Front Matter">YAML Front Matter</a>
variables.
</p>
</td>
<td class='align-center'>
<p>see <a href="#front-matter-defaults" title="details">below</a></p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note warning">
<h5>Destination folders are cleaned on site builds</h5>
<p>
The contents of <code>&lt;destination&gt;</code> are automatically
cleaned, by default, when the site is built. Files or folders that are not
created by your site will be removed. Some files could be retained
by specifying them within the <code>&lt;keep_files&gt;</code> configuration directive.
</p>
<p>
Do not use an important location for <code>&lt;destination&gt;</code>; instead, use it as
a staging area and copy files from there to your web server.
</p>
</div>
### Build Command Options
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th><span class="option">Options</span> and <span class="flag">Flags</span></th>
</tr>
</thead>
<tbody>
<tr class="setting">
<td>
<p class="name"><strong>Regeneration</strong></p>
<p class="description">Enable auto-regeneration of the site when files are modified.</p>
</td>
<td class="align-center">
<p><code class="flag">-w, --[no-]watch</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Configuration</strong></p>
<p class="description">Specify config files instead of using <code>_config.yml</code> automatically. Settings in later files override settings in earlier files.</p>
</td>
<td class="align-center">
<p><code class="flag">--config FILE1[,FILE2,...]</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Drafts</strong></p>
<p class="description">Process and render draft posts.</p>
</td>
<td class="align-center">
<p><code class="option">show_drafts: BOOL</code></p>
<p><code class="flag">--drafts</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Environment</strong></p>
<p class="description">Use a specific environment value in the build.</p>
</td>
<td class="align-center">
<p><code class="flag">JEKYLL_ENV=production</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Future</strong></p>
<p class="description">Publish posts or collection documents with a future date.</p>
</td>
<td class="align-center">
<p><code class="option">future: BOOL</code></p>
<p><code class="flag">--future</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Unpublished</strong></p>
<p class="description">Render posts that were marked as unpublished.</p>
</td>
<td class="align-center">
<p><code class="option">unpublished: BOOL</code></p>
<p><code class="flag">--unpublished</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>LSI</strong></p>
<p class="description">Produce an index for related posts. Requires the <a href="http://www.classifier-reborn.com/">classifier-reborn</a> plugin.</p>
</td>
<td class="align-center">
<p><code class="option">lsi: BOOL</code></p>
<p><code class="flag">--lsi</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Limit Posts</strong></p>
<p class="description">Limit the number of posts to parse and publish.</p>
</td>
<td class="align-center">
<p><code class="option">limit_posts: NUM</code></p>
<p><code class="flag">--limit_posts NUM</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Force polling</strong></p>
<p class="description">Force watch to use polling.</p>
</td>
<td class="align-center">
<p><code class="flag">--force_polling</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Verbose output</strong></p>
<p class="description">Print verbose output.</p>
</td>
<td class="align-center">
<p><code class="flag">-V, --verbose</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Silence Output</strong></p>
<p class="description">Silence the normal output from Jekyll
during a build</p>
</td>
<td class="align-center">
<p><code class="flag">-q, --quiet</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Incremental build</strong></p>
<p class="description">
Enable the experimental incremental build feature. Incremental build only
re-builds posts and pages that have changed, resulting in significant performance
improvements for large sites, but may also break site generation in certain
cases.
</p>
</td>
<td class="align-center">
<p><code class="option">incremental: BOOL</code></p>
<p><code class="flag">-I, --incremental</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Liquid profiler</strong></p>
<p class="description">
Generate a Liquid rendering profile to help you identify performance bottlenecks.
</p>
</td>
<td class="align-center">
<p><code class="option">profile: BOOL</code></p>
<p><code class="flag">--profile</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Strict Front Matter</strong></p>
<p class="description">
Cause a build to fail if there is a YAML syntax error in a page's front matter.
</p>
</td>
<td class="align-center">
<p><code class="option">strict_front_matter: BOOL</code></p>
<p><code class="flag">--strict_front_matter</code></p>
</td>
</tr>
</tbody>
</table>
</div>
### Serve Command Options
In addition to the options below, the `serve` sub-command can accept any of the options
for the `build` sub-command, which are then applied to the site build which occurs right
before your site is served.
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th><span class="option">Options</span> and <span class="flag">Flags</span></th>
</tr>
</thead>
<tbody>
<tr class="setting">
<td>
<p class="name"><strong>Local Server Port</strong></p>
<p class="description">Listen on the given port.</p>
</td>
<td class="align-center">
<p><code class="option">port: PORT</code></p>
<p><code class="flag">--port PORT</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Local Server Hostname</strong></p>
<p class="description">Listen at the given hostname.</p>
</td>
<td class="align-center">
<p><code class="option">host: HOSTNAME</code></p>
<p><code class="flag">--host HOSTNAME</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Base URL</strong></p>
<p class="description">Serve the website from the given base URL</p>
</td>
<td class="align-center">
<p><code class="option">baseurl: URL</code></p>
<p><code class="flag">--baseurl URL</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Detach</strong></p>
<p class="description">Detach the server from the terminal</p>
</td>
<td class="align-center">
<p><code class="option">detach: BOOL</code></p>
<p><code class="flag">-B, --detach</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>Skips the initial site build.</strong></p>
<p class="description">Skips the initial site build which occurs before the server is started.</p>
</td>
<td class="align-center">
<p><code class="flag">--skip-initial-build</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>X.509 (SSL) Private Key</strong></p>
<p class="description">SSL Private Key.</p>
</td>
<td class="align-center">
<p><code class="flag">--ssl-key</code></p>
</td>
</tr>
<tr class="setting">
<td>
<p class="name"><strong>X.509 (SSL) Certificate</strong></p>
<p class="description">SSL Public certificate.</p>
</td>
<td class="align-center">
<p><code class="flag">--ssl-cert</code></p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note warning">
<h5>Do not use tabs in configuration files</h5>
<p>
This will either lead to parsing errors, or Jekyll will revert to the
default settings. Use spaces instead.
</p>
</div>
## Custom WEBrick Headers
You can provide custom headers for your site by adding them to `_config.yml`
```yaml
# File: _config.yml
webrick:
headers:
My-Header: My-Value
My-Other-Header: My-Other-Value
```
### Defaults
We provide by default `Content-Type` and `Cache-Control` response headers: one
dynamic in order to specify the nature of the data being served, the other
static in order to disable caching so that you don't have to fight with Chrome's
aggressive caching when you are in development mode.
## Specifying a Jekyll environment at build time
In the build (or serve) arguments, you can specify a Jekyll environment and value. The build will then apply this value in any conditional statements in your content.
For example, suppose you set this conditional statement in your code:
```liquid
{% raw %}
{% if jekyll.environment == "production" %}
{% include disqus.html %}
{% endif %}
{% endraw %}
```
When you build your Jekyll site, the content inside the `if` statement won't be run unless you also specify a `production` environment in the build command, like this:
```sh
JEKYLL_ENV=production jekyll build
```
Specifying an environment value allows you to make certain content available only within specific environments.
The default value for `JEKYLL_ENV` is `development`. Therefore if you omit `JEKYLL_ENV` from the build arguments, the default value will be `JEKYLL_ENV=development`. Any content inside `{% raw %}{% if jekyll.environment == "development" %}{% endraw %}` tags will automatically appear in the build.
Your environment values can be anything you want (not just `development` or `production`). Some elements you might want to hide in development environments include Disqus comment forms or Google Analytics. Conversely, you might want to expose an "Edit me in GitHub" button in a development environment but not include it in production environments.
By specifying the option in the build command, you avoid having to change values in your configuration files when moving from one environment to another.
## Front Matter defaults
Using [YAML Front Matter](../frontmatter/) is one way that you can specify configuration in the pages and posts for your site. Setting things like a default layout, or customizing the title, or specifying a more precise date/time for the post can all be added to your page or post front matter.
Often times, you will find that you are repeating a lot of configuration options. Setting the same layout in each file, adding the same category - or categories - to a post, etc. You can even add custom variables like author names, which might be the same for the majority of posts on your blog.
Instead of repeating this configuration each time you create a new post or page, Jekyll provides a way to set these defaults in the site configuration. To do this, you can specify site-wide defaults using the `defaults` key in the `_config.yml` file in your project's root directory.
The `defaults` key holds an array of scope/values pairs that define what defaults should be set for a particular file path, and optionally, a file type in that path.
Let's say that you want to add a default layout to all pages and posts in your site. You would add this to your `_config.yml` file:
```yaml
defaults:
-
scope:
path: "" # an empty string here means all files in the project
values:
layout: "default"
```
<div class="note info">
<h5>Please stop and rerun `jekyll serve` command.</h5>
<p>
The <code>_config.yml</code> master configuration file contains global configurations
and variable definitions that are read once at execution time. Changes made to <code>_config.yml</code>
during automatic regeneration are not loaded until the next execution.
</p>
<p>
Note <a href="../datafiles">Data Files</a> are included and reloaded during automatic regeneration.
</p>
</div>
Here, we are scoping the `values` to any file that exists in the path `scope`. Since the path is set as an empty string, it will apply to **all files** in your project. You probably don't want to set a layout on every file in your project - like css files, for example - so you can also specify a `type` value under the `scope` key.
```yaml
defaults:
-
scope:
path: "" # an empty string here means all files in the project
type: "posts" # previously `post` in Jekyll 2.2.
values:
layout: "default"
```
Now, this will only set the layout for files where the type is `posts`.
The different types that are available to you are `pages`, `posts`, `drafts` or any collection in your site. While `type` is optional, you must specify a value for `path` when creating a `scope/values` pair.
As mentioned earlier, you can set multiple scope/values pairs for `defaults`.
```yaml
defaults:
-
scope:
path: ""
type: "pages"
values:
layout: "my-site"
-
scope:
path: "projects"
type: "pages" # previously `page` in Jekyll 2.2.
values:
layout: "project" # overrides previous default layout
author: "Mr. Hyde"
```
With these defaults, all pages would use the `my-site` layout. Any html files that exist in the `projects/` folder will use the `project` layout, if it exists. Those files will also have the `page.author` [liquid variable](../variables/) set to `Mr. Hyde`.
```yaml
collections:
my_collection:
output: true
defaults:
-
scope:
path: ""
type: "my_collection" # a collection in your site, in plural form
values:
layout: "default"
```
In this example, the `layout` is set to `default` inside the
[collection](../collections/) with the name `my_collection`.
### Glob patterns in Front Matter defaults
It is also possible to use glob patterns (currently limited to patterns that contain `*`) when matching defaults. For example, it is possible to set specific layout for each `special-page.html` in any subfolder of `section` folder. {%- include docs_version_badge.html version="3.7.0" -%}
```yaml
collections:
my_collection:
output: true
defaults:
-
scope:
path: "section/*/special-page.html"
values:
layout: "specific-layout"
```
<div class="note warning">
<h5>Globbing and Performance</h5>
<p>
Please note that globbing a path is known to have a negative effect on
performance and is currently not optimized, especially on Windows.
Globbing a path will increase your build times in proportion to the size
of the associated collection directory.
</p>
</div>
### Precedence
Jekyll will apply all of the configuration settings you specify in the `defaults` section of your `_config.yml` file. However, you can choose to override settings from other scope/values pair by specifying a more specific path for the scope.
You can see that in the second to last example above. First, we set the default page layout to `my-site`. Then, using a more specific path, we set the default layout for pages in the `projects/` path to `project`. This can be done with any value that you would set in the page or post front matter.
Finally, if you set defaults in the site configuration by adding a `defaults` section to your `_config.yml` file, you can override those settings in a post or page file. All you need to do is specify the settings in the post or page front matter. For example:
```yaml
# In _config.yml
...
defaults:
-
scope:
path: "projects"
type: "pages"
values:
layout: "project"
author: "Mr. Hyde"
category: "project"
...
```
```yaml
# In projects/foo_project.md
---
author: "John Smith"
layout: "foobar"
---
The post text goes here...
```
The `projects/foo_project.md` would have the `layout` set to `foobar` instead
of `project` and the `author` set to `John Smith` instead of `Mr. Hyde` when
the site is built.
## Default Configuration
Jekyll runs with the following configuration options by default. Alternative
settings for these options can be explicitly specified in the configuration
file or on the command-line.
<div class="note warning">
<h5>There are two unsupported kramdown options</h5>
<p>
Please note that both <code>remove_block_html_tags</code> and
<code>remove_span_html_tags</code> are currently unsupported in Jekyll due
to the fact that they are not included within the kramdown HTML converter.
</p>
</div>
```yaml
# Where things are
source: .
destination: ./_site
collections_dir: .
plugins_dir: _plugins
layouts_dir: _layouts
data_dir: _data
includes_dir: _includes
collections:
posts:
output: true
# Handling Reading
safe: false
include: [".htaccess"]
exclude: ["Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"]
keep_files: [".git", ".svn"]
encoding: "utf-8"
markdown_ext: "markdown,mkdown,mkdn,mkd,md"
strict_front_matter: false
# Filtering Content
show_drafts: null
limit_posts: 0
future: false
unpublished: false
# Plugins
whitelist: []
plugins: []
# Conversion
markdown: kramdown
highlighter: rouge
lsi: false
excerpt_separator: "\n\n"
incremental: false
# Serving
detach: false
port: 4000
host: 127.0.0.1
baseurl: "" # does not include hostname
show_dir_listing: false
# Outputting
permalink: date
paginate_path: /page:num
timezone: null
quiet: false
verbose: false
defaults: []
liquid:
error_mode: warn
strict_filters: false
strict_variables: false
# Markdown Processors
rdiscount:
extensions: []
redcarpet:
extensions: []
kramdown:
auto_ids: true
entity_output: as_char
toc_levels: 1..6
smart_quotes: lsquo,rsquo,ldquo,rdquo
input: GFM
hard_wrap: false
footnote_nr: 1
show_warnings: false
```
## Liquid Options
Liquid's response to errors can be configured by setting `error_mode`. The
options are
- `lax` --- Ignore all errors.
- `warn` --- Output a warning on the console for each error.
- `strict` --- Output an error message and stop the build.
You can also configure Liquid's renderer to catch non-assigned variables and
non-existing filters by setting `strict_variables` and / or `strict_filters`
to `true` respectively. {% include docs_version_badge.html version="3.8.0" %}
Do note that while `error_mode` configures Liquid's parser, the `strict_variables`
and `strict_filters` options configure Liquid's renderer and are consequently,
mutually exclusive.
## Markdown Options
The various Markdown renderers supported by Jekyll sometimes have extra options
available.
### Redcarpet
Redcarpet can be configured by providing an `extensions` sub-setting, whose
value should be an array of strings. Each string should be the name of one of
the `Redcarpet::Markdown` class's extensions; if present in the array, it will
set the corresponding extension to `true`.
Jekyll handles two special Redcarpet extensions:
- `no_fenced_code_blocks` --- By default, Jekyll sets the `fenced_code_blocks`
extension (for delimiting code blocks with triple tildes or triple backticks)
to `true`, probably because GitHub's eager adoption of them is starting to make
them inescapable. Redcarpet's normal `fenced_code_blocks` extension is inert
when used with Jekyll; instead, you can use this inverted version of the
extension for disabling fenced code.
Note that you can also specify a language for highlighting after the first
delimiter:
```ruby
# ...ruby code
```
With both fenced code blocks and highlighter enabled, this will statically
highlight the code; without any syntax highlighter, it will add a
`class="LANGUAGE"` attribute to the `<code>` element, which can be used as a
hint by various JavaScript code highlighting libraries.
- `smart` --- This pseudo-extension turns on SmartyPants, which converts
straight quotes to curly quotes and runs of hyphens to em (`---`) and en (`--`) dashes.
All other extensions retain their usual names from Redcarpet, and no renderer
options aside from `smart` can be specified in Jekyll. [A list of available
extensions can be found in the Redcarpet README file.][redcarpet_extensions]
Make sure you're looking at the README for the right version of
Redcarpet: Jekyll currently uses v3.2.x. The most commonly used
extensions are:
- `tables`
- `no_intra_emphasis`
- `autolink`
[redcarpet_extensions]: https://github.com/vmg/redcarpet/blob/v3.2.2/README.markdown#and-its-like-really-simple-to-use
### Custom Markdown Processors
If you're interested in creating a custom markdown processor, you're in luck! Create a new class in the `Jekyll::Converters::Markdown` namespace:
```ruby
class Jekyll::Converters::Markdown::MyCustomProcessor
def initialize(config)
require 'funky_markdown'
@config = config
rescue LoadError
STDERR.puts 'You are missing a library required for Markdown. Please run:'
STDERR.puts ' $ [sudo] gem install funky_markdown'
raise FatalException.new("Missing dependency: funky_markdown")
end
def convert(content)
::FunkyMarkdown.new(content).convert
end
end
```
Once you've created your class and have it properly set up either as a plugin
in the `_plugins` folder or as a gem, specify it in your `_config.yml`:
```yaml
markdown: MyCustomProcessor
```
## Incremental Regeneration
<div class="note warning">
<h5>Incremental regeneration is still an experimental feature</h5>
<p>
While incremental regeneration will work for the most common cases, it will
not work correctly in every scenario. Please be extremely cautious when
using the feature, and report any problems not listed below by
<a href="https://github.com/jekyll/jekyll/issues/new">opening an issue on GitHub</a>.
</p>
</div>
Incremental regeneration helps shorten build times by only generating documents
and pages that were updated since the previous build. It does this by keeping
track of both file modification times and inter-document dependencies in the
`.jekyll-metadata` file.
Under the current implementation, incremental regeneration will only generate a
document or page if either it, or one of its dependencies, is modified. Currently,
the only types of dependencies tracked are includes (using the
{% raw %}`{% include %}`{% endraw %} tag) and layouts. This means that plain
references to other documents (for example, the common case of iterating over
`site.posts` in a post listings page) will not be detected as a dependency.
To remedy some of these shortfalls, putting `regenerate: true` in the front-matter
of a document will force Jekyll to regenerate it regardless of whether it has been
modified. Note that this will generate the specified document only; references
to other documents' contents will not work since they won't be re-rendered.
Incremental regeneration can be enabled via the `--incremental` flag (`-I` for
short) from the command-line or by setting `incremental: true` in your
configuration file.

View File

@@ -1,89 +0,0 @@
---
title: Default Configuration
permalink: "/docs/configuration/default/"
---
Jekyll runs with the following configuration options by default. Alternative
settings for these options can be explicitly specified in the configuration
file or on the command-line.
<div class="note info">
<h5>Be aware of directory paths</h5>
<p>
In general, make directory path values in configuration keys like <code>plugins_dir</code> relative to the current working directory, not the site source. The <code>sass</code> configuration key is an exception, where values must be relative to the site source.
</p>
</div>
```yaml
# Where things are
source : .
destination : ./_site
collections_dir : .
plugins_dir : _plugins # takes an array of strings and loads plugins in that order
layouts_dir : _layouts
data_dir : _data
includes_dir : _includes
sass:
sass_dir: _sass
collections:
posts:
output : true
# Handling Reading
safe : false
include : [".htaccess"]
exclude : ["Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"]
keep_files : [".git", ".svn"]
encoding : "utf-8"
markdown_ext : "markdown,mkdown,mkdn,mkd,md"
strict_front_matter : false
# Filtering Content
show_drafts : null
limit_posts : 0
future : false
unpublished : false
# Plugins
whitelist : []
plugins : []
# Conversion
markdown : kramdown
highlighter : rouge
lsi : false
excerpt_separator : "\n\n"
incremental : false
# Serving
detach : false
port : 4000
host : 127.0.0.1
baseurl : "" # does not include hostname
show_dir_listing : false
# Outputting
permalink : date
paginate_path : /page:num
timezone : null
quiet : false
verbose : false
defaults : []
liquid:
error_mode : warn
strict_filters : false
strict_variables : false
# Markdown Processors
kramdown:
auto_ids : true
entity_output : as_char
toc_levels : [1, 2, 3, 4, 5, 6]
smart_quotes : lsquo,rsquo,ldquo,rdquo
input : GFM
hard_wrap : false
footnote_nr : 1
show_warnings : false
```

View File

@@ -1,49 +0,0 @@
---
title: Environments
permalink: "/docs/configuration/environments/"
---
In the `build` (or `serve`) arguments, you can specify a Jekyll environment
and value. The build will then apply this value in any conditional statements
in your content.
For example, suppose you set this conditional statement in your code:
{% raw %}
```liquid
{% if jekyll.environment == "production" %}
{% include disqus.html %}
{% endif %}
```
{% endraw %}
When you build your Jekyll site, the content inside the `if` statement won't be
run unless you also specify a `production` environment in the build command,
like this:
```sh
JEKYLL_ENV=production jekyll build
```
Specifying an environment value allows you to make certain content available
only within specific environments.
The default value for `JEKYLL_ENV` is `development`. Therefore if you omit
`JEKYLL_ENV` from the build arguments, the default value will be
`JEKYLL_ENV=development`. Any content inside
{% raw %}`{% if jekyll.environment == "development" %}`{% endraw %} tags will
automatically appear in the build.
Your environment values can be anything you want (not just `development` or
`production`). Some elements you might want to hide in development
environments include Disqus comment forms or Google Analytics. Conversely,
you might want to expose an "Edit me in GitHub" button in a development
environment but not include it in production environments.
By specifying the option in the build command, you avoid having to change
values in your configuration files when moving from one environment to another.
{: .note}
To switch part of your config settings depending on the environment, use the
<a href="{{ '/docs/configuration/options/#build-command-options' | relative_url }}">build command option</a>,
for example <code>--config _config.yml,_config_development.yml</code>. Settings
in later files override settings in earlier files.

View File

@@ -1,153 +0,0 @@
---
title: Front Matter Defaults
permalink: "/docs/configuration/front-matter-defaults/"
---
Using [front matter](/docs/front-matter/) is one way that you can specify configuration in the pages and posts for your site. Setting things like a default layout, or customizing the title, or specifying a more precise date/time for the post can all be added to your page or post front matter.
Often times, you will find that you are repeating a lot of configuration options. Setting the same layout in each file, adding the same category - or categories - to a post, etc. You can even add custom variables like author names, which might be the same for the majority of posts on your blog.
Instead of repeating this configuration each time you create a new post or page, Jekyll provides a way to set these defaults in the site configuration. To do this, you can specify site-wide defaults using the `defaults` key in the `_config.yml` file in your project's root directory.
The `defaults` key holds an array of scope/values pairs that define what defaults should be set for a particular file path, and optionally, a file type in that path.
Let's say that you want to add a default layout to all pages and posts in your site. You would add this to your `_config.yml` file:
```yaml
defaults:
-
scope:
path: "" # an empty string here means all files in the project
values:
layout: "default"
```
<div class="note info">
<h5>Stop and rerun `jekyll serve` command.</h5>
<p>
The <code>_config.yml</code> master configuration file contains global configurations
and variable definitions that are read once at execution time. Changes made to <code>_config.yml</code>
during automatic regeneration are not loaded until the next execution.
</p>
<p>
Note <a href="{{ '/docs/datafiles/' | relative_url }}">Data Files</a> are included and reloaded during automatic regeneration.
</p>
</div>
Here, we are scoping the `values` to any file that exists in the path `scope`. Since the path is set as an empty string, it will apply to **all files** in your project. You probably don't want to set a layout on every file in your project - like css files, for example - so you can also specify a `type` value under the `scope` key.
```yaml
defaults:
-
scope:
path: "" # an empty string here means all files in the project
type: "posts" # previously `post` in Jekyll 2.2.
values:
layout: "default"
```
Now, this will only set the layout for files where the type is `posts`.
The different types that are available to you are `pages`, `posts`, `drafts` or any collection in your site. While `type` is optional, you must specify a value for `path` when creating a `scope/values` pair.
As mentioned earlier, you can set multiple scope/values pairs for `defaults`.
```yaml
defaults:
-
scope:
path: ""
type: "pages"
values:
layout: "my-site"
-
scope:
path: "projects"
type: "pages" # previously `page` in Jekyll 2.2.
values:
layout: "project" # overrides previous default layout
author: "Mr. Hyde"
```
With these defaults, all pages would use the `my-site` layout. Any html files that exist in the `projects/`
folder will use the `project` layout, if it exists. Those files will also have the `page.author`
[liquid variable]({{ '/docs/variables/' | relative_url }}) set to `Mr. Hyde`.
```yaml
collections:
my_collection:
output: true
defaults:
-
scope:
path: ""
type: "my_collection" # a collection in your site, in plural form
values:
layout: "default"
```
In this example, the `layout` is set to `default` inside the
[collection]({{ '/docs/collections/' | relative_url }}) with the name `my_collection`.
### Glob patterns in Front Matter defaults
It is also possible to use glob patterns (currently limited to patterns that contain `*`) when matching defaults. For example, it is possible to set specific layout for each `special-page.html` in any subfolder of `section` folder. {%- include docs_version_badge.html version="3.7.0" -%}
```yaml
collections:
my_collection:
output: true
defaults:
-
scope:
path: "section/*/special-page.html"
values:
layout: "specific-layout"
```
<div class="note warning">
<h5>Globbing and Performance</h5>
<p>
Please note that globbing a path is known to have a negative effect on
performance and is currently not optimized, especially on Windows.
Globbing a path will increase your build times in proportion to the size
of the associated collection directory.
</p>
</div>
### Precedence
Jekyll will apply all of the configuration settings you specify in the `defaults` section of your `_config.yml` file. You can choose to override settings from other scope/values pair by specifying a more specific path for the scope.
You can see that in the second to last example above. First, we set the default page layout to `my-site`. Then, using a more specific path, we set the default layout for pages in the `projects/` path to `project`. This can be done with any value that you would set in the page or post front matter.
Finally, if you set defaults in the site configuration by adding a `defaults` section to your `_config.yml` file, you can override those settings in a post or page file. All you need to do is specify the settings in the post or page front matter. For example:
```yaml
# In _config.yml
...
defaults:
-
scope:
path: "projects"
type: "pages"
values:
layout: "project"
author: "Mr. Hyde"
category: "project"
...
```
```yaml
# In projects/foo_project.md
---
author: "John Smith"
layout: "foobar"
---
The post text goes here...
```
The `projects/foo_project.md` would have the `layout` set to `foobar` instead
of `project` and the `author` set to `John Smith` instead of `Mr. Hyde` when
the site is built.

View File

@@ -1,36 +0,0 @@
---
title: Default Configuration
permalink: "/docs/configuration/incremental-regeneration/"
---
## Incremental Regeneration
<div class="note warning">
<h5>Incremental regeneration is still an experimental feature</h5>
<p>
While incremental regeneration will work for the most common cases, it will
not work correctly in every scenario. Please be extremely cautious when
using the feature, and report any problems not listed below by
<a href="https://github.com/jekyll/jekyll/issues/new">opening an issue on GitHub</a>.
</p>
</div>
Incremental regeneration helps shorten build times by only generating documents
and pages that were updated since the previous build. It does this by keeping
track of both file modification times and inter-document dependencies in the
`.jekyll-metadata` file.
Under the current implementation, incremental regeneration will only generate a
document or page if either it, or one of its dependencies, is modified. Currently,
the only types of dependencies tracked are includes (using the
{% raw %}`{% include %}`{% endraw %} tag) and layouts. This means that plain
references to other documents (for example, the common case of iterating over
`site.posts` in a post listings page) will not be detected as a dependency.
To remedy some of these shortfalls, putting `regenerate: true` in the front-matter
of a document will force Jekyll to regenerate it regardless of whether it has been
modified. Note that this will generate the specified document only; references
to other documents' contents will not work since they won't be re-rendered.
Incremental regeneration can be enabled via the `--incremental` flag (`-I` for
short) from the command-line or by setting `incremental: true` in your
configuration file.

View File

@@ -1,38 +0,0 @@
---
title: Liquid Options
permalink: "/docs/configuration/liquid/"
---
Liquid's response to errors can be configured by setting `error_mode`. The
options are
- `lax` --- Ignore all errors.
- `warn` --- Output a warning on the console for each error. (default)
- `strict` --- Output an error message and stop the build.
Within _config.yml, the default configuration is as follows:
```yaml
liquid:
error_mode: warn
```
The above example depicts the "warn" value, which is already set by default- `error_mode: warn`. This results in any issues being called out during the build process however will continue to build if possible.
You can also configure Liquid's renderer to catch non-assigned variables and
non-existing filters by setting `strict_variables` and / or `strict_filters`
to `true` respectively. {% include docs_version_badge.html version="3.8.0" %}
Do note that while `error_mode` configures Liquid's parser, the `strict_variables`
and `strict_filters` options configure Liquid's renderer and are consequently
orthogonal.
An example of setting these variables within _config.yml is as follows:
```yaml
liquid:
error_mode: strict
strict_variables: true
strict_filters: true
```
Configuring as described above will stop your build/serve from happening and call out the offending error and halt. This is helpful when desiring to catch liquid-related issues by stopping the build or serve process and allowing you to deal with any issues.

View File

@@ -1,97 +0,0 @@
---
title: Markdown Options
permalink: "/docs/configuration/markdown/"
---
The various Markdown renderers supported by Jekyll sometimes have extra options
available.
## Kramdown
Kramdown is the default Markdown renderer for Jekyll, and often works well with no additional configuration. However, it does support many configuration options.
### Kramdown Processor
By default, Jekyll uses the [GitHub Flavored Markdown (GFM) processor](https://github.com/kramdown/parser-gfm) for Kramdown. (Specifying `input: GFM` is fine, but redundant.) GFM supports a couple additional Kramdown options, documented by [kramdown-parser-gfm](https://github.com/kramdown/parser-gfm). These options can be used directly in your Kramdown Jekyll config, like this:
```yaml
kramdown:
gfm_quirks: [paragraph_end]
```
You can also change the processor used by Kramdown (as specified for the `input` key in the [Kramdown RDoc](https://kramdown.gettalong.org/rdoc/Kramdown/Document.html#method-c-new)). For example, to use the non-GFM Kramdown processor in Jekyll, add the following to your configuration.
```yaml
kramdown:
input: Kramdown
```
Documentation for Kramdown parsers is available in the [Kramdown docs](https://kramdown.gettalong.org/parser/kramdown.html). If you use a Kramdown parser other than Kramdown or GFM, you'll need to add the gem for it.
### Syntax Highlighting (CodeRay)
To use the [CodeRay](http://coderay.rubychan.de/) syntax highlighter with Kramdown, you need to add a dependency on the `kramdown-syntax-coderay` gem. For example, `bundle add kramdown-syntax-coderay`. Then, you'll be able to specify CodeRay in your `syntax_highlighter` config:
```yaml
kramdown:
syntax_highlighter: coderay
```
CodeRay supports several of its own configuration options, documented in the [kramdown-syntax-coderay docs](https://github.com/kramdown/syntax-coderay) which can be passed as `syntax_highlighter_opts` like this:
```yaml
kramdown:
syntax_highlighter: coderay
syntax_highlighter_opts:
line_numbers: table
bold_every: 5
```
### Advanced Kramdown Options
Kramdown supports a variety of other relatively advanced options such as `header_offset` and `smart_quotes`. These are documented in the [Kramdown configuration documentation](https://kramdown.gettalong.org/options.html) and can be added to your Kramdown config like this:
```yaml
kramdown:
header_offset: 2
```
<div class="note warning">
<h5>There are several unsupported kramdown options</h5>
<p>
Please note that Jekyll uses Kramdown's HTML converter. Kramdown options used only by other converters, such as <code>remove_block_html_tags</code> (used by the RemoveHtmlTags converter), will not work.
</p>
</div>
## CommonMark
[CommonMark](https://commonmark.org/) is a rationalized version of Markdown syntax, implemented in C and thus faster than default Kramdown implemented in Ruby. It [slightly differs](https://github.com/commonmark/CommonMark#differences-from-original-markdown) from original Markdown and does not support all the syntax elements implemented in Kramdown, like [Block Inline Attribute Lists](https://kramdown.gettalong.org/syntax.html#block-ials).
It comes in two flavors: basic CommonMark with [jekyll-commonmark](https://github.com/jekyll/jekyll-commonmark) plugin and [GitHub Flavored Markdown supported by GitHub Pages](https://github.com/github/jekyll-commonmark-ghpages).
### Custom Markdown Processors
If you're interested in creating a custom markdown processor, you're in luck! Create a new class in the `Jekyll::Converters::Markdown` namespace:
```ruby
class Jekyll::Converters::Markdown::MyCustomProcessor
def initialize(config)
require 'funky_markdown'
@config = config
rescue LoadError
STDERR.puts 'You are missing a library required for Markdown. Please run:'
STDERR.puts ' $ [sudo] gem install funky_markdown'
raise FatalException.new("Missing dependency: funky_markdown")
end
def convert(content)
::FunkyMarkdown.new(content).convert
end
end
```
Once you've created your class and have it properly set up either as a plugin
in the `_plugins` folder or as a gem, specify it in your `_config.yml`:
```yaml
markdown: MyCustomProcessor
```

View File

@@ -1,162 +0,0 @@
---
title: Configuration Options
permalink: "/docs/configuration/options/"
---
The tables below list the available settings for Jekyll, and the various <code
class="option">options</code> (specified in the configuration file) and <code
class="flag">flags</code> (specified on the command-line) that control them.
### Global Configuration
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th>
<span class="option">Options</span> and <span class="flag">Flags</span>
</th>
</tr>
</thead>
<tbody>
{% for setting in site.data.config_options.global %}
<tr class="setting">
<td>
<p class="name">
<strong>{{ setting.name }}</strong>
{% if setting.version-badge %}
<span class="version-badge" title="Introduced in v{{ setting.version-badge }}">{{ setting.version-badge }}</span>
{% endif %}
</p>
<p class="description">{{ setting.description }}</p>
</td>
<td class="align-center">
<p><code class="option">{{ setting.option }}</code></p>
{% if setting.flag %}
<p><code class="flag">{{ setting.flag }}</code></p>
{% endif %}
</td>
</tr>
{% endfor %}
<tr>
<td>
<p class='name'><strong>Defaults</strong></p>
<p class='description'>
Set defaults for <a href="{{ '/docs/front-matter/' | relative_url }}" title="front matter">front matter</a>
variables.
</p>
</td>
<td class='align-center'>
<p>see <a href="{{ '/docs/configuration/front-matter-defaults/' | relative_url }}" title="details">below</a></p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note warning">
<h5>Destination folders are cleaned on site builds</h5>
<p>
The contents of <code>&lt;destination&gt;</code> are automatically
cleaned, by default, when the site is built. Files or folders that are not
created by your site will be removed. Some files could be retained
by specifying them within the <code>&lt;keep_files&gt;</code> configuration directive.
</p>
<p>
Do not use an important location for <code>&lt;destination&gt;</code>; instead, use it as
a staging area and copy files from there to your web server.
</p>
</div>
### Build Command Options
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th><span class="option">Options</span> and <span class="flag">Flags</span></th>
</tr>
</thead>
<tbody>
{% for setting in site.data.config_options.build %}
<tr class="setting">
<td>
<p class="name">
<strong>{{ setting.name }}</strong>
{% if setting.version-badge %}
<span class="version-badge" title="Introduced in v{{ setting.version-badge }}">{{ setting.version-badge }}</span>
{% endif %}
</p>
<p class="description">{{ setting.description }}</p>
</td>
<td class="align-center">
{% if setting.option %}<p><code class="option">{{ setting.option }}</code></p>{% endif %}
{% if setting.flag %}<p><code class="flag">{{ setting.flag }}</code></p>{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
### Serve Command Options
In addition to the options below, the `serve` sub-command can accept any of the options
for the `build` sub-command, which are then applied to the site build which occurs right
before your site is served.
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th><span class="option">Options</span> and <span class="flag">Flags</span></th>
</tr>
</thead>
<tbody>
{% for setting in site.data.config_options.serve %}
<tr class="setting">
<td>
<p class="name">
<strong>{{ setting.name }}</strong>
{% if setting.version-badge %}
<span class="version-badge" title="Introduced in v{{ setting.version-badge }}">{{ setting.version-badge }}</span>
{% endif %}
</p>
<p class="description">{{ setting.description }}</p>
</td>
<td class="align-center">
{% if setting.option %}
<p><code class="option">{{ setting.option }}</code></p>
{% elsif setting.options %}
<p>
{% for option in setting.options %}
<code class="option">{{ option }}</code><br>
{% endfor %}
</p>
{% endif %}
{% if setting.flag %}
<p><code class="flag">{{ setting.flag }}</code></p>
{% elsif setting.flags %}
<p>
{% for flag in setting.flags %}
<code class="flag">{{ flag }}</code><br>
{% endfor %}
</p>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="note warning">
<h5>Do not use tabs in configuration files</h5>
<p>
This will either lead to parsing errors, or Jekyll will revert to the
default settings. Use spaces instead.
</p>
</div>

View File

@@ -1,15 +0,0 @@
---
title: Sass/SCSS Options
permalink: "/docs/configuration/sass/"
---
Jekyll comes bundled with [jekyll-sass-converter](https://github.com/jekyll/jekyll-sass-converter) plugin. By default, Jekyll will look for Sass partials in the `_sass` directory relative to your site's `source` directory.
You can further configure the plugin by adding options to your Jekyll config under the `sass` attribute. See the [plugin's documentation](https://github.com/jekyll/jekyll-sass-converter#usage) for details and for its default values.
<div class="note info">
<p>
Note that directory paths specified in the <code>sass</code> configuration
are resolved relative to your site's <code>source</code>, not relative to the location of the <code>_config.yml</code> file.
</p>
</div>

View File

@@ -1,20 +0,0 @@
---
title: WEBrick Options
permalink: "/docs/configuration/webrick/"
---
You can provide custom headers for your site by adding them to `_config.yml`
```yaml
# File: _config.yml
webrick:
headers:
My-Header: My-Value
My-Other-Header: My-Other-Value
```
### Defaults
Jekyll provides by default `Content-Type` and `Cache-Control` response
headers: one dynamic in order to specify the nature of the data being served,
the other static in order to disable caching so that you don't have to fight
with Chrome's aggressive caching when you are in development mode.

View File

@@ -21,6 +21,8 @@ title: "Buddy"
Whenever you make a push to the selected branch, the Jekyll action runs `jekyll build` in an isolated [Jekyll Docker image][jekyll-docker-image]. The output is generated to the `/filesystem` directory, and can be further deployed to FTP/SFTP and IaaS services. You can add your own commands, install additional packages, attach services, and run Selenium tests, as well as add other actions down the pipeline, eg. a Slack notification or an SSH script that will restart your server.
![Jekyll Build](https://buddy.works/data/blog/_images/buddyworks-jekyll-small.png)
[jekyll-docker-image]: https://hub.docker.com/r/jekyll/jekyll/
## 3. Using YAML for configuration

View File

@@ -12,12 +12,12 @@ Building, testing, and deploying your Jekyll-generated website can quickly be do
To start building your project on CircleCI, all you need to do is 'follow' your project from CircleCI's website:
1. Visit the 'Add Projects' page
1. Visit the 'Add Projects' page: <https://circleci.com/add-projects>
1. From the GitHub or Bitbucket tab on the left, choose a user or organization.
1. Find your project in the list and click 'Build project' on the right.
1. The first build will start on its own. You can start telling CircleCI how to build your project by creating a [.circleci/config.yml][3] file in the root of your repository.
1. The first build will start on its own. You can start telling CircleCI how to build your project by creating a [circle.yml][3] file in the root of your repository.
[3]: https://circleci.com/docs/2.0/configuration-reference/
[3]: https://circleci.com/docs/configuration/
## 2. Dependencies
@@ -28,24 +28,22 @@ The easiest way to manage dependencies for a Jekyll project (with or without Cir
```ruby
source 'https://rubygems.org'
ruby '2.7.4'
ruby '2.4.0'
gem 'jekyll'
gem 'html-proofer'
```
```yaml
- step:
run: bundle install
```
CircleCI detects when `Gemfile` is present is will automatically run `bundle install` for you in the `dependencies` phase.
## 3. Testing
The most basic test that can be run is seeing if `jekyll build` actually works. This is a blocker, a dependency if you will, for other tests you might run on the generate site. So we'll run Jekyll, via Bundler, in the `dependencies` phase.
The most basic test that can be run is simply seeing if `jekyll build` actually works. This is a blocker, a dependency if you will, for other tests you might run on the generate site. So we'll run Jekyll, via Bundler, in the `dependencies` phase.
```yaml
- step:
run: bundle exec jekyll build
dependencies:
post:
- bundle exec jekyll build
```
### HTML Proofer
@@ -56,32 +54,46 @@ With your site built, it's useful to run tests to check for valid HTML, broken l
[6]: https://github.com/gjtorikian/html-proofer/blob/master/README.md#configuration
```yaml
- step:
run: bundle exec htmlproofer ./_site --check-html --disable-external
test:
post:
- bundle exec htmlproofer ./_site --check-html --disable-external
```
## Complete Example .circleci/config.yml File
## Complete Example circle.yml File
The example `.circleci/config.yml` below demonstrates how to
deploy your Jekyll project to AWS. In order for this to work you would first have to set the
`S3_BUCKET_NAME` [environment variable](https://circleci.com/docs/2.0/env-vars/).
When you put it all together, here's an example of what that `circle.yml` file could look like in v1:
```yaml
workflows:
test-deploy:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: master
version: 2.1
machine:
environment:
NOKOGIRI_USE_SYSTEM_LIBRARIES: true # speeds up installation of html-proofer
dependencies:
post:
- bundle exec jekyll build
test:
post:
- bundle exec htmlproofer ./_site --allow-hash-href --check-favicon --check-html --disable-external
deployment:
prod:
branch: master
commands:
- rsync -va --delete ./_site username@my-website:/var/html
```
for CircleCI v2, a Docker-based system which new projects will follow, set the `S3_BUCKET_NAME` environment variable (an example of the required config file is shown below).
```yaml
defaults: &defaults
working_directory: ~/repo
version: 2
jobs:
build:
<<: *defaults
docker:
- image: cimg/ruby:2.7.4
- image: circleci/ruby:2.5
environment:
BUNDLE_PATH: ~/repo/vendor/bundle
steps:
@@ -93,13 +105,6 @@ jobs:
- run:
name: Bundle Install
command: bundle check || bundle install
- save_cache:
key: rubygems-v1-{% raw %}{{ checksum "Gemfile.lock" }}{% endraw %}
paths:
- vendor/bundle
- run:
name: Jekyll build
command: bundle exec jekyll build
- run:
name: HTMLProofer tests
command: |
@@ -108,13 +113,21 @@ jobs:
--check-favicon \
--check-html \
--disable-external
- save_cache:
key: rubygems-v1-{% raw %}{{ checksum "Gemfile.lock" }}{% endraw %}
paths:
- vendor/bundle
- run:
name: Jekyll build
command: bundle exec jekyll build
- persist_to_workspace:
root: ./
paths:
- _site
deploy:
<<: *defaults
docker:
- image: cimg/python:3.9.1
- image: circleci/python:3.6.3
environment:
S3_BUCKET_NAME: <<YOUR BUCKET NAME HERE>>
steps:
@@ -126,6 +139,17 @@ jobs:
- run:
name: Upload to s3
command: ~/.local/bin/aws s3 sync ./_site s3://$S3_BUCKET_NAME/ --delete --acl public-read
workflows:
version: 2
test-deploy:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: master
```
## Questions?

View File

@@ -1,232 +0,0 @@
---
title: GitHub Actions
---
When building a Jekyll site with GitHub Pages, the standard flow is restricted for security reasons
and to make it simpler to get a site setup. For more control over the build and still host the site
with GitHub Pages you can use GitHub Actions.
## Advantages of using Actions
### Control over gemset
- **Jekyll version** --- Instead of using the currently enabled version at `3.9.0`, you can use any
version of Jekyll you want. For example `{{site.version}}`, or point directly to the repository.
- **Plugins** --- You can use any Jekyll plugins irrespective of them being on the
[supported versions][ghp-whitelist] list, even `*.rb` files placed in the `_plugins` directory
of your site.
- **Themes** --- While using a custom theme is possible without Actions, it is now simpler.
### Workflow Management
- **Customization** --- By creating a workflow file to run Actions, you can specify custom build
steps, use environment variables.
- **Logging** --- The build log is visible and can be tweaked to be verbose, so it is much easier to
debug errors using Actions.
## Workspace setup
The first and foremost requirement is a Jekyll project hosted at GitHub. Choose an existing Jekyll
project or follow the [quickstart]({{ '/docs/' | relative_url }}) and push the repository to GitHub
if it is not hosted there already.
We're only going to cover builds from the `main` branch in this page. Therefore, ensure that you
are working on the `main` branch. If necessary, you may create it based on your default branch.
When the Action builds your site, the contents of the _destination_ directory will be automatically
pushed to the `gh-pages` branch with a commit, ready to be used for serving.
{: .note .warning}
The Action we're using here will create (or reset an existing) `gh-pages` branch on every successful
deploy.<br/> So, if you have an existing `gh-pages` branch that is used to deploy your production
build, ensure to make a backup of the contents into a different branch so that you can rollback
easily if necessary.
The Jekyll site we'll be using for the rest of this page initially consists of just a `_config.yml`,
an `index.md` page and a `Gemfile`. The contents are respectively:
```yaml
# _config.yml
title: "Jekyll Actions Demo"
```
{% raw %}
```liquid
---
---
Welcome to My Home Page
{% assign date = '2020-04-13T10:20:00Z' %}
- Original date - {{ date }}
- With timeago filter - {{ date | timeago }}
```
{% endraw %}
```ruby
# Gemfile
source 'https://rubygems.org'
gem 'jekyll', '~> 4.2'
group :jekyll_plugins do
gem 'jekyll-timeago', '~> 0.13.1'
end
```
{: .note .info}
The demo site uses Jekyll 4 and a [third-party plugin][timeago-plugin], both of which are currently
not whitelisted for use on GitHub pages. The plugin will allow us to describe how far back a date
was from today. e.g. If we give a date as `2016-03-23T10:20:00Z` and the current date is
`2020-04-13T10:20:00Z`, then the output would be `4 years and 3 weeks ago`.
{: .note .info}
The action we're using takes care of installing the Ruby gems and dependencies. While that keeps
the setup simple for the user, one may encounter issues if they also check-in `Gemfile.lock` if it
was generated with an old version of Bundler.
### Setting up the Action
GitHub Actions are registered for a repository by using a YAML file inside the directory path
`.github/workflows` (note the dot at the start). For simplicity, here we use one of the
[Jekyll Actions](#external-links) to show you how to use the action.
Create a **workflow file**, say `github-pages.yml`, using either the GitHub interface or by pushing
a YAML file to the workflow directory path manually. The base contents are:
{% raw %}
```yaml
name: Build and deploy Jekyll site to GitHub Pages
on:
push:
branches:
- main # or master before October 2020
jobs:
github-pages:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile') }}
restore-keys: |
${{ runner.os }}-gems-
- uses: helaili/jekyll-action@2.0.5 # Choose any one of the Jekyll Actions
with: # Some relative inputs of your action
token: ${{ secrets.GITHUB_TOKEN }}
```
{% endraw %}
The above workflow can be explained as the following:
- We trigger the build using **on.push** condition for `main` branch only --- this prevents
the Action from overwriting the `gh-pages` branch on any feature branch pushes.
- The **name** of the job matches our YAML filename: `github-pages`.
- The **checkout** action takes care of cloning your repository.
- The **cache** action is an optimization to avoid fetching and installing gems on every build.
- We specify our selected **action** and **version number** using `helaili/jekyll-action@2.0.5`,
this handles the build and deploy. You can choose any one of the Jekyll Actions that matches
your project and flavor from [GitHub Marketplace](https://github.com/marketplace?type=actions&query=jekyll+action).
- We set a reference to a secret **environment variable** for the action to use. The `GITHUB_TOKEN`
is a secret token automatically initialized at the start of every workflow run.
More information can be found in [GitHub documentation](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#about-the-github_token-secret).
Instead of using the **on.push** condition, you could trigger your build on a **schedule** by
using the [on.schedule] parameter. For example, here we build daily at midnight by specifying
**cron** syntax, which can be tested at the [crontab guru] site.
```yaml
on:
schedule:
- cron: "0 0 * * *"
```
Note that this string must be quoted to prevent the asterisks from being evaluated incorrectly.
[on.schedule]: https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#onschedule
[crontab guru]: https://crontab.guru/
### Providing permissions
At the start of each workflow run, GitHub automatically creates a unique `GITHUB_TOKEN` secret to use in
your workflow. You can use the `GITHUB_TOKEN` to authenticate in a workflow run. You can use the
`GITHUB_TOKEN` by using the standard syntax for referencing secrets: `${{ secrets.GITHUB_TOKEN }}`.
For more information, please read [GitHub's docs on token authentication][github-token-ref]
[github-token-ref]: https://docs.github.com/en/actions/security-guides/automatic-token-authentication
If you need a token that requires permissions that aren't available in the `GITHUB_TOKEN`, you can create
a Personal Access Token (PAT), and set it as a secret in your repository for this action to push to the
`gh-pages` branch:
1. On your GitHub profile, under **Developer Settings**, go to the [Personal Access Tokens][tokens]
section.
2. **Create** a token. Give it a name like "GitHub Actions" and ensure it has permissions to
`public_repos` (or the entire `repo` scope for private repository) --- necessary for the action
to commit to the `gh-pages` branch.
3. **Copy** the token value.
4. Go to your repository's **Settings** and then the **Secrets** tab.
5. **Create** a token named `YOUR_CUSTOM_TOKEN` (_important_). Give it a value using the value copied
above.
### Build and deploy
On pushing any local changes onto `main`, the action will be triggered and the build will
**start**.
To watch the progress and see any build errors, check on the build **status** using one of the
following approaches:
- **View by commit**
- Go to the repository level view in GitHub. Under the most recent commit (near the top) youll
see a **status symbol** next to the commit message as a tick or _X_. Hover over it and click
the **details** link.
- **Actions tab**
- Go to the repository's Actions tab. Click on the `jekyll` workflow tab.
If all goes well, all steps will be green and the built assets will now exist on the `gh-pages`
branch.
On a successful build, GitHub Pages will **publish** the site stored on the repository `gh-pages`
branches. Note that you do not need to setup a `gh-pages` branch or enable GitHub Pages, as the
action will take care of this for you.
(For private repositories, you'll have to upgrade to a paid plan).
To see the **live site**:
1. Go to the **environment** tab on your repository.
2. Click **View Deployment** to see the deployed site URL.
3. View your site at the **URL**. Make sure the `timeago` filter works as expected.
4. Optionally **add** this URL to your repository's main page and to your `README.md`, to make it
easy for people to find.
When you need to make further **changes** to the site, commit to `master` and push. The workflow
will build and deploy your site again.
Be sure **not to edit** the `gh-pages` branch directly, as any changes will be lost on the next
successful deploy from the Action.
## External links
- [jekyll-actions] is an action available on the GitHub Marketplace and was used in this guide.
- [jekyll-actions-quickstart] is an unofficial repository that includes a live demo of the
`jekyll-actions` action. That project can be used as a template for making a new site.
- [jekyll-action-ts] is another action to build and publish Jekyll sites on GiHub Pages that includes HTML formatting options with Prettier and caching.
- [jekyll-deploy-action] is a GitHub Action to deploy the Jekyll site conveniently for GitHub Pages (An alternative action with better speed and compatibility).
[ghp-whitelist]: https://pages.github.com/versions/
[timeago-plugin]: https://rubygems.org/gems/jekyll-timeago
[tokens]: https://github.com/settings/tokens
[jekyll-actions]: https://github.com/marketplace/actions/jekyll-actions
[jekyll-actions-quickstart]: https://github.com/MichaelCurrin/jekyll-actions-quickstart
[jekyll-action-ts]: https://github.com/limjh16/jekyll-action-ts
[jekyll-deploy-action]: https://github.com/jeffreytse/jekyll-deploy-action

View File

@@ -0,0 +1,10 @@
---
title: Continuous Integration
permalink: /docs/continuous-integration/
---
Continuous Integration (CI) enables you to publish your Jekyll generated website with confidence by automating the quality assurance and deployment processes. You can quickly get started using CI with one of the providers below:
* [Travis CI](travis-ci)
* [CircleCI](circleci)
* [Buddy](buddyworks)

View File

@@ -1,61 +0,0 @@
---
title: "Razorops"
---
[Razorops][razorops-homepage] is a complete container native CI/CD solution handling all aspects of the software lifecycle from the moment a commit is created until it is deployed to production.
Razorops has all the capabilities that you would expect from a CI/CD platform such as
1. Code compilation/build
2. Artifact packaging
3. Testing Automation(unit, integration, acceptance etc.)
4. Faster builds and shipping to production
Razorops is a single solution that implements the whole pipeline from start to deployment.
With [Razorops][razorops-homepage] you can set up your Jekyll websites project's build, test, and deploy steps just in 15 min. It supports [GitHub][github-homepage], [Bitbucket][bitbucket-homepage], and [GitLab][gitlab-homepage] repositories. The following guide will show you how to set up a free environment to build, test and deploy your Jekyll project.
[razorops-homepage]: https://razorops.com/
[docker-homepage]: https://www.docker.com/
[github-homepage]: https://github.com
[bitbucket-homepage]: https://bitbucket.org/
[gitlab-homepage]: https://gitlab.com
[deploy-s3]: https://razorops.com/blog/how-to-deploy-a-static-website-to-aws-s3-with-razorops-ci-cd/
## 1. Getting started
1. Log in at [https://razorops.com/][razorops-homepage] with your GitHub/Bitbucket or Gitlab account
2. Create a pipeline, choose your Git provider and select your Jekyll Project
3. Add .razorops.yaml file in your root directory of your project
4. Add environment var and your deployment is ready
5. Add build and deployment steps as shown in this post [How to Deploy a Static Website to AWS S3 with Razorops CI/CD][deploy-s3]
## 2. How it works
Whenever you make a push to the selected branch, your steps auto runs as defined in .razorops.yaml file
```yaml
tasks:
build-and-deploy:
steps:
- checkout
# commands to build jekyll website
- commands:
- bundle install
- JEKYLL_ENV=production bundle exec jekyll build
# Commands to upload static pages folder to AWS S3 or ftp
# Set AWS access key & secrets environment variables under
# Razorops dashboard project pipelines
- commands:
- aws s3 rm s3://$AWS_S3_BUCKET --recursive
- aws s3 cp _site s3://$AWS_S3_BUCKET --recursive
if: branch == 'main'
```
Build step generates _site folder as Jekyll default and during deploy you will able to ship code to s3 or any ftp server you can define any command to ship your website code to server.
Razorops is FREE for opensource projects, Try it Now
[https://razorops.com/][razorops-homepage]

View File

@@ -2,7 +2,7 @@
title: "Travis CI"
---
You can test your website build against one or more versions of Ruby.
You can easily test your website build against one or more versions of Ruby.
The following guide will show you how to set up a free build environment on
[Travis][travis], with [GitHub][github] integration for pull requests.
@@ -11,7 +11,7 @@ The following guide will show you how to set up a free build environment on
## 1. Enabling Travis and GitHub
To enable Travis builds for your GitHub repository:
Enabling Travis builds for your GitHub repository is pretty simple:
1. Go to your profile on travis-ci.org: https://travis-ci.org/profile/username
2. Find the repository for which you're interested in enabling builds.
@@ -21,7 +21,7 @@ To enable Travis builds for your GitHub repository:
## 2. The Test Script
The simplest test script runs `jekyll build` and ensures that Jekyll
The simplest test script simply runs `jekyll build` and ensures that Jekyll
doesn't fail to build the site. It doesn't check the resulting site, but it
does ensure things are built properly.
@@ -34,7 +34,7 @@ Save the commands you want to run and succeed in a file: `./script/cibuild`
### The HTML Proofer Executable
```bash
```sh
#!/usr/bin/env bash
set -e # halt script on error
@@ -90,7 +90,7 @@ Your `.travis.yml` file should look like this:
```yaml
language: ruby
rvm:
- 2.6.3
- 2.4.1
before_script:
- chmod +x ./script/cibuild # or do this locally and commit
@@ -105,10 +105,11 @@ branches:
- gh-pages # test the gh-pages branch
- /pages-(.*)/ # test every branch which starts with "pages-"
addons:
apt:
packages:
- libcurl4-openssl-dev
env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
sudo: false # route your build to the container-based infrastructure for a faster build
cache: bundler # caching bundler gem packages will speed up build
@@ -128,7 +129,7 @@ access to Bundler, RubyGems, and a Ruby runtime.
```yaml
rvm:
- 2.6.3
- 2.4.1
```
RVM is a popular Ruby Version Manager (like rbenv, chruby, etc). This
@@ -183,6 +184,18 @@ prefixed, exemplified above with the `/pages-(.*)/` regular expression.
The `branches` directive is completely optional. Travis will build from every
push to any branch of your repo if leave it out.
```yaml
env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
```
Using `html-proofer`? You'll want this environment variable. Nokogiri, used
to parse HTML files in your compiled site, comes bundled with libraries
which it must compile each time it is installed. Luckily, you can
dramatically decrease the install time of Nokogiri by setting the
environment variable `NOKOGIRI_USE_SYSTEM_LIBRARIES` to `true`.
<div class="note warning">
<h5>Be sure to exclude <code>vendor</code> from your
<code>_config.yml</code></h5>
@@ -194,7 +207,17 @@ push to any branch of your repo if leave it out.
exclude: [vendor]
```
To speed up the build, you should cache the gem packages created by `bundler`.
By default you should supply the `sudo: false` command to Travis. This command
explicitly tells Travis to run your build on Travis's [container-based
infrastructure](https://docs.travis-ci.com/user/workers/container-based-infrastructure/#Routing-your-build-to-container-based-infrastructure). Running on the container-based infrastructure can often times
speed up your build. If you have any trouble with your build, or if your build
does need `sudo` access, modify the line to `sudo: required`.
```yaml
sudo: false
```
To speed up the build, you should cache the gem packages created by `bundler`.
Travis has a pre-defined [cache strategy for this tool][6] which should have
all the default configs to do exactly that.

View File

@@ -8,30 +8,30 @@ Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is a
## Where to get help or report a problem
See the [support guidelines](https://jekyllrb.com/docs/support/)
See [the support guidelines](https://jekyllrb.com/docs/support/)
## Ways to contribute
Whether you're a developer, a designer, or just a Jekyll devotee, there are lots of ways to contribute. Here's a few ideas:
- [Install Jekyll on your computer](https://jekyllrb.com/docs/installation/) and kick the tires. Does it work? Does it do what you'd expect? If not, [open an issue](https://github.com/jekyll/jekyll/issues/new) and let us know.
- Comment on some of the project's [open issues](https://github.com/jekyll/jekyll/issues). Have you experienced the same problem? Know a work around? Do you have a suggestion for how the feature could be better?
- Read through the [documentation](https://jekyllrb.com/docs/home/), and click the "improve this page" button, any time you see something confusing, or have a suggestion for something that could be improved.
- Browse through the [Jekyll discussion forum](https://talk.jekyllrb.com/), and lend a hand answering questions. There's a good chance you've already experienced what another user is experiencing.
- Find an [open issue](https://github.com/jekyll/jekyll/issues) (especially [those labeled `help-wanted`](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted)), and submit a proposed fix. If it's your first pull request, we promise we won't bite, and are glad to answer any questions.
- Help evaluate [open pull requests](https://github.com/jekyll/jekyll/pulls), by testing the changes locally and reviewing what's proposed.
* [Install Jekyll on your computer](https://jekyllrb.com/docs/installation/) and kick the tires. Does it work? Does it do what you'd expect? If not, [open an issue](https://github.com/jekyll/jekyll/issues/new) and let us know.
* Comment on some of the project's [open issues](https://github.com/jekyll/jekyll/issues). Have you experienced the same problem? Know a work around? Do you have a suggestion for how the feature could be better?
* Read through [the documentation](https://jekyllrb.com/docs/home/), and click the "improve this page" button, any time you see something confusing, or have a suggestion for something that could be improved.
* Browse through [the Jekyll discussion forum](https://talk.jekyllrb.com/), and lend a hand answering questions. There's a good chance you've already experienced what another user is experiencing.
* Find [an open issue](https://github.com/jekyll/jekyll/issues) (especially [those labeled `help-wanted`](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted)), and submit a proposed fix. If it's your first pull request, we promise we won't bite, and are glad to answer any questions.
* Help evaluate [open pull requests](https://github.com/jekyll/jekyll/pulls), by testing the changes locally and reviewing what's proposed.
## Submitting a pull request
### Pull requests generally
- The smaller the proposed change, the better. If you'd like to propose two unrelated changes, submit two pull requests.
* The smaller the proposed change, the better. If you'd like to propose two unrelated changes, submit two pull requests.
- The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
* The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
- If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
* Pull requests are easy and fun. If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
- If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
* If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
### Submitting a pull request via github.com
@@ -53,7 +53,7 @@ That's it! You'll be automatically subscribed to receive updates as others revie
2. Clone the repository locally `git clone https://github.com/<you-username>/jekyll`.
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
4. Hack away, add tests. Not necessarily in that order.
5. Make sure everything still passes by running `script/cibuild` (see the [tests section](#running-tests-locally) below)
5. Make sure everything still passes by running `script/cibuild` (see [the tests section](#running-tests-locally) below)
6. Push the branch up ( `git push origin my-awesome-feature` ).
7. Create a pull request by visiting `https://github.com/<your-username>/jekyll` and following the instructions at the top of the screen.
@@ -80,12 +80,11 @@ If you ever need to update our documentation with an icon that is not already av
5. Click `Generate Font` on the bottom-horizontal-bar.
6. Inspect the included icons and proceed by clicking `Download`.
7. Extract the font files and adapt the CSS to the paths we use in Jekyll:
- Copy the entire `fonts` directory over and overwrite existing ones at `<jekyll>/docs/`.
- Copy the contents of `selection.json` and overwrite existing content inside `<jekyll>/docs/icomoon-selection.json`.
- Copy the entire `@font-face {}` declaration and only the **new-icon(s)' css declarations** further below, to update the
- Copy the entire `fonts` directory over and overwrite existing ones at `<jekyll>/docs/`.
- Copy the contents of `selection.json` and overwrite existing content inside `<jekyll>/docs/icomoon-selection.json`.
- Copy the entire `@font-face {}` declaration and only the **new-icon(s)' css declarations** further below, to update the
`<jekyll>/docs/_sass/_font-awesome.scss` sass partial.
- Fix paths in the `@font-face {}` declaration by adding `../` before `fonts/FontAwesome.*` like so:
- Fix paths in the `@font-face {}` declaration by adding `../` before `fonts/FontAwesome.*` like so:
`('../fonts/Fontawesome.woff?9h6hxj')`.
### Adding plugins
@@ -94,7 +93,7 @@ If you want to add your plugin to the [list of plugins](https://jekyllrb.com/doc
## Code Contributions
Interested in submitting a pull request? Awesome. Read on. There's a few common gotchas that we'd love to help you avoid.
Interesting in submitting a pull request? Awesome. Read on. There's a few common gotchas that we'd love to help you avoid.
### Tests and documentation
@@ -106,21 +105,19 @@ If your contribution changes any Jekyll behavior, make sure to update the docume
#### Tests
- If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
* If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
- If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
* If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
### Code contributions generally
- Jekyll uses the [Rubocop](https://github.com/bbatsov/rubocop) static analyzer to ensure that contributions follow the [GitHub Ruby Styleguide](https://github.com/styleguide/ruby). Please check your code using `script/fmt` and resolve any errors before pushing your branch.
* Jekyll uses the [Rubocop](https://github.com/bbatsov/rubocop) static analyzer to ensure that contributions follow the [GitHub Ruby Styleguide](https://github.com/styleguide/ruby). Please check your code using `script/fmt` and resolve any errors before pushing your branch.
- Don't bump the Gem version in your pull request (if you don't know what that means, you probably didn't).
* Don't bump the Gem version in your pull request (if you don't know what that means, you probably didn't).
- You can use the command `script/console` to start a REPL to explore the result of
Jekyll's methods. It also provides you with helpful methods to quickly create a
site or configuration. [Feel free to check it out!](https://github.com/jekyll/jekyll/blob/master/script/console)
- Previously, we've used the WIP Probot app to help contributors determine whether their pull request is ready for review. Please use a [draft pull request](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests) instead. When you're ready, [mark the pull request as ready for review](https://help.github.com/en/articles/changing-the-stage-of-a-pull-request)
* You can use the command `script/console` to start a REPL to explore the result of
Jekyll's methods. It also provides you with helpful methods to quickly create a
site or configuration. [Feel free to check it out!](https://github.com/jekyll/jekyll/blob/master/script/console)
## Running tests locally
@@ -153,10 +150,6 @@ script/cucumber features/blah.feature
Both `script/test` and `script/cucumber` can be run without arguments to
run its entire respective suite.
## 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.
## A thank you
Thanks! Hacking on Jekyll should be fun. If you find any of this hard to figure out, let us know so we can improve our process or documentation!

View File

@@ -3,12 +3,13 @@ title: Data Files
permalink: /docs/datafiles/
---
In addition to the [built-in variables]({{'/docs/variables/' | relative_url }}) available from Jekyll,
In addition to the [built-in variables](../variables/) available from Jekyll,
you can specify your own custom data that can be accessed via the [Liquid
templating system](https://github.com/Shopify/liquid/wiki/Liquid-for-Designers).
templating system](https://wiki.github.com/shopify/liquid/liquid-for-designers).
Jekyll supports loading data from [YAML](http://yaml.org/), [JSON](http://www.json.org/), [CSV](https://en.wikipedia.org/wiki/Comma-separated_values), and [TSV](https://en.wikipedia.org/wiki/Tab-separated_values) files located in the `_data` directory.
Note that CSV and TSV files *must* contain a header row.
Jekyll supports loading data from [YAML](http://yaml.org/), [JSON](http://www.json.org/),
and [CSV](https://en.wikipedia.org/wiki/Comma-separated_values) files located in the `_data` directory.
Note that CSV files *must* contain a header row.
This powerful feature allows you to avoid repetition in your templates and to
set site specific options without changing `_config.yml`.
@@ -17,9 +18,10 @@ Plugins/themes can also leverage Data Files to set configuration variables.
## The Data Folder
The `_data` folder is where you can store additional data for Jekyll to use when
generating your site. These files must be YAML, JSON, TSV or CSV files (using either
the `.yml`, `.yaml`, `.json`, `.tsv`, or `.csv` extension), and they will be
As explained on the [directory structure](../structure/) page, the `_data`
folder is where you can store additional data for Jekyll to use when generating
your site. These files must be YAML, JSON, or CSV files (using either
the `.yml`, `.yaml`, `.json` or `.csv` extension), and they will be
accessible via `site.data`.
## Example: List of members
@@ -42,15 +44,15 @@ In `_data/members.yml`:
Or `_data/members.csv`:
```
```text
name,github
Eric Mill,konklone
Parker Moore,parkr
Liu Fengyun,liufengyun
```
This data can be accessed via `site.data.members` (notice that the file's *basename* determines the variable name and
therefore one should avoid having data files with the same basename but different extensions, in the same directory).
This data can be accessed via `site.data.members` (notice that the filename
determines the variable name).
You can now render the list of members in a template:
@@ -68,7 +70,10 @@ You can now render the list of members in a template:
```
{% endraw %}
## Subfolders
{: .note .info }
If your Jekyll site has a lot of pages, such as with documentation websites, see the detailed examples in [how to build robust navigation for your site]({% link _tutorials/navigation.md %}).
## Example: Organizations
Data files can also be placed in sub-folders of the `_data` folder. Each folder
level will be added to a variable's namespace. The example below shows how
@@ -129,7 +134,7 @@ dave:
twitter: DavidSilvaSmith
```
The author can then be specified as a page variable in a post's front matter:
The author can then be specified as a page variable in a post's frontmatter:
{% raw %}
```liquid
@@ -147,31 +152,4 @@ author: dave
```
{% endraw %}
For information on how to build robust navigation for your site (especially if you have a documentation website or another type of Jekyll site with a lot of pages to organize), see [Navigation]({{ '/tutorials/navigation/' | relative_url }}).
## CSV/TSV Parse Options
The way Ruby parses CSV and TSV files can be customized with the `csv_reader` and `tsv_reader`
configuration options. Each configuration key exposes the same options:
`converters`: What [CSV converters](https://ruby-doc.org/stdlib-2.5.0/libdoc/csv/rdoc/CSV.html#Converters) should be
used when parsing the file. Available options are `integer`, `float`, `numeric`, `date`, `date_time` and
`all`. By default, this list is empty.
`encoding`: What encoding the files are in. Defaults to the site `encoding` configuration option.
`headers`: Boolean field for whether to parse the first line of the file as headers. When `false`, it treats the
first row as data. Defaults to `true`.
Examples:
```yaml
csv_reader:
converters:
- numeric
- datetime
headers: true
encoding: utf-8
tsv_reader:
converters:
- all
headers: false
```
For information on how to build robust navigation for your site (especially if you have a documentation website or another type of Jekyll site with a lot of pages to organize), see [Navigation](/tutorials/navigation).

View File

@@ -0,0 +1,216 @@
---
title: Deployment methods
permalink: /docs/deployment-methods/
---
Sites built using Jekyll can be deployed in a large number of ways due to the static nature of the generated output. A few of the most common deployment techniques are described below.
<div class="note">
<h5>ProTip™: Use GitHub Pages for zero-hassle Jekyll hosting</h5>
<p>GitHub Pages are powered by Jekyll behind the scenes, so if youre looking for a zero-hassle, zero-cost solution, GitHub Pages are a great way to <a href="../github-pages/">host your Jekyll-powered website for free</a>.</p>
</div>
## Netlify
Netlify provides Global CDN, Continuous Deployment, one click HTTPS and [much more](https://www.netlify.com/features/), providing developers the most robust toolset available for modern web projects, without added complexity. Netlify supports custom plugins for Jekyll and has a free plan for open source projects.
Read this [Jekyll step-by-step guide](https://www.netlify.com/blog/2015/10/28/a-step-by-step-guide-jekyll-3.0-on-netlify/) to setup your Jekyll site on Netlify.
## Aerobatic
[Aerobatic](https://www.aerobatic.com) has custom domains, global CDN distribution, basic auth, CORS proxying, and a growing list of plugins all included.
Automating the deployment of a Jekyll site is simple. See their [Jekyll docs](https://www.aerobatic.com/docs/static-site-generators/#jekyll) for more details. Your built `_site` folder is deployed to their highly-available, globally distributed hosting service.
## Kickster
Use [Kickster](http://kickster.nielsenramon.com/) for easy (automated) deploys to GitHub Pages when using unsupported plugins on GitHub Pages.
Kickster provides a basic Jekyll project setup packed with web best practises and useful optimization tools increasing your overall project quality. Kickster ships with automated and worry-free deployment scripts for GitHub Pages.
Setting up Kickster is very easy, just install the gem and you are good to go. More documentation can here found [here](https://github.com/nielsenramon/kickster#kickster). If you do not want to use the gem or start a new project you can just copy paste the deployment scripts for [Travis CI](https://github.com/nielsenramon/kickster/tree/master/snippets/travis) or [Circle CI](https://github.com/nielsenramon/kickster#automated-deployment-with-circle-ci).
## Web hosting providers (FTP)
Just about any traditional web hosting provider will let you upload files to their servers over FTP. To upload a Jekyll site to a web host using FTP, simply run the `jekyll build` command and copy the contents of the generated `_site` folder to the root folder of your hosting account. This is most likely to be the `httpdocs` or `public_html` folder on most hosting providers.
## Self-managed web server
If you have direct access to the deployment web server, the process is essentially the same, except you might have other methods available to you (such as `scp`, or even direct filesystem access) for transferring the files. Just remember to make sure the contents of the generated `_site` folder get placed in the appropriate web root directory for your web server.
## Automated methods
There are also a number of ways to easily automate the deployment of a Jekyll site. If youve got another method that isnt listed below, wed love it if you [contributed](../contributing/) so that everyone else can benefit too.
### Git post-update hook
If you store your Jekyll site in [Git](https://git-scm.com/) (you are using
version control, right?), its pretty easy to automate the
deployment process by setting up a post-update hook in your Git
repository, [like
this](http://web.archive.org/web/20091223025644/http://www.taknado.com/en/2009/03/26/deploying-a-jekyll-generated-site/).
### Git post-receive hook
To have a remote server handle the deploy for you every time you push changes using Git, you can create a user account which has all the public keys that are authorized to deploy in its `authorized_keys` file. With that in place, setting up the post-receive hook is done as follows:
```sh
laptop$ ssh deployer@example.com
server$ mkdir myrepo.git
server$ cd myrepo.git
server$ git --bare init
server$ cp hooks/post-receive.sample hooks/post-receive
server$ mkdir /var/www/myrepo
```
Next, add the following lines to hooks/post-receive and be sure Jekyll is
installed on the server:
```bash
GIT_REPO=$HOME/myrepo.git
TMP_GIT_CLONE=$HOME/tmp/myrepo
GEMFILE=$TMP_GIT_CLONE/Gemfile
PUBLIC_WWW=/var/www/myrepo
git clone $GIT_REPO $TMP_GIT_CLONE
BUNDLE_GEMFILE=$GEMFILE bundle install
BUNDLE_GEMFILE=$GEMFILE bundle exec jekyll build -s $TMP_GIT_CLONE -d $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE
exit
```
Finally, run the following command on any users laptop that needs to be able to
deploy using this hook:
```sh
laptops$ git remote add deploy deployer@example.com:~/myrepo.git
```
Deploying is now as easy as telling nginx or Apache to look at
`/var/www/myrepo` and running the following:
```sh
laptops$ git push deploy master
```
### Static Publisher
[Static Publisher](https://github.com/static-publisher/static-publisher) is another automated deployment option with a server listening for webhook posts, though it's not tied to GitHub specifically. It has a one-click deploy to Heroku, it can watch multiple projects from one server, it has an easy to user admin interface and can publish to either S3 or to a git repository (e.g. gh-pages).
### Rake
Another way to deploy your Jekyll site is to use [Rake](https://github.com/ruby/rake), [HighLine](https://github.com/JEG2/highline), and
[Net::SSH](https://github.com/net-ssh/net-ssh). A more complex example of deploying Jekyll with Rake that deals with multiple branches can be found in [Git Ready](https://github.com/gitready/gitready/blob/cdfbc4ec5321ff8d18c3ce936e9c749dbbc4f190/Rakefile).
### scp
Once youve generated the `_site` directory, you can easily scp its content using a
`tasks/deploy` shell script similar to [this deploy script][]. Youd obviously
need to change the values to reflect your sites details. There is even [a
matching TextMate command][] that will help you run this script.
[this deploy script]: https://github.com/henrik/henrik.nyh.se/blob/master/script/deploy
[a matching TextMate command]: https://gist.github.com/henrik/214959
### rsync
Once youve generated the `_site` directory, you can easily rsync its content using a `tasks/deploy` shell script similar to [this deploy script here](https://github.com/vitalyrepin/vrepinblog/blob/master/transfer.sh). Youd obviously need to change the values to reflect your sites details.
Certificate-based authorization is another way to simplify the publishing
process. It makes sense to restrict rsync access only to the directory which it is supposed to sync. This can be done using rrsync.
#### Step 1: Install rrsync to your home folder (server-side)
If it is not already installed by your host, you can do it yourself:
- [Download rrsync](https://ftp.samba.org/pub/unpacked/rsync/support/rrsync)
- Place it in the `bin` subdirectory of your home folder (`~/bin`)
- Make it executable (`chmod +x`)
#### Step 2: Set up certificate-based SSH access (server side)
This [process](https://wiki.gentoo.org/wiki/SSH#Passwordless_Authentication) is
described in several places online. What is different from the typical approach
is to put the restriction to certificate-based authorization in
`~/.ssh/authorized_keys`. Then, launch `rrsync` and supply
it with the folder it shall have read-write access to:
```sh
command="$HOME/bin/rrsync <folder>",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa <cert>
```
`<folder>` is the path to your site. E.g., `~/public_html/you.org/blog-html/`.
#### Step 3: Rsync (client-side)
Add the `deploy` script to the site source folder:
```sh
#!/bin/sh
rsync -crvz --rsh='ssh -p2222' --delete-after --delete-excluded <folder> <user>@<site>:
```
Command line parameters are:
- `--rsh=ssh -p2222` &mdash; The port for SSH access. It is required if
your host uses a different port than the default (e.g, HostGator)
- `<folder>` &mdash; The name of the local output folder (defaults to `_site`)
- `<user>` &mdash; The username for your hosting account
- `<site>` &mdash; Your hosting server
Using this setup, you might run the following command:
```sh
rsync -crvz --rsh='ssh -p2222' --delete-after --delete-excluded _site/ hostuser@example.org:
```
Don't forget the column `:` after server name!
#### Step 4 (Optional): Exclude the transfer script from being copied to the output folder.
This step is recommended if you use these instructions to deploy your site. If
you put the `deploy` script in the root folder of your project, Jekyll will
copy it to the output folder. This behavior can be changed in `_config.yml`.
Just add the following line:
```yaml
# Do not copy these files to the output directory
exclude: ["deploy"]
```
Alternatively, you can use an `rsync-exclude.txt` file to control which files will be transferred to your server.
#### Done!
Now it's possible to publish your website simply by running the `deploy`
script. If your SSH certificate is [passphrase-protected](https://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html), you will be asked to enter it when the
script executes.
## Rack-Jekyll
[Rack-Jekyll](https://github.com/adaoraul/rack-jekyll/) is an easy way to deploy your site on any Rack server such as Amazon EC2, Slicehost, Heroku, and so forth. It also can run with [shotgun](https://github.com/rtomayko/shotgun/), [rackup](https://github.com/rack/rack), [mongrel](https://github.com/mongrel/mongrel), [unicorn](https://github.com/defunkt/unicorn/), and [others](https://github.com/adaoraul/rack-jekyll#readme).
Read [this post](http://andycroll.com/ruby/serving-a-jekyll-blog-using-heroku/) on how to deploy to Heroku using Rack-Jekyll.
## Jekyll-Admin for Rails
If you want to maintain Jekyll inside your existing Rails app, [Jekyll-Admin](https://github.com/zkarpinski/Jekyll-Admin) contains drop in code to make this possible. See Jekyll-Admins [README](https://github.com/zkarpinski/Jekyll-Admin/blob/master/README) for more details.
## Amazon S3
If you want to host your site in Amazon S3, you can do so by
using the [s3_website](https://github.com/laurilehmijoki/s3_website)
application. It will push your site to Amazon S3 where it can be served like
any web server,
dynamically scaling to almost unlimited traffic. This approach has the
benefit of being about the cheapest hosting option available for
low-volume blogs as you only pay for what you use.
## OpenShift
If you'd like to deploy your site to an OpenShift gear, there's [a cartridge
for that](https://github.com/openshift-quickstart/jekyll-openshift).

View File

@@ -1,11 +0,0 @@
---
title: Deployment
permalink: /docs/deployment/
redirect_from: "/docs/deployment-methods/index.html"
---
Sites built using Jekyll can be deployed in a large number of ways due to the static nature of the generated output. Here's some of the most common ways:
* [Manually]({{ '/docs/deployment/manual/' | relative_url }})
* [Automated]({{ '/docs/deployment/automated/' | relative_url }})
* [Third Party]({{ '/docs/deployment/third-party/' | relative_url }})

View File

@@ -1,70 +0,0 @@
---
title: Automated Deployment
permalink: /docs/deployment/automated/
---
There are a number of ways to easily automate the deployment of a Jekyll site.
## Continuous Integration Service
One of the easiest ways to set up an automated deployment flow is by using a
CI.
These services run a script when there's a commit on your Git repository.
You might want this script to build the site, run tests over the output then deploy it to the
service of your choice.
We have guides for the following providers:
* [GitHub Actions]({{ '/docs/continuous-integration/github-actions/' | relative_url }})
* [Travis CI]({{ '/docs/continuous-integration/travis-ci/' | relative_url }})
* [CircleCI]({{ '/docs/continuous-integration/circleci/' | relative_url }})
* [Buddy]({{ '/docs/continuous-integration/buddyworks/' | relative_url }})
* [Razorops CI/CD]({{ '/docs/continuous-integration/razorops/' | relative_url }})
## Git post-receive hook
To have a remote server handle the deploy for you every time you push changes using Git, you can create a user account which has all the public keys that are authorized to deploy in its `authorized_keys` file. With that in place, setting up the post-receive hook is done as follows:
```sh
laptop$ ssh deployer@example.com
server$ mkdir myrepo.git
server$ cd myrepo.git
server$ git --bare init
server$ cp hooks/post-receive.sample hooks/post-receive
server$ mkdir /var/www/myrepo
```
Next, add the following lines to hooks/post-receive and be sure Jekyll is
installed on the server:
```bash
#!/bin/bash -l
# Install Ruby Gems to ~/gems
export GEM_HOME=$HOME/gems
export PATH=$GEM_HOME/bin:$PATH
TMP_GIT_CLONE=$HOME/tmp/myrepo
GEMFILE=$TMP_GIT_CLONE/Gemfile
PUBLIC_WWW=/var/www/myrepo
git clone $GIT_DIR $TMP_GIT_CLONE
BUNDLE_GEMFILE=$GEMFILE bundle install
BUNDLE_GEMFILE=$GEMFILE bundle exec jekyll build -s $TMP_GIT_CLONE -d $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE
exit
```
Finally, run the following command on any users laptop that needs to be able to
deploy using this hook:
```sh
laptops$ git remote add deploy deployer@example.com:~/myrepo.git
```
Deploying is now as easy as telling nginx or Apache to look at
`/var/www/myrepo` and running the following:
```sh
laptops$ git push deploy master
```

View File

@@ -1,36 +0,0 @@
---
title: Manual Deployment
permalink: /docs/deployment/manual/
---
Jekyll generates your static site to the `_site` directory by default. You can
transfer the contents of this directory to almost any hosting provider to get
your site live. Here are some manual ways of achieving this:
## rsync
Rsync is similar to scp except it can be faster as it will only send changed
parts of files as opposed to the entire file. You can learn more about using
rsync in the [Digital Ocean tutorial](https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps).
## Amazon S3
If you want to host your site in Amazon S3, you can do so by
using the [s3_website](https://github.com/laurilehmijoki/s3_website)
application. It will push your site to Amazon S3 where it can be served like
any web server,
dynamically scaling to almost unlimited traffic. This approach has the
benefit of being about the cheapest hosting option available for
low-volume blogs as you only pay for what you use.
## FTP
Most traditional web hosting providers let you upload files to their servers over FTP. To upload a Jekyll site to a web host using FTP, run the `jekyll build` command and copy the contents of the generated `_site` folder to the root folder of your hosting account. This is most likely to be the `httpdocs` or `public_html` folder on most hosting providers.
## scp
If you have direct access to the deployment web server, the process is essentially the same, except you might have other methods available to you (such as `scp`, or even direct filesystem access) for transferring the files. Remember to make sure the contents of the generated `_site` folder get placed in the appropriate web root directory for your web server.
## Rack-Jekyll
[Rack-Jekyll](https://github.com/adaoraul/rack-jekyll/) allows you to deploy your site on any Rack server such as Amazon EC2, Slicehost, Heroku, and so forth. It also can run with [shotgun](https://github.com/rtomayko/shotgun/), [rackup](https://github.com/rack/rack), [mongrel](https://github.com/mongrel/mongrel), [unicorn](https://github.com/defunkt/unicorn/), and [others](https://github.com/adaoraul/rack-jekyll#readme).

View File

@@ -1,74 +0,0 @@
---
title: 3rd Party
permalink: /docs/deployment/third-party/
---
## AWS Amplify
The [AWS Amplify Console](https://console.amplify.aws) provides continuous deployment and hosting for modern web apps (single page apps and static site generators). Continuous deployment allows developers to deploy updates to their web app on every code commit to their Git repository. Hosting includes features such as globally available CDNs, 1-click custom domain setup + HTTPS, feature branch deployments, redirects, trailing slashes, and password protection.
Read this [step-by-step guide](https://medium.com/@jameshamann/deploy-your-jekyll-site-using-aws-amplify-with-only-a-few-clicks-8f3dd8f26112) to deploy and host your Jekyll site on AWS Amplify.
## Bip
[Bip](https://bip.sh) provides zero downtime deployment, a global CDN, SSL, unlimited bandwidth and more for Jekyll websites. Deploy in seconds from the command line. [Visit the Bip website](https://bip.sh) for more information - which is also built with Jekyll.
## CloudCannon
[CloudCannon](https://cloudcannon.com) has everything you need to build, host
and update Jekyll websites. Take advantage of our global CDN, automated SSL,
continuous deployment and [more](https://cloudcannon.com/features/).
## GitHub Pages
Sites on GitHub Pages are powered by Jekyll behind the scenes, so if youre looking for a zero-hassle, zero-cost solution, GitHub Pages are a great way to [host your Jekyll-powered website for free](/docs/github-pages/).
## GitLab Pages
[GitLab Pages](https://about.gitlab.com/stages-devops-lifecycle/pages/) offers free hosting with custom domains. [Get started with Jekyll](https://docs.gitlab.com/ee/user/project/pages/getting_started_part_four.html#practical-example) and a fully customizable pipeline.
## KeyCDN
[KeyCDN](https://www.keycdn.com) accelerates Jekyll-powered websites with a wide range of other features such as real time image processing including WebP transformation.
The [Jekyll hosting tutorial](https://www.keycdn.com/support/jekyll-hosting) provides various options to supercharge Jekyll sites with just a few steps. It combines best flexibility and excellent performance.
## Kickster
Use [Kickster](http://kickster.nielsenramon.com/) for automated deploys to GitHub Pages when using unsupported plugins on GitHub Pages.
Kickster provides a basic Jekyll project setup packed with web best practises and useful optimization tools increasing your overall project quality. Kickster ships with automated and worry-free deployment scripts for GitHub Pages.
Install the Kickster gem and you are good to go. More documentation can here found [here](https://github.com/nielsenramon/kickster#kickster). If you do not want to use the gem or start a new project you can just copy paste the deployment scripts for [Travis CI](https://github.com/nielsenramon/kickster/tree/master/snippets/travis) or [Circle CI](https://github.com/nielsenramon/kickster#automated-deployment-with-circle-ci).
## Netlify
Netlify provides Global CDN, Continuous Deployment, one click HTTPS and [much more](https://www.netlify.com/features/), providing developers a robust toolset for modern web projects, without added complexity. Netlify supports custom plugins for Jekyll and has a free plan for open source projects.
Read this [Jekyll step-by-step guide](https://www.netlify.com/blog/2020/04/02/a-step-by-step-guide-jekyll-4.0-on-netlify/) to setup your Jekyll site on Netlify.
## Render
[Render](https://render.com) provides zero config continuous deployment for static sites. The service is free under 100GB monthly bandwidth.
## Hostman
[Hostman](https://hostman.com) allows you to host websites for free with no configurations. Read [this guide](https://hostman.com/docs/jekyll) to deploy your Jekyll site on Hostman.
## Static Publisher
[Static Publisher](https://github.com/static-publisher/static-publisher) is another automated deployment option with a server listening for webhook posts, though it's not tied to GitHub specifically. It has a one-click deploy to Heroku, it can watch multiple projects from one server, it has an easy to user admin interface and can publish to either S3 or to a git repository (e.g. gh-pages).
## Vercel
[Vercel](https://vercel.com/) provides zero config continuous deployment, HTTPS Custom domains, high performance smart CDN, you get instant static deploy for free.
## 21YunBox
[21YunBox](https://www.21yunbox.com) provides blazing fast Chinese CDN, Continuous Deployment, one click HTTPS and [much more](https://www.21yunbox.com/docs/), providing developers a hassle-free solution to launch their web projects in China.
Read this [Jekyll step-by-step guide](https://www.21yunbox.com/docs/#/deploy-jekyll) to deploy your Jekyll site on 21YunBox.
## Layer0
[Layer0](https://www.layer0.co) is an all-in-one platform to develop, deploy, preview, experiment on, monitor, and run your headless frontend. It is focused on large, dynamic websites and best-in-class performance through EdgeJS (a JavaScript-based Content Delivery Network), predictive prefetching, and performance monitoring. Layer0 offers a free tier. Get started in just a few minutes by following [Layer0's guide to deploying Jekyll](https://docs.layer0.co/guides/jekyll).

19
docs/_docs/drafts.md Normal file
View File

@@ -0,0 +1,19 @@
---
title: Working with drafts
permalink: /docs/drafts/
---
Drafts are posts without a date in the filename. They're posts you're still working on and
don't want to publish yet. To get up and running with drafts, create a
`_drafts` folder in your site's root (as described in the [site structure](/docs/structure/) section) and create your
first draft:
```text
|-- _drafts/
| |-- a-draft-post.md
```
To preview your site with drafts, simply run `jekyll serve` or `jekyll build`
with the `--drafts` switch. Each will be assigned the value modification time
of the draft file for its date, and thus you will see currently edited drafts
as the latest posts.

31
docs/_docs/extras.md Normal file
View File

@@ -0,0 +1,31 @@
---
title: Extras
permalink: /docs/extras/
---
There are a number of (optional) extra features that Jekyll supports that you
may want to install, depending on how you plan to use Jekyll.
## Web Highlights and Commenting
Register your site with [txtpen](https://txtpen.com). Then append
```html
<script src="https://txtpen.com/embed.js?site=<your site name>"></script>
```
to your template files in `/_layout` folder.
## Math Support
Kramdown comes with optional support for LaTeX to PNG rendering via [MathJax](https://www.mathjax.org) within math blocks. See the Kramdown documentation on [math blocks](http://kramdown.gettalong.org/syntax.html#math-blocks) and [math support](http://kramdown.gettalong.org/converter/html.html#math-support) for more details. MathJax requires you to include JavaScript or CSS to render the LaTeX, e.g.
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
```
For more information about getting started, check out [this excellent blog post](http://gastonsanchez.com/visually-enforced/opinion/2014/02/16/Mathjax-with-jekyll/).
## Alternative Markdown Processors
See the Markdown section on the [configuration page](/docs/configuration/#markdown-options) for instructions on how to use and configure alternative Markdown processors, as well as how to create [custom processors](/docs/configuration/#custom-markdown-processors).

View File

@@ -1,13 +1,13 @@
---
title: Front Matter
permalink: /docs/front-matter/
redirect_from: /docs/frontmatter/index.html
permalink: /docs/frontmatter/
---
Any file that contains a [YAML](https://yaml.org/) front matter block will be
processed by Jekyll as a special file. The front matter must be the first thing
in the file and must take the form of valid YAML set between triple-dashed
lines. Here is a basic example:
The front matter is where Jekyll starts to get really cool. Any file that
contains a [YAML](http://yaml.org/) front matter block will be processed by
Jekyll as a special file. The front matter must be the first thing in the file
and must take the form of valid YAML set between triple-dashed lines. Here is a
basic example:
```yaml
---
@@ -18,7 +18,7 @@ title: Blogging Like a Hacker
Between these triple-dashed lines, you can set predefined variables (see below
for a reference) or even create custom ones of your own. These variables will
then be available for you to access using Liquid tags both further down in the
then be available to you to access using Liquid tags both further down in the
file and also in any layouts or includes that the page or post in question
relies on.
@@ -28,14 +28,14 @@ relies on.
If you use UTF-8 encoding, make sure that no <code>BOM</code> header
characters exist in your files or very, very bad things will happen to
Jekyll. This is especially relevant if youre running
<a href="{{ '/docs/installation/windows/' | relative_url }}">Jekyll on Windows</a>.
<a href="../windows/">Jekyll on Windows</a>.
</p>
</div>
<div class="note">
<h5>Front Matter Variables Are Optional</h5>
<h5>ProTip™: Front Matter Variables Are Optional</h5>
<p>
If you want to use <a href="{{ '/docs/variables/' | relative_url }}">Liquid tags and variables</a>
If you want to use <a href="../variables/">Liquid tags and variables</a>
but dont need anything in your front matter, just leave it empty! The set
of triple-dashed lines with nothing in between will still get Jekyll to
process your file. (This is useful for things like CSS and RSS feeds!)
@@ -71,14 +71,14 @@ front matter of a page or post.
<ul>
<li>
Using <code>null</code> will produce a file without using a layout
file. This is overridden if the file is a post/document and has a
layout defined in the <a href="{{ '/docs/configuration/front-matter-defaults/' | relative_url }}">
front matter defaults</a>.
file. However this is overridden if the file is a post/document and has a
layout defined in the <a href="../configuration/#front-matter-defaults">
frontmatter defaults</a>.
</li>
<li>
Starting from version 3.5.0, using <code>none</code> in a post/document will
produce a file without using a layout file regardless of front matter defaults.
Using <code>none</code> in a page will cause Jekyll to attempt to
produce a file without using a layout file regardless of frontmatter defaults.
Using <code>none</code> in a page, however, will cause Jekyll to attempt to
use a layout named "none".
</li>
</ul>
@@ -114,28 +114,30 @@ front matter of a page or post.
</div>
<div class="note">
<h5>Render Posts Marked As Unpublished</h5>
<h5>ProTip™: Render Posts Marked As Unpublished</h5>
<p>
To preview unpublished pages, run `jekyll serve` or `jekyll build`
with the `--unpublished` switch. Jekyll also has a handy <a href="{{ '/docs/posts/#drafts' | relative_url }}">drafts</a>
To preview unpublished pages, simply run `jekyll serve` or `jekyll build`
with the `--unpublished` switch. Jekyll also has a handy <a href="../drafts/">drafts</a>
feature tailored specifically for blog posts.
</p>
</div>
## Custom Variables
You can also set your own front matter variables you can access in Liquid. For
instance, if you set a variable called `food`, you can use that in your page:
Any variables in the front matter that are not predefined are mixed into the
data that is sent to the Liquid templating engine during the conversion. For
instance, if you set a title, you can use that in your layout to set the page
title:
{% raw %}
```liquid
---
food: Pizza
---
<h1>{{ page.food }}</h1>
<!DOCTYPE HTML>
<html>
<head>
<title>{% raw %}{{ page.title }}{% endraw %}</title>
</head>
<body>
```
{% endraw %}
## Predefined Variables for Posts
@@ -201,11 +203,10 @@ These are available out-of-the-box to be used in the front matter for a post.
</div>
<div class="note">
<h5>Don't repeat yourself</h5>
<h5>ProTip™: Don't repeat yourself</h5>
<p>
If you don't want to repeat your frequently used front matter variables
over and over, define
<a href="{{ '/docs/configuration/front-matter-defaults/' | relative_url }}" title="Front Matter defaults">defaults</a>
over and over, just define <a href="../configuration/#front-matter-defaults" title="Front Matter defaults">defaults</a>
for them and only override them where necessary (or not at all). This works
both for predefined and custom variables.
</p>

View File

@@ -11,24 +11,44 @@ website for free.
Your site is automatically generated by GitHub Pages when you push your source
files. Note that GitHub Pages works equally well for regular HTML content,
simply because Jekyll treats files without front matter as static assets.
simply because Jekyll treats files without YAML front matter as static assets.
So if you only need to push generated HTML, you're good to go without any
further setup.
The [GitHub Pages Documentation](https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages)
is comprehensive and includes a [a guide to setting up a GitHub Pages site using
Jekyll](https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages/setting-up-a-github-pages-site-with-jekyll).
We recommend following this guide.
Never built a website with GitHub Pages before? [See this marvelous guide by
Jonathan McGlone](http://jmcglone.com/guides/github-pages/) to get you up and
running. This guide will teach you what you need to know about Git, GitHub, and
Jekyll to create your very own website on GitHub Pages.
This page contains some additional information which may be useful when working
on GitHub Pages sites with Jekyll.
## The github-pages gem
Our friends at GitHub have provided the
[github-pages](https://github.com/github/pages-gem) gem which is used to manage
[Jekyll and its dependencies on GitHub Pages](https://pages.github.com/versions/).
Using it in your projects means that when you deploy your site to GitHub Pages,
you will not be caught by unexpected differences between various versions of the
gems.
Note that GitHub Pages runs in `safe` mode and only allows [a set of whitelisted
plugins](https://help.github.com/articles/configuring-jekyll-plugins/#default-plugins).
To use the currently-deployed version of the gem in your project, add the
following to your `Gemfile`:
```ruby
source "https://rubygems.org"
gem "github-pages", group: :jekyll_plugins
```
Be sure to run `bundle update` often.
<div class="note">
<h5>GitHub Pages Documentation, Help, and Support</h5>
<p>
For more information about what you can do with GitHub Pages, as well as for
troubleshooting guides, you should check out
<a href="https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages">GitHubs Pages Help section</a>.
<a href="https://help.github.com/categories/github-pages-basics/">GitHubs Pages Help section</a>.
If all else fails, you should contact <a href="https://github.com/contact">GitHub Support</a>.
</p>
</div>
@@ -36,14 +56,14 @@ on GitHub Pages sites with Jekyll.
### Project Page URL Structure
Sometimes it's nice to preview your Jekyll site before you push your `gh-pages`
branch to GitHub. The subdirectory-like URL structure GitHub uses for
branch to GitHub. However, the subdirectory-like URL structure GitHub uses for
Project Pages complicates the proper resolution of URLs. In order to assure your
site builds properly, use the handy [URL filters]({{ '/docs/liquid/filters/' | relative_url }}):
site builds properly, use the handy [URL filters](../templates/#filters):
{% raw %}
```liquid
<!-- For styles with static names... -->
<link href="{{ 'assets/css/style.css' | relative_url }}" rel="stylesheet">
<link href="{{ "/assets/css/style.css" | relative_url }}" rel="stylesheet">
<!-- For documents/pages whose URLs can change... -->
[{{ page.title }}]("{{ page.url | relative_url }}")
```
@@ -56,7 +76,7 @@ will resolve properly.
## Deploying Jekyll to GitHub Pages
GitHub Pages work by looking at certain branches of repositories on GitHub.
There are two basic types available: [user/organization and project pages](https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages/about-github-pages#types-of-github-pages-sites).
There are two basic types available: [user/organization and project pages](https://help.github.com/articles/user-organization-and-project-pages/).
The way to deploy these two types of sites are nearly identical, except for a
few minor details.
@@ -95,14 +115,14 @@ looking at right now is contained in the [docs
folder]({{ site.repository }}/tree/master/docs) of the same repository.
Please refer to GitHub official documentation on
[user, organization and project pages](https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages/about-github-pages#types-of-github-pages-sites)
[user, organization and project pages](https://help.github.com/articles/user-organization-and-project-pages/)
to see more detailed examples.
<div class="note warning">
<h5>Source files must be in the root directory</h5>
<p>
GitHub Pages <a href="https://help.github.com/en/github/working-with-github-pages/troubleshooting-jekyll-build-errors-for-github-pages-sites">overrides</a>
the <a href="{{ '/docs/configuration/options/' | relative_url }}">“Site Source”</a>
GitHub Pages <a href="https://help.github.com/articles/troubleshooting-github-pages-build-failures#source-setting">overrides</a>
the <a href="/docs/configuration/#global-configuration">“Site Source”</a>
configuration value, so if you locate your files anywhere other than the
root directory, your site may not build correctly.
</p>
@@ -115,17 +135,6 @@ to see more detailed examples.
While Windows is not officially supported, it is possible
to install the <code>github-pages</code> gem on Windows.
Special instructions can be found on our
<a href="{{ '/docs/installation/windows/' | relative_url }}">Windows-specific docs page</a>.
<a href="../windows/#installation">Windows-specific docs page</a>.
</p>
</div>
### Running and Testing Locally
Once the project is configured with the github-pages environment, it's quite hard to switch back and forth with the local settings and the production-level settings. For that we can use certain CLI options to make the workflow hassle-free.
```sh
bundle exec jekyll serve --baseurl=""
```
This will run the jekyll server on your local machine i.e. on `http://localhost:4000`. Refer <a href="{{ '/docs/configuration/options/#serve-command-options' | relative_url }}">server options</a> for available options.

View File

@@ -4,733 +4,6 @@ permalink: "/docs/history/"
note: This file is autogenerated. Edit /History.markdown instead.
---
## 4.2.2 / 2022-03-03
{: #v4-2-2}
### Bug Fixes
{: #bug-fixes-v4-2-2}
- Lock `http_parser.rb` gem to `v0.6.x` on JRuby.
### Development Fixes
{: #development-fixes-v4-2-2}
- Backport [#8830]({{ site.repository }}/issues/8830) for v4.2.x: Add a workflow to build gems consistently ([#8869]({{ site.repository }}/issues/8869))
- Lock `rubocop-performance` to `v1.11.x`.
## 4.2.1 / 2021-09-27
{: #v4-2-1}
### Bug Fixes
{: #bug-fixes-v4-2-1}
- Backport [#8620]({{ site.repository }}/issues/8620) for v4.2.x: Revert [#7253]({{ site.repository }}/issues/7253): "Don't reset site.url to localhost:4000 by default" ([#8808]({{ site.repository }}/issues/8808))
- Backport [#8756]({{ site.repository }}/issues/8756) for v4.2.x: Respect collections_dir config within include tag ([#8794]({{ site.repository }}/issues/8794))
- Backport [#8786]({{ site.repository }}/issues/8786) for v4.2.x: Fix regression in Convertible module from v4.2.0 ([#8793]({{ site.repository }}/issues/8793))
## 4.2.0 / 2020-12-14
{: #v4-2-0}
### Minor Enhancements
{: #minor-enhancements-v4-2-0}
- Warn on command-line with permalink conflict ([#8342]({{ site.repository }}/issues/8342))
- Suppress warning issued for redirect pages ([#8347]({{ site.repository }}/issues/8347))
- Enhance detection of conflicting destination URLs ([#8459]({{ site.repository }}/issues/8459))
- Add `:post_convert` hook to modify HTML content before layout ([#8368]({{ site.repository }}/issues/8368))
- Allow triggering `:post_convert` events atomically ([#8465]({{ site.repository }}/issues/8465))
- Debug reading Page and Layout objects ([#8100]({{ site.repository }}/issues/8100))
- Do not reset `site.url` to `http://localhost:4000` by default ([#7253]({{ site.repository }}/issues/7253))
- Add custom debug strings for Jekyll objects ([#8473]({{ site.repository }}/issues/8473))
- Debug reading data files in a site ([#8481]({{ site.repository }}/issues/8481))
### Bug Fixes
{: #bug-fixes-v4-2-0}
- Replace nested conditional with guard clauses ([#8294]({{ site.repository }}/issues/8294))
- Fix: security bump ([#8349]({{ site.repository }}/issues/8349))
- Fix path matching regex in post_url Liquid tag ([#8375]({{ site.repository }}/issues/8375))
- Enable `Performance/ChainArrayAllocation` cop ([#8404]({{ site.repository }}/issues/8404))
- Enable Lint/NoReturnInBeginEndBlocks Cop ([#8457]({{ site.repository }}/issues/8457))
- Generate items from `site.include` list only once ([#8463]({{ site.repository }}/issues/8463))
- Explicitly return nil after site process phase ([#8472]({{ site.repository }}/issues/8472))
### Optimization Fixes
{: #optimization-fixes-v4-2-0}
- Implement custom delegators for drop methods ([#8183]({{ site.repository }}/issues/8183))
- Handle `nil` argument to `Jekyll.sanitized_path` ([#8415]({{ site.repository }}/issues/8415))
- Cache `Jekyll.sanitized_path` ([#8424]({{ site.repository }}/issues/8424))
- Memoize array of drop getter method names ([#8421]({{ site.repository }}/issues/8421))
- Reduce string allocations from the `link` tag ([#8387]({{ site.repository }}/issues/8387))
- Optimize parsing of parameters in `include` tag ([#8192]({{ site.repository }}/issues/8192))
- Stash documents `write?` attribute in a variable ([#8389]({{ site.repository }}/issues/8389))
- Reduce string allocations from generating doc URLs ([#8392]({{ site.repository }}/issues/8392))
- Check if site is in incremental mode optimally ([#8401]({{ site.repository }}/issues/8401))
- Utilize flexibility of `Site#in_dest_dir` ([#8403]({{ site.repository }}/issues/8403))
- Reduce allocations from rendering item as liquid ([#8406]({{ site.repository }}/issues/8406))
- Compute relative_path of pages using PathManager ([#8408]({{ site.repository }}/issues/8408))
- Reduce allocation from `normalize_whitespace` filter ([#8400]({{ site.repository }}/issues/8400))
- Use `Regexp#match?` when `MatchData` is not required ([#8427]({{ site.repository }}/issues/8427))
- Check default front matter scope against symbols ([#8393]({{ site.repository }}/issues/8393))
- Stash frequently used `Drop` setter keys for reuse ([#8394]({{ site.repository }}/issues/8394))
- Memoize defaults computed for Convertibles ([#8451]({{ site.repository }}/issues/8451))
- Reduce array allocations from merging categories ([#8453]({{ site.repository }}/issues/8453))
- Memoize destination of pages, documents and staticfiles ([#8458]({{ site.repository }}/issues/8458))
- Reduce allocations from computing item property ([#8485]({{ site.repository }}/issues/8485))
- Optimize `Page#dir` with a private method ([#8489]({{ site.repository }}/issues/8489))
- Stash attribute hash for Liquid computed for pages ([#8497]({{ site.repository }}/issues/8497))
### Development Fixes
{: #development-fixes-v4-2-0}
- Update cucumber gem to version 4.1 ([#8278]({{ site.repository }}/issues/8278))
- Move permalink styles data to constant ([#8282]({{ site.repository }}/issues/8282))
- Update rubocop gem to 0.87.1 ([#8287]({{ site.repository }}/issues/8287))
- Update RuboCop to-do file ([#8296]({{ site.repository }}/issues/8296))
- Fix `rake console` generating LoadError ([#8312]({{ site.repository }}/issues/8312))
- Configure Performance cops ([#8369]({{ site.repository }}/issues/8369))
- Update rubocop gem to 0.90.0 ([#8313]({{ site.repository }}/issues/8313))
- Refactor `Jekyll::Utils::Platforms` ([#7236]({{ site.repository }}/issues/7236))
- Bump RuboCop to v0.91.x ([#8391]({{ site.repository }}/issues/8391))
- Add workflow to build and profile third-party repo ([#8398]({{ site.repository }}/issues/8398))
- Bump RuboCop to v0.92.x
- Update cucumber gem version to 5.1.2 ([#8413]({{ site.repository }}/issues/8413))
- Fix test suite compatibility with JRuby ([#8418]({{ site.repository }}/issues/8418))
- chore(deps): bump Rubocop to 0.93.0 ([#8430]({{ site.repository }}/issues/8430))
- Use Ruby 2.7.1 in GitHub Actions ([#8444]({{ site.repository }}/issues/8444))
- Test that Liquid expressions are not deeply evaled ([#8292]({{ site.repository }}/issues/8292))
- Test rendering arbitrary Liquid variables by default ([#7414]({{ site.repository }}/issues/7414))
- Migrate TravisCI jobs to GitHub Actions ([#8492]({{ site.repository }}/issues/8492))
### Documentation
- Update pointer to special permalink variables for collections ([#8274]({{ site.repository }}/issues/8274))
- Fix special treatment for &#39;page 1&#39; in docs of pagination ([#8230]({{ site.repository }}/issues/8230))
- Add Formcake to forms section ([#8283]({{ site.repository }}/issues/8283))
- Add a note on the rendering process in the docs ([#8291]({{ site.repository }}/issues/8291))
- Add refactoring type to PULL_REQUEST_TEMPLATE ([#8297]({{ site.repository }}/issues/8297))
- Update resources.md ([#7864]({{ site.repository }}/issues/7864))
- Extra apostrophes in an URL ([#8319]({{ site.repository }}/issues/8319))
- Clarify target of subordinate clause ([#8320]({{ site.repository }}/issues/8320))
- Cherry-pick commits from conflicting branch `docs-40`
- Update documentation on third party site ([#8352]({{ site.repository }}/issues/8352))
- Update default.md with info requested in [#8314]({{ site.repository }}/issues/8314) ([#8353]({{ site.repository }}/issues/8353))
- Clarify description of `safe` option ([#8354]({{ site.repository }}/issues/8354))
- Simplifying the Git post-receive hook-example ([#8358]({{ site.repository }}/issues/8358))
- Add missing doc for build and serve commands ([#8365]({{ site.repository }}/issues/8365))
- Docs Review: Getting Started ([#8372]({{ site.repository }}/issues/8372))
- Add note about rebooting system after installation ([#8359]({{ site.repository }}/issues/8359))
- Use data file to render table at `/docs/configuration/options/#global-configuration` ([#8377]({{ site.repository }}/issues/8377))
- Use data file(s) to render table(s) at `/docs/configuration/options/` ([#8380]({{ site.repository }}/issues/8380))
- Improve maintainability of config option data ([#8383]({{ site.repository }}/issues/8383))
- Remove CircleCI v1 docs ([#8410]({{ site.repository }}/issues/8410))
- Remove `NOKOGIRI_USE_SYSTEM_LIBRARIES` from Travis CI docs ([#8409]({{ site.repository }}/issues/8409))
- Add links to all Jekyll themes on GitHub tagged with #jekyll-theme ([#8447]({{ site.repository }}/issues/8447))
- Document initializing project Gemfile from scratch ([#8450]({{ site.repository }}/issues/8450))
- Document installation of additional dependencies for installing Jekyll on Fedora ([#8456]({{ site.repository }}/issues/8456))
- Improve documentation on Hooks in Jekyll ([#8467]({{ site.repository }}/issues/8467))
- Build docs site with GitHub Actions ([#8201]({{ site.repository }}/issues/8201))
- Add link to Assets page from `_sass` section in `_docs/structure.md` ([#8486]({{ site.repository }}/issues/8486))
### Site Enhancements
{: #site-enhancements-v4-2-0}
- Fix rendering of *showcase* images ([#8504]({{ site.repository }}/issues/8504))
## 4.1.1 / 2020-06-24
{: #v4-1-1}
### Bug Fixes
{: #bug-fixes-v4-1-1}
- Disable page excerpts by default ([#8222]({{ site.repository }}/issues/8222))
- Revert introduction of PageDrop ([#8221]({{ site.repository }}/issues/8221))
- Don&#39;t generate excerpts for non-html pages ([#8234]({{ site.repository }}/issues/8234))
- Make page excerpts consistent with doc excerpts ([#8236]({{ site.repository }}/issues/8236))
### Documentation
- Replace deprecated &#39;show&#39; command with &#39;info&#39; ([#8235]({{ site.repository }}/issues/8235))
- Change name to ▲Vercel ([#8247]({{ site.repository }}/issues/8247))
- Add language and examples to describe how to use the configuration op… ([#8249]({{ site.repository }}/issues/8249))
- Fix missing yaml front matter colon and adjust/add clarifying language. ([#8250]({{ site.repository }}/issues/8250))
- correct typo ([#8261]({{ site.repository }}/issues/8261))
- Allow hyperlinks to specific filter documentation ([#8231]({{ site.repository }}/issues/8231))
- Update link to Netlify step-by-step guide ([#8264]({{ site.repository }}/issues/8264))
- Fix grammar in documentation section ([#8265]({{ site.repository }}/issues/8265))
### Site Enhancements
{: #site-enhancements-v4-1-1}
- Including correct Sketch website ([#8241]({{ site.repository }}/issues/8241))
- Release post for v4.1.1 ([#8243]({{ site.repository }}/issues/8243))
### Development Fixes
{: #development-fixes-v4-1-1}
- Bump RuboCop to v0.85.x ([#8223]({{ site.repository }}/issues/8223))
- Expect drive letter only on vanilla windows ([#8227]({{ site.repository }}/issues/8227))
## 4.1.0 / 2020-05-27
{: #v4-1-0}
### Bug Fixes
{: #bug-fixes-v4-1-0}
- Memoize `absolute_url` and `relative_url` filters ([#7793]({{ site.repository }}/issues/7793))
- Fix documentation comment for `Jekyll::Converters::Identity` ([#7883]({{ site.repository }}/issues/7883))
- Optimize `Jekyll::Filters#item_property` ([#7696]({{ site.repository }}/issues/7696))
- Allow multiple binary operators in `where_exp` filter ([#8047]({{ site.repository }}/issues/8047))
- Fix documents custom-ordering logic ([#8028]({{ site.repository }}/issues/8028))
- Use `layout.path` when rendering the Liquid layout ([#8069]({{ site.repository }}/issues/8069))
- Reduce array allocations from `StaticFile#path` ([#8083]({{ site.repository }}/issues/8083))
- Simplify `Jekyll::Renderer#validate_layout` ([#8064]({{ site.repository }}/issues/8064))
- Add static file's basename to its `url_placeholder` ([#7908]({{ site.repository }}/issues/7908))
- Clear cached Liquid template scope before render ([#7967]({{ site.repository }}/issues/7967))
- Cache `URLFilter` results of string inputs per site ([#7990]({{ site.repository }}/issues/7990))
- Use `platforms` instead of `install_if` in Gemfile ([#8140]({{ site.repository }}/issues/8140))
- Config include trailing slash ([#8113]({{ site.repository }}/issues/8113))
- Improve path normalization in liquid_renderer ([#8075]({{ site.repository }}/issues/8075))
- Switch slugify regex to support more Unicode character groups ([#8167]({{ site.repository }}/issues/8167))
- Check if entry is a directory once per enumerator ([#8177]({{ site.repository }}/issues/8177))
- Filter out exclusively excluded entries sooner ([#7482]({{ site.repository }}/issues/7482))
- Return `relative_url` if site.url is an empty string ([#7988]({{ site.repository }}/issues/7988))
- Configure kramdown toc_levels as array by default ([#8015]({{ site.repository }}/issues/8015))
- Reduce `Pathname` objects from front matter defaults ([#8067]({{ site.repository }}/issues/8067))
- Simplify `Jekyll::Hooks.trigger` logic ([#8044]({{ site.repository }}/issues/8044))
- Quicker categories for documents without superdirs ([#7987]({{ site.repository }}/issues/7987))
- Reduce `Jekyll::Renderer` instances during a build ([#7570]({{ site.repository }}/issues/7570))
- Escape regex characters in paths to match ([#8138]({{ site.repository }}/issues/8138))
- Provide invokables for common drop query keys ([#8165]({{ site.repository }}/issues/8165))
- Optimize path sanitization of default front matter ([#8154]({{ site.repository }}/issues/8154))
- Initialize static files' data hash only if needed ([#8188]({{ site.repository }}/issues/8188))
- Initialize include-files as Jekyll objects ([#8158]({{ site.repository }}/issues/8158))
### Minor Enhancements
{: #minor-enhancements-v4-1-0}
- serve: add support for ECC certificates ([#7768]({{ site.repository }}/issues/7768))
- Update `item_property` to recognize integers ([#7878]({{ site.repository }}/issues/7878))
- Include `_config.yml` in a new theme's gemspec ([#7865]({{ site.repository }}/issues/7865))
- Add an option to easily disable disk-cache ([#7928]({{ site.repository }}/issues/7928))
- Optimize markdown parsing with Kramdown by reusing the options and parser objects ([#8013]({{ site.repository }}/issues/8013))
- Add `PageDrop` to provide Liquid templates with data ([#7992]({{ site.repository }}/issues/7992))
- Optimize `Kramdown::JekyllDocument#to_html` calls ([#8041]({{ site.repository }}/issues/8041))
- Configure default language for syntax-highlighting ([#8035]({{ site.repository }}/issues/8035))
- Remove dev dependencies from new theme-gem gemspec ([#8042]({{ site.repository }}/issues/8042))
- Allow disabling import of theme configuration ([#8131]({{ site.repository }}/issues/8131))
- Allow excerpts to be generated for `Page` objects ([#7642]({{ site.repository }}/issues/7642))
- Profile various stages of a site's build process ([#6760]({{ site.repository }}/issues/6760))
- Add find filters to optimize where-first chains ([#8171]({{ site.repository }}/issues/8171))
- Make `number_of_words` filter respect CJK characters ([#7813]({{ site.repository }}/issues/7813))
- Allow extensionless document in a strict site ([#7950]({{ site.repository }}/issues/7950))
- Add `:slugified_categories` URL placeholder ([#8094]({{ site.repository }}/issues/8094))
### Documentation
- Add dropped 'title: Staff' to the code ([#7805]({{ site.repository }}/issues/7805))
- Clarify docs for static files in collection ([#7812]({{ site.repository }}/issues/7812))
- Rephrase the CircleCI v2 section ([#7815]({{ site.repository }}/issues/7815))
- Update old GitHub wiki URL with new one ([#7823]({{ site.repository }}/issues/7823))
- Update JekyllConf page with 2019 talks ([#7826]({{ site.repository }}/issues/7826))
- link for memberships ([#7825]({{ site.repository }}/issues/7825))
- Doc: minor fix, should be greater or equal to min version ([#7856]({{ site.repository }}/issues/7856))
- Update third-party.md - Fix broken link ([#7857]({{ site.repository }}/issues/7857))
- clarify _config.yml/collections type ([#7873]({{ site.repository }}/issues/7873))
- Replace backticks with HTML tags in data file ([#7879]({{ site.repository }}/issues/7879))
- add new theme source ([#7875]({{ site.repository }}/issues/7875))
- fixed grammatical error (it&#39;s --&gt; its) ([#7887]({{ site.repository }}/issues/7887))
- Docs: Clarify organizing pages into subfolders ([#7896]({{ site.repository }}/issues/7896))
- Disambiguate the placeholder of permalink ([#7906]({{ site.repository }}/issues/7906))
- docs: add short serve command for livereload ([#7919]({{ site.repository }}/issues/7919))
- docs: add options for watch and force polling ([#7918]({{ site.repository }}/issues/7918))
- add install instructions for ArchLinux and openSUSE ([#7920]({{ site.repository }}/issues/7920))
- Improve index page of Jekyll documentation ([#7926]({{ site.repository }}/issues/7926))
- Include path in `jekyll new` commands (Usage docs) ([#7931]({{ site.repository }}/issues/7931))
- Change `affect` to `effect` in the collections docs ([#7937]({{ site.repository }}/issues/7937))
- Changed deprecated command in themes documentation ([#7941]({{ site.repository }}/issues/7941))
- Adds some documentation for the `:clean`, `:on_obsolete` hook ([#7954]({{ site.repository }}/issues/7954))
- docs: fix broken link ([#7955]({{ site.repository }}/issues/7955))
- Corrected typo ([#7975]({{ site.repository }}/issues/7975))
- docs: remove watch option in config ([#7940]({{ site.repository }}/issues/7940))
- Correct a sentence in the documentation ([#7978]({{ site.repository }}/issues/7978))
- Fix YAML representation of `group_by` result ([#7979]({{ site.repository }}/issues/7979))
- Move `--baseurl` to build command options ([#7985]({{ site.repository }}/issues/7985))
- Correct documentation of filters ([#7989]({{ site.repository }}/issues/7989))
- Document sorting two documents by their `date` ([#7870]({{ site.repository }}/issues/7870))
- Fix English grammar error ([#7994]({{ site.repository }}/issues/7994))
- Update 03-front-matter.md ([#7996]({{ site.repository }}/issues/7996))
- Add Kentico Kontent CMS integration to resources ([#8000]({{ site.repository }}/issues/8000))
- Update 07-assets.md ([#7413]({{ site.repository }}/issues/7413))
- Fix file references in Step by Step Tutorial's Assets step ([#8007]({{ site.repository }}/issues/8007))
- docs: improve highlighting of code blocks ([#8017]({{ site.repository }}/issues/8017))
- remove leading slash from Sass file location ([#8021]({{ site.repository }}/issues/8021))
- [Docs] Fix asset link ref in step-by-step tutorial ([#8026]({{ site.repository }}/issues/8026))
- Corrected command to modify PATH ([#8029]({{ site.repository }}/issues/8029))
- Corrected command to modify PATH ([#8030]({{ site.repository }}/issues/8030))
- Docs: Render full contents of just the latest post ([#8032]({{ site.repository }}/issues/8032))
- docs: improvements for note boxes ([#8037]({{ site.repository }}/issues/8037))
- Non-deprecated `vendor/bundle` path configuration ([#8048]({{ site.repository }}/issues/8048))
- Update 09-collections.md ([#8060]({{ site.repository }}/issues/8060))
- Remove extra paragraph tags ([#8063]({{ site.repository }}/issues/8063))
- Add default front matter for tutorials collection ([#8081]({{ site.repository }}/issues/8081))
- Create CSV to table tutorial ([#8090]({{ site.repository }}/issues/8090))
- Add version badge for Custom Sorting of Documents ([#8098]({{ site.repository }}/issues/8098))
- Docs: Fix grammar in `_docs/front-matter.md` ([#8097]({{ site.repository }}/issues/8097))
- Update variables.md ([#8106]({{ site.repository }}/issues/8106))
- Add help about Gentoo/Linux ([#8002]({{ site.repository }}/issues/8002))
- Update documentation on third party site ([#8122]({{ site.repository }}/issues/8122))
- Added Clear Linux ([#8132]({{ site.repository }}/issues/8132))
- Added note about OS specific installation instructions. ([#8135]({{ site.repository }}/issues/8135))
- Fix broken URL in the Resources Page on the Documentation Site ([#8136]({{ site.repository }}/issues/8136))
- Docs: Deploy Jekyll site with GitHub Actions ([#8119]({{ site.repository }}/issues/8119))
- Clarify `bundle config` in Bundler tutorial ([#8150]({{ site.repository }}/issues/8150))
- docs: update your-first-plugin.md ([#8147]({{ site.repository }}/issues/8147))
- Fix typo in documentation on GitHub Actions ([#8162]({{ site.repository }}/issues/8162))
- Ease discovery of CLI commands (in their entirety) ([#8178]({{ site.repository }}/issues/8178))
- Remove `sudo` from Travis CI tutorial ([#8187]({{ site.repository }}/issues/8187))
- Add GitLab Pages to 3rd party list ([#8191]({{ site.repository }}/issues/8191))
- docs: add 21yunbox for deployment ([#8193]({{ site.repository }}/issues/8193))
- Improve documentation on tags and categories ([#8196]({{ site.repository }}/issues/8196))
### Development Fixes
{: #development-fixes-v4-1-0}
- Ci/GitHub actions ([#7822]({{ site.repository }}/issues/7822))
- Rubocop version upgrade ([#7846]({{ site.repository }}/issues/7846))
- Split action steps to avoid using `&&` on Windows ([#7885]({{ site.repository }}/issues/7885))
- Upgrade rake to use version 13 ([#7910]({{ site.repository }}/issues/7910))
- Update dependency constraint to allow RuboCop v0.76 ([#7893]({{ site.repository }}/issues/7893))
- Use bash executable consistently ([#7909]({{ site.repository }}/issues/7909))
- Test with JRuby 9.2.9.0 ([#7779]({{ site.repository }}/issues/7779))
- Bump RuboCop to v0.79.x ([#7970]({{ site.repository }}/issues/7970))
- Remove post-install message from gemspec ([#7974]({{ site.repository }}/issues/7974))
- Attain Ruby 3.0 compatibility ([#7948]({{ site.repository }}/issues/7948))
- Test `where` filter handling numeric property values ([#7821]({{ site.repository }}/issues/7821))
- chore(deps): rubocop 0.80.0 ([#8012]({{ site.repository }}/issues/8012))
- Update unit tests for Kramdown-based converter ([#8014]({{ site.repository }}/issues/8014))
- Add Visual Studio Code Development Container ([#8016]({{ site.repository }}/issues/8016))
- chore: simplify require for `Jekyll::VERSION` ([#8057]({{ site.repository }}/issues/8057))
- Remove version-constraint relaxation for i18n gem ([#8055]({{ site.repository }}/issues/8055))
- Mirror `spec.homepage` as `metadata["homepage_uri"]` ([#8056]({{ site.repository }}/issues/8056))
- Bump Ruby versions on Travis builds ([#8088]({{ site.repository }}/issues/8088))
- chore(ci): cache dependencies ([#8168]({{ site.repository }}/issues/8168))
### Site Enhancements
{: #site-enhancements-v4-1-0}
- Optimize rendering of the documentation site ([#8020]({{ site.repository }}/issues/8020))
- Utilize `relative_url` filter in documentation site ([#8089]({{ site.repository }}/issues/8089))
- Render tutorial metadata in documentation site ([#8092]({{ site.repository }}/issues/8092))
- Improve syntax-highlighting in documentation site ([#8079]({{ site.repository }}/issues/8079))
- Site: Filter through just the *docs* collection ([#8170]({{ site.repository }}/issues/8170))
## 4.0.1 / 2020-05-08
{: #v4-0-1}
### Bug Fixes
{: #bug-fixes-v4-0-1}
- Prevent console warning with Ruby 2.7 ([#8124]({{ site.repository }}/issues/8124))
- Clear cached Liquid template scope before render ([#8141]({{ site.repository }}/issues/8141))
- Add static file's basename to its url_placeholder ([#8142]({{ site.repository }}/issues/8142))
- Update item_property to recognize integers ([#8160]({{ site.repository }}/issues/8160))
### Development Fixes
{: #development-fixes-v4-0-1}
- Fix Kramdown converter based tests for v4.0.x ([#8143]({{ site.repository }}/issues/8143))
## 3.9.2 / 2022-03-27
{: #v3-9-2}
### Bug Fixes
{: #bug-fixes-v3-9-2}
- Lock `http_parser.rb` gem to `v0.6.x` on JRuby ([#8943]({{ site.repository }}/issues/8943))
- Backport [#8756]({{ site.repository }}/issues/8756) for v3.9.x: Respect collections_dir config within include tag ([#8795]({{ site.repository }}/issues/8795))
- Backport [#8965]({{ site.repository }}/issues/8965) for v3.9.x: Fix response header for content served via `jekyll serve` ([#8976]({{ site.repository }}/issues/8976))
### Development Fixes
{: #development-fixes-v3-9-2}
- Update and fix CI for `3.9-stable` on Ruby 3.x ([#8942]({{ site.repository }}/issues/8942))
- Fix CI for commits to `3.9-stable` branch ([#8788]({{ site.repository }}/issues/8788))
## 3.9.1 / 2021-04-08
{: #v3-9-1}
### Bug Fixes
{: #bug-fixes-v3-9-1}
- Backport [#8618]({{ site.repository }}/issues/8618) for v3.9.x: Update include tag to be more permissive ([#8629]({{ site.repository }}/issues/8629))
## 3.9.0 / 2020-08-05
{: #v3-9-0}
### Minor Enhancements
{: #minor-enhancements-v3-9-0}
- Allow use of kramdown v2 ([#8322]({{ site.repository }}/issues/8322))
- Add default language for kramdown syntax highlighting ([#8325]({{ site.repository }}/issues/8325))
## 3.8.7 / 2020-05-08
{: #v3-8-7}
### Bug Fixes
{: #bug-fixes-v3-8-7}
- Prevent console warnings with Ruby 2.7 ([#8125]({{ site.repository }}/issues/8125))
## 4.0.0 / 2019-08-19
{: #v4-0-0}
### Major Enhancements
{: #major-enhancements-v4-0-0}
- Drop ruby 2.3 ([#7454]({{ site.repository }}/issues/7454))
- Drop support for Ruby 2.1 and 2.2 ([#6560]({{ site.repository }}/issues/6560))
- Drop support for older versions of Rouge ([#6978]({{ site.repository }}/issues/6978))
- Drop support for pygments as syntax-highlighter ([#7118]({{ site.repository }}/issues/7118))
- Drop support for Redcarpet ([#6987]({{ site.repository }}/issues/6987))
- Drop support for rdiscount ([#6988]({{ site.repository }}/issues/6988))
- Drop support for `jekyll-watch-1.4.0` and older ([#7287]({{ site.repository }}/issues/7287))
- Incorporate `relative_url` filter in `link` tag ([#6727]({{ site.repository }}/issues/6727))
- Upgrade kramdown dependency to v2.x ([#7492]({{ site.repository }}/issues/7492))
- Upgrade jekyll-sass-converter to v2.x - Sassc + sourcemaps ([#7778]({{ site.repository }}/issues/7778))
- Upgrade i18n to v1.x ([#6931]({{ site.repository }}/issues/6931))
- Add `Jekyll::Cache` class to handle caching on disk ([#7169]({{ site.repository }}/issues/7169))
- Cache converted markdown ([#7159]({{ site.repository }}/issues/7159))
- Cache: Do not dump undumpable objects ([#7190]({{ site.repository }}/issues/7190))
- Cache matched defaults sets for given parameters ([#6888]({{ site.repository }}/issues/6888))
- Ignore cache directory ([#7184]({{ site.repository }}/issues/7184))
- Add `Site#in_cache_dir` helper method ([#7160]({{ site.repository }}/issues/7160))
- Remove &#39;cache_dir&#39; during `jekyll clean` ([#7158]({{ site.repository }}/issues/7158))
- Cache parsed Liquid templates in memory ([#7136]({{ site.repository }}/issues/7136))
- Only read layouts from source_dir or theme_dir ([#6788]({{ site.repository }}/issues/6788))
- Allow custom sorting of collection documents ([#7427]({{ site.repository }}/issues/7427))
- Always exclude certain paths from being processed ([#7188]({{ site.repository }}/issues/7188))
- Remove Jekyll::Utils#strip_heredoc in favor of a Ruby &gt; 2.3 built in ([#7584]({{ site.repository }}/issues/7584))
- Incorporate `relative_url` within `post_url` tag ([#7589]({{ site.repository }}/issues/7589))
- Remove patch to modify config for kramdown ([#7699]({{ site.repository }}/issues/7699))
### Minor Enhancements
{: #minor-enhancements-v4-0-0}
- Enhance `--blank` scaffolding ([#7310]({{ site.repository }}/issues/7310))
- Use `jekyll-compose` if installed ([#6932]({{ site.repository }}/issues/6932))
- Disable Liquid via front matter ([#6824]({{ site.repository }}/issues/6824))
- Configure cache_dir ([#7232]({{ site.repository }}/issues/7232))
- ISO week date drops ([#5981]({{ site.repository }}/issues/5981))
- Fix custom 404 page for GitHub pages ([#7132]({{ site.repository }}/issues/7132))
- Load config file from within current theme-gem ([#7304]({{ site.repository }}/issues/7304))
- Suggest re-running command with `--trace` on fail ([#6551]({{ site.repository }}/issues/6551))
- Support for binary operators in where_exp filter ([#6998]({{ site.repository }}/issues/6998))
- Automatically load `_config.toml` ([#7299]({{ site.repository }}/issues/7299))
- Add vendor folder to a newly installed site&#39;s .gitignore ([#6968]({{ site.repository }}/issues/6968))
- Output Jekyll Version while debugging ([#7173]({{ site.repository }}/issues/7173))
- Memoize computing excerpt&#39;s relative_path ([#6951]({{ site.repository }}/issues/6951))
- Skip processing posts that can not be read ([#7302]({{ site.repository }}/issues/7302))
- Memoize the return value of Site#documents ([#7273]({{ site.repository }}/issues/7273))
- Cache globbed paths in front matter defaults ([#7345]({{ site.repository }}/issues/7345))
- Cache computed item property ([#7301]({{ site.repository }}/issues/7301))
- Cleanup Markdown converter ([#7519]({{ site.repository }}/issues/7519))
- Do not process Liquid in post excerpt when disabled in front matter ([#7146]({{ site.repository }}/issues/7146))
- Liquefied link tag ([#6269]({{ site.repository }}/issues/6269))
- Update item_property to return numbers as numbers instead of strings ([#6608]({{ site.repository }}/issues/6608))
- Use `.markdown` extension for page templates ([#7126]({{ site.repository }}/issues/7126))
- Add support for `*.xhtml` files ([#6854]({{ site.repository }}/issues/6854))
- Allow i18n v0.9.5 and higher ([#7044]({{ site.repository }}/issues/7044))
- Ignore permission error of /proc/version ([#7267]({{ site.repository }}/issues/7267))
- Strip extra slashes via `Jekyll.sanitized_path` ([#7182]({{ site.repository }}/issues/7182))
- Site template: remove default config for markdown ([#7285]({{ site.repository }}/issues/7285))
- Add a custom inspect string for StaticFile objects ([#7422]({{ site.repository }}/issues/7422))
- Remind user to include gem in the Gemfile on error ([#7476]({{ site.repository }}/issues/7476))
- Search Front matter defaults for Page objects with relative_path ([#7261]({{ site.repository }}/issues/7261))
- Lock use of `tzinfo` gem to v1.x ([#7521]({{ site.repository }}/issues/7521), [#7562]({{ site.repository }}/issues/7562))
- Utilize absolute paths of user-provided file paths ([#7450]({{ site.repository }}/issues/7450))
- Detect `nil` and empty values in objects with `where` filter ([#7580]({{ site.repository }}/issues/7580))
- Initialize mutations for Drops only if necessary ([#7657]({{ site.repository }}/issues/7657))
- Reduce Array allocations via Jekyll::Cleaner ([#7659]({{ site.repository }}/issues/7659))
- Encode and unencode urls only as required ([#7654]({{ site.repository }}/issues/7654))
- Reduce string allocations with better alternatives ([#7643]({{ site.repository }}/issues/7643))
- Reduce allocations from Jekyll::Document instances ([#7625]({{ site.repository }}/issues/7625))
- Add `type` attribute to Document instances ([#7406]({{ site.repository }}/issues/7406))
- Reduce allocations from where-filter ([#7653]({{ site.repository }}/issues/7653))
- Memoize SiteDrop#documents to reduce allocations ([#7697]({{ site.repository }}/issues/7697))
- Add PathManager class to cache interim paths ([#7732]({{ site.repository }}/issues/7732))
- Remove warnings and fixes for deprecated config ([#7440]({{ site.repository }}/issues/7440))
- Delegate --profile tabulation to `terminal-table` ([#7627]({{ site.repository }}/issues/7627))
### Bug Fixes
{: #bug-fixes-v4-0-0}
- Security: fix `include` bypass of `EntryFilter#filter` symlink check ([#7226]({{ site.repository }}/issues/7226))
- Theme gems: ensure directories aren&#39;t symlinks ([#7419]({{ site.repository }}/issues/7419))
- Add call to unused method `validate_options` in `commands/serve.rb` ([#7122]({{ site.repository }}/issues/7122))
- Check if scope applies to type before given path ([#7263]({{ site.repository }}/issues/7263))
- Document two methods, simplify one of the methods ([#7270]({{ site.repository }}/issues/7270))
- Check key in collections only if it isn&#39;t &#34;posts&#34; ([#7277]({{ site.repository }}/issues/7277))
- Interpolate Jekyll::Page subclass on inspection ([#7203]({{ site.repository }}/issues/7203))
- Measure the no. of times a template gets rendered ([#7316]({{ site.repository }}/issues/7316))
- Reduce array traversal in Jekyll::Reader ([#7157]({{ site.repository }}/issues/7157))
- Re-implement handling Liquid blocks in excerpts ([#7250]({{ site.repository }}/issues/7250))
- Documents should be able to render their date ([#7404]({{ site.repository }}/issues/7404))
- Fix Interpreter warning from Jekyll::Renderer ([#7448]({{ site.repository }}/issues/7448))
- Loggers should accept both numbers and symbols ([#6967]({{ site.repository }}/issues/6967))
- Replace regex arg to :gsub with a string arg ([#7189]({{ site.repository }}/issues/7189))
- Dont write static files from unrendered collection ([#7410]({{ site.repository }}/issues/7410))
- Excerpt handling of custom and intermediate tags ([#7382]({{ site.repository }}/issues/7382))
- Change future post loglevel to warn to help user narrow down issues ([#7527]({{ site.repository }}/issues/7527))
- Handle files with trailing dots in their basename ([#7315]({{ site.repository }}/issues/7315))
- Fix unnecessary allocations via StaticFileReader ([#7572]({{ site.repository }}/issues/7572))
- Don&#39;t check if site URL is absolute if it is nil ([#7498]({{ site.repository }}/issues/7498))
- Avoid unnecessary duplication of pages array ([#7272]({{ site.repository }}/issues/7272))
- Memoize Site#post_attr_hash ([#7276]({{ site.repository }}/issues/7276))
- Memoize Document#excerpt_separator ([#7569]({{ site.repository }}/issues/7569))
- Optimize Document::DATE_FILENAME_MATCHER to match valid filenames ([#7292]({{ site.repository }}/issues/7292))
- Escape valid special chars in a site&#39;s path name ([#7568]({{ site.repository }}/issues/7568))
- Replace `name` in Page#inspect with relative_path ([#7434]({{ site.repository }}/issues/7434))
- Log a warning when the slug is empty ([#7357]({{ site.repository }}/issues/7357))
- Push Markdown link refs to excerpt only as required ([#7577]({{ site.repository }}/issues/7577))
- Fix broken include_relative usage in excerpt ([#7633]({{ site.repository }}/issues/7633))
- Initialize and reset glob_cache only as necessary ([#7658]({{ site.repository }}/issues/7658))
- Revert memoizing Site#docs_to_write and #documents ([#7684]({{ site.repository }}/issues/7684))
- Backport [#7684]({{ site.repository }}/issues/7684) for v3.8.x: Revert memoizing Site#docs_to_write and refactor #documents ([#7689]({{ site.repository }}/issues/7689))
- Backport [#7213]({{ site.repository }}/issues/7213) and [#7633]({{ site.repository }}/issues/7633) for v3.8.x: Fix broken include_relative usage in excerpt ([#7690]({{ site.repository }}/issues/7690))
- Don&#39;t read symlinks in site.include in safe mode ([#7711]({{ site.repository }}/issues/7711))
- Replace `String#=~` with `String#match?` ([#7723]({{ site.repository }}/issues/7723))
- Update log output for an invalid theme directory ([#7679]({{ site.repository }}/issues/7679))
- Remove configuration of theme sass files from Core ([#7290]({{ site.repository }}/issues/7290))
- Actually conditionally include liquid-c ([#7792]({{ site.repository }}/issues/7792))
- Test number_like regex on stringified property ([#7788]({{ site.repository }}/issues/7788))
### Development Fixes
{: #development-fixes-v4-0-0}
- Upgrade liquid-c to v4.0 ([#7375]({{ site.repository }}/issues/7375))
- Bump RuboCop to v0.71.0 ([#7687]({{ site.repository }}/issues/7687))
- Target Ruby 2.4 syntax ([#7583]({{ site.repository }}/issues/7583))
- Fix: RuboCop offenses ([#7769]({{ site.repository }}/issues/7769))
- Use communicative method parameters ([#7566]({{ site.repository }}/issues/7566))
- Scan `assert_equal` methods and rectify any offenses with a custom RuboCop cop ([#7130]({{ site.repository }}/issues/7130))
- CI: Test with Ruby 2.6 ([#7438]({{ site.repository }}/issues/7438))
- CI: Test with Ruby 2.6 on AppVeyor ([#7518]({{ site.repository }}/issues/7518))
- CI: Update RuboCop config ([#7050]({{ site.repository }}/issues/7050))
- CI: Add a script to profile docs ([#7540]({{ site.repository }}/issues/7540))
- CI(Appveyor): shallow clone with 5 last commits ([#7312]({{ site.repository }}/issues/7312))
- CI: Test with oldest and latest Ruby only ([#7412]({{ site.repository }}/issues/7412))
- CI: Update excludes for CodeClimate Analyses ([#7365]({{ site.repository }}/issues/7365))
- CI: Lock Travis to Bundler-1.16.2 ([#7144]({{ site.repository }}/issues/7144))
- CI: Bump tested version of JRuby to 9.2.7.0 ([#7612]({{ site.repository }}/issues/7612))
- CI: Do not install docs on updating gems on Travis ([#7706]({{ site.repository }}/issues/7706))
- Update gemspec ([#7425]({{ site.repository }}/issues/7425))
- deps: relax version constraint on classifier-reborn gem ([#7471]({{ site.repository }}/issues/7471))
- deps: update yajl-ruby ([#7278]({{ site.repository }}/issues/7278))
- deps: bump yajl-ruby to v1.4.0 ([#6976]({{ site.repository }}/issues/6976))
- Create symlink only if target is accessible ([#7429]({{ site.repository }}/issues/7429))
- Switch to `:install_if` for wdm gem ([#7372]({{ site.repository }}/issues/7372))
- Add cucumber feature to test include_relative tag ([#7213]({{ site.repository }}/issues/7213))
- Small benchmark refactoring ([#7211]({{ site.repository }}/issues/7211))
- Fix incorrectly passed arguments to assert_equal ([#7134]({{ site.repository }}/issues/7134))
- fix up refute_equal call ([#7133]({{ site.repository }}/issues/7133))
- Fix RuboCop offences in test files ([#7128]({{ site.repository }}/issues/7128))
- Use assert_include ([#7093]({{ site.repository }}/issues/7093))
- Remember to release docs gem ([#7066]({{ site.repository }}/issues/7066))
- Useless privates removed ([#6768]({{ site.repository }}/issues/6768))
- Load Rouge for TestKramdown ([#7007]({{ site.repository }}/issues/7007))
- Update instructions for releasing docs Gem ([#6975]({{ site.repository }}/issues/6975))
- We are not using Ruby 2.2 anymore ([#6977]({{ site.repository }}/issues/6977))
- Remove unnecessary Jekyll::Page constant ([#6770]({{ site.repository }}/issues/6770))
- Remove unused error class ([#6511]({{ site.repository }}/issues/6511))
- Add a Cucumber feature for post_url tag ([#7586]({{ site.repository }}/issues/7586))
- Generate a &#34;TOTAL&#34; row for build-profile table ([#7614]({{ site.repository }}/issues/7614))
- Refactor Jekyll::Cache ([#7532]({{ site.repository }}/issues/7532))
- Store list of expected extnames in a constant ([#7638]({{ site.repository }}/issues/7638))
- Profile allocations from a build session ([#7646]({{ site.repository }}/issues/7646))
- Update small typo in contributing.md ([#7671]({{ site.repository }}/issues/7671))
- Remove override to Jekyll::Document#respond_to? ([#7695]({{ site.repository }}/issues/7695))
- Update TestTags in sync with Rouge v3.4 ([#7709]({{ site.repository }}/issues/7709))
- Use regexp to filter special entries ([#7702]({{ site.repository }}/issues/7702))
- Reduce Array objects generated from utility method ([#7749]({{ site.repository }}/issues/7749))
- Update mime.types ([#7756]({{ site.repository }}/issues/7756))
- Replace redundant Array#map with Array#each ([#7761]({{ site.repository }}/issues/7761))
- Reduce allocations by using #each_with_object ([#7758]({{ site.repository }}/issues/7758))
- Memoize fallback_data for Drop ([#7728]({{ site.repository }}/issues/7728))
- Use String#end_with? to check if entry is a backup ([#7701]({{ site.repository }}/issues/7701))
### Documentation
- Refactor docs ([#7205]({{ site.repository }}/issues/7205))
- Add a link to Giraffe Academy&#39;s tutorial ([#7325]({{ site.repository }}/issues/7325))
- Do not advise users to install Jekyll outside of Bundler ([#6927]({{ site.repository }}/issues/6927))
- Remove documentation for using Redcarpet ([#6990]({{ site.repository }}/issues/6990))
- Install Docs that Work on MacOS 10.14 ([#7561]({{ site.repository }}/issues/7561))
- Add Installation Instructions for Ubuntu ([#6925]({{ site.repository }}/issues/6925))
- Don&#39;t prompt for sudo when installing with Ubuntu WSL ([#6781]({{ site.repository }}/issues/6781))
- Installation instructions for Fedora ([#7198]({{ site.repository }}/issues/7198))
- Update Windows install docs ([#6926]({{ site.repository }}/issues/6926))
- List all standard liquid filters ([#7333]({{ site.repository }}/issues/7333))
- List all static files variables ([#7002]({{ site.repository }}/issues/7002))
- Improve how to include Rouge stylesheets ([#7752]({{ site.repository }}/issues/7752))
- Mention CommonMark plugins ([#7418]({{ site.repository }}/issues/7418))
- Add TSV to list of supported _data files. ([#7168]({{ site.repository }}/issues/7168))
- How to deploy using pre-push git hook ([#7179]({{ site.repository }}/issues/7179))
- Hosting with AWS Amplify ([#7510]({{ site.repository }}/issues/7510))
- CircleCI deployment through CircleCI v2 ([#7024]({{ site.repository }}/issues/7024))
- GitHub Pages: use themes from other repos ([#7112]({{ site.repository }}/issues/7112))
- Document page.dir and page.name ([#7373]({{ site.repository }}/issues/7373))
- Document custom tag blocks ([#7359]({{ site.repository }}/issues/7359))
- Document converter methods ([#7289]({{ site.repository }}/issues/7289))
- Document {% raw %}`{{ page.collection }}`{% endraw %} ([#7430]({{ site.repository }}/issues/7430))
- Document Jekyll Filters with YAML data ([#7335]({{ site.repository }}/issues/7335))
- Document where Jekyll looks for layouts in a site ([#7564]({{ site.repository }}/issues/7564))
- plugin: liquid tag jekyll-flickr ([#6946]({{ site.repository }}/issues/6946))
- plugin: jekyll-target-blank ([#7046]({{ site.repository }}/issues/7046))
- plugin: json-get. ([#7086]({{ site.repository }}/issues/7086))
- plugin: `jekyll-info` ([#7091]({{ site.repository }}/issues/7091))
- plugin: jekyll-xml-source ([#7114]({{ site.repository }}/issues/7114))
- plugin: jekyll-firstimage filter ([#7127]({{ site.repository }}/issues/7127))
- plugin: CAT ([#7011]({{ site.repository }}/issues/7011))
- Resources: Statictastic ([#7593]({{ site.repository }}/issues/7593))
- Resources: Bonsai Search ([#7543]({{ site.repository }}/issues/7543))
- Resources: Formspark ([#7601]({{ site.repository }}/issues/7601))
- Resources: Jekpack([#7598]({{ site.repository }}/issues/7598))
- Resources: formX ([#7536]({{ site.repository }}/issues/7536))
- Resources: 99inbound&#39;s Jekyll post ([#7348]({{ site.repository }}/issues/7348))
- Resources: CloudSh ([#7497]({{ site.repository }}/issues/7497))
- Community: DEV Community&#39;s Jekyll tag ([#7139]({{ site.repository }}/issues/7139))
- Showcase: developer.spotify.com ([#7217]({{ site.repository }}/issues/7217))
- Showcase: Isomer ([#7300]({{ site.repository }}/issues/7300))
- Add version number for group_by_exp doc ([#6956]({{ site.repository }}/issues/6956))
- Updated nginx configuration for custom-404-page documentation ([#6994]({{ site.repository }}/issues/6994))
- Clarify definition of &#39;draft&#39; ([#7037]({{ site.repository }}/issues/7037))
- _drafts need to be contained within the custom collection directory ([#6985]({{ site.repository }}/issues/6985))
- Updated to supported version ([#7031]({{ site.repository }}/issues/7031))
- Add Hints for some Improved Travis Config in Doc ([#7049]({{ site.repository }}/issues/7049))
- Update travis-ci.md to point out &#34;this is an example Gemfile&#34; ([#7089]({{ site.repository }}/issues/7089))
- Instructions to view themes files under Linux ([#7095]({{ site.repository }}/issues/7095))
- Use a real theme in the example ([#7125]({{ site.repository }}/issues/7125))
- Update docs about post creation ([#7138]({{ site.repository }}/issues/7138))
- Initialize upgrading doc for v4.0 ([#7140]({{ site.repository }}/issues/7140))
- Add version badge for date filters with ordinal ([#7162]({{ site.repository }}/issues/7162))
- Corrected sample usage of postfiles ([#7181]({{ site.repository }}/issues/7181))
- Resolve &#34;Unable to locate package ruby2.4&#34; error ([#7196]({{ site.repository }}/issues/7196))
- Correct stylesheet url in tutorial step 7 ([#7210]({{ site.repository }}/issues/7210))
- Removes quotes from markdown for assets ([#7223]({{ site.repository }}/issues/7223))
- Clarified front matter requirement ([#7234]({{ site.repository }}/issues/7234))
- Explicit location of where to create blog.html ([#7241]({{ site.repository }}/issues/7241))
- Reference the build command options that allows multiple config files ([#7266]({{ site.repository }}/issues/7266))
- Add more issue template(s) and pull request template ([#7269]({{ site.repository }}/issues/7269))
- Suggest sites use OpenSSL instead of GnuTLS for their site&#39;s CI ([#7010]({{ site.repository }}/issues/7010))
- Fix broken Contributors link in README.markdown ([#7200]({{ site.repository }}/issues/7200))
- Add title tag to item in RSS template ([#7282]({{ site.repository }}/issues/7282))
- Add link tag to item in RSS template ([#7291]({{ site.repository }}/issues/7291))
- Remove redundant instruction comment ([#7342]({{ site.repository }}/issues/7342))
- Textile is only supported through a converter plugin ([#7003]({{ site.repository }}/issues/7003))
- Add recursive navigation tutorial ([#7720]({{ site.repository }}/issues/7720))
- Remove installation instructions with Homebrew ([#7381]({{ site.repository }}/issues/7381))
- Fix dead link and misleading prose ([#7383]({{ site.repository }}/issues/7383))
- Fix content management section ([#7385]({{ site.repository }}/issues/7385))
- Apply ruby official guide documents ([#7393]({{ site.repository }}/issues/7393))
- Fix group_by_exp filter example ([#7394]({{ site.repository }}/issues/7394))
- Remove alt attribute from a tags ([#7407]({{ site.repository }}/issues/7407))
- Fix BASH code-block in ubuntu.md ([#7420]({{ site.repository }}/issues/7420))
- zlib is missing ([#7428]({{ site.repository }}/issues/7428))
- Fixed unnecessary articles and pronouns ([#7466]({{ site.repository }}/issues/7466))
- Store SSL key and cert in site source ([#7473]({{ site.repository }}/issues/7473))
- Fix typo in tutorial for converting existing site ([#7524]({{ site.repository }}/issues/7524))
- Check if var exists before include tag ([#7530]({{ site.repository }}/issues/7530))
- Clarify docs on collections regarding the need for front matter ([#7538]({{ site.repository }}/issues/7538))
- Fix incorrect Windows path in themes.md ([#7525]({{ site.repository }}/issues/7525))
- Addresses bundle not found. ([#7351]({{ site.repository }}/issues/7351))
- Update the contribution docs for draft pull requests ([#7619]({{ site.repository }}/issues/7619))
- Data file section adds TSV ([#7640]({{ site.repository }}/issues/7640))
- Indicate where the _sass folder is by default ([#7644]({{ site.repository }}/issues/7644))
- Docs: add version tags to new placeholders ([#5981]({{ site.repository }}/issues/5981)) for permalinks ([#7647]({{ site.repository }}/issues/7647))
- Solve &#34;GitHub Page build failure&#34; in 10-deployment.md ([#7648]({{ site.repository }}/issues/7648))
- fix link to Site Source config ([#7708]({{ site.repository }}/issues/7708))
- Introduce frontmatter in step 2 ([#7704]({{ site.repository }}/issues/7704))
- Add @ashmaroli to Core Team listing ([#7398]({{ site.repository }}/issues/7398))
- Link to Tidelift in site&#39;s footer ([#7377]({{ site.repository }}/issues/7377))
- Link to OpenCollective backing ([#7378]({{ site.repository }}/issues/7378)
- Link to sponsor listing in README ([#7405]({{ site.repository }}/issues/7405))
- Adjust team page listings ([#7395]({{ site.repository }}/issues/7395))
- Updates to CODE OF CONDUCT (v1.4.0) ([#7105]({{ site.repository }}/issues/7105))
- More inclusive writing ([#7283]({{ site.repository }}/issues/7283))
- Update Ruby version used in Travis-CI example ([#7783]({{ site.repository }}/issues/7783))
- Documentation for binary operators in where_exp ([#7786]({{ site.repository }}/issues/7786))
- Adding SmartForms as Forms service ([#7794]({{ site.repository }}/issues/7794))
### Site Enhancements
{: #site-enhancements-v4-0-0}
- Better Performance ([#7388]({{ site.repository }}/issues/7388))
- Add some minor improvements to image loading in Showcase page ([#7214]({{ site.repository }}/issues/7214))
- Simplify assigning classname to docs&#39; aside-links ([#7609]({{ site.repository }}/issues/7609))
- Simplify couple of includes in the docs site ([#7607]({{ site.repository }}/issues/7607))
- Avoid generating empty classnames ([#7610]({{ site.repository }}/issues/7610))
- Minimize rendering count ([#7343]({{ site.repository }}/issues/7343))
### Release
- Jekyll v4.0 release ([#7782]({{ site.repository }}/issues/7782))
- Release post for v4.0.0 beta1 ([#7716]({{ site.repository }}/issues/7716))
- Release post for v4.0.0.pre.alpha1 ([#7574]({{ site.repository }}/issues/7574))
- Release post for v3.8.0 ([#6849]({{ site.repository }}/issues/6849))
- Release post for v3.6.3, v3.7.4 and v3.8.4 ([#7259]({{ site.repository }}/issues/7259))
- Post: v4.0 development ([#6934]({{ site.repository }}/issues/6934))
## 3.8.6 / 2019-07-02
{: #v3-8-6}
### Bug Fixes
{: #bug-fixes-v3-8-6}
- Update log output for an invalid theme directory ([#7734]({{ site.repository }}/issues/7734))
- Memoize `SiteDrop#documents` to reduce allocations ([#7722]({{ site.repository }}/issues/7722))
- Excerpt handling of custom and intermediate tags ([#7467]({{ site.repository }}/issues/7467))
- Escape valid special chars in a site's path name ([#7573]({{ site.repository }}/issues/7573))
- Revert memoizing `Site#docs_to_write` and refactor `#documents` ([#7689]({{ site.repository }}/issues/7689))
- Fix broken `include_relative` usage in excerpt ([#7690]({{ site.repository }}/issues/7690))
- Install platform-specific gems as required (3c06609406)
### Security Fixes
{: #security-fixes-v3-8-6}
- Theme gems: ensure directories aren't symlinks ([#7424]({{ site.repository }}/issues/7424))
## 3.8.5 / 2018-11-04
{: #v3-8-5}
### Bug Fixes
{: #bug-fixes-v3-8-5}
- Re-implement handling Liquid blocks in excerpts ([#7250]({{ site.repository }}/issues/7250))
## 3.8.4 / 2018-09-18
{: #v3-8-4}
### Bug Fixes
{: #bug-fixes-v3-8-4}
- 3.8.x: security: fix `include` bypass of `EntryFilter#filter` symlink check ([#7228]({{ site.repository }}/issues/7228))
## 3.8.3 / 2018-06-05
{: #v3-8-3}
@@ -786,10 +59,10 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Minimize array allocations in the `where` filter ([#6860]({{ site.repository }}/issues/6860))
- Bump JRuby ([#6878]({{ site.repository }}/issues/6878))
- Assert existence of &lt;collection&gt;.files ([#6907]({{ site.repository }}/issues/6907))
- Bump RuboCop to 0.54.x ([#6915]({{ site.repository }}/issues/6915))
- Bump Rubocop to 0.54.x ([#6915]({{ site.repository }}/issues/6915))
- Regenerate unconditionally unless its an incremental build ([#6917]({{ site.repository }}/issues/6917))
- Centralize require statements ([#6910]({{ site.repository }}/issues/6910))
- Bump to RuboCop 0.55 ([#6929]({{ site.repository }}/issues/6929))
- Bump to Rubocop 0.55 ([#6929]({{ site.repository }}/issues/6929))
- Refactor private method `HighlightBlock#parse_options` ([#6822]({{ site.repository }}/issues/6822))
### Minor Enhancements
@@ -839,7 +112,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- doc: add liquid tag plugin jekyll-onebox for html previews ([#6898]({{ site.repository }}/issues/6898))
- Add `jekyll-w2m` to plugins ([#6855]({{ site.repository }}/issues/6855))
- Fix tutorials navigation HTML ([#6919]({{ site.repository }}/issues/6919))
- add Arch Linux installation troubleshoot ([#6782]({{ site.repository }}/issues/6782))
- add Arch Linux instalation troubleshoot ([#6782]({{ site.repository }}/issues/6782))
- Docs: Install Jekyll on macOS ([#6881]({{ site.repository }}/issues/6881))
- Fix CodeClimate badges [ci skip] ([#6930]({{ site.repository }}/issues/6930))
- Update index.md ([#6933]({{ site.repository }}/issues/6933))
@@ -864,15 +137,6 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Allow front matter defaults to be applied properly to documents gathered under custom `collections_dir` ([#6885]({{ site.repository }}/issues/6885))
## 3.7.4 / 2018-09-07
{: #v3-7-4}
### Bug Fixes
{: #bug-fixes-v3-7-4}
- Security: fix `include` bypass of EntryFilter#filter symlink check ([#7224]({{ site.repository }}/issues/7224))
## 3.7.3 / 2018-02-25
{: #v3-7-3}
@@ -1014,7 +278,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Fix list appearance by adding missing `ol` tag ([#6421]({{ site.repository }}/issues/6421))
- Explain how to override output collection index page ([#6424]({{ site.repository }}/issues/6424))
- Added github-cards to the list of plugins ([#6425]({{ site.repository }}/issues/6425))
- CoC violation correspondents ([#6429]({{ site.repository }}/issues/6429))
- CoC violation correspondants ([#6429]({{ site.repository }}/issues/6429))
- Add a note about Liquid and syntax highlighting ([#6466]({{ site.repository }}/issues/6466))
- Remove `sudo` from macOS troubleshooting instructions ([#6486]({{ site.repository }}/issues/6486))
- Add a note on `:jekyll_plugins` group in the docs ([#6488]({{ site.repository }}/issues/6488))
@@ -1054,15 +318,6 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Fix permalink icon markup in news-item layout ([#6639]({{ site.repository }}/issues/6639))
## 3.6.3 / 2018-09-18
{: #v3-6-3}
### Bug Fixes
{: #bug-fixes-v3-6-3}
- 3.6.x: security: fix `include` bypass of `EntryFilter#filter` symlink check ([#7229]({{ site.repository }}/issues/7229))
## 3.6.2 / 2017-10-21
{: #v3-6-2}
@@ -1145,7 +400,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- add SUPPORT file for GitHub ([#6324]({{ site.repository }}/issues/6324))
- Rename CODE_OF_CONDUCT to show in banner ([#6325]({{ site.repository }}/issues/6325))
- Docs : illustrate page.id for a collection&#39;s document ([#6329]({{ site.repository }}/issues/6329))
- Docs: post&#39;s date can be overridden in front matter ([#6334]({{ site.repository }}/issues/6334))
- Docs: post&#39;s date can be overriden in YAML front matter ([#6334]({{ site.repository }}/issues/6334))
- Docs: `site.url` behavior on development and production environments ([#6270]({{ site.repository }}/issues/6270))
- Fix typo in site.url section of variables.md :-[ ([#6337]({{ site.repository }}/issues/6337))
- Docs: updates ([#6343]({{ site.repository }}/issues/6343))
@@ -1202,7 +457,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
### Bug Fixes
{: #bug-fixes-v3-5-1}
- Backward compatibilize URLFilters module ([#6163]({{ site.repository }}/issues/6163))
- Backward compatiblize URLFilters module ([#6163]({{ site.repository }}/issues/6163))
- Static files contain front matter default keys when `to_liquid`'d ([#6162]({{ site.repository }}/issues/6162))
- Always normalize the result of the `relative_url` filter ([#6185]({{ site.repository }}/issues/6185))
@@ -1715,7 +970,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
### Minor Enhancements
{: #minor-enhancements-v3-2-0}
- Stop testing with Ruby 2.0.x EOL ([#4381]({{ site.repository }}/issues/4381))
- Stop testing with Ruby 2.0.x, which is EOL'd. ([#4381]({{ site.repository }}/issues/4381))
- Allow collections to have documents that have no file extension ([#4545]({{ site.repository }}/issues/4545))
- Add size property to `group_by` result ([#4557]({{ site.repository }}/issues/4557))
- Site Template: Removed unnecessary nesting from `_base.scss` ([#4637]({{ site.repository }}/issues/4637))
@@ -1741,7 +996,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Add 'jekyll new-theme' command to help users get up and running creating a theme ([#4848]({{ site.repository }}/issues/4848))
- `markdownify` and `smartify` should convert input to string before conversion ([#4958]({{ site.repository }}/issues/4958))
- Run `Site#generate` for 'jekyll doctor' to catch plugin issues ([#5005]({{ site.repository }}/issues/5005))
- Add `normalize_whitespace` filter ([#4917]({{ site.repository }}/issues/4917))
- Add `normalize_whitepace` filter ([#4917]({{ site.repository }}/issues/4917))
- Move bin/jekyll to exe/jekyll to prevent collision with binstubs ([#5014]({{ site.repository }}/issues/5014))
- Cleaning up site template & theme updates. ([#4922]({{ site.repository }}/issues/4922))
- Add fetch method to Drops ([#5056]({{ site.repository }}/issues/5056))
@@ -1793,7 +1048,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Fix state leakage in Kramdown test ([#4618]({{ site.repository }}/issues/4618))
- Unify method for copying special files from repo to site ([#4601]({{ site.repository }}/issues/4601))
- Refresh the contributing file ([#4596]({{ site.repository }}/issues/4596))
- change smartify doc from copy/paste of markdownify doc ([#4653]({{ site.repository }}/issues/4653))
- change smartify doc from copy/paste of mardownify doc ([#4653]({{ site.repository }}/issues/4653))
- Update Rake & disable warnings when running tests ([#4720]({{ site.repository }}/issues/4720))
- Fix many warnings ([#4537]({{ site.repository }}/issues/4537))
- Don't blindly assume the last system when determining "open" cmd ([#4717]({{ site.repository }}/issues/4717))
@@ -1867,7 +1122,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Fix typo on Chocolatey name in Windows documentation ([#4686]({{ site.repository }}/issues/4686))
- Use the correct URL, Fixes [#4698]({{ site.repository }}/issues/4698) ([#4699]({{ site.repository }}/issues/4699))
- Add jekyll-paspagon plugin ([#4700]({{ site.repository }}/issues/4700))
- Bold-italicize note in assets documentation about needing front matter ([#4706]({{ site.repository }}/issues/4706))
- Bold-italicize note in assets documentation about needing yaml front matter ([#4706]({{ site.repository }}/issues/4706))
- Highlight the `script/` calls in the Contributing documentation ([#4712]({{ site.repository }}/issues/4712))
- Add Hawkins to the list of third-party plugins ([#4755]({{ site.repository }}/issues/4755))
- Fix a typo in pagination doc ([#4763]({{ site.repository }}/issues/4763))
@@ -1892,7 +1147,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Corrected pagination docs for hidden: true feature ([#4903]({{ site.repository }}/issues/4903))
- Remove a Broken Link for Refheap Plugin ([#4971]({{ site.repository }}/issues/4971))
- Instructions on how to install github-gem on Windows ([#4975]({{ site.repository }}/issues/4975))
- Minor tweak to fix missing apostrophe ([#4962]({{ site.repository }}/issues/4962))
- Minor tweak to fix missing apostrophne ([#4962]({{ site.repository }}/issues/4962))
- Instructions on how to install github-gem on Windows (v2) ([#4977]({{ site.repository }}/issues/4977))
- Fix inaccurate HTTP response header field name ([#4976]({{ site.repository }}/issues/4976))
- Add post about GSoC project ([#4980]({{ site.repository }}/issues/4980))
@@ -1900,10 +1155,10 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Update normalize.css to v4.0.0. ([#4989]({{ site.repository }}/issues/4989))
- Add jekyll-tags-list-plugin to list of third-party plugins ([#5000]({{ site.repository }}/issues/5000))
- Windows docs: Command needs to be called from blog path ([#5006]({{ site.repository }}/issues/5006))
- Update text to be consistent with example ([#5010]({{ site.repository }}/issues/5010))
- Update text to be consitent with example ([#5010]({{ site.repository }}/issues/5010))
- Update template links to point to core Liquid site ([#5012]({{ site.repository }}/issues/5012))
- Add generator-jekyllized to third-party plugins ([#5027]({{ site.repository }}/issues/5027))
- Add Jekyll Art Gallery generator plugin to list of third-party plugins ([#5043]({{ site.repository }}/issues/5043))
- Add Jekyll Art Hallery generator plugin to list of third-party plugins ([#5043]({{ site.repository }}/issues/5043))
- Add Formingo to the list of Jekyll form SaaS ([#5054]({{ site.repository }}/issues/5054))
- Highlight help nav item when navigated to. ([#5058]({{ site.repository }}/issues/5058))
- Update normalize.css to v4.2.0. ([#5096]({{ site.repository }}/issues/5096))
@@ -2060,7 +1315,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Drop: fix hash setter precedence ([#4312]({{ site.repository }}/issues/4312))
- utils: `has_yaml_header?` should accept files with extraneous spaces ([#4290]({{ site.repository }}/issues/4290))
- Escape html from site.title and page.title in site template ([#4307]({{ site.repository }}/issues/4307))
- Allow custom file extensions if defined in `permalink` front matter ([#4314]({{ site.repository }}/issues/4314))
- Allow custom file extensions if defined in `permalink` YAML front matter ([#4314]({{ site.repository }}/issues/4314))
- Fix deep_merge_hashes! handling of drops and hashes ([#4359]({{ site.repository }}/issues/4359))
- Page should respect output extension of its permalink ([#4373]({{ site.repository }}/issues/4373))
- Disable auto-regeneration when running server detached ([#4376]({{ site.repository }}/issues/4376))
@@ -2081,9 +1336,9 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Reorganize and cleanup the Gemfile, shorten required depends. ([#4318]({{ site.repository }}/issues/4318))
- Remove script/rebund. ([#4341]({{ site.repository }}/issues/4341))
- Implement codeclimate platform ([#4340]({{ site.repository }}/issues/4340))
- Remove ObjectSpace dumping and start using inherited, it's faster. ([#4342]({{ site.repository }}/issues/4342))
- Remove ObectSpace dumping and start using inherited, it's faster. ([#4342]({{ site.repository }}/issues/4342))
- Add script/travis so all people can play with Travis-CI images. ([#4338]({{ site.repository }}/issues/4338))
- Move Cucumber to using RSpec-Expectations and furthering JRuby support. ([#4343]({{ site.repository }}/issues/4343))
- Move Cucumber to using RSpec-Expections and furthering JRuby support. ([#4343]({{ site.repository }}/issues/4343))
- Rearrange Cucumber and add some flair. ([#4347]({{ site.repository }}/issues/4347))
- Remove old FIXME ([#4349]({{ site.repository }}/issues/4349))
- Clean up the Gemfile (and keep all the necessary dependencies) ([#4350]({{ site.repository }}/issues/4350))
@@ -2284,7 +1539,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Internal: trigger hooks by owner symbol ([#3871]({{ site.repository }}/issues/3871))
- Update MIME types from mime-db ([#3933]({{ site.repository }}/issues/3933))
- Add header to site template `_config.yml` for clarity & direction ([#3997]({{ site.repository }}/issues/3997))
- Site template: add timezone offset to post date front matter ([#4001]({{ site.repository }}/issues/4001))
- Site template: add timezone offset to post date frontmatter ([#4001]({{ site.repository }}/issues/4001))
- Make a constant for the regex to find hidden files ([#4032]({{ site.repository }}/issues/4032))
- Site template: refactor github & twitter icons into includes ([#4049]({{ site.repository }}/issues/4049))
- Site template: add background to Kramdown Rouge-ified backtick code blocks ([#4053]({{ site.repository }}/issues/4053))
@@ -2302,7 +1557,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Fix nav items alignment when on multiple rows ([#3264]({{ site.repository }}/issues/3264))
- Highlight: Only Strip Newlines/Carriage Returns, not Spaces ([#3278]({{ site.repository }}/issues/3278))
- Find variables in front matter defaults by searching with relative file path. ([#2774]({{ site.repository }}/issues/2774))
- Allow variables (e.g `:categories`) in front matter permalinks ([#3320]({{ site.repository }}/issues/3320))
- Allow variables (e.g `:categories`) in YAML front matter permalinks ([#3320]({{ site.repository }}/issues/3320))
- Handle nil URL placeholders in permalinks ([#3325]({{ site.repository }}/issues/3325))
- Template: Fix nav items alignment when in "burger" mode ([#3329]({{ site.repository }}/issues/3329))
- Template: Remove `!important` from nav SCSS introduced in [#3329]({{ site.repository }}/issues/3329) ([#3375]({{ site.repository }}/issues/3375))
@@ -2319,7 +1574,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Add WOFF2 font MIME type to Jekyll server MIME types ([#3647]({{ site.repository }}/issues/3647))
- Be smarter about extracting the extname in `StaticFile` ([#3632]({{ site.repository }}/issues/3632))
- Process metadata for all dependencies ([#3608]({{ site.repository }}/issues/3608))
- Show error message if the front matter on a page/post is invalid. ([#3643]({{ site.repository }}/issues/3643))
- Show error message if the YAML front matter on a page/post is invalid. ([#3643]({{ site.repository }}/issues/3643))
- Upgrade redcarpet to 3.2 (Security fix: OSVDB-120415) ([#3652]({{ site.repository }}/issues/3652))
- Create #mock_expects that goes directly to RSpec Mocks. ([#3658]({{ site.repository }}/issues/3658))
- Open `.jekyll-metadata` in binary mode to read binary Marshal data ([#3713]({{ site.repository }}/issues/3713))
@@ -2399,7 +1654,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Add a Resources link to tutorial on building dynamic navbars ([#3185]({{ site.repository }}/issues/3185))
- Semantic structure improvements to the post and page layouts ([#3251]({{ site.repository }}/issues/3251))
- Add new AsciiDoc plugin to list of third-party plugins. ([#3277]({{ site.repository }}/issues/3277))
- Specify that all transformable collection documents must contain front matter ([#3271]({{ site.repository }}/issues/3271))
- Specify that all transformable collection documents must contain YAML front matter ([#3271]({{ site.repository }}/issues/3271))
- Assorted accessibility fixes ([#3256]({{ site.repository }}/issues/3256))
- Update configuration docs to mention `keep_files` for `destination` ([#3288]({{ site.repository }}/issues/3288), [#3296]({{ site.repository }}/issues/3296))
- Break when we successfully generate nav link to save CPU cycles. ([#3291]({{ site.repository }}/issues/3291))
@@ -2427,7 +1682,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Add a link on all the docs pages to "Improve this page". ([#3510]({{ site.repository }}/issues/3510))
- Add jekyll-auto-image generator to the list of third-party plugins ([#3489]({{ site.repository }}/issues/3489))
- Replace link to the proposed `picture` element spec ([#3530]({{ site.repository }}/issues/3530))
- Add front matter date formatting information ([#3469]({{ site.repository }}/issues/3469))
- Add frontmatter date formatting information ([#3469]({{ site.repository }}/issues/3469))
- Improve consistency and clarity of plugins options note ([#3546]({{ site.repository }}/issues/3546))
- Add permalink warning to pagination docs ([#3551]({{ site.repository }}/issues/3551))
- Fix grammar in Collections docs API stability warning ([#3560]({{ site.repository }}/issues/3560))
@@ -2439,7 +1694,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Define the `install` step in the CI example `.travis.yml` ([#3622]({{ site.repository }}/issues/3622))
- Expand collections documentation. ([#3638]({{ site.repository }}/issues/3638))
- Add the "warning" note label to excluding `vendor` in the CI docs page ([#3623]({{ site.repository }}/issues/3623))
- Upgrade pieces of the Upgrading guide for Jekyll 3 ([#3607]({{ site.repository }}/issues/3607))
- Upgrade pieces of the Ugrading guide for Jekyll 3 ([#3607]({{ site.repository }}/issues/3607))
- Showing how to access specific data items ([#3468]({{ site.repository }}/issues/3468))
- Clarify pagination works from within HTML files ([#3467]({{ site.repository }}/issues/3467))
- Add note to `excerpt_separator` documentation that it can be set globally ([#3667]({{ site.repository }}/issues/3667))
@@ -2999,7 +2254,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Clean up the `<head>` in the site template ([#2186]({{ site.repository }}/issues/2186))
- Permit YAML blocks to end with three dots to better conform with the YAML spec ([#2110]({{ site.repository }}/issues/2110))
- Use `File.exist?` instead of deprecated `File.exists?` ([#2214]({{ site.repository }}/issues/2214))
- Require newline after start of front matter header ([#2211]({{ site.repository }}/issues/2211))
- Require newline after start of YAML Front Matter header ([#2211]({{ site.repository }}/issues/2211))
- Add the ability for pages to be marked as `published: false` ([#1492]({{ site.repository }}/issues/1492))
- Add `Jekyll::LiquidExtensions` with `.lookup_variable` method for easy looking up of variable values in a Liquid context. ([#2253]({{ site.repository }}/issues/2253))
- Remove literal lang name from class ([#2292]({{ site.repository }}/issues/2292))
@@ -3565,7 +2820,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Add ReadInXMinutes plugin to the plugin list ([#1222]({{ site.repository }}/issues/1222))
- Remove plugins from the plugin list that have equivalents in Jekyll proper ([#1223]({{ site.repository }}/issues/1223))
- Add jekyll-assets to the plugin list ([#1225]({{ site.repository }}/issues/1225))
- Add jekyll-pandoc-multiple-formats to the plugin list ([#1229]({{ site.repository }}/issues/1229))
- Add jekyll-pandoc-mulitple-formats to the plugin list ([#1229]({{ site.repository }}/issues/1229))
- Remove dead link to "Using Git to maintain your blog" ([#1227]({{ site.repository }}/issues/1227))
- Tidy up the third-party plugins listing ([#1228]({{ site.repository }}/issues/1228))
- Update contributor information ([#1192]({{ site.repository }}/issues/1192))
@@ -3740,7 +2995,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Adds excerpt attribute to posts which contains first paragraph of content ([#837]({{ site.repository }}/issues/837))
- Accept custom configuration file via CLI ([#863]({{ site.repository }}/issues/863))
- Load in GitHub Pages MIME Types on `jekyll serve` ([#847]({{ site.repository }}/issues/847), [#871]({{ site.repository }}/issues/871))
- Improve debuggability of error message for a malformed highlight tag ([#785]({{ site.repository }}/issues/785))
- Improve debugability of error message for a malformed highlight tag ([#785]({{ site.repository }}/issues/785))
- Allow symlinked files in unsafe mode ([#824]({{ site.repository }}/issues/824))
- Add 'gist' Liquid tag to core ([#822]({{ site.repository }}/issues/822), [#861]({{ site.repository }}/issues/861))
- New format of Jekyll output ([#795]({{ site.repository }}/issues/795))
@@ -3767,7 +3022,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Bullet-proof `limit_posts` option ([#1004]({{ site.repository }}/issues/1004))
- Read in YAML as UTF-8 to accept non-ASCII chars ([#836]({{ site.repository }}/issues/836))
- Fix the CLI option `--plugins` to actually accept dirs and files ([#993]({{ site.repository }}/issues/993))
- Allow 'excerpt' in front matter to override the extracted excerpt ([#946]({{ site.repository }}/issues/946))
- Allow 'excerpt' in YAML front matter to override the extracted excerpt ([#946]({{ site.repository }}/issues/946))
- Fix cascade problem with site.baseurl, site.port and site.host. ([#935]({{ site.repository }}/issues/935))
- Filter out directories with valid post names ([#875]({{ site.repository }}/issues/875))
- Fix symlinked static files not being correctly built in unsafe mode ([#909]({{ site.repository }}/issues/909))
@@ -3779,7 +3034,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Patch for multibyte URI problem with `jekyll serve` ([#723]({{ site.repository }}/issues/723))
- Order plugin execution by priority ([#864]({{ site.repository }}/issues/864))
- Fixed Page#dir and Page#url for edge cases ([#536]({{ site.repository }}/issues/536))
- Fix broken `post_url` with posts with a time in their front matter ([#831]({{ site.repository }}/issues/831))
- Fix broken `post_url` with posts with a time in their YAML front matter ([#831]({{ site.repository }}/issues/831))
- Look for plugins under the source directory ([#654]({{ site.repository }}/issues/654))
- Tumblr Migrator: finds `_posts` dir correctly, fixes truncation of long post names ([#775]({{ site.repository }}/issues/775))
- Force Categories to be Strings ([#767]({{ site.repository }}/issues/767))
@@ -4010,7 +3265,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Bug Fixes
- Require redcloth >= 4.2.1 in tests ([#92]({{ site.repository }}/issues/92))
- Don't break on triple dashes in front matter ([#93]({{ site.repository }}/issues/93))
- Don't break on triple dashes in yaml front matter ([#93]({{ site.repository }}/issues/93))
### Minor Enhancements
{: #minor-enhancements-v0-5-6}
@@ -4051,7 +3306,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Added --paginate option to the executable along with a paginator object for the payload (@calavera)
- Upgraded RedCloth to 4.2.1, which makes `<notextile>` tags work once again.
- Configuration options set in config.yml are now available through the site payload (@vilcans)
- Posts can now have an empty front matter or none at all (@ bahuvrihi)
- Posts can now have an empty YAML front matter or none at all (@ bahuvrihi)
- Bug Fixes
- Fixing Ruby 1.9 issue that requires `#to_s` on the err object (@Chrononaut)
- Fixes for pagination and ordering posts on the same day (@ujh)
@@ -4059,7 +3314,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Index.html file should always have index.html permalink (@eugenebolshakov)
- Added trailing slash to pretty permalink style so Apache is happy (@eugenebolshakov)
- Bad markdown processor in config fails sooner and with better message (@ gcnovus)
- Allow CRLFs in front matter (@juretta)
- Allow CRLFs in yaml front matter (@juretta)
- Added Date#xmlschema for Ruby versions < 1.9
@@ -4154,7 +3409,7 @@ note: This file is autogenerated. Edit /History.markdown instead.
- Added post categories based on directories containing `_posts` (@mreid)
- Added post topics based on directories underneath `_posts`
- Added new date filter that shows the full month name (@mreid)
- Merge Post's front matter into its to_liquid payload (@remi)
- Merge Post's YAML front matter into its to_liquid payload (@remi)
- Restrict includes to regular files underneath `_includes`
- Bug Fixes
- Change YAML delimiter matcher so as to not chew up 2nd level markdown headers (@mreid)

View File

@@ -48,9 +48,7 @@ You could then reference that variable in your include:
{% raw %}
```liquid
{% if page.my_variable %}
{% include {{ page.my_variable }} %}
{% endif %}
{% include {{ page.my_variable }} %}
```
{% endraw %}
@@ -69,7 +67,7 @@ You can also pass parameters to an include. For example, suppose you have a file
```
{% endraw %}
The {% raw %}`{{ include.content }}`{% endraw %} is a parameter that gets populated when you call the include and specify a value for that parameter, like this:
The `{% raw %}{{ include.content }}{% endraw %}` is a parameter that gets populated when you call the include and specify a value for that parameter, like this:
{% raw %}
```liquid
@@ -129,7 +127,7 @@ The result is the original HTML code shown earlier.
To safeguard situations where users don't supply a value for the parameter, you can use [Liquid's default filter](https://shopify.github.io/liquid/filters/default/).
Overall, you can create includes that act as templates for a variety of uses &mdash; inserting audio or video clips, alerts, special formatting, and more. Note that you should avoid using too many includes, as this will slow down the build time of your site. For example, don't use includes every time you insert an image. (The above technique shows a use case for special images.)
Overall, you can create includes that act as templates for a variety of uses &mdash; inserting audio or video clips, alerts, special formatting, and more. However, note that you should avoid using too many includes, as this will slow down the build time of your site. For example, don't use includes every time you insert an image. (The above technique shows a use case for special images.)
### Passing parameter variables to includes
@@ -154,3 +152,41 @@ Then pass this captured variable into the parameter for the include. Omit the qu
{% include note.html content=download_note %}
```
{% endraw %}
### Passing references to YAML files as parameter values
Instead of passing string variables to the include, you can pass a reference to a YAML data file stored in the `_data` folder.
Here's an example. In the `_data` folder, suppose you have a YAML file called `profiles.yml`. Its content looks like this:
```yaml
- name: John Doe
login_age: old
image: johndoe.jpg
- name: Jane Doe
login_age: new
image: janedoe.jpg
```
In the `_includes` folder, assume you have a file called `spotlight.html` with this code:
{% raw %}
```liquid
{% for person in include.participants %}
{% if person.login_age == "new" %}
{{ person.name }}
{% endif %}
{% endfor %}
```
{% endraw %}
Now when you insert the `spotlight.html` include file, you can submit the YAML file as a parameter:
{% raw %}
```liquid
{% include spotlight.html participants=site.data.profiles %}
```
{% endraw %}
In this instance, `site.data.profiles` gets inserted in place of {% raw %}`include.participants`{% endraw %} in the include file, and the Liquid logic processes. The result will be `Jane Doe`.

Some files were not shown because too many files have changed in this diff Show More