Giter Club home page Giter Club logo

go-starter's Introduction

Go Starter

Go-starter allows to bootstrap a new project from a template. It uses Git repositories as templates and is shipped with batch of utilities to make bootstarpping easier.

Learn more

Installation

Download latest release from release page using one of the commands below.

Mac OS

curl https://github.com/adobe/go-starter/releases/latest/download/go-starter-darwin-amd64.tgz \
  -sSfL -o go-starter.tgz

Linux

curl https://github.com/adobe/go-starter/releases/latest/download/go-starter-linux-amd64.tgz \
  -sSfL -o go-starter.tgz

Unpack content of the archive to a directory listed in $PATH. The archive includes multiple binaries shipped with go-starter.

tar -xvzf go-starter.tgz -C /usr/local/bin
rm go-starter.tgz

Run go-starter to verify it's installed correctly.

Usage

Run go-starter with template repository URL and path where you would like to create a new project, for example:

go-starter starter-template/hello-world-starter awesome-project

You can specify full GitHub URL or just repository name (like so starter-template/hello-world-starter).

Now, go-starter will clone hello-world-starter into ./awesome-project directory and run tasks defined in .starter.yml. See "Templates" for more details.

Advanced usage

You can skip cloning, for example if template is already cloned, but task failed to execute by passing -skip-clone flag.

You can also pass additional variables (or pre-define variables instead of entering them using prompt) using -var flag.

Templates

Templates are regular Git repositories like this one. If you try to use go-starter with random repository it will just clone it to your computer. To make use of go-starter you would need to let it know how to "post-process" template repository after it has been cloned. To do so, you need to define .starter.yml configuration file.

After go-starter clones repository it tries to load .starter.yml to execute additional actions and turn template into a project. This configuration file defines two sections:

  • questions - list of questions to be asked from user, for example: project name, binary name, team etc
  • tasks - list of commands to be executed (these can be globally installed binaries, or binaries packed with template itself)

Here is an example of .starter.yml:

questions:
  - message: Application name
    name: "application_name"
    type: input
    regexp: ^[a-z0-9\-]+$
    help_msg: Must be lowercase characters or digits or hyphens
  - message: GitHub owners
    name: "github_owners"
    type: input
    regexp: ^[a-z0-9\-]+$
    help_msg: Must be lowercase characters or digits or hyphens

tasks:
  - command: [ "go-starter-replace" ]
  - command: [ "rm", ".starter.yml" ]

This file defines two questions, asking user to enter application_name and github_owners variables. Then, go-starter will execute go-starter-replace binary (shipped with go-starter) to replace placeholders in the files of the template, turning generic tempalte into something more specific to the project. Finally it will use standard rm command to remove .starter.yml.

Each template may contain custom tasks placed in .starter folder. For example, you can create a bash script which would generate CODEOWNERS file and place it under .starter/make-owners. Then, add it as tasks in .starter.yml like so:

...

tasks:
...
  - command: [ "./.starter/make-owners" ]

Custom scripts may access variables (answers to the questions) through environment variables. They are uppercased and prefixed with STARTER_. Following example above, ./.starter/make-owners may get github_owners variable using STARTER_GITHUB_OWNERS environment variable.

Build-in tasks

Go-starter ships with few additional binaries which can be used as tasks in .starter.yml.

go-starter-replace

This binary recursively goes through files in current folder and replaces placeholders to variable values in files and their names. By default, placeholders are surrounded by < and >.

Usage

Usage: go-starter-replace [flags]

Example:
    STARTER_PLACEHOLDER1=VALUE1 STARTER_PLACEHOLDER2=VALUE2 go-starter-replace

Flags:
  -prefix string
        Placeholder prefix (default "<")
  -suffix string
        Placeholder suffix (default ">")

go-starter-github

This binary automatically created GitHub repository, initiates local Git repository, adds GitHub remote and pushes changes to GitHub.

Usage

Usage: go-starter-github [flags] <github-org> <github-repo>

Example:
    go-starter-github adobe awesome-project

Flags:
  -branch string
        Name of the master branch (default "master")
  -collaborator value
        Add collaborators to the repository by GitHub username. You can grant permissions using following format: <username>:<permission>. Permission can be: pull (read only), push (read and write) or admin (everything), default is push. Can be specified multiple times. Example: --collaborator octocat:pull
  -deploy-key string
        Add SSH deployment key to the repository, add ':rw' suffix to grant write permissions to the key
  -public
        Make repository public
  -remote string
        Name of the remote in local repository (default "upstream")
  -with-issues
        Enable issues in GitHub
  -with-projects
        Enable projects in GitHub
  -with-wiki
        Enable wiki page in GitHub

go-starter-drone

This binary configures drone integration and runs first build.

Usage

Usage: go-starter-drone [flags] <drone-url> <org-name> <repo-name>

Example:
    go-starter-drone https://cloud.drone.io adobe awesome-project

Flags:
  -pull-secret-file value
        Create a secret from file available for pull-requests (eq. --pull-secret-file=secret_name=./path/to/file)
  -pull-secret-literal value
        Create a secret from literal available for pull-requests (eq. --pull-secret-literal=secret_name=value)
  -secret-file value
        Create a secret from file (eq. --secret-file=secret_name=./path/to/file)
  -secret-literal value
        Create a secret from literal (eq. --secret-literal=secret_name=value)

go-starter's People

Contributors

skolodyazhnyy avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.