Code Monkey home page Code Monkey logo

rebirth's Introduction

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

rebirth's People

Contributors

dolow avatar goccy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

rebirth's Issues

`rebirth watch` command fails if `main.go` does not exist in the project root

In the project root (/path/to/mypkg/), the following has failed:

$ rebirth init
$ rebirth
Building....
Watching .
...
Restarting...
failed to run build command: fork/exec /path/to/mypkg/.rebirth/program: permission denied

From this line, I guessed that it was run like go run . and modified to run like this and it worked.

if err := r.xbuild(buildPath, "."); err != nil {

		if err := r.xbuild(buildPath, "./cmd/mypkg/main.go"); err != nil {

I would like to be able to specify the target path, or to specify the arguments given to the go command.

Sorry if I guessed wrong, or if you already have a way to specify the target path.

env

go version go1.14.1 linux/amd64

rebirth.yml is empty.

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.