Jekyll2018-01-03T02:41:17-08:00https://jekyllrb.com/Jekyll • Simple, blog-aware, static sitesTransform your plain text into static websites and blogsJekyll 3.6.2 Released2017-10-21T12:31:40-07:002017-10-21T12:31:40-07:00https://jekyllrb.com/news/2017/10/21/jekyll-3-6-2-released<p>3.6.2 is out, it’s a tiny patch release and we invite you to run <code class="highlighter-rouge">bundle update</code>
if you want to avoid possible build problems with:</p>
<ul>
<li>some UTF-8 and UTF-16 encoded files,</li>
<li>fully numeric layout names (we convert those to string for you now).</li>
</ul>
<p>Other changes include updates to our documentation, like this <a href="../tutorials/video-walkthroughs/">complete
video series by Giraffe Academy</a> aimed at
complete beginners. A big thanks to Mike for this.</p>
<p>And if you’re wondering what happened to version 3.6.1, it was just our new
release maintainer getting familiar with the release process. 😄</p>
<p>We try to release patch releases as quickly as possible and we’re already
working on the next minor version 3.7.0 that will allow you to store all your
collections in a single directory. Stay tuned.</p>
<p>Theme developers are invited to test the brand new
<a href="https://github.com/benbalter/jekyll-remote-theme"><code class="highlighter-rouge">jekyll-remote-theme</code></a> plugin
and give their feedback to @benbalter. This plugin allows you to use any
GitHub hosted theme as a remote theme!</p>
<p>Once again, many thanks to our contributors who helped make this release possible:
ashmaroli, bellvat, Frank Taillandier, i-give-up, Jan Piotrowski, Maximiliano
Kotvinsky, Oliver Steele and Pat Hawks. For some it was their <a href="/news/2017/10/19/diversity-open-source/">first
contribution to open-source</a> 👏</p>
<p>As it’s been nine years this week that Tom Preston-Werner started this project,
I also wanna seize this opportunity to thank <a href="https://github.com/jekyll/jekyll/graphs/contributors">all of the 732 contributors</a> who
helped make it possible for Jekyll to power millions of websites around the world
today.</p>
<p>Happy Birthday Jekyll! 🎂</p>dirtyf3.6.2 is out, it’s a tiny patch release and we invite you to run bundle update if you want to avoid possible build problems with:Diversity in Open Source, and Jekyll’s role in it2017-10-19T12:33:00-07:002017-10-19T12:33:00-07:00https://jekyllrb.com/news/2017/10/19/diversity-open-source<p>Open Source has a problem with diversity. GitHub recently conducted a <a href="http://opensourcesurvey.org/2017">survey</a> which revealed that 95% of the respondents were identifying as male. This is even worse than in the tech industry overall, where the percentage is only about 76%. Every other week, there seems to be another case of a maintainer engaging in targeted harassment against minorities. People somehow deem it completely okay to let these things slide, though.</p>
<p>Fortunately, there’s a couple of things we can do to make it easier and more comfortable for people that have never contributed to any open source project before, to contribute to our projects.</p>
<h2 id="add-a-code-of-conduct-and-enforce-it">Add a Code of Conduct, and enforce it</h2>
<p>This might seem like one of the easiest steps to do, but it actually requires a lot of dedication to pull through with. Basically, a Code of Conduct is a document detailing what is and what isn’t acceptable behavior in your project. A good Code of Conduct also details enforcement procedures, that means how the person violating the Code of Conduct gets dealt with. This is the point at which I’ve seen a looooot of projects fail. It’s easy enough to copy-paste a Code of Conduct into your project, but it’s more important to be clear on how to enforce it. Inconsistent —or worse, nonexistent— enforcement is just going to scare off newcomers even more!</p>
<p>The most widely adopted Code of Conduct is the <a href="https://www.contributor-covenant.org/">Contributor Covenant</a>. It’s a very good catch-all document, but it is a bit light in the enforcement section, so I’d recommend to flesh it out by yourself, be it by means of adding contact information or expanding the enforcement rules.</p>
<p>No matter which Code of Conduct you pick, the most important thing is to actually <em>read it for yourself</em>. The worst thing in open source is a maintainer that doesn’t know when they’ve violated their own Code of Conduct.</p>
<h2 id="document-your-contributing-workflow">Document your contributing workflow</h2>
<p>The problem that puts people off the most is incomplete or missing documentation, as revealed through GitHub’s <a href="http://opensourcesurvey.org/2017">open source survey</a>. A very popular myth in programming is that good code explains itself, which might be true, but only for the person writing it. It’s important, especially once you put your project out there for the world to see, to document not only your code, but also the process by which you maintain it. Otherwise, it’s going to be extremely hard for newcomers to even figure out where to begin contributing to your project.</p>
<p>Jekyll has <a href="/docs/contributing">an entire section of its docs</a> dedicated to information on how to contribute for this very reason. Every documentation page has a link to directly edit and improve it on GitHub. It’s also important to realize that not all contributions are code. It can be documentation, it can be reviewing pull requests, but it can also just be weighing into issues, and all of this should be recognized in the same way. At Jekyll, out of 397 total merged pull requests in the last year, <strong>204</strong> were documentation pull requests!</p>
<h2 id="create-newcomer-friendly-issues">Create newcomer-friendly issues</h2>
<p>For most people new to open source, the biggest hurdle is creating their first pull request. That’s why initiatives such as <a href="https://twitter.com/yourfirstpr">YourFirstPR</a> and <a href="http://www.firsttimersonly.com/">First Timers Only</a> were started. Recently, <a href="https://github.com/hoodiehq/first-timers-bot">a GitHub bot that automatically creates first-timer friendly issues</a> was launched, which makes it very easy for maintainers to convert otherwise small or trivial changes into viable pull requests that can be taken on by newcomers! So we decided to give it a shot, and we’ve created a couple of very easy <code class="highlighter-rouge">first timers only</code> issues:</p>
<ul>
<li><a href="https://github.com/jekyll/jekyll/issues/6437">Issue #6437</a></li>
<li><a href="https://github.com/jekyll/jekyll/issues/6438">Issue #6438</a></li>
<li><a href="https://github.com/jekyll/jekyll/issues/6439">Issue #6439</a></li>
</ul>
<p>(There’s also an up-to-date listing of all of our <code class="highlighter-rouge">first timers only</code> issues <a href="https://github.com/jekyll/jekyll/issues?q=is%3Aissue+is%3Aopen+label%3Afirst-time-only">here</a>)</p>
<p>These issues are designed to be taken on only by someone who has had little to no exposure to contributing to open source before, and additionally, project maintainers offer support in case a question arises.</p>
<p>Jekyll is a very big and popular open source project, and we hope that with these special issues, we can help people who haven’t contributed to open source before to catch a footing in these unsteady waters.</p>
<h2 id="be-nice">Be nice</h2>
<p>I know this is a cliche and a overused phrase, but really, it works if you pull through with it. Come to terms with the fact that some people aren’t as fast or reliable as you might want to think. Don’t get angry when a contributor takes a day longer than you might like them to. Treat new contributors to your project with respect, but also with hospitality. Think twice before you send that comment with slurs in it.</p>
<p>I’ve been contributing to open source for about 4 years now, and I’ve had my fair share of horrible, horrible experiences. But Jekyll has historically been a project that has always valued the people contributing to it over the code itself, and I hope we can keep it that way. I also hope that other project maintainers read this and take inspiration from this post. Every project should be more diverse.</p>pupOpen Source has a problem with diversity. GitHub recently conducted a survey which revealed that 95% of the respondents were identifying as male. This is even worse than in the tech industry overall, where the percentage is only about 76%. Every other week, there seems to be another case of a maintainer engaging in targeted harassment against minorities. People somehow deem it completely okay to let these things slide, though.Jekyll turns 3.6!2017-09-21T13:38:20-07:002017-09-21T13:38:20-07:00https://jekyllrb.com/news/2017/09/21/jekyll-3-6-0-released<p>Another much-anticipated release of Jekyll. This release comes with it Rouge 2 support, but note you can continue to use Rouge 1 if you’d prefer. We also now require Ruby 2.1.0 as 2.0.x is no longer supported by the Ruby team.</p>
<p>Otherwise, it’s a massive bug-fix release! A few bugs were found and squashed with our <code class="highlighter-rouge">Drop</code> implementation. We’re using the Schwartzian transform to speed up our custom sorting (thanks, Perl community!). We now protect against images that are named like posts and we generally worked on guarding our code to enforce requirements, instead of assuming the input was as expected.</p>
<p>Please let us know if you find any bugs! You can see <a href="/docs/history/#v3-6-0">the full history here</a>.</p>
<p>Many thanks to our contributors who helped make this release possible: Aleksander Kuś, André Jaenisch, Antonio Argote, ashmaroli, Ben Balter, Bogdan, Bradley Meck, David Zhang, Florian Thomas, Frank Taillandier, Jordon Bedwell, Joshua Byrd, Kyle Zhao, lymaconsulting, Maciej Bembenista, Matt Sturgeon, Natanael Arndt, Ohad Schneider, Pat Hawks, Pedro Lamas, and Sid Verma.</p>
<p>As always, Happy Jekylling!</p>parkrAnother much-anticipated release of Jekyll. This release comes with it Rouge 2 support, but note you can continue to use Rouge 1 if you’d prefer. We also now require Ruby 2.1.0 as 2.0.x is no longer supported by the Ruby team.Jekyll 3.5.2 Released2017-08-12T13:31:40-07:002017-08-12T13:31:40-07:00https://jekyllrb.com/news/2017/08/12/jekyll-3-5-2-released<p>3.5.2 is out with 6 great bug fixes, most notably one which should dramatically speed up generation of your site! In testing #6266, jekyllrb.com generation when from 18 seconds down to 8! Here is the full line-up of fixes:</p>
<ul>
<li>Backport #6266 for v3.5.x: Memoize the return value of <code class="highlighter-rouge">Document#url</code> (#6301)</li>
<li>Backport #6247 for v3.5.x: kramdown: symbolize keys in-place (#6303)</li>
<li>Backport #6281 for v3.5.x: Fix <code class="highlighter-rouge">Drop#key?</code> so it can handle a nil argument (#6288)</li>
<li>Backport #6280 for v3.5.x: Guard against type error in <code class="highlighter-rouge">absolute_url</code> (#6287)</li>
<li>Backport #6273 for v3.5.x: delegate <code class="highlighter-rouge">StaticFile#to_json</code> to <code class="highlighter-rouge">StaticFile#to_liquid</code> (#6302)</li>
<li>Backport #6226 for v3.5.x: <code class="highlighter-rouge">Reader#read_directories</code>: guard against an entry not being a directory (#6304</li>
</ul>
<p>A <a href="/docs/history/#v3-5-2">full history</a> is available for your perusal. As always, please file bugs if you encounter them! Opening a pull request with a failing test for your expected behaviour is the easiest way for us to address the issue since we have a reproducible example to test again. Short of that, please fill out our issue template to the best of your ability and we’ll try to get to it quickly!</p>
<p>Many thanks to our contributors without whom this release could not be
possible: Ben Balter & Kyle Zhao.</p>
<p>Happy Jekylling!</p>parkr3.5.2 is out with 6 great bug fixes, most notably one which should dramatically speed up generation of your site! In testing #6266, jekyllrb.com generation when from 18 seconds down to 8! Here is the full line-up of fixes:Jekyll 3.5.1 Released2017-07-17T09:40:37-07:002017-07-17T09:40:37-07:00https://jekyllrb.com/news/2017/07/17/jekyll-3-5-1-released<p>We’ve released a few bugfixes in the form of v3.5.1 today:</p>
<ul>
<li>Some plugins stopped functioning properly due to a NoMethodError for <code class="highlighter-rouge">registers</code> on NilClass. That’s been fixed.</li>
<li>A bug in <code class="highlighter-rouge">relative_url</code> when <code class="highlighter-rouge">baseurl</code> is <code class="highlighter-rouge">nil</code> caused URL’s to come out wrong. Squashed.</li>
<li>Static files’ liquid representations should now have all the keys you were expecting when serialized into JSON.</li>
</ul>
<p>We apologize for the breakages! We’re working diligently to improve how we test our plugins with Jekyll core to prevent breakages in the future.</p>
<p>More details in <a href="/docs/history/#v3-5-1">the history</a>. Many thanks to all the contributors to Jekyll v3.5.1: Adam Voss, ashmaroli, Ben Balter, Coby Chapple, Doug Beney, Fadhil, Florian Thomas, Frank Taillandier, James, jaybe, Joshua Byrd, Kevin Plattret, & Robert Jäschke.</p>
<p>Happy Jekylling!</p>parkrWe’ve released a few bugfixes in the form of v3.5.1 today:Jekyll turns 3.5, oh my!2017-06-15T14:32:32-07:002017-06-15T14:32:32-07:00https://jekyllrb.com/news/2017/06/15/jekyll-3-5-0-released<p>Good news! Nearly 400 commits later, Jekyll 3.5.0 has been released into
the wild. Some new shiny things you might want to test out:</p>
<ul>
<li>Jekyll now uses Liquid 4, the latest! It comes with whitespace control, new filters <code class="highlighter-rouge">concat</code> and <code class="highlighter-rouge">compact</code>, loop performance improvements and <a href="https://github.com/Shopify/liquid/blob/master/History.md#400--2016-12-14--branch-4-0-stable">many fixes</a></li>
<li>Themes can specify runtime dependencies (in their gemspecs) and we’ll require those. This makes it easier for theme writers to use plugins.</li>
<li>Speaking of themes, we’ll properly handle the discrepancy between a convertible file in the local site and a static file in the theme. Overriding a file locally now doesn’t matter if it’s convertible or static.</li>
<li>Pages, posts, and other documents can now access layout variables via <code class="highlighter-rouge">{{ layout }}</code>.</li>
<li>The <code class="highlighter-rouge">gems</code> key in the <code class="highlighter-rouge">_config.yml</code> is now <code class="highlighter-rouge">plugins</code>. This is backwards-compatible, as Jekyll will gracefully upgrade <code class="highlighter-rouge">gems</code> to <code class="highlighter-rouge">plugins</code> if you use the former.</li>
<li>Filters like <code class="highlighter-rouge">sort</code> now allow you to sort based on a subvalue, e.g. <code class="highlighter-rouge">{% assign sorted = site.posts | sort: "image.alt_text" %}</code>.</li>
<li>You can now create tab-separated data files.</li>
<li>Using <code class="highlighter-rouge">layout: none</code> will now produce a file with no layout. Equivalent to <code class="highlighter-rouge">layout: null</code>, with the exception that <code class="highlighter-rouge">none</code> is a truthy value and won’t be overwritten by front matter defaults.</li>
<li>No more pesky errors if your URL contains a colon (sorry about those!)</li>
<li>We now automatically exclude the <code class="highlighter-rouge">Gemfile</code> from the site manifest when compiling your site. No more <code class="highlighter-rouge">_site/Gemfile</code>!</li>
<li>We fixed a bug where abbreviated post dates were ignored, e.g. <code class="highlighter-rouge">_posts/2016-4-4-april-fourth.md</code>.</li>
</ul>
<p>And <a href="/docs/history/">so much more!</a></p>
<p>There was a huge amount of effort put into this release by our maintainers,
especially @pathawks, @DirtyF, and @pup. Huge thanks to them for ushering
this release along and keeping the contributions flowing! Jekyll wouldn’t
work without the tireless dedication of our team captains & maintainers.
Thank you, all!</p>
<p>A huge thanks as well to our contributors to this release: Adam Hollett, Aleksander Kuś, Alfred Myers, Anatoliy Yastreb, Antonio Argote, Ashton Hellwig, Ashwin Maroli, Ben Balter, BlueberryFoxtrot, Brent Yi, Chris Finazzo, Christoph Päper, Christopher League, Chun Fei Lung, Colin, David Zhang, Eric Leong, Finn Ellis, Florian Thomas, Frank Taillandier, Hendrik Schneider, Henry Kobin, Ivan Storck, Jakub Klímek, Jan Pobořil, Jeff Puckett, Jonathan Hooper, Kaligule, Kevin Funk, Krzysztof Szafranek, Liu Cheng, Lukasz Brodowski, Marc Bruins, Marcelo Canina, Martin Desrumaux, Mer, Nate, Oreonax, Parker Moore, Pat Hawks, Pedro Lamas, Phil Nash, Ricardo N Feliciano, Ricky Han, Roger Sheen, Ryan Lue, Ryan Streur, Shane Neuville, Sven Meyer, Tom Johnson, William Entriken, Yury V. Zaytsev, Zarino Zappia, dyang, jekylltools, sean delaney, zenHeart</p>
<p>Please file any bugs with detailed replication instructions if you find any
bugs. Better yet, submit a patch if you find the bug in the code and know
how to fix it! :heart:</p>
<p>Happy Jekylling! :tada:</p>parkrGood news! Nearly 400 commits later, Jekyll 3.5.0 has been released into the wild. Some new shiny things you might want to test out:Jekyll 3.4.3 Released2017-03-21T06:52:53-07:002017-03-21T06:52:53-07:00https://jekyllrb.com/news/2017/03/21/jekyll-3-4-3-released<p>Another one-PR patch update as we continue our quest to destroy all bugs. A
fairly technical debriefing follows, but the TLDR is that we have updated the
<code class="highlighter-rouge">uri_escape</code> filter to more closely follow the pre-v3.4.0 behavior.</p>
<p>In <a href="/news/2017/01/18/jekyll-3-4-0-released/">v3.4.0</a>, we
moved away from using the deprecated
<a href="https://ruby-doc.org/stdlib-2.3.0/libdoc/uri/rdoc/URI/Escape.html#method-i-encode"><code class="highlighter-rouge">URI.escape</code></a>
in favor of
<a href="http://www.rubydoc.info/gems/addressable/Addressable/URI#encode-class_method"><code class="highlighter-rouge">Addressable::URI.encode</code></a>.
This is what powers our <a href="https://jekyllrb.com/docs/templates/"><code class="highlighter-rouge">uri_escape</code>
filter</a>.</p>
<p>While this transition was mostly a smooth one, the two methods are not
identical. While <code class="highlighter-rouge">URI.escape</code> was happy to escape any string,
<code class="highlighter-rouge">Addressable::URI.encode</code> first turns the string into an <code class="highlighter-rouge">Addressable::URI</code>
object, and will then escape each component of that object. In most cases, this
difference was insignificant, but there were a few cases where this caused some
unintended regressions when encoding colons.</p>
<p>While <strong>Addressable</strong> can understand that something like <code class="highlighter-rouge">"/example :page"</code> is a
relative URI, without the slash it cannot figure out how to turn
<code class="highlighter-rouge">"example :page"</code> into an <code class="highlighter-rouge">Addressable::URI</code> object. <code class="highlighter-rouge">URI.escape</code> had no such
objection. This lead to the following Liquid code working fine in Jekyll 3.3.x
but breaking in 3.4.0:</p>
<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{{</span><span class="w"> </span><span class="s2">"example :page"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">uri_escape</span><span class="w"> </span><span class="p">}}</span>
</code></pre></div></div>
<p>This was not an intended consequence of switching to <strong>Addressable</strong>.</p>
<p>Fortunately, the solution was not complicated. <strong>Addressable</strong> has a method
<a href="http://www.rubydoc.info/gems/addressable/Addressable/URI#normalize_component-class_method"><code class="highlighter-rouge">Addressable::URI.normalize_component</code></a>
which will simply escape the characters in a string, much like <code class="highlighter-rouge">URI.escape</code>.</p>
<p>Thanks to @cameronmcefee and @FriesFlorian for reporting
<a href="https://github.com/jekyll/jekyll/issues/5954">this issue</a>.</p>
<p>Happy Jekylling!</p>pathawksAnother one-PR patch update as we continue our quest to destroy all bugs. A fairly technical debriefing follows, but the TLDR is that we have updated the uri_escape filter to more closely follow the pre-v3.4.0 behavior.Jekyll 3.4.2 Released2017-03-09T12:41:57-08:002017-03-09T12:41:57-08:00https://jekyllrb.com/news/2017/03/09/jekyll-3-4-2-released<p>Another one-PR patch update, though without the same <a href="/news/2017/03/02/jekyll-3-4-1-released/">lessons as for the
previous release</a>.</p>
<p>This release includes a beneficial change for a number of plugins:
<strong>static files now respect front matter defaults</strong>.</p>
<p>You might be asking yourself: “why would static files, files that are
static files explicitly because they <em>don’t</em> have YAML front matter, want
to respect YAML front matter?” That’s a great question. Let me illustrate
with an example.</p>
<p>Let’s look at <code class="highlighter-rouge">jekyll-sitemap</code>. This plugin generates a list of documents,
pages, and static files, and some metadata for them in an XML file for a
Google/Yahoo/Bing/DuckDuckGo crawler to consume. If you don’t want a given
file in this list, you set <code class="highlighter-rouge">sitemap: false</code> in the YAML front matter. But
what about static files, which don’t have YAML front matter? Before this
release, they could not be excluded because they had no properties in YAML
other than <a href="https://github.com/jekyll/jekyll/blob/v3.4.1/lib/jekyll/static_file.rb#L98-L106">the ones we explicitly assigned</a>.
So if you had a PDF you didn’t want to be in your sitemap, you couldn’t use
<code class="highlighter-rouge">jekyll-sitemap</code>.</p>
<p>With this release, you can now set <a href="/docs/configuration/#front-matter-defaults">front matter
defaults</a> for static files:</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">defaults</span><span class="pi">:</span>
<span class="pi">-</span>
<span class="na">scope</span><span class="pi">:</span>
<span class="na">path</span><span class="pi">:</span> <span class="s2">"</span><span class="s">pdfs/"</span>
<span class="na">values</span><span class="pi">:</span>
<span class="na">sitemap</span><span class="pi">:</span> <span class="no">false</span>
</code></pre></div></div>
<p>Now, for every file in the Liquid <code class="highlighter-rouge">site.static_files</code> loop which is in the
folder <code class="highlighter-rouge">pdfs/</code>, you’ll see <code class="highlighter-rouge">sitemap</code> equal to <code class="highlighter-rouge">false</code>.</p>
<p>Many thanks to @benbalter for coming up with the solution and ensuring
sitemaps everywhere are filled with just the right content.</p>
<p>As always, if you notice any bugs, please search the issues and file one if
you can’t find another related to your issue.</p>
<p>Happy Jekylling!</p>parkrAnother one-PR patch update, though without the same lessons as for the previous release.Jekyll 3.4.1, or “Unintended Consequences”2017-03-02T11:20:26-08:002017-03-02T11:20:26-08:00https://jekyllrb.com/news/2017/03/02/jekyll-3-4-1-released<p>Conformity is a confounding thing.</p>
<p>We write tests to ensure that a piece of functionality that works today
will work tomorrow, as further modifications are made to the codebase. This
is a principle of modern software development: every change must have a
test to guard against regressions to the functionality implemented by that
change.</p>
<p>And yet, occasionally, our very best efforts to test functionality will be
thwarted. This is because of how our code produces unintended
functionality, which naturally goes untested.</p>
<p>In our documentation, we tell users to name their posts with the following
format:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>YYYY-MM-DD-title.extension
</code></pre></div></div>
<p>That format specifies exactly four numbers for the year, e.g. 2017, two
letters for the month, e.g. 03, and two letters for the day, e.g. 02. To
match this, we had the following regular expression:</p>
<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="sr">%r!^(?:.+/)*(</span><span class="se">\d</span><span class="sr">+-</span><span class="se">\d</span><span class="sr">+-</span><span class="se">\d</span><span class="sr">+)-(.*)(</span><span class="se">\.</span><span class="sr">[^.]+)$!</span>
</code></pre></div></div>
<p>You might already see the punchline. While our documentation specifies the
exact number of numbers that is required for each section of the date, our
regular expression does not enforce this precision. What happens if a user
doesn’t conform to our documentation?</p>
<p>We recently <a href="https://github.com/jekyll/jekyll/issues/5603">received a bug report</a>
that detailed how the following file was considered a post:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>84093135-42842323-42000001-b890-136270f7e5f1.md
</code></pre></div></div>
<p>Of course! It matches the above regular expression, but doesn’t satisfy
other requirements about those numbers being a valid date (unless you’re
living in a world that has 43 million months, and 42 million (and one)
days). So, we <a href="https://github.com/jekyll/jekyll/pull/5609">modified the regular expression to match our
documentation</a>:</p>
<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="sr">%r!^(?:.+/)*(</span><span class="se">\d</span><span class="sr">{4}-</span><span class="se">\d</span><span class="sr">{2}-</span><span class="se">\d</span><span class="sr">{2})-(.*)(</span><span class="se">\.</span><span class="sr">[^.]+)$!</span>
</code></pre></div></div>
<p>Our tests all passed and we were properly excluding this crazy date with 43
million months and days. This change shipped in Jekyll v3.4.0 and all was
well.</p>
<p>Well, not so much.</p>
<p>A very common way to specify the month of February is <code class="highlighter-rouge">2</code>. This is true for
all single-digit months and days of the month. Notice anything about our
first regular expression versus our second? The second regular expression
imposes a <strong>minimum</strong>, as well as maximum, number of digits. This change
made Jekyll ignore dates with single-digit days and months.</p>
<p>The first eight years of Jekyll’s existence had allowed single-digit days
and months due to an imprecise regular expression. For some people, their
entire blog was missing, and there were no errors that told them why.</p>
<p>After receiving a few bug reports, it became clear what had happened.
Unintended functionality of the last eight years had been broken. Thus,
v3.4.0 was broken for a non-negligible number of sites. With a test site
in-hand from @andrewbanchich, I tracked it down to this regular expression
and <a href="https://github.com/jekyll/jekyll/pull/5920">reintroduced</a> a proper
minimum number of digits for each segment:</p>
<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="sr">%r!^(?:.+/)*(</span><span class="se">\d</span><span class="sr">{2,4}-</span><span class="se">\d</span><span class="sr">{1,2}-</span><span class="se">\d</span><span class="sr">{1,2})-(.*)(</span><span class="se">\.</span><span class="sr">[^.]+)$!</span>
</code></pre></div></div>
<p>And, I wrote a test.</p>
<p>This change was quickly backported to v3.4.0 and here we are: releasing
v3.4.1. It will fix the problem for all users who were using single-digit
months and days.</p>
<p>With this, I encourage all of you to look at your code for <em>unintended</em>
functionality and make a judgement call: if it’s allowed, <em>should it be</em>?
If it should be allowed, make it <em>intended</em> functionality and test it! I
know I’ll be looking at my code with much greater scrutiny going forward,
looking for unintended consequences.</p>
<p>Many thanks to our Jekyll affinity team captains who helped out, including
@pathawks, @pnn, and @DirtyF. Thanks, too, to @ashmaroli for reviewing my
change with an eye for consistency and precision. This was certainly a team
effort.</p>
<p>We hope Jekyll v3.4.1 brings your variable-digit dates back to their
previous glory. We certainly won’t let that unintended functionality be
unintended any longer.</p>
<p>As always, Happy Jekylling!</p>parkrConformity is a confounding thing.Jekyll turns 3.4.02017-01-18T11:19:13-08:002017-01-18T11:19:13-08:00https://jekyllrb.com/news/2017/01/18/jekyll-3-4-0-released<p>Hey there! We have a quick update of Jekyll for you to enjoy this January.
Packed full of bug fixes as usual, thanks to the tireless efforts of our
exceptional Jekyll community. Three changes to call out:</p>
<ol>
<li>If you’re a big fan of <a href="/docs/templates/#filters"><code class="highlighter-rouge">where_by_exp</code></a>, you’ll be an
even bigger fan of <a href="/docs/templates/#filters"><code class="highlighter-rouge">group_by_exp</code></a>.</li>
<li>Using a custom timezone in Jekyll on Windows? Yeah, sorry that hasn’t ever worked
properly. We made it possible to accurately <a href="https://jekyllrb.com/docs/windows/#timezone-management">set the timezone using IANA
timezone codes</a>.</li>
<li>Documentation has been improved, notably on themes, includes and permalinks.</li>
</ol>
<p>And <a href="/docs/history/#v3-4-0">lots and lots more!</a></p>
<p>This update was made possible by the dedicated efforts of our excellent
contributors: Ajay Karwal, Alexey Rogachev, Ashwin Maroli,
BlueberryFoxtrot, Chase, Chayoung You, Dean Attali, Dmitrii Evdokimov, Don
Denton, Eldritch Cheese, Fabrice Laporte, Florian Thomas, Frank
Taillandier, Hugo, Ivan Dmitrievsky, Joel Meyer-Hamme, Josh Habdas, Kenton
Hansen, Kevin Wojniak, Kurt Anderson, Longwelwind, Max Chadwick, Nicolas
Hoizey, Nursen, Parker Moore, Pat Hawks, Purplecarrot, Ricardo N Feliciano,
Rob Crocombe, Roger Ogden, Skylar Challand, Thiago Arrais, Tim Banks, Tom
Johnson, Tunghsiao Liu, XhmikosR, Zlatan Vasović, alexmalik, brainscript,
kimbaudi, muratayusuke, penny, and yoostk.</p>
<p>As always, if you encounter bugs, please do <a href="https://github.com/jekyll/jekyll/issues">search the issues</a>
and <a href="https://github.com/jekyll/jekyll/issues/new">file an issue</a> if you aren’t able to
find a resolution. We also have <a href="https://talk.jekyllrb.com">our Jekyll Talk
forum</a> for those of you with general questions
about how to accomplish certain tasks with Jekyll.</p>
<p>We have some exciting updates in store for v3.5, and we’re hard at work on
those already.</p>
<p>Happy Jekylling!</p>parkrHey there! We have a quick update of Jekyll for you to enjoy this January. Packed full of bug fixes as usual, thanks to the tireless efforts of our exceptional Jekyll community. Three changes to call out: