Coder Social home page Coder Social logo

rebirth's Introduction

rebirth

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.

host:
  docker: container_name
build:
  env:
    CGO_LDFLAGS: /usr/local/lib/libz.a
run:
  env:
    RUNTIME_ENV: "fuga"
watch:
  root: . # root directory for watching ( default: . )
  ignore:
    - vendor
  • 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

goccy 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.