1
0
mirror of https://github.com/danog/gojekyll.git synced 2024-11-30 10:49:00 +01:00
Go to file
2017-06-29 07:41:14 -04:00
cmd/gojekyll Remove liquid engine client 2017-06-29 07:27:43 -04:00
collections Collections holds a Container, not a RenderingPipeline 2017-06-24 12:03:33 -04:00
config More filters 2017-06-28 16:55:15 -04:00
constants Fix some lint comments 2017-06-23 10:41:17 -04:00
helpers Move test files -> testdata 2017-06-29 06:46:47 -04:00
liquid Remove liquid engine client 2017-06-29 07:27:43 -04:00
pages Store routes with initial slash 2017-06-28 19:12:23 -04:00
pipelines Move some NewPipeline parameters into options 2017-06-29 07:41:14 -04:00
scripts Add scripts/coverage 2017-06-22 17:37:32 -04:00
server Lint 2017-06-28 22:46:19 -04:00
sites Move some NewPipeline parameters into options 2017-06-29 07:41:14 -04:00
templates Pipelines package 2017-06-24 14:00:19 -04:00
testdata Move test files -> testdata 2017-06-29 06:46:47 -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 Update README attributions 2017-06-29 07:08:37 -04:00

Go Jekyll

When I grow up, I want to be a Go implementation of Jekyll.

Status

Build Status Go Report Card

See the significant missing functionality below. This tool currently works on some simple sites that don't use drafts, templates, future posts, or various other features listed below.

We are currently ~5x faster than Jekyll. Some obvious improvements would include caching SASS, caching templates, and using goroutines to render pages.

  • Content
    • Front Matter
    • Posts
      • Categories
      • Tags
      • Drafts
      • Future
      • Related
    • Static Files
    • Variables
    • Collections
    • Data Files
      • CSV
      • JSON
      • YAML
    • Assets
      • Coffeescript
      • Sass/SCSS
        • Sass caching
  • Customization
    • Templates
      • Jekyll filters (partial)
      • Jekyll tags (partial)
      • markdown=1
    • Includes
      • include_relative
      • parameters
      • variables {% include {{ expr }} %}
    • Permalinks
    • Pagination
    • Themes
    • Layouts
  • Server
    • Directory watch
    • Live reload
  • Windows -- not tested

Intentional differences from Jekyll:

  • serve doesn't write to the file system
  • No .sass-cache. (When caching is added, it will go to a temporary directory.)
  • Server live reload is always on.

Install

go get -u osteele/gojekyll/cmd/gojekyll

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

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 Description
github.com/jaschaephraim/lrserver Jascha Ephraim Live Reload server
github.com/osteele/liquid Oliver Steele 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 to 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 Ruby implementation, Jekyll's solid documentation was indispensible. The Jekyll docs were always open in at least one tab.

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"