You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 37KB

8 years ago
Use native git variants by default with go-git variants as build tag (#13673) * Move last commit cache back into modules/git Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from the interface for last commit cache Signed-off-by: Andrew Thornton <art27@cantab.net> * move cacheref to last_commit_cache Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from routers/private/hook Signed-off-by: Andrew Thornton <art27@cantab.net> * Move FindLFSFiles to pipeline Signed-off-by: Andrew Thornton <art27@cantab.net> * Make no-go-git variants Signed-off-by: Andrew Thornton <art27@cantab.net> * Submodule RefID Signed-off-by: Andrew Thornton <art27@cantab.net> * fix issue with GetCommitsInfo Signed-off-by: Andrew Thornton <art27@cantab.net> * fix GetLastCommitForPaths Signed-off-by: Andrew Thornton <art27@cantab.net> * Improve efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * More efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * even faster Signed-off-by: Andrew Thornton <art27@cantab.net> * Reduce duplication * As per @lunny Signed-off-by: Andrew Thornton <art27@cantab.net> * attempt to fix drone Signed-off-by: Andrew Thornton <art27@cantab.net> * fix test-tags Signed-off-by: Andrew Thornton <art27@cantab.net> * default to use no-go-git variants and add gogit build tag Signed-off-by: Andrew Thornton <art27@cantab.net> * placate lint Signed-off-by: Andrew Thornton <art27@cantab.net> * as per @6543 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
3 years ago
Use native git variants by default with go-git variants as build tag (#13673) * Move last commit cache back into modules/git Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from the interface for last commit cache Signed-off-by: Andrew Thornton <art27@cantab.net> * move cacheref to last_commit_cache Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from routers/private/hook Signed-off-by: Andrew Thornton <art27@cantab.net> * Move FindLFSFiles to pipeline Signed-off-by: Andrew Thornton <art27@cantab.net> * Make no-go-git variants Signed-off-by: Andrew Thornton <art27@cantab.net> * Submodule RefID Signed-off-by: Andrew Thornton <art27@cantab.net> * fix issue with GetCommitsInfo Signed-off-by: Andrew Thornton <art27@cantab.net> * fix GetLastCommitForPaths Signed-off-by: Andrew Thornton <art27@cantab.net> * Improve efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * More efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * even faster Signed-off-by: Andrew Thornton <art27@cantab.net> * Reduce duplication * As per @lunny Signed-off-by: Andrew Thornton <art27@cantab.net> * attempt to fix drone Signed-off-by: Andrew Thornton <art27@cantab.net> * fix test-tags Signed-off-by: Andrew Thornton <art27@cantab.net> * default to use no-go-git variants and add gogit build tag Signed-off-by: Andrew Thornton <art27@cantab.net> * placate lint Signed-off-by: Andrew Thornton <art27@cantab.net> * as per @6543 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
3 years ago
Split CI pipelines (#23385) - This PR attempts to split our various DB tests into separate pipelines. - It splits up some of the extra feature-related tests rather than having most of them in the MySQL test. - It disables the race detector for some of the pipelines as well, as it can cause slower runs and is mostly redundant when the pipelines just swap DBs. - It builds without SQLite support for any of the non-SQLite pipelines. - It moves the e2e test to using SQLite rather than PG (partially because I moved the minio tests to PG and that mucked up the test config, and partially because it avoids another running service) - It splits up the `go mod download` task in the Makefile from the tool installation, as the tools are only needed in the compliance pipeline. (Arguably even some of the tools aren't needed there, but that could be a follow-up PR) - SQLite is now the only arm64 pipeline, moving PG back to amd64 which can leverage autoscaler Should resolve #22010 - one thing that wasn't changed here but is mentioned in that issue, unit tests are needed in the same pipeline as an integration test in order to form a complete coverage report (at least as far as I could tell), so for now it remains in a pipeline with a DB integration test. Please let me know if I've inadvertently changed something that was how it was on purpose. --- I will say sometimes it's hard to pin down the average time, as a pipeline could be waiting for a runner for X minutes and that brings the total up by X minutes as well, but overall this does seem to be faster on average. --------- Signed-off-by: jolheiser <john.olheiser@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
1 year ago
Sign merges, CRUD, Wiki and Repository initialisation with gpg key (#7631) This PR fixes #7598 by providing a configurable way of signing commits across the Gitea instance. Per repository configurability and import/generation of trusted secure keys is not provided by this PR - from a security PoV that's probably impossible to do properly. Similarly web-signing, that is asking the user to sign something, is not implemented - this could be done at a later stage however. ## Features - [x] If commit.gpgsign is set in .gitconfig sign commits and files created through repofiles. (merges should already have been signed.) - [x] Verify commits signed with the default gpg as valid - [x] Signer, Committer and Author can all be different - [x] Allow signer to be arbitrarily different - We still require the key to have an activated email on Gitea. A more complete implementation would be to use a keyserver and mark external-or-unactivated with an "unknown" trust level icon. - [x] Add a signing-key.gpg endpoint to get the default gpg pub key if available - Rather than add a fake web-flow user I've added this as an endpoint on /api/v1/signing-key.gpg - [x] Try to match the default key with a user on gitea - this is done at verification time - [x] Make things configurable? - app.ini configuration done - [x] when checking commits are signed need to check if they're actually verifiable too - [x] Add documentation I have decided that adjusting the docker to create a default gpg key is not the correct thing to do and therefore have not implemented this.
4 years ago
Use native git variants by default with go-git variants as build tag (#13673) * Move last commit cache back into modules/git Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from the interface for last commit cache Signed-off-by: Andrew Thornton <art27@cantab.net> * move cacheref to last_commit_cache Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from routers/private/hook Signed-off-by: Andrew Thornton <art27@cantab.net> * Move FindLFSFiles to pipeline Signed-off-by: Andrew Thornton <art27@cantab.net> * Make no-go-git variants Signed-off-by: Andrew Thornton <art27@cantab.net> * Submodule RefID Signed-off-by: Andrew Thornton <art27@cantab.net> * fix issue with GetCommitsInfo Signed-off-by: Andrew Thornton <art27@cantab.net> * fix GetLastCommitForPaths Signed-off-by: Andrew Thornton <art27@cantab.net> * Improve efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * More efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * even faster Signed-off-by: Andrew Thornton <art27@cantab.net> * Reduce duplication * As per @lunny Signed-off-by: Andrew Thornton <art27@cantab.net> * attempt to fix drone Signed-off-by: Andrew Thornton <art27@cantab.net> * fix test-tags Signed-off-by: Andrew Thornton <art27@cantab.net> * default to use no-go-git variants and add gogit build tag Signed-off-by: Andrew Thornton <art27@cantab.net> * placate lint Signed-off-by: Andrew Thornton <art27@cantab.net> * as per @6543 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
3 years ago
Sign merges, CRUD, Wiki and Repository initialisation with gpg key (#7631) This PR fixes #7598 by providing a configurable way of signing commits across the Gitea instance. Per repository configurability and import/generation of trusted secure keys is not provided by this PR - from a security PoV that's probably impossible to do properly. Similarly web-signing, that is asking the user to sign something, is not implemented - this could be done at a later stage however. ## Features - [x] If commit.gpgsign is set in .gitconfig sign commits and files created through repofiles. (merges should already have been signed.) - [x] Verify commits signed with the default gpg as valid - [x] Signer, Committer and Author can all be different - [x] Allow signer to be arbitrarily different - We still require the key to have an activated email on Gitea. A more complete implementation would be to use a keyserver and mark external-or-unactivated with an "unknown" trust level icon. - [x] Add a signing-key.gpg endpoint to get the default gpg pub key if available - Rather than add a fake web-flow user I've added this as an endpoint on /api/v1/signing-key.gpg - [x] Try to match the default key with a user on gitea - this is done at verification time - [x] Make things configurable? - app.ini configuration done - [x] when checking commits are signed need to check if they're actually verifiable too - [x] Add documentation I have decided that adjusting the docker to create a default gpg key is not the correct thing to do and therefore have not implemented this.
4 years ago
8 years ago
8 years ago
Split CI pipelines (#23385) - This PR attempts to split our various DB tests into separate pipelines. - It splits up some of the extra feature-related tests rather than having most of them in the MySQL test. - It disables the race detector for some of the pipelines as well, as it can cause slower runs and is mostly redundant when the pipelines just swap DBs. - It builds without SQLite support for any of the non-SQLite pipelines. - It moves the e2e test to using SQLite rather than PG (partially because I moved the minio tests to PG and that mucked up the test config, and partially because it avoids another running service) - It splits up the `go mod download` task in the Makefile from the tool installation, as the tools are only needed in the compliance pipeline. (Arguably even some of the tools aren't needed there, but that could be a follow-up PR) - SQLite is now the only arm64 pipeline, moving PG back to amd64 which can leverage autoscaler Should resolve #22010 - one thing that wasn't changed here but is mentioned in that issue, unit tests are needed in the same pipeline as an integration test in order to form a complete coverage report (at least as far as I could tell), so for now it remains in a pipeline with a DB integration test. Please let me know if I've inadvertently changed something that was how it was on purpose. --- I will say sometimes it's hard to pin down the average time, as a pipeline could be waiting for a runner for X minutes and that brings the total up by X minutes as well, but overall this does seem to be faster on average. --------- Signed-off-by: jolheiser <john.olheiser@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
1 year ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983
  1. ifeq ($(USE_REPO_TEST_DIR),1)
  2. # This rule replaces the whole Makefile when we're trying to use /tmp repository temporary files
  3. location = $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
  4. self := $(location)
  5. %:
  6. @tmpdir=`mktemp --tmpdir -d` ; \
  7. echo Using temporary directory $$tmpdir for test repositories ; \
  8. USE_REPO_TEST_DIR= $(MAKE) -f $(self) --no-print-directory REPO_TEST_DIR=$$tmpdir/ $@ ; \
  9. STATUS=$$? ; rm -r "$$tmpdir" ; exit $$STATUS
  10. else
  11. # This is the "normal" part of the Makefile
  12. DIST := dist
  13. DIST_DIRS := $(DIST)/binaries $(DIST)/release
  14. IMPORT := code.gitea.io/gitea
  15. GO ?= go
  16. SHASUM ?= shasum -a 256
  17. HAS_GO := $(shell hash $(GO) > /dev/null 2>&1 && echo yes)
  18. COMMA := ,
  19. XGO_VERSION := go-1.21.x
  20. AIR_PACKAGE ?= github.com/cosmtrek/air@v1.44.0
  21. EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@2.7.0
  22. GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.5.0
  23. GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.1
  24. GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.11
  25. MISSPELL_PACKAGE ?= github.com/client9/misspell/cmd/misspell@v0.3.4
  26. SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.30.5
  27. XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest
  28. GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1.6.0
  29. GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1.0.1
  30. ACTIONLINT_PACKAGE ?= github.com/rhysd/actionlint/cmd/actionlint@v1.6.25
  31. DOCKER_IMAGE ?= gitea/gitea
  32. DOCKER_TAG ?= latest
  33. DOCKER_REF := $(DOCKER_IMAGE):$(DOCKER_TAG)
  34. ifeq ($(HAS_GO), yes)
  35. GOPATH ?= $(shell $(GO) env GOPATH)
  36. export PATH := $(GOPATH)/bin:$(PATH)
  37. CGO_EXTRA_CFLAGS := -DSQLITE_MAX_VARIABLE_NUMBER=32766
  38. CGO_CFLAGS ?= $(shell $(GO) env CGO_CFLAGS) $(CGO_EXTRA_CFLAGS)
  39. endif
  40. ifeq ($(GOOS),windows)
  41. IS_WINDOWS := yes
  42. else ifeq ($(patsubst Windows%,Windows,$(OS)),Windows)
  43. ifeq ($(GOOS),)
  44. IS_WINDOWS := yes
  45. endif
  46. endif
  47. ifeq ($(IS_WINDOWS),yes)
  48. GOFLAGS := -v -buildmode=exe
  49. EXECUTABLE ?= gitea.exe
  50. else
  51. GOFLAGS := -v
  52. EXECUTABLE ?= gitea
  53. endif
  54. ifeq ($(shell sed --version 2>/dev/null | grep -q GNU && echo gnu),gnu)
  55. SED_INPLACE := sed -i
  56. else
  57. SED_INPLACE := sed -i ''
  58. endif
  59. EXTRA_GOFLAGS ?=
  60. MAKE_VERSION := $(shell "$(MAKE)" -v | cat | head -n 1)
  61. MAKE_EVIDENCE_DIR := .make_evidence
  62. ifeq ($(RACE_ENABLED),true)
  63. GOFLAGS += -race
  64. GOTESTFLAGS += -race
  65. endif
  66. STORED_VERSION_FILE := VERSION
  67. HUGO_VERSION ?= 0.111.3
  68. GITHUB_REF_TYPE ?= branch
  69. GITHUB_REF_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
  70. ifneq ($(GITHUB_REF_TYPE),branch)
  71. VERSION ?= $(subst v,,$(GITHUB_REF_NAME))
  72. GITEA_VERSION ?= $(VERSION)
  73. else
  74. ifneq ($(GITHUB_REF_NAME),)
  75. VERSION ?= $(subst release/v,,$(GITHUB_REF_NAME))
  76. else
  77. VERSION ?= main
  78. endif
  79. STORED_VERSION=$(shell cat $(STORED_VERSION_FILE) 2>/dev/null)
  80. ifneq ($(STORED_VERSION),)
  81. GITEA_VERSION ?= $(STORED_VERSION)
  82. else
  83. GITEA_VERSION ?= $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//')
  84. endif
  85. endif
  86. # if version = "main" then update version to "nightly"
  87. ifeq ($(VERSION),main)
  88. VERSION := main-nightly
  89. endif
  90. LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)"
  91. LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64
  92. GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests/e2e,$(shell $(GO) list ./... | grep -v /vendor/))
  93. GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list code.gitea.io/gitea/models/migrations/...) code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests/e2e,$(shell $(GO) list ./... | grep -v /vendor/))
  94. FOMANTIC_WORK_DIR := web_src/fomantic
  95. WEBPACK_SOURCES := $(shell find web_src/js web_src/css -type f)
  96. WEBPACK_CONFIGS := webpack.config.js
  97. WEBPACK_DEST := public/assets/js/index.js public/assets/css/index.css
  98. WEBPACK_DEST_ENTRIES := public/assets/js public/assets/css public/assets/fonts public/assets/img/webpack
  99. BINDATA_DEST := modules/public/bindata.go modules/options/bindata.go modules/templates/bindata.go
  100. BINDATA_HASH := $(addsuffix .hash,$(BINDATA_DEST))
  101. GENERATED_GO_DEST := modules/charset/invisible_gen.go modules/charset/ambiguous_gen.go
  102. SVG_DEST_DIR := public/assets/img/svg
  103. AIR_TMP_DIR := .air
  104. GO_LICENSE_TMP_DIR := .go-licenses
  105. GO_LICENSE_FILE := assets/go-licenses.json
  106. TAGS ?=
  107. TAGS_SPLIT := $(subst $(COMMA), ,$(TAGS))
  108. TAGS_EVIDENCE := $(MAKE_EVIDENCE_DIR)/tags
  109. TEST_TAGS ?= sqlite sqlite_unlock_notify
  110. TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(FOMANTIC_WORK_DIR)/node_modules $(DIST) $(MAKE_EVIDENCE_DIR) $(AIR_TMP_DIR) $(GO_LICENSE_TMP_DIR)
  111. GO_DIRS := build cmd models modules routers services tests
  112. WEB_DIRS := web_src/js web_src/css
  113. GO_SOURCES := $(wildcard *.go)
  114. GO_SOURCES += $(shell find $(GO_DIRS) -type f -name "*.go" ! -path modules/options/bindata.go ! -path modules/public/bindata.go ! -path modules/templates/bindata.go)
  115. GO_SOURCES += $(GENERATED_GO_DEST)
  116. GO_SOURCES_NO_BINDATA := $(GO_SOURCES)
  117. ifeq ($(filter $(TAGS_SPLIT),bindata),bindata)
  118. GO_SOURCES += $(BINDATA_DEST)
  119. GENERATED_GO_DEST += $(BINDATA_DEST)
  120. endif
  121. # Force installation of playwright dependencies by setting this flag
  122. ifdef DEPS_PLAYWRIGHT
  123. PLAYWRIGHT_FLAGS += --with-deps
  124. endif
  125. SWAGGER_SPEC := templates/swagger/v1_json.tmpl
  126. SWAGGER_SPEC_S_TMPL := s|"basePath": *"/api/v1"|"basePath": "{{AppSubUrl \| JSEscape \| Safe}}/api/v1"|g
  127. SWAGGER_SPEC_S_JSON := s|"basePath": *"{{AppSubUrl \| JSEscape \| Safe}}/api/v1"|"basePath": "/api/v1"|g
  128. SWAGGER_EXCLUDE := code.gitea.io/sdk
  129. SWAGGER_NEWLINE_COMMAND := -e '$$a\'
  130. TEST_MYSQL_HOST ?= mysql:3306
  131. TEST_MYSQL_DBNAME ?= testgitea
  132. TEST_MYSQL_USERNAME ?= root
  133. TEST_MYSQL_PASSWORD ?=
  134. TEST_PGSQL_HOST ?= pgsql:5432
  135. TEST_PGSQL_DBNAME ?= testgitea
  136. TEST_PGSQL_USERNAME ?= postgres
  137. TEST_PGSQL_PASSWORD ?= postgres
  138. TEST_PGSQL_SCHEMA ?= gtestschema
  139. TEST_MSSQL_HOST ?= mssql:1433
  140. TEST_MSSQL_DBNAME ?= gitea
  141. TEST_MSSQL_USERNAME ?= sa
  142. TEST_MSSQL_PASSWORD ?= MwantsaSecurePassword1
  143. .PHONY: all
  144. all: build
  145. .PHONY: help
  146. help:
  147. @echo "Make Routines:"
  148. @echo " - \"\" equivalent to \"build\""
  149. @echo " - build build everything"
  150. @echo " - frontend build frontend files"
  151. @echo " - backend build backend files"
  152. @echo " - watch watch everything and continuously rebuild"
  153. @echo " - watch-frontend watch frontend files and continuously rebuild"
  154. @echo " - watch-backend watch backend files and continuously rebuild"
  155. @echo " - clean delete backend and integration files"
  156. @echo " - clean-all delete backend, frontend and integration files"
  157. @echo " - deps install dependencies"
  158. @echo " - deps-frontend install frontend dependencies"
  159. @echo " - deps-backend install backend dependencies"
  160. @echo " - deps-tools install tool dependencies"
  161. @echo " - deps-py install python dependencies"
  162. @echo " - lint lint everything"
  163. @echo " - lint-fix lint everything and fix issues"
  164. @echo " - lint-actions lint action workflow files"
  165. @echo " - lint-frontend lint frontend files"
  166. @echo " - lint-frontend-fix lint frontend files and fix issues"
  167. @echo " - lint-backend lint backend files"
  168. @echo " - lint-backend-fix lint backend files and fix issues"
  169. @echo " - lint-go lint go files"
  170. @echo " - lint-go-fix lint go files and fix issues"
  171. @echo " - lint-go-vet lint go files with vet"
  172. @echo " - lint-js lint js files"
  173. @echo " - lint-js-fix lint js files and fix issues"
  174. @echo " - lint-css lint css files"
  175. @echo " - lint-css-fix lint css files and fix issues"
  176. @echo " - lint-md lint markdown files"
  177. @echo " - lint-swagger lint swagger files"
  178. @echo " - lint-templates lint template files"
  179. @echo " - lint-yaml lint yaml files"
  180. @echo " - checks run various consistency checks"
  181. @echo " - checks-frontend check frontend files"
  182. @echo " - checks-backend check backend files"
  183. @echo " - test test everything"
  184. @echo " - test-frontend test frontend files"
  185. @echo " - test-backend test backend files"
  186. @echo " - test-e2e[\#TestSpecificName] test end to end using playwright"
  187. @echo " - update update js and py dependencies"
  188. @echo " - update-js update js dependencies"
  189. @echo " - update-py update py dependencies"
  190. @echo " - webpack build webpack files"
  191. @echo " - svg build svg files"
  192. @echo " - fomantic build fomantic files"
  193. @echo " - generate run \"go generate\""
  194. @echo " - fmt format the Go code"
  195. @echo " - generate-license update license files"
  196. @echo " - generate-gitignore update gitignore files"
  197. @echo " - generate-manpage generate manpage"
  198. @echo " - generate-swagger generate the swagger spec from code comments"
  199. @echo " - swagger-validate check if the swagger spec is valid"
  200. @echo " - go-licenses regenerate go licenses"
  201. @echo " - tidy run go mod tidy"
  202. @echo " - test[\#TestSpecificName] run unit test"
  203. @echo " - test-sqlite[\#TestSpecificName] run integration test for sqlite"
  204. .PHONY: go-check
  205. go-check:
  206. $(eval MIN_GO_VERSION_STR := $(shell grep -Eo '^go\s+[0-9]+\.[0-9]+' go.mod | cut -d' ' -f2))
  207. $(eval MIN_GO_VERSION := $(shell printf "%03d%03d" $(shell echo '$(MIN_GO_VERSION_STR)' | tr '.' ' ')))
  208. $(eval GO_VERSION := $(shell printf "%03d%03d" $(shell $(GO) version | grep -Eo '[0-9]+\.[0-9]+' | tr '.' ' ');))
  209. @if [ "$(GO_VERSION)" -lt "$(MIN_GO_VERSION)" ]; then \
  210. echo "Gitea requires Go $(MIN_GO_VERSION_STR) or greater to build. You can get it at https://go.dev/dl/"; \
  211. exit 1; \
  212. fi
  213. .PHONY: git-check
  214. git-check:
  215. @if git lfs >/dev/null 2>&1 ; then : ; else \
  216. echo "Gitea requires git with lfs support to run tests." ; \
  217. exit 1; \
  218. fi
  219. .PHONY: node-check
  220. node-check:
  221. $(eval MIN_NODE_VERSION_STR := $(shell grep -Eo '"node":.*[0-9.]+"' package.json | sed -n 's/.*[^0-9.]\([0-9.]*\)"/\1/p'))
  222. $(eval MIN_NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell echo '$(MIN_NODE_VERSION_STR)' | tr '.' ' ')))
  223. $(eval NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell node -v | cut -c2- | tr '.' ' ');))
  224. $(eval NPM_MISSING := $(shell hash npm > /dev/null 2>&1 || echo 1))
  225. @if [ "$(NODE_VERSION)" -lt "$(MIN_NODE_VERSION)" -o "$(NPM_MISSING)" = "1" ]; then \
  226. echo "Gitea requires Node.js $(MIN_NODE_VERSION_STR) or greater and npm to build. You can get it at https://nodejs.org/en/download/"; \
  227. exit 1; \
  228. fi
  229. .PHONY: clean-all
  230. clean-all: clean
  231. rm -rf $(WEBPACK_DEST_ENTRIES) node_modules
  232. .PHONY: clean
  233. clean:
  234. $(GO) clean -i ./...
  235. rm -rf $(EXECUTABLE) $(DIST) $(BINDATA_DEST) $(BINDATA_HASH) \
  236. integrations*.test \
  237. e2e*.test \
  238. tests/integration/gitea-integration-* \
  239. tests/integration/indexers-* \
  240. tests/mysql.ini tests/pgsql.ini tests/mssql.ini man/ \
  241. tests/e2e/gitea-e2e-*/ \
  242. tests/e2e/indexers-*/ \
  243. tests/e2e/reports/ tests/e2e/test-artifacts/ tests/e2e/test-snapshots/
  244. .PHONY: fmt
  245. fmt:
  246. GOFUMPT_PACKAGE=$(GOFUMPT_PACKAGE) $(GO) run build/code-batch-process.go gitea-fmt -w '{file-list}'
  247. $(eval TEMPLATES := $(shell find templates -type f -name '*.tmpl'))
  248. @# strip whitespace after '{{' or '(' and before '}}' or ')' unless there is only
  249. @# whitespace before it
  250. @$(SED_INPLACE) \
  251. -e 's/{{[ ]\{1,\}/{{/g' -e '/^[ ]\{1,\}}}/! s/[ ]\{1,\}}}/}}/g' \
  252. -e 's/([ ]\{1,\}/(/g' -e '/^[ ]\{1,\})/! s/[ ]\{1,\})/)/g' \
  253. $(TEMPLATES)
  254. .PHONY: fmt-check
  255. fmt-check: fmt
  256. @diff=$$(git diff --color=always $(GO_SOURCES) templates $(WEB_DIRS)); \
  257. if [ -n "$$diff" ]; then \
  258. echo "Please run 'make fmt' and commit the result:"; \
  259. echo "$${diff}"; \
  260. exit 1; \
  261. fi
  262. .PHONY: misspell-check
  263. misspell-check:
  264. go run $(MISSPELL_PACKAGE) -error $(GO_DIRS) $(WEB_DIRS)
  265. .PHONY: $(TAGS_EVIDENCE)
  266. $(TAGS_EVIDENCE):
  267. @mkdir -p $(MAKE_EVIDENCE_DIR)
  268. @echo "$(TAGS)" > $(TAGS_EVIDENCE)
  269. ifneq "$(TAGS)" "$(shell cat $(TAGS_EVIDENCE) 2>/dev/null)"
  270. TAGS_PREREQ := $(TAGS_EVIDENCE)
  271. endif
  272. .PHONY: generate-swagger
  273. generate-swagger: $(SWAGGER_SPEC)
  274. $(SWAGGER_SPEC): $(GO_SOURCES_NO_BINDATA)
  275. $(GO) run $(SWAGGER_PACKAGE) generate spec -x "$(SWAGGER_EXCLUDE)" -o './$(SWAGGER_SPEC)'
  276. $(SED_INPLACE) '$(SWAGGER_SPEC_S_TMPL)' './$(SWAGGER_SPEC)'
  277. $(SED_INPLACE) $(SWAGGER_NEWLINE_COMMAND) './$(SWAGGER_SPEC)'
  278. .PHONY: swagger-check
  279. swagger-check: generate-swagger
  280. @diff=$$(git diff --color=always '$(SWAGGER_SPEC)'); \
  281. if [ -n "$$diff" ]; then \
  282. echo "Please run 'make generate-swagger' and commit the result:"; \
  283. echo "$${diff}"; \
  284. exit 1; \
  285. fi
  286. .PHONY: swagger-validate
  287. swagger-validate:
  288. $(SED_INPLACE) '$(SWAGGER_SPEC_S_JSON)' './$(SWAGGER_SPEC)'
  289. $(GO) run $(SWAGGER_PACKAGE) validate './$(SWAGGER_SPEC)'
  290. $(SED_INPLACE) '$(SWAGGER_SPEC_S_TMPL)' './$(SWAGGER_SPEC)'
  291. .PHONY: checks
  292. checks: checks-frontend checks-backend
  293. .PHONY: checks-frontend
  294. checks-frontend: lockfile-check svg-check
  295. .PHONY: checks-backend
  296. checks-backend: tidy-check swagger-check fmt-check misspell-check swagger-validate security-check
  297. .PHONY: lint
  298. lint: lint-frontend lint-backend
  299. .PHONY: lint-fix
  300. lint-fix: lint-frontend-fix lint-backend-fix
  301. .PHONY: lint-frontend
  302. lint-frontend: lint-js lint-css
  303. .PHONY: lint-frontend-fix
  304. lint-frontend-fix: lint-js-fix lint-css-fix
  305. .PHONY: lint-backend
  306. lint-backend: lint-go lint-go-vet lint-editorconfig
  307. .PHONY: lint-backend-fix
  308. lint-backend-fix: lint-go-fix lint-go-vet lint-editorconfig
  309. .PHONY: lint-js
  310. lint-js: node_modules
  311. npx eslint --color --max-warnings=0 --ext js,vue web_src/js build *.config.js tests/e2e
  312. .PHONY: lint-js-fix
  313. lint-js-fix: node_modules
  314. npx eslint --color --max-warnings=0 --ext js,vue web_src/js build *.config.js tests/e2e --fix
  315. .PHONY: lint-css
  316. lint-css: node_modules
  317. npx stylelint --color --max-warnings=0 web_src/css web_src/js/components/*.vue
  318. .PHONY: lint-css-fix
  319. lint-css-fix: node_modules
  320. npx stylelint --color --max-warnings=0 web_src/css web_src/js/components/*.vue --fix
  321. .PHONY: lint-swagger
  322. lint-swagger: node_modules
  323. npx spectral lint -q -F hint $(SWAGGER_SPEC)
  324. .PHONY: lint-md
  325. lint-md: node_modules
  326. npx markdownlint docs *.md
  327. .PHONY: lint-go
  328. lint-go:
  329. $(GO) run $(GOLANGCI_LINT_PACKAGE) run
  330. .PHONY: lint-go-fix
  331. lint-go-fix:
  332. $(GO) run $(GOLANGCI_LINT_PACKAGE) run --fix
  333. # workaround step for the lint-go-windows CI task because 'go run' can not
  334. # have distinct GOOS/GOARCH for its build and run steps
  335. .PHONY: lint-go-windows
  336. lint-go-windows:
  337. @GOOS= GOARCH= $(GO) install $(GOLANGCI_LINT_PACKAGE)
  338. golangci-lint run
  339. .PHONY: lint-go-vet
  340. lint-go-vet:
  341. @echo "Running go vet..."
  342. @GOOS= GOARCH= $(GO) build code.gitea.io/gitea-vet
  343. @$(GO) vet -vettool=gitea-vet $(GO_PACKAGES)
  344. .PHONY: lint-editorconfig
  345. lint-editorconfig:
  346. $(GO) run $(EDITORCONFIG_CHECKER_PACKAGE) templates .github/workflows
  347. .PHONY: lint-actions
  348. lint-actions:
  349. $(GO) run $(ACTIONLINT_PACKAGE)
  350. .PHONY: lint-templates
  351. lint-templates: .venv
  352. @poetry run djlint $(shell find templates -type f -iname '*.tmpl')
  353. .PHONY: lint-yaml
  354. lint-yaml: .venv
  355. @poetry run yamllint .
  356. .PHONY: watch
  357. watch:
  358. @bash build/watch.sh
  359. .PHONY: watch-frontend
  360. watch-frontend: node-check node_modules
  361. @rm -rf $(WEBPACK_DEST_ENTRIES)
  362. NODE_ENV=development npx webpack --watch --progress
  363. .PHONY: watch-backend
  364. watch-backend: go-check
  365. GITEA_RUN_MODE=dev $(GO) run $(AIR_PACKAGE) -c .air.toml
  366. .PHONY: test
  367. test: test-frontend test-backend
  368. .PHONY: test-backend
  369. test-backend:
  370. @echo "Running go test with $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
  371. @$(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' $(GO_TEST_PACKAGES)
  372. .PHONY: test-frontend
  373. test-frontend: node_modules
  374. npx vitest
  375. .PHONY: test-check
  376. test-check:
  377. @echo "Running test-check...";
  378. @diff=$$(git status -s); \
  379. if [ -n "$$diff" ]; then \
  380. echo "make test-backend has changed files in the source tree:"; \
  381. echo "$${diff}"; \
  382. echo "You should change the tests to create these files in a temporary directory."; \
  383. echo "Do not simply add these files to .gitignore"; \
  384. exit 1; \
  385. fi
  386. .PHONY: test\#%
  387. test\#%:
  388. @echo "Running go test with -tags '$(TEST_TAGS)'..."
  389. @$(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' -run $(subst .,/,$*) $(GO_TEST_PACKAGES)
  390. .PHONY: coverage
  391. coverage:
  392. grep '^\(mode: .*\)\|\(.*:[0-9]\+\.[0-9]\+,[0-9]\+\.[0-9]\+ [0-9]\+ [0-9]\+\)$$' coverage.out > coverage-bodged.out
  393. grep '^\(mode: .*\)\|\(.*:[0-9]\+\.[0-9]\+,[0-9]\+\.[0-9]\+ [0-9]\+ [0-9]\+\)$$' integration.coverage.out > integration.coverage-bodged.out
  394. $(GO) run build/gocovmerge.go integration.coverage-bodged.out coverage-bodged.out > coverage.all
  395. .PHONY: unit-test-coverage
  396. unit-test-coverage:
  397. @echo "Running unit-test-coverage $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
  398. @$(GO) test $(GOTESTFLAGS) -timeout=20m -tags='$(TEST_TAGS)' -cover -coverprofile coverage.out $(GO_TEST_PACKAGES) && echo "\n==>\033[32m Ok\033[m\n" || exit 1
  399. .PHONY: tidy
  400. tidy:
  401. $(eval MIN_GO_VERSION := $(shell grep -Eo '^go\s+[0-9]+\.[0-9.]+' go.mod | cut -d' ' -f2))
  402. $(GO) mod tidy -compat=$(MIN_GO_VERSION)
  403. @$(MAKE) --no-print-directory $(GO_LICENSE_FILE)
  404. vendor: go.mod go.sum
  405. $(GO) mod vendor
  406. @touch vendor
  407. .PHONY: tidy-check
  408. tidy-check: tidy
  409. @diff=$$(git diff --color=always go.mod go.sum $(GO_LICENSE_FILE)); \
  410. if [ -n "$$diff" ]; then \
  411. echo "Please run 'make tidy' and commit the result:"; \
  412. echo "$${diff}"; \
  413. exit 1; \
  414. fi
  415. .PHONY: go-licenses
  416. go-licenses: $(GO_LICENSE_FILE)
  417. $(GO_LICENSE_FILE): go.mod go.sum
  418. -$(GO) run $(GO_LICENSES_PACKAGE) save . --force --save_path=$(GO_LICENSE_TMP_DIR) 2>/dev/null
  419. $(GO) run build/generate-go-licenses.go $(GO_LICENSE_TMP_DIR) $(GO_LICENSE_FILE)
  420. @rm -rf $(GO_LICENSE_TMP_DIR)
  421. generate-ini-sqlite:
  422. sed -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  423. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  424. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  425. tests/sqlite.ini.tmpl > tests/sqlite.ini
  426. .PHONY: test-sqlite
  427. test-sqlite: integrations.sqlite.test generate-ini-sqlite
  428. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test
  429. .PHONY: test-sqlite\#%
  430. test-sqlite\#%: integrations.sqlite.test generate-ini-sqlite
  431. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test -test.run $(subst .,/,$*)
  432. .PHONY: test-sqlite-migration
  433. test-sqlite-migration: migrations.sqlite.test migrations.individual.sqlite.test
  434. generate-ini-mysql:
  435. sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \
  436. -e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \
  437. -e 's|{{TEST_MYSQL_USERNAME}}|${TEST_MYSQL_USERNAME}|g' \
  438. -e 's|{{TEST_MYSQL_PASSWORD}}|${TEST_MYSQL_PASSWORD}|g' \
  439. -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  440. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  441. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  442. tests/mysql.ini.tmpl > tests/mysql.ini
  443. .PHONY: test-mysql
  444. test-mysql: integrations.mysql.test generate-ini-mysql
  445. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test
  446. .PHONY: test-mysql\#%
  447. test-mysql\#%: integrations.mysql.test generate-ini-mysql
  448. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test -test.run $(subst .,/,$*)
  449. .PHONY: test-mysql-migration
  450. test-mysql-migration: migrations.mysql.test migrations.individual.mysql.test
  451. generate-ini-pgsql:
  452. sed -e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \
  453. -e 's|{{TEST_PGSQL_DBNAME}}|${TEST_PGSQL_DBNAME}|g' \
  454. -e 's|{{TEST_PGSQL_USERNAME}}|${TEST_PGSQL_USERNAME}|g' \
  455. -e 's|{{TEST_PGSQL_PASSWORD}}|${TEST_PGSQL_PASSWORD}|g' \
  456. -e 's|{{TEST_PGSQL_SCHEMA}}|${TEST_PGSQL_SCHEMA}|g' \
  457. -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  458. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  459. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  460. tests/pgsql.ini.tmpl > tests/pgsql.ini
  461. .PHONY: test-pgsql
  462. test-pgsql: integrations.pgsql.test generate-ini-pgsql
  463. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test
  464. .PHONY: test-pgsql\#%
  465. test-pgsql\#%: integrations.pgsql.test generate-ini-pgsql
  466. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test -test.run $(subst .,/,$*)
  467. .PHONY: test-pgsql-migration
  468. test-pgsql-migration: migrations.pgsql.test migrations.individual.pgsql.test
  469. generate-ini-mssql:
  470. sed -e 's|{{TEST_MSSQL_HOST}}|${TEST_MSSQL_HOST}|g' \
  471. -e 's|{{TEST_MSSQL_DBNAME}}|${TEST_MSSQL_DBNAME}|g' \
  472. -e 's|{{TEST_MSSQL_USERNAME}}|${TEST_MSSQL_USERNAME}|g' \
  473. -e 's|{{TEST_MSSQL_PASSWORD}}|${TEST_MSSQL_PASSWORD}|g' \
  474. -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  475. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  476. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  477. tests/mssql.ini.tmpl > tests/mssql.ini
  478. .PHONY: test-mssql
  479. test-mssql: integrations.mssql.test generate-ini-mssql
  480. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test
  481. .PHONY: test-mssql\#%
  482. test-mssql\#%: integrations.mssql.test generate-ini-mssql
  483. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test -test.run $(subst .,/,$*)
  484. .PHONY: test-mssql-migration
  485. test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test
  486. .PHONY: playwright
  487. playwright: $(PLAYWRIGHT_DIR)
  488. npm install --no-save @playwright/test
  489. npx playwright install $(PLAYWRIGHT_FLAGS)
  490. .PHONY: test-e2e%
  491. test-e2e%: TEST_TYPE ?= e2e
  492. # Clear display env variable. Otherwise, chromium tests can fail.
  493. DISPLAY=
  494. .PHONY: test-e2e
  495. test-e2e: test-e2e-sqlite
  496. .PHONY: test-e2e-sqlite
  497. test-e2e-sqlite: playwright e2e.sqlite.test generate-ini-sqlite
  498. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test
  499. .PHONY: test-e2e-sqlite\#%
  500. test-e2e-sqlite\#%: playwright e2e.sqlite.test generate-ini-sqlite
  501. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run TestE2e/$*
  502. .PHONY: test-e2e-mysql
  503. test-e2e-mysql: playwright e2e.mysql.test generate-ini-mysql
  504. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test
  505. .PHONY: test-e2e-mysql\#%
  506. test-e2e-mysql\#%: playwright e2e.mysql.test generate-ini-mysql
  507. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run TestE2e/$*
  508. .PHONY: test-e2e-pgsql
  509. test-e2e-pgsql: playwright e2e.pgsql.test generate-ini-pgsql
  510. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test
  511. .PHONY: test-e2e-pgsql\#%
  512. test-e2e-pgsql\#%: playwright e2e.pgsql.test generate-ini-pgsql
  513. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run TestE2e/$*
  514. .PHONY: test-e2e-mssql
  515. test-e2e-mssql: playwright e2e.mssql.test generate-ini-mssql
  516. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test
  517. .PHONY: test-e2e-mssql\#%
  518. test-e2e-mssql\#%: playwright e2e.mssql.test generate-ini-mssql
  519. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run TestE2e/$*
  520. .PHONY: bench-sqlite
  521. bench-sqlite: integrations.sqlite.test generate-ini-sqlite
  522. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  523. .PHONY: bench-mysql
  524. bench-mysql: integrations.mysql.test generate-ini-mysql
  525. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  526. .PHONY: bench-mssql
  527. bench-mssql: integrations.mssql.test generate-ini-mssql
  528. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  529. .PHONY: bench-pgsql
  530. bench-pgsql: integrations.pgsql.test generate-ini-pgsql
  531. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  532. .PHONY: integration-test-coverage
  533. integration-test-coverage: integrations.cover.test generate-ini-mysql
  534. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.cover.test -test.coverprofile=integration.coverage.out
  535. .PHONY: integration-test-coverage-sqlite
  536. integration-test-coverage-sqlite: integrations.cover.sqlite.test generate-ini-sqlite
  537. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.cover.sqlite.test -test.coverprofile=integration.coverage.out
  538. integrations.mysql.test: git-check $(GO_SOURCES)
  539. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.mysql.test
  540. integrations.pgsql.test: git-check $(GO_SOURCES)
  541. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.pgsql.test
  542. integrations.mssql.test: git-check $(GO_SOURCES)
  543. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.mssql.test
  544. integrations.sqlite.test: git-check $(GO_SOURCES)
  545. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.sqlite.test -tags '$(TEST_TAGS)'
  546. integrations.cover.test: git-check $(GO_SOURCES)
  547. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -coverpkg $(shell echo $(GO_TEST_PACKAGES) | tr ' ' ',') -o integrations.cover.test
  548. integrations.cover.sqlite.test: git-check $(GO_SOURCES)
  549. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -coverpkg $(shell echo $(GO_TEST_PACKAGES) | tr ' ' ',') -o integrations.cover.sqlite.test -tags '$(TEST_TAGS)'
  550. .PHONY: migrations.mysql.test
  551. migrations.mysql.test: $(GO_SOURCES) generate-ini-mysql
  552. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.mysql.test
  553. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./migrations.mysql.test
  554. .PHONY: migrations.pgsql.test
  555. migrations.pgsql.test: $(GO_SOURCES) generate-ini-pgsql
  556. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.pgsql.test
  557. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./migrations.pgsql.test
  558. .PHONY: migrations.mssql.test
  559. migrations.mssql.test: $(GO_SOURCES) generate-ini-mssql
  560. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.mssql.test
  561. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.mssql.test
  562. .PHONY: migrations.sqlite.test
  563. migrations.sqlite.test: $(GO_SOURCES) generate-ini-sqlite
  564. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.sqlite.test -tags '$(TEST_TAGS)'
  565. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./migrations.sqlite.test
  566. .PHONY: migrations.individual.mysql.test
  567. migrations.individual.mysql.test: $(GO_SOURCES)
  568. for pkg in $(shell $(GO) list code.gitea.io/gitea/models/migrations/...); do \
  569. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' $$pkg; \
  570. done
  571. .PHONY: migrations.individual.sqlite.test\#%
  572. migrations.individual.sqlite.test\#%: $(GO_SOURCES) generate-ini-sqlite
  573. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' code.gitea.io/gitea/models/migrations/$*
  574. .PHONY: migrations.individual.pgsql.test
  575. migrations.individual.pgsql.test: $(GO_SOURCES)
  576. for pkg in $(shell $(GO) list code.gitea.io/gitea/models/migrations/...); do \
  577. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' $$pkg; \
  578. done
  579. .PHONY: migrations.individual.pgsql.test\#%
  580. migrations.individual.pgsql.test\#%: $(GO_SOURCES) generate-ini-pgsql
  581. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' code.gitea.io/gitea/models/migrations/$*
  582. .PHONY: migrations.individual.mssql.test
  583. migrations.individual.mssql.test: $(GO_SOURCES) generate-ini-mssql
  584. for pkg in $(shell $(GO) list code.gitea.io/gitea/models/migrations/...); do \
  585. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' $$pkg -test.failfast; \
  586. done
  587. .PHONY: migrations.individual.mssql.test\#%
  588. migrations.individual.mssql.test\#%: $(GO_SOURCES) generate-ini-mssql
  589. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' code.gitea.io/gitea/models/migrations/$*
  590. .PHONY: migrations.individual.sqlite.test
  591. migrations.individual.sqlite.test: $(GO_SOURCES) generate-ini-sqlite
  592. for pkg in $(shell $(GO) list code.gitea.io/gitea/models/migrations/...); do \
  593. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' $$pkg; \
  594. done
  595. .PHONY: migrations.individual.sqlite.test\#%
  596. migrations.individual.sqlite.test\#%: $(GO_SOURCES) generate-ini-sqlite
  597. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' code.gitea.io/gitea/models/migrations/$*
  598. e2e.mysql.test: $(GO_SOURCES)
  599. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mysql.test
  600. e2e.pgsql.test: $(GO_SOURCES)
  601. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.pgsql.test
  602. e2e.mssql.test: $(GO_SOURCES)
  603. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mssql.test
  604. e2e.sqlite.test: $(GO_SOURCES)
  605. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.sqlite.test -tags '$(TEST_TAGS)'
  606. .PHONY: check
  607. check: test
  608. .PHONY: install $(TAGS_PREREQ)
  609. install: $(wildcard *.go)
  610. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)'
  611. .PHONY: build
  612. build: frontend backend
  613. .PHONY: frontend
  614. frontend: $(WEBPACK_DEST)
  615. .PHONY: backend
  616. backend: go-check generate-backend $(EXECUTABLE)
  617. # We generate the backend before the frontend in case we in future we want to generate things in the frontend from generated files in backend
  618. .PHONY: generate
  619. generate: generate-backend
  620. .PHONY: generate-backend
  621. generate-backend: $(TAGS_PREREQ) generate-go
  622. .PHONY: generate-go
  623. generate-go: $(TAGS_PREREQ)
  624. @echo "Running go generate..."
  625. @CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' $(GO_PACKAGES)
  626. .PHONY: security-check
  627. security-check:
  628. go run $(GOVULNCHECK_PACKAGE) ./...
  629. $(EXECUTABLE): $(GO_SOURCES) $(TAGS_PREREQ)
  630. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
  631. .PHONY: release
  632. release: frontend generate release-windows release-linux release-darwin release-freebsd release-copy release-compress vendor release-sources release-docs release-check
  633. $(DIST_DIRS):
  634. mkdir -p $(DIST_DIRS)
  635. .PHONY: release-windows
  636. release-windows: | $(DIST_DIRS)
  637. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -buildmode exe -dest $(DIST)/binaries -tags 'osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION) .
  638. ifeq (,$(findstring gogit,$(TAGS)))
  639. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -buildmode exe -dest $(DIST)/binaries -tags 'osusergo gogit $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out gitea-$(VERSION)-gogit .
  640. endif
  641. .PHONY: release-linux
  642. release-linux: | $(DIST_DIRS)
  643. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets '$(LINUX_ARCHS)' -out gitea-$(VERSION) .
  644. .PHONY: release-darwin
  645. release-darwin: | $(DIST_DIRS)
  646. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin-10.12/amd64,darwin-10.12/arm64' -out gitea-$(VERSION) .
  647. .PHONY: release-freebsd
  648. release-freebsd: | $(DIST_DIRS)
  649. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'freebsd/amd64' -out gitea-$(VERSION) .
  650. .PHONY: release-copy
  651. release-copy: | $(DIST_DIRS)
  652. cd $(DIST); for file in `find . -type f -name "*"`; do cp $${file} ./release/; done;
  653. .PHONY: release-check
  654. release-check: | $(DIST_DIRS)
  655. cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "checksumming $${file}" && $(SHASUM) `echo $${file} | sed 's/^..//'` > $${file}.sha256; done;
  656. .PHONY: release-compress
  657. release-compress: | $(DIST_DIRS)
  658. cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && $(GO) run $(GXZ_PACKAGE) -k -9 $${file}; done;
  659. .PHONY: release-sources
  660. release-sources: | $(DIST_DIRS)
  661. echo $(VERSION) > $(STORED_VERSION_FILE)
  662. # bsdtar needs a ^ to prevent matching subdirectories
  663. $(eval EXCL := --exclude=$(shell tar --help | grep -q bsdtar && echo "^")./)
  664. # use transform to a add a release-folder prefix; in bsdtar the transform parameter equivalent is -s
  665. $(eval TRANSFORM := $(shell tar --help | grep -q bsdtar && echo "-s '/^./gitea-src-$(VERSION)/'" || echo "--transform 's|^./|gitea-src-$(VERSION)/|'"))
  666. tar $(addprefix $(EXCL),$(TAR_EXCLUDES)) $(TRANSFORM) -czf $(DIST)/release/gitea-src-$(VERSION).tar.gz .
  667. rm -f $(STORED_VERSION_FILE)
  668. .PHONY: release-docs
  669. release-docs: | $(DIST_DIRS) docs
  670. tar -czf $(DIST)/release/gitea-docs-$(VERSION).tar.gz -C ./docs .
  671. .PHONY: docs
  672. docs:
  673. cd docs; bash scripts/trans-copy.sh;
  674. .PHONY: deps
  675. deps: deps-frontend deps-backend deps-tools deps-py
  676. .PHONY: deps-py
  677. deps-py: .venv
  678. .PHONY: deps-frontend
  679. deps-frontend: node_modules
  680. .PHONY: deps-backend
  681. deps-backend:
  682. $(GO) mod download
  683. .PHONY: deps-tools
  684. deps-tools:
  685. $(GO) install $(AIR_PACKAGE)
  686. $(GO) install $(EDITORCONFIG_CHECKER_PACKAGE)
  687. $(GO) install $(GOFUMPT_PACKAGE)
  688. $(GO) install $(GOLANGCI_LINT_PACKAGE)
  689. $(GO) install $(GXZ_PACKAGE)
  690. $(GO) install $(MISSPELL_PACKAGE)
  691. $(GO) install $(SWAGGER_PACKAGE)
  692. $(GO) install $(XGO_PACKAGE)
  693. $(GO) install $(GO_LICENSES_PACKAGE)
  694. $(GO) install $(GOVULNCHECK_PACKAGE)
  695. $(GO) install $(ACTIONLINT_PACKAGE)
  696. node_modules: package-lock.json
  697. npm install --no-save
  698. @touch node_modules
  699. .venv: poetry.lock
  700. poetry install
  701. @touch .venv
  702. .PHONY: update
  703. update: update-js update-py
  704. .PHONY: update-js
  705. update-js: node-check | node_modules
  706. npx updates -u -f package.json
  707. rm -rf node_modules package-lock.json
  708. npm install --package-lock
  709. @touch node_modules
  710. .PHONY: update-py
  711. update-py: node-check | node_modules
  712. npx updates -u -f pyproject.toml
  713. rm -rf .venv poetry.lock
  714. poetry install
  715. @touch .venv
  716. .PHONY: fomantic
  717. fomantic:
  718. rm -rf $(FOMANTIC_WORK_DIR)/build
  719. cd $(FOMANTIC_WORK_DIR) && npm install --no-save
  720. cp -f $(FOMANTIC_WORK_DIR)/theme.config.less $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui/src/theme.config
  721. cp -rf $(FOMANTIC_WORK_DIR)/_site $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui/src/
  722. cd $(FOMANTIC_WORK_DIR) && npx gulp -f node_modules/fomantic-ui/gulpfile.js build
  723. # fomantic uses "touchstart" as click event for some browsers, it's not ideal, so we force fomantic to always use "click" as click event
  724. $(SED_INPLACE) -e 's/clickEvent[ \t]*=/clickEvent = "click", unstableClickEvent =/g' $(FOMANTIC_WORK_DIR)/build/semantic.js
  725. $(SED_INPLACE) -e 's/\r//g' $(FOMANTIC_WORK_DIR)/build/semantic.css $(FOMANTIC_WORK_DIR)/build/semantic.js
  726. rm -f $(FOMANTIC_WORK_DIR)/build/*.min.*
  727. .PHONY: webpack
  728. webpack: $(WEBPACK_DEST)
  729. $(WEBPACK_DEST): $(WEBPACK_SOURCES) $(WEBPACK_CONFIGS) package-lock.json
  730. @$(MAKE) -s node-check node_modules
  731. rm -rf $(WEBPACK_DEST_ENTRIES)
  732. npx webpack
  733. @touch $(WEBPACK_DEST)
  734. .PHONY: svg
  735. svg: node-check | node_modules
  736. rm -rf $(SVG_DEST_DIR)
  737. node build/generate-svg.js
  738. .PHONY: svg-check
  739. svg-check: svg
  740. @git add $(SVG_DEST_DIR)
  741. @diff=$$(git diff --color=always --cached $(SVG_DEST_DIR)); \
  742. if [ -n "$$diff" ]; then \
  743. echo "Please run 'make svg' and 'git add $(SVG_DEST_DIR)' and commit the result:"; \
  744. echo "$${diff}"; \
  745. exit 1; \
  746. fi
  747. .PHONY: lockfile-check
  748. lockfile-check:
  749. npm install --package-lock-only
  750. @diff=$$(git diff --color=always package-lock.json); \
  751. if [ -n "$$diff" ]; then \
  752. echo "package-lock.json is inconsistent with package.json"; \
  753. echo "Please run 'npm install --package-lock-only' and commit the result:"; \
  754. echo "$${diff}"; \
  755. exit 1; \
  756. fi
  757. .PHONY: update-translations
  758. update-translations:
  759. mkdir -p ./translations
  760. cd ./translations && curl -L https://crowdin.com/download/project/gitea.zip > gitea.zip && unzip gitea.zip
  761. rm ./translations/gitea.zip
  762. $(SED_INPLACE) -e 's/="/=/g' -e 's/"$$//g' ./translations/*.ini
  763. $(SED_INPLACE) -e 's/\\"/"/g' ./translations/*.ini
  764. mv ./translations/*.ini ./options/locale/
  765. rmdir ./translations
  766. .PHONY: generate-license
  767. generate-license:
  768. $(GO) run build/generate-licenses.go
  769. .PHONY: generate-gitignore
  770. generate-gitignore:
  771. $(GO) run build/generate-gitignores.go
  772. .PHONY: generate-images
  773. generate-images: | node_modules
  774. npm install --no-save --no-package-lock fabric@5 imagemin-zopfli@7
  775. node build/generate-images.js $(TAGS)
  776. .PHONY: generate-manpage
  777. generate-manpage:
  778. @[ -f gitea ] || make backend
  779. @mkdir -p man/man1/ man/man5
  780. @./gitea docs --man > man/man1/gitea.1
  781. @gzip -9 man/man1/gitea.1 && echo man/man1/gitea.1.gz created
  782. @#TODO A small script that formats config-cheat-sheet.en-us.md nicely for use as a config man page
  783. .PHONY: docker
  784. docker:
  785. docker build --disable-content-trust=false -t $(DOCKER_REF) .
  786. # support also build args docker build --build-arg GITEA_VERSION=v1.2.3 --build-arg TAGS="bindata sqlite sqlite_unlock_notify" .
  787. # This endif closes the if at the top of the file
  788. endif