Navigation Menu

Skip to content

hgsigner/gootstrap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gootstrap Build Status

Gootstrap is a simple package that bootstraps new Go packages. I've created it because I was repeating myself a lot while starting new projects.

Installing:

$ go get github.com/hgsigner/gootstrap

Usage:

Default Package:

After installing, you can use gootstrap new package_name to create a new project.

$ gootstrap new project_name
===> Creating package project_name
===> Creating directory
===> Creating .gitignore file
===> Creating .travis.yml file
===> Creating README.md
===> Creating LICENSE.txt file
===> Creating CHANGELOG.md file
===> Creating project_name.go file
===> Creating project_name_test.go file
===> Creating doc.go file
===> Package created! cd project_name to access.
$ cd project_name

Tree:

|-- project_name
    |-- .gitignore
    |-- .travis.yml
    |-- README.md
    |-- LICENSE.txt
    |-- CHANGELOG.md
    |-- project_name.go
    |-- project_name_test.go
    |-- doc.go

If the command gootstrap does not work for you, use $GOPATH/bin/gootstrap new project_name instead.

--minimal:

In order to create a minimal package structure (main file, test file and doc file), pass the --minimal flag after the package name:

$ gootstrap new project_name --minimal
===> Creating package project_name
===> Creating directory
===> Creating project_name.go file
===> Creating project_name_test.go file
===> Creating doc.go file
===> Package created! cd project_name to access.
$ cd project_name

Tree:

|-- project_name
    |-- project_name.go
    |-- project_name_test.go
    |-- doc.go

--light:

In order to create a light package structure (main file and test file), pass the --light flag after the package name:

$ gootstrap new project_name --light
===> Creating package project_name
===> Creating directory
===> Creating project_name.go file
===> Creating project_name_test.go file
===> Package created! cd project_name to access.
$ cd project_name

Tree:

|-- project_name
    |-- project_name.go
    |-- project_name_test.go

--no-{file names}:

If you want the exclude some files while creating the package, you can pass the subcommand --no-{file names separated by "-"}:

$ gootstrap new project_name --no-travis-license
===> Creating package project_name
===> Creating directory
===> Creating .gitignore file
===> Creating README.md
===> Creating CHANGELOG.md file
===> Creating project_name.go file
===> Creating project_name_test.go file
===> Creating doc.go file
===> Package created! cd project_name to access.
$ cd project_name

Tree:

|-- project_name
    |-- .gitignore
    |-- REAMDE.md
    |-- CHANGELOG.md
    |-- project_name.go
    |-- project_name_test.go
    |-- doc.go

File names you can pass to --no-{files separated by "-"}: travis, gitignore, license, readme, main, test, doc and changelog

Custom Templates:

Gootstrap allows you to create your own template file and use it as reference when creating your package. Gootstrap uses *.toml files in order organize the templates.

Lets assume that you have the following example.toml file in your file's system:

#Creates the directories

[[directories]]
name = "utils"
	[[directories.files]]
	name = "utils.go"
	template = '''package utils'''
	[[directories.files]]
	name = "utils_test.go"
	template = '''package utils

	import "testing"

	func Test(t *testing.T) {

	}
	'''

[[directories]]
name = "labs"
	[[directories.files]]
	name = "labs.go"
	template = '''package labs'''
	
	[[directories.files]]
	name = "labs_test.go"
	template = '''package labs

	import "testing"

	func Test(t *testing.T) {

	}
	'''

#Creates files in the root directory

[[files]]
name = "README.md"
template = '''#Readme
some reamde
'''

[[files]]
name = "main.go"
template = '''package main

import "fmt"

func main() {
	fmt.Prinln("Hello!")
}
'''

Passing the FULLPATH of your template file as argument for --template flag on gootstrap, will produce the following result:

$ gootstrap new new_project --template /full/path/of/your/example.toml 
===> Creating package new_project
===> Creating directory new_project
===> Creating directory new_project/utils
===> Creating directory new_project/labs
===> Creating new_project/utils/utils.go file
===> Creating new_project/utils/utils_test.go file
===> Creating new_project/labs/labs.go file
===> Creating new_project/labs/labs_test.go file
===> Creating new_project/README.md file
===> Creating new_project/main.go file
===> Package created! cd new_project to access.

Tree:

|-- new_project
    |-- utils
        |-- utils.go
        |-- utils_test.go
    |-- labs
        |-- labs.go
        |-- labs_test.go
    |-- README.md
    |-- main.go

Creating your own template:

Gootstrap only accepts the following arrays of tables as the structure for the templates:

[[directories]] # Creates directory
name
[[directories.files]] # Creates files inside the directory
name
template
[[files]] # Creates files inside the root directory
name
template

Now, lets create our custom template:

# example2.toml
# Creates directories inside the root folder
# and creates files inside this directory.
[[directories]]
# name of the directory
name = "routes"
	[[directories.files]]
	# Name of the file
	name = "routes.go"
	# Template for the file
	template = '''package routes
	
	import "fmt"
	
	func sayHi() {
		fmt.Println("Hi!")
	}
	'''
	[[directories.files]]
	# Name of the file
	name = "routes_test.go"
	# Template for the file
	template = '''package routes
	
	import "testing"
	
	func Test(t *testing.T) {
	
	}
	'''

#Creates files inside the root folder
[[files]]
name = "CHANGELOG.md"
template = '''#Changelog
Some changelog
'''

[[files]]
name = "main.go"
template = '''package main

import "fmt"

func main() {
	fmt.Prinln("Hello!")
}
'''

Lets use it:

$ gootstrap new new_project --template /full/path/of/your/example2.toml 
===> Creating package new_project_ex2
===> Creating directory new_project_ex2
===> Creating directory new_project_ex2/routes
===> Creating new_project_ex2/routes/routes.go file
===> Creating new_project_ex2/routes/routes_test.go file
===> Creating new_project_ex2/CHANGELOG.md file
===> Creating new_project_ex2/main.go file
===> Package created! cd new_project_ex2 to access.

Tree:

|-- new_project_ex2
    |-- routes
        |-- routes.go
        |-- routes_test.go
    |-- CHANGELOG.md
    |-- main.go

Placeholders:

Gootstrap allows you to insert placeholders inside your templates in order to replace it with custom text. The built in placeholders are:

  • {{.PackageName}}: Gets the package name (gootstrap new new_pack);
  • {{.HumanizedPackageName}}: Returns the humanized package name (e.g. NewPackage);
  • {{.CurrentYear}}: Gets the current year;
  • {{.UserName}}: Gets the user's computer name;
  • {{.Date}}: Gets the current date (YYYY-MM-DD).

Usage:

# placeholder.toml
[[files]]
name = "{{.PackageName}}.go"
template = '''package {{.PackageName}}'''
[[files]]
name = "{{.PackageName}}_test.go"
template = '''package {{.PackageName}}

import "testing"

func Test(t *testing.T) {

}
'''

Performing:

$ gootstrap new place_holder --template /full/path/of/your/placeholder.toml 
===> Creating package place_holder
===> Creating place_holder/place_holder.go file
===> Creating place_holder/place_holder_test.go file
===> Package created! cd place_holder to access.

Tree:

|-- place_holder
    |-- place_holder.go
    |-- place_holder_test.go

Remote Templates:

Gootstrap also allows you to fetch templates from remote servers, passing its url as the argument for the --template flag:

$ gootstrap new remote_simple --template https://raw.githubusercontent.com/hgsigner/gootstrap/master/examples/simple.toml
===> Creating package remote_simple
===> Fetiching url: https://raw.githubusercontent.com/hgsigner/gootstrap/master/examples/simple.toml
===> Creating directory remote_simple
===> Creating directory remote_simple/utils
===> Creating directory remote_simple/labs
===> Creating remote_simple/utils/utils.go file
===> Creating remote_simple/utils/utils_test.go file
===> Creating remote_simple/labs/labs.go file
===> Creating remote_simple/labs/labs_test.go file
===> Creating remote_simple/.gitignore file
===> Creating remote_simple/README.md file
===> Creating remote_simple/main.go file
===> Package created! cd remote_simple to access.

Tree:

|-- remote_simple
    |-- utils
        |-- utils.go
        |-- utils_test.go
    |-- labs
        |-- labs.go
        |-- labs_test.go
    |-- .gitignore
    |-- README.md
    |-- main.go

Creating your own template is simple and can save you a lot of time if you keep doing the same thing over and over again.


For more info on TOML, be sure to check https://github.com/toml-lang/toml


Any bug or feedback, feel free to drop me a line :)

Licensing

This package is available as open source under the terms of the MIT License.

About

Gootstrap is a simple Go package bootstrapper.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages