Naftis is Apache 2.0 licensed and accepts contributions via GitHub pull requests. This document outlines me of the conventions on commit message formatting, contact points for developers, and other resources to help get contributions into Naftis.
- Go >= 1.
- HIUI >= 1.0.0
- Kubernetes >= 1.9.0
Naftis-api is written in the Go programming language. To build, you'll need a Go development environment. If you haven't set up a Go development environment, please follow these instructions to install the Go tools.
Naftis dashboard uses HIUI (a React based UI component released by Xiaomi FE Team) to build the responsive UI. For more information:
https://github.com/xiaomi/hiui
To build ui assets, you'll need a Node.js development environment. You can read these for forther information.
You can setup a Kubernetes cluster with Minikube, or launch a cluster with your own cloud Kubernetes service.
Add the follow exports to your ~/.profile. autoenv is also strongly recommended.
# Change GOOS and GOARCH with your environment.
export GOOS="linux" # or replace with "darwin", etc.
export GOARCH="amd64" # or replace with "386", etc.
# Change USER with your Docker Hub account for pulling and pushing custom docker container builds.
export USER="sevennt"
export HUB="docker.io/$USER"
If you choose autoenv to export environment variables, type cd .
to make it work.
# run migrate sql script
mysql> source ./tool/naftis.sql;
# modify in-local.toml and replace with your own MySQL DSN.
- Linux
make build && ./bin/naftis-api start -c config/in-local.toml -i=false # building and starting naftis-api
or
./run
- Mac OS
GOOS=darwin GOARCH=amd64 make build && ./bin/naftis-api start -c config/in-local.toml -i=false # building and starting naftis-api
or
GOOS=darwin GOARCH=amd64 ./run
cp tool/naftis.conf <your-nginx-conf-directory>/naftis.conf
# modify naftis.conf and then reload Nginx
cd src/ui
npm install
npm run dev # start node proxy
# Explore http://localhost:5200/ with your browser.
- Go to https://github.com/xiaomi/naftis
- Click the "Fork" button (at the top right)
cd $NAFTIS
git clone https://github.com/$YOUR_GITHUB_ACCOUNT/naftis
cd naftis
git remote add upstream 'https://github.com/xiaomi/naftis'
git config --global --add http.followRedirects 1
git checkout -b my-feature
# Make your code changes
git fetch upstream
git rebase upstream/master
git add .
git commit
git push origin my-feature
Visit https://github.com/$YOUR_GITHUB_ACCOUNT/naftis if you created a fork in your own github repository, or https://github.com/xiaomi/naftis and navigate to your branch (e.g. "my-feature").
Click the "Compare" button to compare the change, and then the "Pull request" button next to your "my-feature" branch.
Once your pull request has been opened it will be assigned to one or more reviewers.
.
├── bin # directory store binary
├── config # directory store configuration files
│ ├── in-cluster.toml # in Kubernetes cluster configuration file
│ ├── in-local.toml # in local machine configuration file
├── install # Helm Charts
│ └── helm
│ ├── mysql
│ └── naftis
├── src # source code
│ ├── api # backend server source code
│ │ ├── bootstrap # store start arguments
│ │ ├── executor # execute tasks from task queue
│ │ ├── handler # HTTP handlers
│ │ ├── log # log package wraps zap
│ │ ├── middleware # HTTP middlewares
│ │ ├── model # common models
│ │ ├── router # HTTP routers
│ │ ├── service # some wraped services
│ │ ├── storer # db storer
│ │ ├── util # utilities
│ │ ├── version # provides build-in version message
│ │ ├── worker # task worker
│ │ └── main.go # index of backend server
│ └── ui # frontend source code
│ ├── build # webpack scripts
│ ├── src # truly frontend source code
│ ├── package.json
│ ├── package-lock.json
│ ├── postcss.config.js
│ ├── README-CN.md
│ └── README.md
├── tool # some shell and migrate scripts
│ ├── img
│ ├── apppkg.sh
│ ├── build.sh
│ ├── cleanup.sh # clean up Naftis
│ ├── conn.sh
│ ├── genmanifest.sh # generate manifest for Naftis deployment in Kubernetes
│ ├── gentmpl.go
│ ├── naftis.sql # Naftis migrate sql scripts
│ ├── naftis.conf # Naftis Nginx configuration file
│ └── version.sh
├── vendor # go dependencies
├── Dockerfile.api # backend image dockerfile
├── Dockerfile.ui # frontend image dockerfile
├── Gopkg.lock # dep depencies version lock file
├── Gopkg.toml # dep depencies version primarily hand-edited file
├── LICENSE
├── Makefile # project's makefile
├── mysql.yaml # Kubernetes Naftis API and UI manifest, generate by Helm
├── naftis.yaml # Kubernetes Naftis MySQL manifest, generate by Helm
├── README-CN.md
├── README.md
└── run # shortcut script for local running
We use dep to manage our go dependencies.
# install dep
go get -u github.com/golang/dep
dep ensure -v # install dependcies
make # make all targets
make build # build api binaries, frontend assets, and Kubernetes manifest
make build.api # build backend binaries
make build.ui # build frontend assets
make build.manifest # build Kubernetes manifest
make fmt # go fmt codes
make lint # lint codes
make vet # vet codes
make test # run tests
make tar # compress directories
make docker # build docker images
make docker.api # build backend docker images
make docker.ui # build frontend docker images
make push # push images to docker.io
./bin/naftis-api -h # show help messages
./bin/naftis-api version # show binary build version messages
./tool/cleanup.sh # clean up Naftis