Awesome
🧩 Service
Template for a typical service written on Go.
🛫 Quick start
<details> <summary>Work with Makefile</summary>$ make setup
$ make help
$ make find-todos
$ make test lint
$ TIMEOUT=5s make test-with-coverage
</details>
<details>
<summary>Work with Taskfile</summary>
$ alias run=./Taskfile
$ run refresh
$ run help
$ run docs # === `run docs install -- build -- start`
$ run docs npm ci
$ run docs npm i nextra@latest
$ run tools go generate tools.go
$ run tools golangci-lint --version -- mockgen --version
$ run which goimports golangci-lint govulncheck mockgen
</details>
<details>
<summary>Work with Tools</summary>
$ make tools
$ source bin/activate
$ which goimports
$ goimports -local $(go list -m) -w ./...
</details>
<details>
<summary>Work with Docker</summary>
$ make go-1.19 # or go-1.20, etc.
/src# make go-env 2>/dev/null | grep GOVERSION
# GOVERSION: 1.19.10
/src# make test
</details>
💡 Idea
Define a powerful template that quickly creates a new Go service. Not only does it provide a starting point for new projects, but it comes equipped with pre-configured ci/cd and inventory.
$ server up &
$ client call
🏆 Motivation
At OctoLab, we want to start new projects faster using best practices with a predefined structure and focusing on core ideas implementation rather than wasting time on environment configuration and copying boilerplate code.
🤼 How to
Build your own service
- Generate a new repository from the template.
- Clone the repository locally.
- Update the desired files as needed, e.g.,
run init my.new/service
. - Write your code and tests.
- 🚀
Contribute to the template
- Read the contribution guidelines.
- Fork the repository.
- Make your changes.
- Send a pull request.
- 🤗
Before you start, please make sure your changes are in demand. The best for that is to create a new discussion, or if you find an issue, report it first.
🎛️ Configuration
Pre-configured
Included
Optional
Coming soon
- Cloudflare Pages (docs hosting).
- CodeQL (code scanning).
- Graphite (git workflow).
- Qodana (code quality).
- SonarCloud (code quality).
- Vanity URL (canonical import path).
- Vercel (docs hosting).
🛬 Installation
Homebrew
$ brew install octolab/tap/service
Binary
$ curl -fsSL https://install.octolab.org/octomation/service | sh
# or
$ wget -qO- https://install.octolab.org/octomation/service | sh
Source
# use standard go tools
$ go get go.octolab.org/template/service/cmd/client@latest
$ go get go.octolab.org/template/service/cmd/server@latest
# or use egg tool
$ egg tools add go.octolab.org/template/service/cmd/client@latest
$ egg tools add go.octolab.org/template/service/cmd/server@latest
Shell completions
$ client completion > /path/to/completions/...
# or
$ source <(client completion)
🏗️ Ecosystem
Input
- https://github.com/octomation/go-tool
- https://github.com/octopot/forma
- https://github.com/octopot/guard
- https://github.com/octopot/octopus
- https://github.com/octopot/passport
- https://github.com/octopot/tablo
Impact
- https://github.com/octolab/homebrew-tap
- https://github.com/octomation/app
- https://github.com/octomation/install
- https://github.com/octomation/maintainer
- https://github.com/octomation/makefiles
- https://github.com/octomation/taskfiles
- https://github.com/octomation/vanity