annotate README.md @ 42:6dc2e679e9ff draft

added coverage to travis-ci script
author zaitsev.serge
date Thu, 18 Feb 2016 13:36:17 +0000
parents ea1bcd29a195
children 0adadd497d23
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
1 zs
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
2 ==
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
3
12
7119cca186bf added travis button
zaitsev.serge
parents: 8
diff changeset
4 [![Build Status](https://travis-ci.org/zserge/zs.svg?branch=master)](https://travis-ci.org/zserge/zs)
7119cca186bf added travis button
zaitsev.serge
parents: 8
diff changeset
5
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
6 zs is an extremely minimal static site generator written in Go.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
7
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
8 It's inspired by `zas` generator, but is even more minimal.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
9
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
10 The name stands for 'zen static' as well as it's my initials.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
11
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
12 ## Features
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
13
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
14 * Zero configuration (no configuration file needed)
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
15 * Cross-platform
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
16 * Highly extensible
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
17 * Works well for blogs and generic static websites (landing pages etc)
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
18 * Easy to learn
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
19 * Fast
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
20
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
21 ## Installation
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
22
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
23 Download the binaries from Github or build it manually:
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
24
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
25 $ go get github.com/zserge/zs
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
26
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
27 ## Ideology
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
28
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
29 Keep your texts in markdown, [amber] or HTML format right in the main directory
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
30 of your blog/site.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
31
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
32 Keep all service files (extensions, layout pages, deployment scripts etc)
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
33 in the `.zs` subdirectory.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
34
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
35 Define variables in the header of the content files using [YAML]:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
36
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
37 title: My web site
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
38 keywords: best website, hello, world
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
39 ---
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
40
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
41 Markdown text goes after a header *separator*
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
42
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
43 Use placeholders for variables and plugins in your markdown or html
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
44 files, e.g. `{{ title }}` or `{{ command arg1 arg2 }}.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
45
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
46 Write extensions in any language you like and put them into the `.zs`
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
47 subdiretory.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
48
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
49 Everything the extensions prints to stdout becomes the value of the
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
50 placeholder.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
51
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
52 Every variable from the content header will be passed via environment variables like `title` becomes `$ZS_TITLE` and so on. There are some special variables:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
53
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
54 * `$ZS` - a path to the `zs` executable
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
55 * `$ZS_OUTDIR` - a path to the directory with generated files
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
56 * `$ZS_FILE` - a path to the currently processed markdown file
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
57 * `$ZS_URL` - a URL for the currently generated page
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
58
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
59 ## Example of RSS generation
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
60
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
61 Extensions can be written in any language you know (Bash, Python, Lua, JavaScript, Go, even Assembler). Here's an example of how to scan all markdown blog posts and create RSS items:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
62
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
63 ``` bash
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
64 for f in ./blog/*.md ; do
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
65 d=$($ZS var $f date)
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
66 if [ ! -z $d ] ; then
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
67 timestamp=`date --date "$d" +%s`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
68 url=`$ZS var $f url`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
69 title=`$ZS var $f title | tr A-Z a-z`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
70 descr=`$ZS var $f description`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
71 echo $timestamp \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
72 "<item>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
73 "<title>$title</title>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
74 "<link>http://zserge.com/$url</link>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
75 "<description>$descr</description>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
76 "<pubDate>$(date --date @$timestamp -R)</pubDate>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
77 "<guid>http://zserge.com/$url</guid>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
78 "</item>"
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
79 fi
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
80 done | sort -r -n | cut -d' ' -f2-
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
81 ```
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
82
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
83 ## Hooks
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
84
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
85 There are two special plugin names that are executed every time the build
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
86 happens - `prehook` and `posthook`. You can define some global actions here like
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
87 content generation, or additional commands, like LESS to CSS conversion:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
88
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
89 # .zs/post
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
90
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
91 #!/bin/sh
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
92 lessc < $ZS_OUTDIR/styles.less > $ZS_OUTDIR/styles.css
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
93 rm -f $ZS_OUTDIR/styles.css
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
94
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
95 ## Syntax sugar
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
96
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
97 By default, `zs` converts each `.amber` file into `.html`, so you can use lightweight Jade-like syntax instead of bloated HTML.
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
98
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
99 Also, `zs` converts `.gcss` into `.css`, so you don't really need LESS or SASS. More about GCSS can be found [here][gcss].
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
100
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
101 ## Command line usage
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
102
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
103 `zs build` re-builds your site.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
104
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
105 `zs build <file>` re-builds one file and prints resulting content to stdout.
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
106
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
107 `zs watch` rebuilds your site every time you modify any file.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
108
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
109 `zs var <filename> [var1 var2...]` prints a list of variables defined in the
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
110 header of a given markdown file, or the values of certain variables (even if
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
111 it's an empty string).
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
112
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
113 ## License
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
114
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
115 The software is distributed under the MIT license.
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
116
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
117 [amber]: https://github.com/eknkc/amber/
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
118 [YAML]: https://github.com/go-yaml/yaml
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
119 [gcss]: https://github.com/yosssi/gcss