rebirth
rebirth copied to clipboard
Supports live reloading for Go
rebirth 
Supports live reloading for Go
Features
- Better features than github.com/pilu/fresh
- Supports cross compile and live reloading on host OS for
docker
users ( Very Fast forDocker for Mac
user ) - Supports cross compile by cgo ( C/C++ ) ( currently, works on macOS ( and target architecture is
amd64
) only ) - Supports helper commands for
go run
go test
go build
Synopsis
Settings
rebirth
needs configuration file ( rebirth.yml
) to running .
rebirth init
create it .
rebirth.yml
example is the following.
task:
migrate:
desc: migrate schema
commands:
- mysql ....
host:
docker: container_name
build:
main: path/to/main.go # change path to main package ( default: . )
init:
- echo 'init hook' # called once at starting
before:
- echo 'before hook' # called before build
after:
- echo 'after hook' # called after build
env:
CGO_LDFLAGS: /usr/local/lib/libz.a
run:
env:
RUNTIME_ENV: "fuga"
watch:
root: . # root directory for watching ( default: . )
ignore:
- vendor
-
task
: define custom command -
host
: specify host information for running to an application ( currently, supportsdocker
only ) -
build
: specify ENV variables for building -
run
: specify ENV variables for running -
watch
: specifyroot
directory orignore
directories for watching go file
In case of running on localhost
1. Install rebirth
CLI
$ GO111MODULE=on go get -u github.com/goccy/rebirth/cmd/rebirth
2. Create rebirth.yml
$ rebirth init
3. Run rebirth
rebirth
In case of running with Docker for Mac
Example tree
.
├── docker-compose.yml
├── main.go
└── rebirth.yml
main.go
is your web application's source.
1. Install rebirth
CLI
$ GO111MODULE=on go get -u github.com/goccy/rebirth/cmd/rebirth
2. Install cross compiler for cgo
$ brew install FiloSottile/musl-cross/musl-cross
3. Write settings
docker-compose.yml
version: '2'
services:
app:
image: golang:1.13.5
container_name: rebirth_app
volumes:
- '.:/go/src/app'
working_dir: /go/src/app
environment:
GO111MODULE: "on"
command: |
tail -f /dev/null
rebirth.yml
host:
docker: rebirth_app # container_name in docker-compose.yml
4. Run rebirth
$ rebirth
# start live reloading !!
# build for docker container's architecture on macOS (e.g. GOOS=linux GOARCH=amd64
# execute built binary on target container
Helper commands
Usage:
rebirth [OPTIONS] <command>
Help Options:
-h, --help Show this help message
Available commands:
build execute 'go build' command
init create rebirth.yml for configuration
run execute 'go run' command
test execute 'go test' command
rebirth build
Help cross compile your go script
$ rebirth build -o app script/hoge.go
rebirth test
Help cross compile for go test
$ rebirth test -v ./ -run Hoge
rebirth run
Help cross compile for go run
$ rebirth run script/hoge.go
How it Works
~/work/app
directory is mounted on the container as /go/src/app
- install
rebirth
CLI (GO111MODULE=on go get -u github.com/goccy/rebirth/cmd/rebirth
) - run
rebirth
and it cross compile myself for Linux ( GOOS=linux, GOARCH=amd64 ) and put it to.rebirth
directory as__rebirth
- copy
.rebirth/__rebirth
to the container (.rebirth
directory is mounted on the container ) - watch
main.go
( by fsnotify )
- cross compile
main.go
for Linux and put to.rebirth
directory asprogram
- copy
.rebirth/program
to the container
- run
__rebirth
on the container -
__rebirth
executesprogram
- edit
main.go
-
rebirth
detects file changed event
- cross compile
main.go
for Linux and put to.rebirth
directory asprogram
- copy
.rebirth/program
to the container -
rebirth
send signal to__rebirth
for reloading (SIGHUP
) -
__rebirth
kill the current application and executeprogram
as a new application
License
MIT