Scaffolding simplified
Features:
- Scaffold out project directories from templates
- Uses Go's native templating engine
- Uses `fs.FS` for input, so it works well with `go:embed` and [debme](https://github.com/leaanthony/debme)
- Go alternative to [cookiecutter](https://github.com/cookiecutter/cookiecutter)
## Installation
`go get github.com/leaanthony/gosod`
## Usage
1. Define a template directory
2. Define some data
3. Extract to a target directory
```go
package main
import (
"log"
"github.com/leaanthony/gosod"
)
type config struct {
Name string
}
// mytemplate/
// ├── custom.filtername.txt
// ├── ignored.txt
// ├── subdir
// │ ├── included.txt
// │ └── sub.tmpl.go
// └── test.tmpl.go
//go:embed mytemplate/*
var mytemplate embed.FS
func main() {
// Define a new Template directory
basic, err := gosod.New(mytemplate)
if err != nil {
log.Fatal(err)
}
// Make some config data
myConfig := &config{
Name: "Mat",
}
// Ignore files
basic.IgnoreFile("ignored.txt")
// Custom template filters
basic.SetTemplateFilters([]string{ ".filtername", ".tmpl" })
// Create a new directory using the template and config
err = basic.Extract("./generated", myConfig)
if err != nil {
log.Fatal(err)
}
// Ouput FS:
// generated/
// ├── custom.txt
// ├── subdir
// │ ├── included.txt
// │ └── sub.go
// └── test.go
}
```
## Template Directories
A template directory is simply a directory structure contianing files you wish to copy. The algorithm for copying is:
* Categorise all files into one of: directory, standard file and template files
* Create the directory structure
* Copy standard files
* Copy template files, assembled using the given data
Template files, by default, are any file with ".tmpl" in their filename. To change this, use `SetTemplateFilters([]string)`. This allows you to set any number of filters.
Files may also be ignored by using the `IgnoreFilename(string)` method.
## What's with the name?
Google is your [friend](https://translate.google.com/?sl=cy&tl=en&text=gosod&op=translate)