From e938f1d945e026947fcea63ebecdfb66b766bb49 Mon Sep 17 00:00:00 2001 From: silverwind Date: Sat, 22 Feb 2020 12:51:58 +0100 Subject: [PATCH] Add frontend/backend make targets, fix source release (#10325) (#10414) * Add frontend/backend make targets, fix source release - Add 'make backend' and 'make frontend' make targets which are used to build go and js/css/svg files respectively. - The 'backend' target can be invoked without requiring Node.js to be present on the system if pre-built frontend assets are present like in the release source tarballs. - Fix source releases missing 'dist' folders inside 'node_modules' which were erronously excluded from tar. - Store VERSION in file VERSION for the release tarballs and prefer that file over git-derived version. * fix release task * fix typo * fix another typo Fixes: https://github.com/go-gitea/gitea/issues/10253 --- .gitignore | 1 + Makefile | 46 +++++++++++++------ README.md | 9 ++++ .../doc/installation/from-source.en-us.md | 11 +++++ 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index f6831fe26..719d381b0 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,7 @@ coverage.all /yarn.lock /public/js /public/css +/VERSION # Snapcraft snap/.snapcraft/ diff --git a/Makefile b/Makefile index 280d273c0..d33b5fdc2 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,8 @@ EXTRA_GOFLAGS ?= MAKE_VERSION := $(shell $(MAKE) -v | head -n 1) +STORED_VERSION_FILE := VERSION + ifneq ($(DRONE_TAG),) VERSION ?= $(subst v,,$(DRONE_TAG)) GITEA_VERSION ?= $(VERSION) @@ -38,7 +40,13 @@ else else VERSION ?= master endif - GITEA_VERSION ?= $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//') + + STORED_VERSION=$(shell cat $(STORED_VERSION_FILE) 2>/dev/null) + ifneq ($(STORED_VERSION),) + GITEA_VERSION ?= $(STORED_VERSION) + else + GITEA_VERSION ?= $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//') + endif endif LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)" @@ -96,13 +104,15 @@ include docker/Makefile help: @echo "Make Routines:" @echo " - \"\" equivalent to \"build\"" - @echo " - build creates the entire project" - @echo " - clean delete integration files and build files but not css and js files" - @echo " - clean-all delete all generated files (integration test, build, css and js files)" + @echo " - build build everything" + @echo " - frontend build frontend files" + @echo " - backend build backend files" + @echo " - clean delete backend and integration files" + @echo " - clean-all delete backend, frontend and integration files" @echo " - css rebuild only css files" @echo " - js rebuild only js files" - @echo " - generate run \"make css js\" and \"go generate\"" - @echo " - fmt format the code" + @echo " - generate run \"go generate\"" + @echo " - fmt format the Go code" @echo " - generate-swagger generate the swagger spec from code comments" @echo " - swagger-validate check if the swagger spec is valide" @echo " - revive run code linter revive" @@ -156,10 +166,6 @@ fmt: vet: $(GO) vet $(PACKAGES) -.PHONY: generate -generate: js css - GO111MODULE=on $(GO) generate -mod=vendor $(PACKAGES) - .PHONY: generate-swagger generate-swagger: $(SWAGGER) generate spec -o './$(SWAGGER_SPEC)' @@ -414,13 +420,23 @@ install: $(wildcard *.go) $(GO) install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' .PHONY: build -build: go-check generate $(EXECUTABLE) +build: frontend backend + +.PHONY: frontend +frontend: node-check js css + +.PHONY: backend +backend: go-check generate $(EXECUTABLE) + +.PHONY: generate +generate: + GO111MODULE=on $(GO) generate -mod=vendor $(PACKAGES) $(EXECUTABLE): $(GO_SOURCES) GO111MODULE=on $(GO) build -mod=vendor $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@ .PHONY: release -release: generate release-dirs release-windows release-linux release-darwin release-copy release-compress release-sources release-check +release: frontend generate release-dirs release-windows release-linux release-darwin release-copy release-compress release-sources release-check .PHONY: release-dirs release-dirs: @@ -472,8 +488,10 @@ release-compress: cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done; .PHONY: release-sources -release-sources: - tar cvzf $(DIST)/release/gitea-src-$(VERSION).tar.gz --exclude $(DIST) --exclude .git . +release-sources: | node_modules + echo $(VERSION) > $(STORED_VERSION_FILE) + tar --exclude=./$(DIST) --exclude=./.git --exclude=./node_modules/.cache -czf $(DIST)/release/gitea-src-$(VERSION).tar.gz . + rm -f $(STORED_VERSION_FILE) node_modules: package-lock.json npm install --no-save diff --git a/README.md b/README.md index f27b5b38f..01411098b 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,15 @@ From the root of the source tree, run: TAGS="bindata" make build +The `build` target is split into two sub-targets: + +- `make backend` which requires [Go 1.11](https://golang.org/dl/) or greater. +- `make frontend` which requires [Node.js 10.0.0](https://nodejs.org/en/download/) or greater. + +If pre-built frontend files are present it is possible to only build the backend: + + TAGS="bindata" make backend + More info: https://docs.gitea.io/en-us/install-from-source/ ## Using diff --git a/docs/content/doc/installation/from-source.en-us.md b/docs/content/doc/installation/from-source.en-us.md index f5e12182a..ceb263884 100644 --- a/docs/content/doc/installation/from-source.en-us.md +++ b/docs/content/doc/installation/from-source.en-us.md @@ -114,6 +114,17 @@ recommended way to build from source is therefore: TAGS="bindata sqlite sqlite_unlock_notify" make build ``` +The `build` target is split into two sub-targets: + +- `make backend` which requires [Go 1.11](https://golang.org/dl/) or greater. +- `make frontend` which requires [Node.js 10.0.0](https://nodejs.org/en/download/) or greater. + +If pre-built frontend files are present it is possible to only build the backend: + +```bash +TAGS="bindata" make backend +`` + ## Test After following the steps above, a `gitea` binary will be available in the working directory.