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 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue