<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nikola (Posts about GitHub)</title><link>https://getnikola.com/</link><description></description><atom:link href="https://getnikola.com/categories/github.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Sat, 17 May 2025 17:58:54 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Automating Nikola rebuilds with GitHub Actions</title><link>https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html</link><dc:creator>Chris Warrick</dc:creator><description>&lt;p&gt;In this guide, we’ll set up GitHub Actions to rebuild a &lt;a class="reference external" href="https://getnikola.com/"&gt;Nikola&lt;/a&gt; website and host it on GitHub Pages.&lt;/p&gt;
&lt;section id="why"&gt;
&lt;h2&gt;Why?&lt;/h2&gt;
&lt;p&gt;By using GitHub Actions to build your site, you can easily blog from anywhere
you can edit text files. Which means you can blog with only a web
browser and &lt;a class="reference external" href="https://github.com"&gt;GitHub.com&lt;/a&gt;.
You also won’t need to install Nikola and Python to write. You won’t need a
real computer either — a mobile phone could probably access GitHub.com and write something.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="caveats"&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The build might take a couple minutes to finish (1:30 for the demo site;
YMMV)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you commit and push to GitHub, the site will be published
unconditionally. If you don’t have a copy of Nikola for local use, there is
no way to preview your site.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="what-you-need"&gt;
&lt;h2&gt;What you need&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;A computer for the initial setup that can run Nikola. You can do it with any
OS (Linux, macOS, *BSD, but also Windows).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A GitHub account (free)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="setting-up-nikola"&gt;
&lt;h2&gt;Setting up Nikola&lt;/h2&gt;
&lt;p&gt;Start by creating a new Nikola site and customizing it to your liking. Follow
the &lt;a class="reference external" href="https://getnikola.com/getting-started.html"&gt;Getting Started guide&lt;/a&gt;. You
might also want to add support for &lt;a class="reference external" href="https://getnikola.com/handbook.html#configuring-other-input-formats"&gt;other input formats&lt;/a&gt;, namely
Markdown, but this is not a requirement.&lt;/p&gt;
&lt;p&gt;After you’re done, you must configure &lt;a class="reference external" href="https://getnikola.com/handbook.html#deploying-to-github"&gt;deploying to GitHub&lt;/a&gt; in Nikola. There
are a few important things you need to take care of:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Make your first deployment from your local computer and make sure your site
works right. Don’t forget to set up &lt;code class="docutils literal"&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code class="docutils literal"&gt;GITHUB_COMMIT_SOURCE&lt;/code&gt; and &lt;code class="docutils literal"&gt;GITHUB_REMOTE_NAME&lt;/code&gt; settings are
overridden, so you can use values appropriate for your local builds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure that the correct branch for GitHub Pages is set on GitHub.com.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If everything works, you can make some change to your site (so you see that
rebuilding works), but don’t commit it just yet.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="setting-up-github-actions"&gt;
&lt;h2&gt;Setting up GitHub Actions&lt;/h2&gt;
&lt;p&gt;Next, we need to set up GitHub Actions. This is really straightforward.&lt;/p&gt;
&lt;p&gt;On your source branch, create a file named &lt;code class="docutils literal"&gt;.github/workflows/main.yml&lt;/code&gt; with the following contents:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://getnikola.com/listings/github-workflow.yml.html"&gt;github-workflow.yml&lt;/a&gt;  &lt;a class="reference external" href="https://getnikola.com/listings/github-workflow.yml"&gt;(Source)&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-1"&gt;&lt;code data-line-number=" 1"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-1" name="rest_code_350e9be37c2943ab9a28489e74a58554-1"&gt;&lt;/a&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="p p-Indicator"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-2"&gt;&lt;code data-line-number=" 2"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-2" name="rest_code_350e9be37c2943ab9a28489e74a58554-2"&gt;&lt;/a&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-3"&gt;&lt;code data-line-number=" 3"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-3" name="rest_code_350e9be37c2943ab9a28489e74a58554-3"&gt;&lt;/a&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-4"&gt;&lt;code data-line-number=" 4"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-4" name="rest_code_350e9be37c2943ab9a28489e74a58554-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;nikola_build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-5"&gt;&lt;code data-line-number=" 5"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-5" name="rest_code_350e9be37c2943ab9a28489e74a58554-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-6"&gt;&lt;code data-line-number=" 6"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-6" name="rest_code_350e9be37c2943ab9a28489e74a58554-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;'Deploy&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Nikola&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Pages'&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-7"&gt;&lt;code data-line-number=" 7"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-7" name="rest_code_350e9be37c2943ab9a28489e74a58554-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-8"&gt;&lt;code data-line-number=" 8"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-8" name="rest_code_350e9be37c2943ab9a28489e74a58554-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Check out&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-9"&gt;&lt;code data-line-number=" 9"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-9" name="rest_code_350e9be37c2943ab9a28489e74a58554-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;actions/checkout@v2&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-10"&gt;&lt;code data-line-number="10"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-10" name="rest_code_350e9be37c2943ab9a28489e74a58554-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Build and Deploy Nikola&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_350e9be37c2943ab9a28489e74a58554-11"&gt;&lt;code data-line-number="11"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_350e9be37c2943ab9a28489e74a58554-11" name="rest_code_350e9be37c2943ab9a28489e74a58554-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;getnikola/nikola-action@v2&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;There might be a newer version of the action available, you can check the
latest version in the &lt;a class="reference external" href="https://github.com/getnikola/nikola-action"&gt;getnikola/nikola-action repo on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By default, the action will install the latest stable release of &lt;code class="docutils literal"&gt;Nikola[extras]&lt;/code&gt;. If you want to use the bleeding-edge version from &lt;code class="docutils literal"&gt;master&lt;/code&gt;, or want to install some extra dependencies, you can provide a &lt;code class="docutils literal"&gt;requirements.txt&lt;/code&gt; file in the repository.&lt;/p&gt;
&lt;p&gt;Commit everything to GitHub:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_424074bc25e34f18a761a113a908f178-1" name="rest_code_424074bc25e34f18a761a113a908f178-1" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_424074bc25e34f18a761a113a908f178-1"&gt;&lt;/a&gt;&lt;span class="go"&gt;git add .&lt;/span&gt;
&lt;a id="rest_code_424074bc25e34f18a761a113a908f178-2" name="rest_code_424074bc25e34f18a761a113a908f178-2" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html#rest_code_424074bc25e34f18a761a113a908f178-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;git commit -am "Automate builds with GitHub Actions"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Hopefully, GitHub will build your site and deploy. Check the Actions tab in
your repository or your e-mail for build details. If there are any errors, make sure you followed this guide to the letter.&lt;/p&gt;
&lt;/section&gt;</description><category>automation</category><category>GitHub</category><category>GitHub Actions</category><category>tips</category><guid>https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html</guid><pubDate>Fri, 24 Apr 2020 22:24:48 GMT</pubDate></item><item><title>Automating Nikola rebuilds with Travis CI</title><link>https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html</link><dc:creator>Chris Warrick</dc:creator><description>&lt;p&gt;In this guide, we’ll set up Travis CI to rebuild a &lt;a class="reference external" href="https://getnikola.com/"&gt;Nikola&lt;/a&gt; website and host it on GitHub Pages.&lt;/p&gt;
&lt;aside class="admonition warning"&gt;
&lt;p class="admonition-title"&gt;Warning&lt;/p&gt;
&lt;p&gt;Travis CI will no longer be free, starting in 2021. We recommend GitHub Actions or GitLab CI instead — see the &lt;a class="reference external" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-github-actions.html"&gt;GitHub Actions version of this guide&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;section id="why"&gt;
&lt;h2&gt;Why?&lt;/h2&gt;
&lt;p&gt;By using Travis CI to build your site, you can easily blog from anywhere
you can edit text files. Which means you can blog with only a web
browser and &lt;a class="reference external" href="https://github.com"&gt;GitHub.com&lt;/a&gt;.
You also won’t need to install Nikola and Python to write. You won’t need a
real computer either — a mobile phone could probably access GitHub.com and write something.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="caveats"&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The build might take a couple minutes to finish (1:30 for the demo site;
YMMV)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you commit and push to GitHub, the site will be published
unconditionally. If you don’t have a copy of Nikola for local use, there is
no way to preview your site.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="what-you-need"&gt;
&lt;h2&gt;What you need&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;A computer for the initial setup that can run Nikola and the Travis CI
command-line tool (written in Ruby) — you need a Unix-like system (Linux,
macOS, *BSD, etc.); Windows users should try &lt;em&gt;Bash on Ubuntu on Windows&lt;/em&gt;
aka &lt;em&gt;Windows Subsystem for Linux&lt;/em&gt; (available in Windows 10 starting with
Anniversary Update) or a Linux virtual machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A GitHub account (free)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Travis CI account linked to your GitHub account (free)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="setting-up-nikola"&gt;
&lt;h2&gt;Setting up Nikola&lt;/h2&gt;
&lt;p&gt;Start by creating a new Nikola site and customizing it to your liking. Follow
the &lt;a class="reference external" href="https://getnikola.com/getting-started.html"&gt;Getting Started guide&lt;/a&gt;. You
might also want to add support for &lt;a class="reference external" href="https://getnikola.com/handbook.html#configuring-other-input-formats"&gt;other input formats&lt;/a&gt;, namely
Markdown, but this is not a requirement.&lt;/p&gt;
&lt;p&gt;After you’re done, you must configure &lt;a class="reference external" href="https://getnikola.com/handbook.html#deploying-to-github"&gt;deploying to GitHub&lt;/a&gt; in Nikola. There
are a few important things you need to take care of:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Make your first deployment from your local computer and make sure your site
works right. Don’t forget to set up &lt;code class="docutils literal"&gt;.gitignore&lt;/code&gt; (We’ll add two &lt;strong&gt;very&lt;/strong&gt;
important entries later.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You must set &lt;code class="docutils literal"&gt;GITHUB_COMMIT_SOURCE = False&lt;/code&gt; — otherwise, Travis CI will go
into an infinite loop.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We assume your source branch is &lt;code class="docutils literal"&gt;src&lt;/code&gt; and you deploy to &lt;code class="docutils literal"&gt;master&lt;/code&gt;. Any
other configuration requires editing &lt;code class="docutils literal"&gt;.travis.yml&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We enable builds only for the &lt;code class="docutils literal"&gt;src&lt;/code&gt; branch by default. Older versions of
the script did not include this provision, and thus committing to &lt;code class="docutils literal"&gt;master&lt;/code&gt;
(which you should not do, as your changes will be overwritten on next Travis
rebuild) used to cause &lt;code class="docutils literal"&gt;Rakefile&lt;/code&gt; errors.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If everything works, you can make some change to your site (so you see that
rebuilding works), but don’t commit it just yet.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="setting-up-travis-ci"&gt;
&lt;h2&gt;Setting up Travis CI&lt;/h2&gt;
&lt;p&gt;Next, we need to set up Travis CI. To do that, make sure you have the &lt;code class="docutils literal"&gt;ruby&lt;/code&gt;
and &lt;code class="docutils literal"&gt;gem&lt;/code&gt; tools installed on your system. If you don’t have them, install
them from your OS package manager.&lt;/p&gt;
&lt;p&gt;First, download/copy the &lt;code class="docutils literal"&gt;.travis.yml&lt;/code&gt; file (note the dot in the beginning;
the downloaded file doesn’t have it!) and adjust the real name, e-mail (used
for commits; line 15/16), and the username/repo name on line 24.  If you need
any other Python/apt packages to build your site, add them to your config. (For
&lt;code class="docutils literal"&gt;apt&lt;/code&gt; packages, you will need &lt;code class="docutils literal"&gt;addons: apt: packages:&lt;/code&gt; keys.)&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://getnikola.com/listings/travis.yml.html"&gt;travis.yml&lt;/a&gt;  &lt;a class="reference external" href="https://getnikola.com/listings/travis.yml"&gt;(Source)&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-1"&gt;&lt;code data-line-number=" 1"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-1" name="rest_code_94ee803849914befbea478adcde8335a-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Travis CI config for automated Nikola blog deployments&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-2"&gt;&lt;code data-line-number=" 2"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-2" name="rest_code_94ee803849914befbea478adcde8335a-2"&gt;&lt;/a&gt;&lt;span class="nt"&gt;language&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;python&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-3"&gt;&lt;code data-line-number=" 3"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-3" name="rest_code_94ee803849914befbea478adcde8335a-3"&gt;&lt;/a&gt;&lt;span class="nt"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;apt&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-4"&gt;&lt;code data-line-number=" 4"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-4" name="rest_code_94ee803849914befbea478adcde8335a-4"&gt;&lt;/a&gt;&lt;span class="nt"&gt;sudo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-5"&gt;&lt;code data-line-number=" 5"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-5" name="rest_code_94ee803849914befbea478adcde8335a-5"&gt;&lt;/a&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-6"&gt;&lt;code data-line-number=" 6"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-6" name="rest_code_94ee803849914befbea478adcde8335a-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-7"&gt;&lt;code data-line-number=" 7"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-7" name="rest_code_94ee803849914befbea478adcde8335a-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;src&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-8"&gt;&lt;code data-line-number=" 8"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-8" name="rest_code_94ee803849914befbea478adcde8335a-8"&gt;&lt;/a&gt;&lt;span class="nt"&gt;python&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-9"&gt;&lt;code data-line-number=" 9"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-9" name="rest_code_94ee803849914befbea478adcde8335a-9"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;3.6&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-10"&gt;&lt;code data-line-number="10"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-10" name="rest_code_94ee803849914befbea478adcde8335a-10"&gt;&lt;/a&gt;&lt;span class="nt"&gt;before_install&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-11"&gt;&lt;code data-line-number="11"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-11" name="rest_code_94ee803849914befbea478adcde8335a-11"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;git config --global user.name 'Travis CI'&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-12"&gt;&lt;code data-line-number="12"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-12" name="rest_code_94ee803849914befbea478adcde8335a-12"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;git config --global user.email 'travis@invalid'&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-13"&gt;&lt;code data-line-number="13"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-13" name="rest_code_94ee803849914befbea478adcde8335a-13"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;git config --global push.default 'simple'&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-14"&gt;&lt;code data-line-number="14"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-14" name="rest_code_94ee803849914befbea478adcde8335a-14"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;pip install -U --upgrade-strategy=eager pip setuptools wheel&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-15"&gt;&lt;code data-line-number="15"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-15" name="rest_code_94ee803849914befbea478adcde8335a-15"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;echo -e 'Host github.com\n    StrictHostKeyChecking no' &amp;gt;&amp;gt; ~/.ssh/config&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-16"&gt;&lt;code data-line-number="16"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-16" name="rest_code_94ee803849914befbea478adcde8335a-16"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;eval "$(ssh-agent -s)"&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-17"&gt;&lt;code data-line-number="17"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-17" name="rest_code_94ee803849914befbea478adcde8335a-17"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;chmod 600 id_rsa&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-18"&gt;&lt;code data-line-number="18"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-18" name="rest_code_94ee803849914befbea478adcde8335a-18"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;ssh-add id_rsa&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-19"&gt;&lt;code data-line-number="19"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-19" name="rest_code_94ee803849914befbea478adcde8335a-19"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;git remote rm origin&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-20"&gt;&lt;code data-line-number="20"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-20" name="rest_code_94ee803849914befbea478adcde8335a-20"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;git remote add origin git@github.com:USERNAME/REPO.git&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-21"&gt;&lt;code data-line-number="21"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-21" name="rest_code_94ee803849914befbea478adcde8335a-21"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;git fetch origin master&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-22"&gt;&lt;code data-line-number="22"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-22" name="rest_code_94ee803849914befbea478adcde8335a-22"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;git branch master FETCH_HEAD&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-23"&gt;&lt;code data-line-number="23"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-23" name="rest_code_94ee803849914befbea478adcde8335a-23"&gt;&lt;/a&gt;&lt;span class="nt"&gt;install&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-24"&gt;&lt;code data-line-number="24"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-24" name="rest_code_94ee803849914befbea478adcde8335a-24"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;pip install -U --upgrade-strategy=eager 'Nikola[extras]'&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-25"&gt;&lt;code data-line-number="25"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-25" name="rest_code_94ee803849914befbea478adcde8335a-25"&gt;&lt;/a&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-26"&gt;&lt;code data-line-number="26"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-26" name="rest_code_94ee803849914befbea478adcde8335a-26"&gt;&lt;/a&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;nikola build &amp;amp;&amp;amp; nikola github_deploy -m 'Nikola auto deploy [ci skip]'&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-27"&gt;&lt;code data-line-number="27"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-27" name="rest_code_94ee803849914befbea478adcde8335a-27"&gt;&lt;/a&gt;&lt;span class="nt"&gt;notifications&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-28"&gt;&lt;code data-line-number="28"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-28" name="rest_code_94ee803849914befbea478adcde8335a-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-29"&gt;&lt;code data-line-number="29"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-29" name="rest_code_94ee803849914befbea478adcde8335a-29"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;on_success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;change&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_94ee803849914befbea478adcde8335a-30"&gt;&lt;code data-line-number="30"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;a id="rest_code_94ee803849914befbea478adcde8335a-30" name="rest_code_94ee803849914befbea478adcde8335a-30"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;on_failure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;always&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;Next, we need to generate a SSH key for Travis CI.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-1" name="rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-1" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-1"&gt;&lt;/a&gt;&lt;span class="go"&gt;echo id_rsa &amp;gt;&amp;gt; .gitignore&lt;/span&gt;
&lt;a id="rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-2" name="rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-2" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;echo id_rsa.pub &amp;gt;&amp;gt; .gitignore&lt;/span&gt;
&lt;a id="rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-3" name="rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-3" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_32d5353b447f40a2b045bd7ae6bd5ea6-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;ssh-keygen -C TravisCI -f id_rsa -N ''&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Open the &lt;code class="docutils literal"&gt;id_rsa.pub&lt;/code&gt; file and copy its contents. Go to GitHub → your page
repository → Settings → Deploy keys and add it there. Make sure &lt;em&gt;Allow write
access&lt;/em&gt; is checked.&lt;/p&gt;
&lt;p&gt;And now, time for our venture into the Ruby world. Install the &lt;code class="docutils literal"&gt;travis&lt;/code&gt; gem:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_9d16a046f50444138ad6fa72f1b17397-1" name="rest_code_9d16a046f50444138ad6fa72f1b17397-1" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_9d16a046f50444138ad6fa72f1b17397-1"&gt;&lt;/a&gt;&lt;span class="go"&gt;gem install --user-install travis&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can then use the &lt;code class="docutils literal"&gt;travis&lt;/code&gt; command if you have configured your &lt;code class="docutils literal"&gt;$PATH&lt;/code&gt;
for RubyGems; if you haven’t, the tool will output a path to use on the first
lines (eg.  &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;~/.gem/ruby/2.0.0/bin/travis&lt;/span&gt;&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;We’ll use the Travis CI command-line client to log in (using your GitHub
password), enable the repository and encrypt our SSH key. Run the following
three commands, one at a time (they are interactive):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_8e904aafc38c49a9a07bc1030096cd4b-1" name="rest_code_8e904aafc38c49a9a07bc1030096cd4b-1" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_8e904aafc38c49a9a07bc1030096cd4b-1"&gt;&lt;/a&gt;&lt;span class="go"&gt;travis login&lt;/span&gt;
&lt;a id="rest_code_8e904aafc38c49a9a07bc1030096cd4b-2" name="rest_code_8e904aafc38c49a9a07bc1030096cd4b-2" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_8e904aafc38c49a9a07bc1030096cd4b-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;travis enable&lt;/span&gt;
&lt;a id="rest_code_8e904aafc38c49a9a07bc1030096cd4b-3" name="rest_code_8e904aafc38c49a9a07bc1030096cd4b-3" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_8e904aafc38c49a9a07bc1030096cd4b-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;travis encrypt-file id_rsa --add&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Commit everything to GitHub:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_244afba17459476fb98aa77e0b3e829e-1" name="rest_code_244afba17459476fb98aa77e0b3e829e-1" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_244afba17459476fb98aa77e0b3e829e-1"&gt;&lt;/a&gt;&lt;span class="go"&gt;git add .&lt;/span&gt;
&lt;a id="rest_code_244afba17459476fb98aa77e0b3e829e-2" name="rest_code_244afba17459476fb98aa77e0b3e829e-2" href="https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html#rest_code_244afba17459476fb98aa77e0b3e829e-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;git commit -am "Automate builds with Travis CI"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Hopefully, Travis CI will build your site and deploy. Check the Travis CI
website or your e-mail for a notification. If there are any errors, make sure
you followed this guide to the letter.&lt;/p&gt;
&lt;p&gt;(Revision 4a, 2020-04-24: Add link to GitHub Actions version of this guide)&lt;/p&gt;
&lt;/section&gt;</description><category>automation</category><category>GitHub</category><category>tips</category><category>Travis CI</category><guid>https://getnikola.com/blog/automating-nikola-rebuilds-with-travis-ci.html</guid><pubDate>Wed, 24 Aug 2016 18:05:25 GMT</pubDate></item><item><title>5000 commits to Nikola!</title><link>https://getnikola.com/blog/5000-commits.html</link><dc:creator>The Nikola Team</dc:creator><description>&lt;p&gt;Nikola, the static site genrator, has just hit 5000 commits!  The lucky
commit was &lt;a class="reference external" href="https://github.com/getnikola/nikola/commit/a99ef7a06bbd9bf07be44e019a15a991248e0ff4"&gt;a99ef7a&lt;/a&gt;, with the message &lt;em&gt;Document new previewimage metadata&lt;/em&gt;
and was authored by &lt;a class="reference external" href="https://github.com/Aeyoun"&gt;Daniel Aleksandersen (Aeyoun)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;During 2.5 years, 103 different people committed to the project.  The top 10 committers are:&lt;/p&gt;
&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="chart-9064168b-6e66-4956-996e-ed6409fbea55" class="pygal-chart" viewbox="0 0 800 300"&gt;&lt;!--Generated with pygal 3.0.5 (lxml) ©Kozea 2012-2016 on 2025-05-17--&gt;&lt;!--http://pygal.org--&gt;&lt;!--http://github.com/Kozea/pygal--&gt;&lt;defs&gt;&lt;style type="text/css"&gt;#chart-9064168b-6e66-4956-996e-ed6409fbea55{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .title{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:16px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .legends .legend text{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:14px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis text{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:10px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis text.major{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:10px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .text-overlay text.value{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:16px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .text-overlay text.label{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:10px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:14px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 text.no_data{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:64px}
#chart-9064168b-6e66-4956-996e-ed6409fbea55{background-color:transparent}#chart-9064168b-6e66-4956-996e-ed6409fbea55 path,#chart-9064168b-6e66-4956-996e-ed6409fbea55 line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 rect,#chart-9064168b-6e66-4956-996e-ed6409fbea55 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .graph &amp;gt; .background{fill:transparent}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .plot &amp;gt; .background{fill:rgba(240,240,240,0.7)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .graph{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 text.no_data{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .title{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .legends .legend text{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .legends .legend:hover text{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis .line{stroke:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis .guide.line{stroke:rgba(0,0,0,0.5)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis .major.line{stroke:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis text.major{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.y .guides:hover .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .line-graph .axis.x .guides:hover .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis .guides:hover text{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .reactive{fill-opacity:.7;stroke-opacity:.8;stroke-width:1}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .ci{stroke:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .reactive.active,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .ci .reactive.active{stroke-width:1.5}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .series text{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip rect{fill:rgba(240,240,240,0.7);stroke:rgba(0,0,0,0.9);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip .label{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip .label{fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,0.5)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,0.9)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip .value{font-size:1.5em}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .bound{font-size:.5em}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .max-value{font-size:.75em;fill:rgba(0,0,0,0.5)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .map-element{fill:rgba(240,240,240,0.7);stroke:rgba(0,0,0,0.5) !important}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .color-0,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .color-0 a:visited{stroke:rgb(12,55,149);fill:rgb(12,55,149)}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .text-overlay .color-0 text{fill:black}
#chart-9064168b-6e66-4956-996e-ed6409fbea55 text.no_data{text-anchor:middle}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .guide.line{fill:none}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .centered{text-anchor:middle}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .title{text-anchor:middle}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .legends .legend text{fill-opacity:1}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.x text{text-anchor:middle}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.y text{text-anchor:end}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.y text[transform].backwards{text-anchor:start}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.y2 text{text-anchor:start}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.y2 text[transform].backwards{text-anchor:end}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis .guide.line{stroke-dasharray:4,4;stroke:black}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis .major.guide.line{stroke-dasharray:6,6;stroke:black}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .horizontal .axis.y .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .horizontal .axis.y2 .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .vertical .axis.x .guide.line{opacity:0}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .horizontal .axis.always_show .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.y .guides:hover .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.y2 .guides:hover .guide.line,#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis.x .guides:hover .guide.line{opacity:1}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .axis .guides:hover text{opacity:1}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .nofill{fill:none}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .subtle-fill{fill-opacity:.2}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .dot{stroke-width:1px;fill-opacity:1;stroke-opacity:1}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .dot.active{stroke-width:5px}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .dot.negative{fill:transparent}#chart-9064168b-6e66-4956-996e-ed6409fbea55 text,#chart-9064168b-6e66-4956-996e-ed6409fbea55 tspan{stroke:none !important}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .series text.active{opacity:1}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .tooltip text{fill-opacity:1}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .showable{visibility:hidden}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .showable.shown{visibility:visible}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-9064168b-6e66-4956-996e-ed6409fbea55 .bg-lines{stroke:transparent;stroke-width:2px}&lt;/style&gt;&lt;script type="text/javascript"&gt;window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['9064168b-6e66-4956-996e-ed6409fbea55'] = {"allow_interruptions": false, "box_mode": "extremes", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css"], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": true, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 300, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["//kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 16, "min_scale": 4, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": null, "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": true, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": true, "show_x_labels": true, "show_y_guides": false, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "transparent", "ci_colors": [], "colors": ["rgb(12,55,149)", "rgb(117,38,65)", "rgb(228,127,0)", "rgb(159,170,0)", "rgb(149,12,12)"], "dot_opacity": "1", "font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "foreground": "rgba(0, 0, 0, 0.9)", "foreground_strong": "rgba(0, 0, 0, 0.9)", "foreground_subtle": "rgba(0, 0, 0, 0.5)", "guide_stroke_color": "black", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "legend_font_size": 14, "major_guide_stroke_color": "black", "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(240, 240, 240, 0.7)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "stroke_width": "1", "stroke_width_hover": "4", "title_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "value_label_font_size": 10}, "title": "Top 10 Nikola committers", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": null, "truncate_legend": null, "width": 800, "x_label_rotation": 0, "x_labels": ["Roberto Alsina", "Chris \u201cKwpolska\u201d Warrick", "Daniel Aleksandersen", "Niko Wenselowski", "Puneeth Chaganti", "Dami\u00e1n Avila", "Claudio Canepa", "Ivan Teoh", "schettino72", "Areski Belaid"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": null, "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": null, "zero": 0, "legends": ["Commits"]}&lt;/script&gt;&lt;script type="text/javascript" xlink:href="https://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js"&gt;&lt;/script&gt;&lt;/defs&gt;&lt;title&gt;Top 10 Nikola committers&lt;/title&gt;&lt;g class="graph horizontalbar-graph horizontal"&gt;&lt;rect x="0" y="0" width="800" height="300" class="background"&gt;&lt;/rect&gt;&lt;g transform="translate(254, 46)" class="plot"&gt;&lt;rect x="0" y="0" width="525.2" height="214" class="background"&gt;&lt;/rect&gt;&lt;g class="axis y"&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="203.09615384615384" class=""&gt;Roberto Alsina&lt;/text&gt;&lt;title&gt;0.05&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="182.51923076923077" class=""&gt;Chris “Kwpolska” Warrick&lt;/text&gt;&lt;title&gt;0.15&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="161.94230769230768" class=""&gt;Daniel Aleksandersen&lt;/text&gt;&lt;title&gt;0.25&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="141.36538461538464" class=""&gt;Niko Wenselowski&lt;/text&gt;&lt;title&gt;0.35&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="120.78846153846153" class=""&gt;Puneeth Chaganti&lt;/text&gt;&lt;title&gt;0.45&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="100.21153846153845" class=""&gt;Damián Avila&lt;/text&gt;&lt;title&gt;0.55&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="79.63461538461539" class=""&gt;Claudio Canepa&lt;/text&gt;&lt;title&gt;0.65&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="59.05769230769232" class=""&gt;Ivan Teoh&lt;/text&gt;&lt;title&gt;0.75&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="38.480769230769226" class=""&gt;schettino72&lt;/text&gt;&lt;title&gt;0.85&lt;/title&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;text x="-5" y="17.90384615384619" class=""&gt;Areski Belaid&lt;/text&gt;&lt;title&gt;0.95&lt;/title&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="axis x always_show"&gt;&lt;g class="guides"&gt;&lt;path d="M10.100000 0.000000 v214.000000" class="axis major line"&gt;&lt;/path&gt;&lt;text x="10.100000000000001" y="229.0" class="major"&gt;0&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M50.084165 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="50.08416468725258" y="229.0" class=""&gt;200&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M90.068329 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="90.06832937450515" y="229.0" class=""&gt;400&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M130.052494 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="130.05249406175773" y="229.0" class=""&gt;600&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M170.036659 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="170.03665874901031" y="229.0" class=""&gt;800&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M210.020823 0.000000 v214.000000" class="major guide line"&gt;&lt;/path&gt;&lt;text x="210.0208234362629" y="229.0" class="major"&gt;1000&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M250.004988 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="250.00498812351546" y="229.0" class=""&gt;1200&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M289.989153 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="289.989152810768" y="229.0" class=""&gt;1400&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M329.973317 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="329.9733174980206" y="229.0" class=""&gt;1600&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M369.957482 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="369.9574821852732" y="229.0" class=""&gt;1800&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M409.941647 0.000000 v214.000000" class="major guide line"&gt;&lt;/path&gt;&lt;text x="409.9416468725258" y="229.0" class="major"&gt;2000&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M449.925812 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="449.9258115597783" y="229.0" class=""&gt;2200&lt;/text&gt;&lt;/g&gt;&lt;g class="guides"&gt;&lt;path d="M489.909976 0.000000 v214.000000" class="guide line"&gt;&lt;/path&gt;&lt;text x="489.9099762470309" y="229.0" class=""&gt;2400&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="series serie-0 color-0"&gt;&lt;g class="bars"&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000023" y="191.62876923076922" rx="0" ry="0" width="505.0" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;2526&lt;/desc&gt;&lt;desc class="x centered"&gt;262.6&lt;/desc&gt;&lt;desc class="y centered"&gt;199.59615384615384&lt;/desc&gt;&lt;desc class="x_label"&gt;Roberto Alsina&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000023" y="171.05184615384616" rx="0" ry="0" width="263.895486935867" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;1320&lt;/desc&gt;&lt;desc class="x centered"&gt;142.04774346793351&lt;/desc&gt;&lt;desc class="y centered"&gt;179.01923076923077&lt;/desc&gt;&lt;desc class="x_label"&gt;Chris “Kwpolska” Warrick&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="150.47492307692306" rx="0" ry="0" width="44.78226444972289" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;224&lt;/desc&gt;&lt;desc class="x centered"&gt;32.491132224861445&lt;/desc&gt;&lt;desc class="y centered"&gt;158.44230769230768&lt;/desc&gt;&lt;desc class="x_label"&gt;Daniel Aleksandersen&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="129.89799999999997" rx="0" ry="0" width="38.584718923198736" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;193&lt;/desc&gt;&lt;desc class="x centered"&gt;29.39235946159937&lt;/desc&gt;&lt;desc class="y centered"&gt;137.86538461538458&lt;/desc&gt;&lt;desc class="x_label"&gt;Niko Wenselowski&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="109.32107692307692" rx="0" ry="0" width="12.99485352335709" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;65&lt;/desc&gt;&lt;desc class="x centered"&gt;16.59742676167855&lt;/desc&gt;&lt;desc class="y centered"&gt;117.28846153846153&lt;/desc&gt;&lt;desc class="x_label"&gt;Puneeth Chaganti&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="88.74415384615385" rx="0" ry="0" width="10.39588281868567" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;52&lt;/desc&gt;&lt;desc class="x centered"&gt;15.297941409342837&lt;/desc&gt;&lt;desc class="y centered"&gt;96.71153846153847&lt;/desc&gt;&lt;desc class="x_label"&gt;Damián Avila&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="68.16723076923077" rx="0" ry="0" width="9.196357878068095" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;46&lt;/desc&gt;&lt;desc class="x centered"&gt;14.69817893903405&lt;/desc&gt;&lt;desc class="y centered"&gt;76.13461538461539&lt;/desc&gt;&lt;desc class="x_label"&gt;Claudio Canepa&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="47.59030769230772" rx="0" ry="0" width="6.7973079968329415" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;34&lt;/desc&gt;&lt;desc class="x centered"&gt;13.498653998416472&lt;/desc&gt;&lt;desc class="y centered"&gt;55.557692307692335&lt;/desc&gt;&lt;desc class="x_label"&gt;Ivan Teoh&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="27.0133846153846" rx="0" ry="0" width="7.397070467141727" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;37&lt;/desc&gt;&lt;desc class="x centered"&gt;13.798535233570865&lt;/desc&gt;&lt;desc class="y centered"&gt;34.98076923076921&lt;/desc&gt;&lt;desc class="x_label"&gt;schettino72&lt;/desc&gt;&lt;/g&gt;&lt;g class="bar"&gt;&lt;rect x="10.100000000000001" y="6.436461538461554" rx="0" ry="0" width="7.397070467141727" height="15.93476923076923" class="rect reactive tooltip-trigger"&gt;&lt;/rect&gt;&lt;desc class="value"&gt;37&lt;/desc&gt;&lt;desc class="x centered"&gt;13.798535233570865&lt;/desc&gt;&lt;desc class="y centered"&gt;14.40384615384617&lt;/desc&gt;&lt;desc class="x_label"&gt;Areski Belaid&lt;/desc&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class="titles"&gt;&lt;text x="400.0" y="26" class="title plot_title"&gt;Top 10 Nikola committers&lt;/text&gt;&lt;/g&gt;&lt;g transform="translate(254, 46)" class="plot overlay"&gt;&lt;g class="series serie-0 color-0"&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform="translate(254, 46)" class="plot text-overlay"&gt;&lt;g class="series serie-0 color-0"&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform="translate(254, 46)" class="plot tooltip-overlay"&gt;&lt;g transform="translate(0 0)" style="opacity: 0" class="tooltip"&gt;&lt;rect rx="0" ry="0" width="0" height="0" class="tooltip-box"&gt;&lt;/rect&gt;&lt;g class="text"&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform="translate(10, 56)" class="legends"&gt;&lt;g id="activate-serie-0" class="legend reactive activate-serie"&gt;&lt;rect x="0.0" y="1.0" width="12" height="12" class="color-0 reactive"&gt;&lt;/rect&gt;&lt;text x="17.0" y="11.2"&gt;Commits&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform="translate(790, 56)" class="legends"&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;p&gt;According to &lt;a class="reference external" href="https://www.openhub.net/p/nikola-generator"&gt;OpenHub.Net&lt;/a&gt;, there are 54 active developers contributing code in the past year — making Nikola a large open source project, with its contributors count being in the top 2% of all OpenHub teams.&lt;/p&gt;
&lt;p&gt;Using data generated by David A. Wheeler’s SLOCCount, 12,002 source lines of
code were produced (including tests and internal code).  95.1% of codebase is
Python, with the remaining 4.9% split between JavaScript, CSS, Shell, and XSLT.&lt;/p&gt;
&lt;p&gt;Over the years, a total of &lt;a class="reference external" href="https://github.com/getnikola/nikola/issues"&gt;1426 issues&lt;/a&gt; were opened, 778 of which are already closed.  38 versions &lt;a class="reference external" href="https://github.com/getnikola/nikola/releases"&gt;were released&lt;/a&gt;, including the most recent one, &lt;a class="reference external" href="http://getnikola.com/blog/nikola-v710-released.html"&gt;v7.1.0&lt;/a&gt;, released 15 days ago.  The first ever release was version v1.1.  It already contained many features still present to this day, and it also used the &lt;a class="reference external" href="http://pydoit.org/"&gt;doit&lt;/a&gt; tool to do its job.  Here’s a screenshot of the original page:&lt;/p&gt;
&lt;a href="https://getnikola.com/nikola-1.1/" class="thumbnail"&gt;
    &lt;img src="https://getnikola.com/nikola-1.1/thumbnail.png" alt="Nikola v1.1 Demo Site" title="Nikola v1.1 Demo Site"&gt;
&lt;/a&gt;&lt;p&gt;In celebration of this milestone, the &lt;a class="reference external" href="http://getnikola.com/nikola-1.1/"&gt;demo site from version 1.1&lt;/a&gt; is now
online.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thanks for all the commits — and here’s to the next five thousand!&lt;/strong&gt;&lt;/p&gt;
&lt;section id="what-is-nikola"&gt;
&lt;h2&gt;What is Nikola?&lt;/h2&gt;
&lt;p&gt;Nikola is a static site and blog generator, written in Python.  It can
use Mako and Jinja2 templates, and input in many popular markup
formats, such as reStructuredText and Markdown — and can even turn
IPython Notebooks into blog posts! It also supports image galleries,
and is multilingual.  Nikola is flexible, and page builds are
extremely fast, courtesy of doit (which is rebuilding only what has
been changed).&lt;/p&gt;
&lt;/section&gt;</description><category>devel</category><category>GitHub</category><category>python</category><guid>https://getnikola.com/blog/5000-commits.html</guid><pubDate>Sun, 21 Sep 2014 08:00:00 GMT</pubDate></item></channel></rss>