1
0
mirror of https://github.com/danog/gojekyll.git synced 2024-11-30 10:49:00 +01:00
Go to file
2017-06-23 14:57:28 -04:00
cmd/gojekyll Add -s, -d, -h 2017-06-23 10:27:57 -04:00
collections Remove Context.SourceDir() 2017-06-23 14:57:28 -04:00
config Each package has a test file 2017-06-22 18:26:55 -04:00
constants Fix some lint comments 2017-06-23 10:41:17 -04:00
example Match collection permalinks to witnessed behavior 2017-06-23 10:12:23 -04:00
helpers Reorganize server, sites, helpers files; fix some bugs 2017-06-23 09:32:08 -04:00
liquid Recognize remote render errors 2017-06-21 09:43:26 -04:00
pages Remove Context.SourceDir() 2017-06-23 14:57:28 -04:00
scripts Add scripts/coverage 2017-06-22 17:37:32 -04:00
server Reorganize server, sites, helpers files; fix some bugs 2017-06-23 09:32:08 -04:00
sites Remove Context.SourceDir() 2017-06-23 14:57:28 -04:00
templates Move VariableMap -> new templates package 2017-06-22 10:46:14 -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 2017-06-23 10:35:53 -04:00

Go Jekyll

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

Status

Build Status Go Report Card

This project is missing more functionality than it implements. It may accidentally work on tiny or simple sites.

  • 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
      • link tag
      • include tag
      • Remaining Jekyll Liquid tags
      • Jekyll Liquid filters
    • Includes
    • 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

You get slightly better Liquid template parsing from some unmerged pull requests to the acstech/liquid library. If you want to use my fork instead:

cd $(go env GOPATH)/src/github.com/acstech/liquid
git remote add osteele https://github.com/osteele/liquid.git
git pull -f osteele

(See articles by Shlomi Noach and Francesc Campoy for how this works and why it is necessary.)

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

Liquid Template Server

The embedded Liquid server isn't very compliant with Shopfiy Liquid syntax.

You can run a "Liquid Template Server" on the same machine, and tell gojekyll to use this instead. This is currently about 10x slower than using the embedded engine, but still 5x faster than Ruby jekyll.

  1. Download and run (liquid-template-server)[https://github.com/osteele/liquid-template-server].
  2. Invoke gojekyll with the --use-liquid-server option; e.g.:
gojekyll --use-liquid-server build
gojekyll --use-liquid-server serve

Neither the embedded Liquid server nor the Liquid Template Server implements very many Jekyll Liquid filters or tags. I'm adding to these as necessary to support my own sites.

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

For rendering Liquid templates: ACS Technologies's fork acstech/liquid of Karl Seguin's karlseguin/liquid Go implementation; or, Jun Yang's JavaScript implementation harttle/shopify-liquid via JSON-RPC.

Jascha Ephraim's jaschaephraim/lrserver Live Reload server.

https://github.com/pkg/browser to open the URL in a browser.

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.

This project is a clean-room implementation of Jekyll, based solely on Jekyll's documentation and testing it against a few sites. Hopefully this can pay off in contributing towards Jekyll's documentation.

License

MIT

Alternate Naming Possibilities

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