Motivation
When I get started with developing websites in Go and gin framework, it's a pity that gin lacks live-reloading function. In fact, I tried fresh and it seems not much flexible, so I intended to rewrite it in a better way. Finally, Air's born. In addition, great thanks to pilu, no fresh, no air :)
Air is yet another live-reloading command line utility for Go applications in development. Just air
in your project root directory, leave it alone,
and focus on your code.
NOTE: This tool has nothing to do with hot-deploy for production.
Features
- Colorful log output
- Customize build or binary command
- Support excluding subdirectories
- Allow watching new directories after Air started
- Better building process
Installation
Prefer install.sh
# binary will be $(go env GOPATH)/bin/air curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin # or install it into ./bin/ curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s air -v
P.S. Great thanks mattn's PR for supporting Windows platform.
Docker
Please pull this docker image cosmtrek/air.
docker run -it --rm \ -w "<PROJECT>" \ -e "air_wd=<PROJECT>" \ -v $(pwd):<PROJECT> \ -p <PORT>:<APP SERVER PORT> \ cosmtrek/air -c <CONF>
For example, one of my project runs in docker:
docker run -it --rm \ -w "/go/src/github.com/cosmtrek/hub" \ -v $(pwd):/go/src/github.com/cosmtrek/hub \ -p 9090:9090 \ cosmtrek/air
Usage
For less typing, you could add alias air='~/.air'
to your .bashrc
or .zshrc
.
First enter into your project
The simplest usage is run
# firstly find `.air.toml` in current directory, if not found, use defaults
air -c .air.toml
You can initialize the .air.toml
configuration file to the current directory with the default settings running the following command.
After this you can just run the air
command without additional arguments and it will use the .air.toml
file for configuration.
For modifying the configuration refer to the air_example.toml file.
Docker-compose
services:
my-project-with-air:
image: cosmtrek/air
# working_dir value has to be the same of mapped volume
working_dir: /project-package
ports:
- <any>:<any>
environment:
- ENV_A=${ENV_A}
- ENV_B=${ENV_B}
- ENV_C=${ENV_C}
volumes:
- ./project-relative-path/:/project-package/
Debug
air -d
prints all logs.
Q&A
"command not found: air" or "No such file or directory"
export GOPATH=$HOME/xxxxx export PATH=$PATH:$GOROOT/bin:$GOPATH/bin export PATH=$PATH:$(go env GOPATH)/bin <---- Confirm this line in you profile!!!
Development
Please note that it requires Go 1.16+ since I use go mod
to manage dependencies.
# 1. fork this project # 2. clone it mkdir -p $GOPATH/src/github.com/cosmtrek cd $GOPATH/src/github.com/cosmtrek git clone [email protected]:<YOUR USERNAME>/air.git # 3. install dependencies cd air make ci # 4. explore it and happy hacking! make install
BTW: Pull requests are welcome~
Release new version
# 1. checkout to master
git checkout master
# 2. add the version that needs to be released
git tag v1.xx.x
# 3. push to remote
git push origin v1.xx.x
the ci will processing and will release new version,wait about 5 min you can fetch the new version.
Sponsor
Huge thanks to the following supporters. I've always been remembering your kindness.
- Peter Aba
- Apostolis Anastasiou
- keita koga