1
0
mirror of https://github.com/danog/gojekyll.git synced 2024-11-27 13:34:49 +01:00
Go to file
2017-07-01 19:42:48 -04:00
cmd/gojekyll Implement keep_files 2017-07-01 19:42:48 -04:00
collections Reduce cyclo of collection.ReadPages 2017-07-01 19:16:47 -04:00
config Implement keep_files 2017-07-01 19:42:48 -04:00
constants Fix some lint comments 2017-06-23 10:41:17 -04:00
filters Teach array_to_sentence_string about singletons 2017-07-01 09:38:35 -04:00
helpers Implement keep_files 2017-07-01 19:42:48 -04:00
pages Implement --unpublished 2017-07-01 14:55:50 -04:00
pipelines Remove more templates.VariableMap 2017-06-30 23:56:29 -04:00
plugins Cleanup 2017-07-01 13:34:32 -04:00
scripts Add scripts/coverage 2017-06-22 17:37:32 -04:00
server Implement post_url 2017-07-01 17:46:18 -04:00
sites Implement keep_files 2017-07-01 19:42:48 -04:00
tags Parallelize writing 2017-07-01 18:11:35 -04:00
templates Pipelines package 2017-06-24 14:00:19 -04:00
testdata Implement drafts 2017-07-01 15:13:32 -04:00
.gitignore Add scripts/coverage 2017-06-22 17:37:32 -04:00
.gometalinter.json Add a gometalinter config file 2017-06-21 10:53:50 -04:00
.travis.yml Add --deadline to travis lint 2017-06-22 15:53:34 -04:00
LICENSE Create LICENSE 2017-06-11 19:18:10 -04:00
Makefile Add scripts/coverage 2017-06-22 17:37:32 -04:00
README.md Implement keep_files 2017-07-01 19:42:48 -04:00

Gojekyll

Build Status Go Report Card

Gojekyll is an incomplete implementation of the Jekyll static site generator, in the Go programming language.

Major omissions:

  • Themes, page tags, excerpts, plugins (except for avatar), pagination
  • Site variables: pages, static_files, html_pages, html_files, documents, and tags
  • Jekyll's group_by_exp, pop, shift, cgi_escape, uri_escape, scssify, and smartify filters
  • Jekyll's include_relative and gist
  • The Go Liquid template engine is also missing some tags (notably around iteration and conditionals) and filters; see its README for status.
  • Data files must be YAML; CSV and JSON are not supported.
  • {% highlight %} uses Pygments. There's no way to tell it to use Rouge.
  • <div markdown=1> doesn't work. I think this is a limitation of the blackfriday Markdown processor.
  • The Liquid engine is probably much stricter than the original. It is also likely to have bugs.
  • Parse errors aren't reported very nicely.

Other differences from Jekyll:

  • serve generates pages on the fly; it doesn't write to the file system.
  • Files are cached to /tmp/gojekyll-${USER}, not ./.sass-cache
  • Server live reload is always on.
  • The server reloads the _config.yml (and the rest of the site) when it changes.
  • build with no -d option resolves the destination relative to the source directory, not the current directory.

Installation

  1. Install go. On macOS running Homebrew, brew install go is easier.
  2. go get -u osteele/gojekyll/cmd/gojekyll
  3. You need to install Pygments pip install Pygments to use the {% highlight %} tag.

Usage

gojekyll -s path/to/site build                # builds into ./_site
gojekyll -s path/to/site serve                # serves from memory, w/ live reload
gojekyll help
gojekyll help build

Benchmark

[go]jekyll -s jekyll/docs build

Executable Options Time
gojekyll multi-threaded; cache doesn't matter 0.34s
gojekyll warm cache, single-threaded 0.61s
gojekyll cold cache, single-threaded 6.85s
jekyll 18.53s

Status

  • Content
    • Front Matter
    • Posts
      • Categories
      • Tags
      • Drafts
      • Future
      • Related
    • Static Files
    • Variables
    • Collections
    • Data Files
      • CSV
      • JSON
      • YAML
    • Assets
      • Coffeescript
      • Sass/SCSS
  • Customization
    • Templates
      • Jekyll filters
        • group_by_exp pop shift cgi_escape uri_escape scssify smartify
        • everything else
      • Jekyll tags
        • include
        • include_relative
        • link
        • post_url
        • gist
        • highlight
    • Includes
      • include parameters
      • include variables (e.g. {% include {{ expr }} %})
    • Permalinks
    • Pagination
    • Plugins
      • jekyll-avatar
      • jekyll-coffeescript
      • jekyll-live-reload (always on)
      • jekyll-paginate
    • Themes
    • Layouts
  • Server
    • Directory watch
  • Commands
    • build
      • --source, --destination, --drafts, --future, --unpublished
      • --config, --baseurl, --lsi, --watch, etc.
      • won't implement: --force-polling, --limit-posts, --incremental, JEKYLL_ENV=production
    • clean
    • doctor
    • help
    • import
    • new
    • new-theme
    • serve
      • --open-uri
      • --detach, --host, --port, --baseurl
      • won't implement: --incremental, --ssl-*
  • Windows

Contributing

Install package dependencies and development tools:

make setup

Testing

make test
make lint
gojekyll  -s path/to/site render index.md      # render a file to stdout
gojekyll  -s path/to/site render /             # render a URL to stdout
gojekyll  -s path/to/site variables /          # print a file or URL's variables
./scripts/coverage && go tool cover -html=coverage.out

./scripts/gojekyll is an alternative to the gojekyll executable, that uses go run each time it's invoked.

Profiling

gojekyll -s path/to/site profile
go tool pprof gojekyll gojekyll.prof

Credits

Gojekyll uses these libraries:

Package Author(s) Description
github.com/jaschaephraim/lrserver Jascha Ephraim Live Reload server
github.com/osteele/liquid yours truly Liquid processor
github.com/pkg/browser pkg The serve -o option to open the site in the browser
github.com/russross/blackfriday Russ Ross Markdown processor
github.com/sass/libsass Listed here C port of the Ruby SASS compiler
github.com/wellington/go-libsass Drew Wells Go bindings for libsass
gopkg.in/alecthomas/kingpin.v2 Alec Thomas command line and flag parser
gopkg.in/yaml.v2 Canonical YAML support

In addition to being totally and obviously inspired by the Jekyll, Jekyll's solid documentation was indispensible. Many of the filter test cases are taken directly from the Jekyll documentation, and the Jekyll docs were always open in at least one tab.

The help text was taken from the output of jekyll help.

The gopher image in the test directory is from Wikimedia Commons. It is used under the Creative Commons Attribution-Share Alike 3.0 Unported license.

Hugo isn't Jekyll-compatible (-), but actually works (+++).

Jekyll, of course.

License

MIT

Alternate Naming Possibilities

  • "Gekyll". (Hard or soft "g"? See gif.)
  • "Gekko"