Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shulhan/ciigo
[mirror] Go static website generator with asciidoc markup language
https://github.com/shulhan/ciigo
asciidoctor static-site-generator
Last synced: 16 days ago
JSON representation
[mirror] Go static website generator with asciidoc markup language
- Host: GitHub
- URL: https://github.com/shulhan/ciigo
- Owner: shuLhan
- License: gpl-3.0
- Created: 2019-04-14T19:01:38.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-10-06T14:34:05.000Z (about 1 month ago)
- Last Synced: 2024-10-13T14:13:58.729Z (about 1 month ago)
- Topics: asciidoctor, static-site-generator
- Language: Go
- Homepage: https://sr.ht/~shulhan/ciigo/
- Size: 527 KB
- Stars: 10
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.adoc
- License: COPYING
Awesome Lists containing this project
README
# Welcome to ciigo
`ciigo` is a library and a program to write static web server with embedded
files using
[AsciiDoc](https://asciidoctor.org/docs/what-is-asciidoc/)
and
[Markdown](https://www.markdownguide.org/)
markup format.As showcase, the following websites are build using ciigo,
* [kilabit.info](https://kilabit.info) -
[Source code](https://git.sr.ht/~shulhan/kilabit.info).* [golang-id.org](https://golang-id.org) -
[Source code](https://git.sr.ht/~shulhan/golang-id-web).## ciigo as CLI
ciigo as CLI can convert, generate, and/or serve a directory that contains
markup files, as HTML files.### Usage
```
ciigo [-template ] [-exclude ] convert
```Scan the "dir" recursively to find markup files (.adoc or .md) and convert
them into HTML files.
The template "file" is optional, default to embedded HTML template.```
ciigo [-template ] [-exclude ] [-out ] \
[-package-name ] [-var-name ] \
embed
```Convert all markup files inside directory "dir" recursively and then embed
them into ".go" source file.
The output file is optional, default to "ciigo_static.go" in current
directory.
The package name default to main.
The variable name default to memFS.```
ciigo help
```Print the usage.
```
ciigo [-template ] [-exclude ] [-address ] \
serve
```Serve all files inside directory "dir" using HTTP server, watch
changes on markup files and convert them to HTML files automatically.
If the address is not set, its default to ":8080".```
ciigo version
```Print the current ciigo version.
## ciigo as library
This section describe step by step instructions on how to build and create
pages to be viewed for local development using `ciigo`.First, clone the `ciigo` repository.
Let says that we have cloned the `ciigo` repository into
`$HOME/go/src/git.sr.ht/~shulhan/ciigo`.Create new Go repository for building a website.
For example, in directory `$HOME/go/src/remote.tld/user/mysite`.
Replace "remote.tld/user/mysite" with your private or public repository.```
$ mkdir -p $HOME/go/src/remote.tld/user/mysite
$ cd $HOME/go/src/remote.tld/user/mysite
```Initialize the Go module,
```
$ go mod init remote.tld/user/mysite
```Create directories for storing our content and a package binary.
```
$ mkdir -p cmd/mysite
$ mkdir -p _contents
```Copy the example of stylesheet and HTML template from `ciigo` repository,
```
$ cp $HOME/go/src/git.sr.ht/~shulhan/ciigo/_example/index.css ./_contents/
$ cp $HOME/go/src/git.sr.ht/~shulhan/ciigo/_example/html.tmpl ./_contents/
```Create the main Go code inside `cmd/mysite`,
```
package mainimport (
"git.sr.ht/~shulhan/ciigo"
"git.sr.ht/~shulhan/pakakeh.go/lib/memfs"
)var mysiteFS *memfs.MemFS
func main() {
opts := &ciigo.ServeOptions{
ConvertOptions: ciigo.ConvertOptions{
Root: "_contents",
HtmlTemplate: "_contents/html.tmpl",
},
Address: ":8080",
Mfs: mysiteFS,
}
err := ciigo.Serve(opts)
if err != nil {
log.Fatal(err)
}
}
```Create a new markup file `index.adoc` inside the "_contents" directory.
Each directory, or sub directory, should have `index.adoc` to be able to
accessed by browser,```
= TestHello, world!
```Now run the `./cmd/mysite` with `DEBUG` environment variable set to non-zero,
```
$ DEBUG=1 go run ./cmd/mysite
```Any non zero value on `DEBUG` environment signal the running program to watch
changes in ".adoc" files inside "_contents" directory and serve the generated
HTML directly.Open the web browser at `localhost:8080` to view the generated HTML.
You should see "Hello, world!" as the main page.Thats it!
Create or update any ".adoc" files inside "_contents" directory, the
program will automatically generated the HTML file.
Refresh the web browser to load the new generated file.### Deployment
First, we need to make sure that all markup files inside "_contents" are
converted to HTML and embed it into the static Go code.Create another Go source code, lets save it in `internal/generate.go` with the
following content,```
package mainimport (
"log""git.sr.ht/~shulhan/ciigo"
)func main() {
opts := &ciigo.EmbedOptions{
ConvertOptions: ciigo.ConvertOptions{
Root: "_contents",
HtmlTemplate: "_contents/html.tmpl",
},
EmbedOptions: memfs.EmbedOptions{
PackageName: "main",
VarName: "mysiteFS",
GoFileName: "cmd/mysite/static.go",
},
}
err := ciigo.GoEmbed(opts)
if err != nil {
log.Fatal(err)
}
}
```And then run,
```
$ go run ./internal
```The above command will generate Go source code `cmd/mysite/static.go` that
embed all files inside the "_contents" directory.Second, build the web server that serve static contents in `static.go`,
```
$ go build cmd/mysite
```Third, test the web server by running the program and opening `localhost:8080`
on web browser,```
$ ./mysite
```Finally, deploy the program to your server.
NOTE: By default, server will listen on address `0.0.0.0` at port `8080`.
If you need to use another port, you can change it at `cmd/mysite/main.go`.That's it!
## Links
- Link to the source code.
- Link to development and discussion.
- Link to submit an issue, feedback, or
request for new feature.- Go module documentation.
[Change log](/CHANGELOG.html) - Log of each releases.
## License
This software is licensed under GPL 3.0 or later.
Copyright 2022 Shulhan
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.You should have received a copy of the GNU General Public License along with
this program.
If not, see .