Goccy Rebirth Save

Supports live reloading for Go

Project README

rebirth Actions Status

Supports live reloading for Go

go_rebirth

Features

  • Better features than github.com/pilu/fresh
  • Supports cross compile and live reloading on host OS for docker users ( Very Fast for Docker 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, supports docker only )
  • build : specify ENV variables for building
  • run : specify ENV variables for running
  • watch : specify root directory or ignore 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

  1. install rebirth CLI ( GO111MODULE=on go get -u github.com/goccy/rebirth/cmd/rebirth )
  2. run rebirth and it cross compile myself for Linux ( GOOS=linux, GOARCH=amd64 ) and put it to .rebirth directory as __rebirth
  3. copy .rebirth/__rebirth to the container ( .rebirth directory is mounted on the container )
  4. watch main.go ( by fsnotify )

  1. cross compile main.go for Linux and put to .rebirth directory as program
  2. copy .rebirth/program to the container

  1. run __rebirth on the container
  2. __rebirth executes program
  3. edit main.go
  4. rebirth detects file changed event

  1. cross compile main.go for Linux and put to .rebirth directory as program
  2. copy .rebirth/program to the container
  3. rebirth send signal to __rebirth for reloading ( SIGHUP )
  4. __rebirth kill the current application and execute program as a new application

License

MIT

Open Source Agenda is not affiliated with "Goccy Rebirth" Project. README Source: goccy/rebirth
Stars
69
Open Issues
0
Last Commit
3 years ago
Repository
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating