Add 'watch-backend' (#12330)
* Add 'watch-backend' This leverages `air` to watch the backend files and trigger `make backend` automatically when they change. It seems to work rather well together with `watch-frontend`. Fixes: https://github.com/go-gitea/gitea/issues/12318 * rework docs to a new section for continuous build Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
parent
bfb25e4be1
commit
e67c042511
4 changed files with 39 additions and 17 deletions
9
.air.conf
Normal file
9
.air.conf
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
root = "."
|
||||||
|
tmp_dir = ".air"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
cmd = "make backend"
|
||||||
|
bin = "gitea"
|
||||||
|
include_ext = ["go", "tmpl"]
|
||||||
|
exclude_dir = ["modules/git/tests", "services/gitdiff/testdata", "modules/avatar/testdata"]
|
||||||
|
include_dir = ["cmd", "models", "modules", "options", "routers", "services", "templates"]
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -81,6 +81,7 @@ coverage.all
|
||||||
/public/fonts
|
/public/fonts
|
||||||
/web_src/fomantic/build
|
/web_src/fomantic/build
|
||||||
/VERSION
|
/VERSION
|
||||||
|
/.air
|
||||||
|
|
||||||
# Snapcraft
|
# Snapcraft
|
||||||
snap/.snapcraft/
|
snap/.snapcraft/
|
||||||
|
|
12
Makefile
12
Makefile
|
@ -106,6 +106,8 @@ BINDATA_HASH := $(addsuffix .hash,$(BINDATA_DEST))
|
||||||
|
|
||||||
SVG_DEST_DIR := public/img/svg
|
SVG_DEST_DIR := public/img/svg
|
||||||
|
|
||||||
|
AIR_TMP_DIR := .air
|
||||||
|
|
||||||
TAGS ?=
|
TAGS ?=
|
||||||
TAGS_SPLIT := $(subst $(COMMA), ,$(TAGS))
|
TAGS_SPLIT := $(subst $(COMMA), ,$(TAGS))
|
||||||
TAGS_EVIDENCE := $(MAKE_EVIDENCE_DIR)/tags
|
TAGS_EVIDENCE := $(MAKE_EVIDENCE_DIR)/tags
|
||||||
|
@ -161,6 +163,7 @@ help:
|
||||||
@echo " - lint-frontend lint frontend files"
|
@echo " - lint-frontend lint frontend files"
|
||||||
@echo " - lint-backend lint backend files"
|
@echo " - lint-backend lint backend files"
|
||||||
@echo " - watch-frontend watch frontend files and continuously rebuild"
|
@echo " - watch-frontend watch frontend files and continuously rebuild"
|
||||||
|
@echo " - watch-backend watch backend files and continuously rebuild"
|
||||||
@echo " - webpack build webpack files"
|
@echo " - webpack build webpack files"
|
||||||
@echo " - svg build svg files"
|
@echo " - svg build svg files"
|
||||||
@echo " - fomantic build fomantic files"
|
@echo " - fomantic build fomantic files"
|
||||||
|
@ -306,6 +309,13 @@ watch-frontend: node-check $(FOMANTIC_DEST) node_modules
|
||||||
rm -rf $(WEBPACK_DEST_ENTRIES)
|
rm -rf $(WEBPACK_DEST_ENTRIES)
|
||||||
NODE_ENV=development npx webpack --hide-modules --display-entrypoints=false --watch --progress
|
NODE_ENV=development npx webpack --hide-modules --display-entrypoints=false --watch --progress
|
||||||
|
|
||||||
|
.PHONY: watch-backend
|
||||||
|
watch-backend: go-check
|
||||||
|
@hash air > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||||
|
GO111MODULE=off $(GO) get -u github.com/cosmtrek/air; \
|
||||||
|
fi
|
||||||
|
air -c .air.conf
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test:
|
||||||
$(GO) test $(GOTESTFLAGS) -mod=vendor -tags='sqlite sqlite_unlock_notify' $(GO_PACKAGES)
|
$(GO) test $(GOTESTFLAGS) -mod=vendor -tags='sqlite sqlite_unlock_notify' $(GO_PACKAGES)
|
||||||
|
@ -579,7 +589,7 @@ release-compress: | $(DIST_DIRS)
|
||||||
.PHONY: release-sources
|
.PHONY: release-sources
|
||||||
release-sources: | $(DIST_DIRS) node_modules
|
release-sources: | $(DIST_DIRS) node_modules
|
||||||
echo $(VERSION) > $(STORED_VERSION_FILE)
|
echo $(VERSION) > $(STORED_VERSION_FILE)
|
||||||
tar --exclude=./$(DIST) --exclude=./.git --exclude=./$(MAKE_EVIDENCE_DIR) --exclude=./node_modules/.cache -czf $(DIST)/release/gitea-src-$(VERSION).tar.gz .
|
tar --exclude=./$(DIST) --exclude=./.git --exclude=./$(MAKE_EVIDENCE_DIR) --exclude=./node_modules/.cache --exclude=./$(AIR_TMP_DIR) -czf $(DIST)/release/gitea-src-$(VERSION).tar.gz .
|
||||||
rm -f $(STORED_VERSION_FILE)
|
rm -f $(STORED_VERSION_FILE)
|
||||||
|
|
||||||
.PHONY: release-docs
|
.PHONY: release-docs
|
||||||
|
|
|
@ -91,7 +91,23 @@ The simplest recommended way to build from source is:
|
||||||
TAGS="bindata sqlite sqlite_unlock_notify" make build
|
TAGS="bindata sqlite sqlite_unlock_notify" make build
|
||||||
```
|
```
|
||||||
|
|
||||||
See `make help` for all available `make` tasks. Also see [`.drone.yml`](https://github.com/go-gitea/gitea/blob/master/.drone.yml) to see how our continuous integration works.
|
The `build` target will execute both `frontend` and `backend` sub-targets. If the `bindata` tag is present, the frontend files will be compiled into the binary. It is recommended to leave out the tag when doing frontend development so that changes will be reflected.
|
||||||
|
|
||||||
|
See `make help` for all available `make` targets. Also see [`.drone.yml`](https://github.com/go-gitea/gitea/blob/master/.drone.yml) to see how our continuous integration works.
|
||||||
|
|
||||||
|
## Building continuously
|
||||||
|
|
||||||
|
Both the `frontend` and `backend` targets can be ran continuously when source files change:
|
||||||
|
|
||||||
|
````bash
|
||||||
|
# in your first terminal
|
||||||
|
make watch-backend
|
||||||
|
|
||||||
|
# in your second terminal
|
||||||
|
make watch-frontend
|
||||||
|
````
|
||||||
|
|
||||||
|
On macOS, watching all backend source files may hit the default open files limit which can be increased via `ulimit -n 12288` for the current shell or in your shell startup file for all future shells.
|
||||||
|
|
||||||
### Formatting, code analysis and spell check
|
### Formatting, code analysis and spell check
|
||||||
|
|
||||||
|
@ -123,26 +139,12 @@ make revive vet misspell-check
|
||||||
|
|
||||||
### Working on JS and CSS
|
### Working on JS and CSS
|
||||||
|
|
||||||
For simple changes, edit files in `web_src`, run the build and start the server to test:
|
Either use the `watch-frontend` target mentioned above or just build once:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make build && ./gitea
|
make build && ./gitea
|
||||||
```
|
```
|
||||||
|
|
||||||
`make build` runs both `make frontend` and `make backend` which can be run individually as well as long as the `bindata` tag is not used (which compiles frontend files into the binary).
|
|
||||||
|
|
||||||
For more involved changes use the `watch-frontend` task to continuously rebuild files when their sources change. The `bindata` tag must be absent. First, build and run the backend:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make backend && ./gitea
|
|
||||||
```
|
|
||||||
|
|
||||||
With the backend running, open another terminal and run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make watch-frontend
|
|
||||||
```
|
|
||||||
|
|
||||||
Before committing, make sure the linters pass:
|
Before committing, make sure the linters pass:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
Reference in a new issue