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.

8 years ago
Add tailwindcss (#29357) This will get tailwindcss working on a basic level. It provides only the utility classes, e.g. no tailwind base which we don't need because we have our own CSS reset. Without the base, we also do not have their CSS variables so a small amount of features do not work and I removed the generated classes for them. ***Note for future developers: This currently uses a `tw-` prefix, so we use it like `tw-p-3`.*** <details> <summary>Currently added CSS, all false-positives</summary> ``` .\!visible{ visibility: visible !important } .visible{ visibility: visible } .invisible{ visibility: hidden } .collapse{ visibility: collapse } .static{ position: static } .\!fixed{ position: fixed !important } .absolute{ position: absolute } .relative{ position: relative } .sticky{ position: sticky } .left-10{ left: 2.5rem } .isolate{ isolation: isolate } .float-right{ float: right } .float-left{ float: left } .mr-2{ margin-right: 0.5rem } .mr-3{ margin-right: 0.75rem } .\!block{ display: block !important } .block{ display: block } .inline-block{ display: inline-block } .inline{ display: inline } .flex{ display: flex } .inline-flex{ display: inline-flex } .\!table{ display: table !important } .inline-table{ display: inline-table } .table-caption{ display: table-caption } .table-cell{ display: table-cell } .table-column{ display: table-column } .table-column-group{ display: table-column-group } .table-footer-group{ display: table-footer-group } .table-header-group{ display: table-header-group } .table-row-group{ display: table-row-group } .table-row{ display: table-row } .flow-root{ display: flow-root } .inline-grid{ display: inline-grid } .contents{ display: contents } .list-item{ display: list-item } .\!hidden{ display: none !important } .hidden{ display: none } .flex-shrink{ flex-shrink: 1 } .shrink{ flex-shrink: 1 } .flex-grow{ flex-grow: 1 } .grow{ flex-grow: 1 } .border-collapse{ border-collapse: collapse } .select-all{ user-select: all } .resize{ resize: both } .flex-wrap{ flex-wrap: wrap } .overflow-visible{ overflow: visible } .rounded{ border-radius: 0.25rem } .border{ border-width: 1px } .text-justify{ text-align: justify } .uppercase{ text-transform: uppercase } .lowercase{ text-transform: lowercase } .capitalize{ text-transform: capitalize } .italic{ font-style: italic } .text-red{ color: var(--color-red) } .text-shadow{ color: var(--color-shadow) } .underline{ text-decoration-line: underline } .overline{ text-decoration-line: overline } .line-through{ text-decoration-line: line-through } .outline{ outline-style: solid } .ease-in{ transition-timing-function: cubic-bezier(0.4, 0, 1, 1) } .ease-in-out{ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) } .ease-out{ transition-timing-function: cubic-bezier(0, 0, 0.2, 1) } ``` </details> --------- Co-authored-by: Giteabot <teabot@gitea.io>
3 months 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
Fix cross-compilation errors when CGO_CFLAGS/CGO_LDFLAGS is set (#30749) (#30774) Backport #30749 by @sryze When you cross-compile Gitea and you specify one of the envrionment variables related to C flags, cgo will fail to build the generator programs (e.g. generate-bindata) because GOOS and GOARCH are unset, but those additional flags variables are not unset together with those. To solve this issue, the simplest way that I've found is to disable cgo in the `go generate` command as it's not really used there. For example, I've had this problem with cross-compiling Gitea on FreeBSD x86_64 to ARMv7 where it's necessary to pass `--target` to `clang` via `CGO_CFLAGS`: ``` GOOS=freebsd \ GOARCH=arm \ GGOARM=7 \ CGO_ENABLED=1 \ SYSROOT=/usr/local/freebsd-sysroot/armv7 \ CC=clang \ CGO_CFLAGS="--target=armv7-unknown-freebsd13.2-gnueabihf" \ TAGS="bindata sqlite sqlite_unlock_notify" \ make SHELL='sh -x' build ``` ``` Running go generate... # runtime/cgo In file included from gcc_freebsd_amd64.c:9: In file included from /usr/include/signal.h:42: /usr/include/sys/_ucontext.h:44:2: error: unknown type name 'mcontext_t' modules/migration/schemas_bindata.go:8: running "go": exit status 1 # runtime/cgo In file included from gcc_freebsd_amd64.c:9: In file included from /usr/include/signal.h:42: /usr/include/sys/_ucontext.h:44:2: error: unknown type name 'mcontext_t' modules/options/options_bindata.go:8: running "go": exit status 1 # runtime/cgo In file included from gcc_freebsd_amd64.c:9: In file included from /usr/include/signal.h:42: /usr/include/sys/_ucontext.h:44:2: error: unknown type name 'mcontext_t' modules/public/public_bindata.go:8: running "go": exit status 1 # runtime/cgo In file included from gcc_freebsd_amd64.c:9: In file included from /usr/include/signal.h:42: /usr/include/sys/_ucontext.h:44:2: error: unknown type name 'mcontext_t' modules/templates/templates_bindata.go:8: running "go": exit status 1 gmake[1]: *** [Makefile:781: generate-go] Error 1 *** Error code 2 Stop. ``` But with this fix Gitea compiles successfully. Co-authored-by: Sergey Zolotarev <4525736+sryze@users.noreply.github.com>
1 month 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984
  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.22.x
  20. AIR_PACKAGE ?= github.com/cosmtrek/air@v1
  21. EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@2.7.0
  22. GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.6.0
  23. GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@v1.57.2
  24. GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.11
  25. MISSPELL_PACKAGE ?= github.com/golangci/misspell/cmd/misspell@v0.5.1
  26. SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@db51e79a0e37c572d8b59ae0c58bf2bbbbe53285
  27. XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest
  28. GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1
  29. GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1
  30. ACTIONLINT_PACKAGE ?= github.com/rhysd/actionlint/cmd/actionlint@v1
  31. DOCKER_IMAGE ?= gitea/gitea
  32. DOCKER_TAG ?= latest
  33. DOCKER_REF := $(DOCKER_IMAGE):$(DOCKER_TAG)
  34. ifeq ($(HAS_GO), yes)
  35. CGO_EXTRA_CFLAGS := -DSQLITE_MAX_VARIABLE_NUMBER=32766
  36. CGO_CFLAGS ?= $(shell $(GO) env CGO_CFLAGS) $(CGO_EXTRA_CFLAGS)
  37. endif
  38. ifeq ($(GOOS),windows)
  39. IS_WINDOWS := yes
  40. else ifeq ($(patsubst Windows%,Windows,$(OS)),Windows)
  41. ifeq ($(GOOS),)
  42. IS_WINDOWS := yes
  43. endif
  44. endif
  45. ifeq ($(IS_WINDOWS),yes)
  46. GOFLAGS := -v -buildmode=exe
  47. EXECUTABLE ?= gitea.exe
  48. else
  49. GOFLAGS := -v
  50. EXECUTABLE ?= gitea
  51. endif
  52. ifeq ($(shell sed --version 2>/dev/null | grep -q GNU && echo gnu),gnu)
  53. SED_INPLACE := sed -i
  54. else
  55. SED_INPLACE := sed -i ''
  56. endif
  57. EXTRA_GOFLAGS ?=
  58. MAKE_VERSION := $(shell "$(MAKE)" -v | cat | head -n 1)
  59. MAKE_EVIDENCE_DIR := .make_evidence
  60. ifeq ($(RACE_ENABLED),true)
  61. GOFLAGS += -race
  62. GOTESTFLAGS += -race
  63. endif
  64. STORED_VERSION_FILE := VERSION
  65. HUGO_VERSION ?= 0.111.3
  66. GITHUB_REF_TYPE ?= branch
  67. GITHUB_REF_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
  68. ifneq ($(GITHUB_REF_TYPE),branch)
  69. VERSION ?= $(subst v,,$(GITHUB_REF_NAME))
  70. GITEA_VERSION ?= $(VERSION)
  71. else
  72. ifneq ($(GITHUB_REF_NAME),)
  73. VERSION ?= $(subst release/v,,$(GITHUB_REF_NAME))-nightly
  74. else
  75. VERSION ?= main
  76. endif
  77. STORED_VERSION=$(shell cat $(STORED_VERSION_FILE) 2>/dev/null)
  78. ifneq ($(STORED_VERSION),)
  79. GITEA_VERSION ?= $(STORED_VERSION)
  80. else
  81. GITEA_VERSION ?= $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//')
  82. endif
  83. endif
  84. # if version = "main" then update version to "nightly"
  85. ifeq ($(VERSION),main)
  86. VERSION := main-nightly
  87. endif
  88. LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)"
  89. LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64
  90. 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/))
  91. MIGRATE_TEST_PACKAGES ?= $(shell $(GO) list code.gitea.io/gitea/models/migrations/...)
  92. FOMANTIC_WORK_DIR := web_src/fomantic
  93. WEBPACK_SOURCES := $(shell find web_src/js web_src/css -type f)
  94. WEBPACK_CONFIGS := webpack.config.js tailwind.config.js
  95. WEBPACK_DEST := public/assets/js/index.js public/assets/css/index.css
  96. WEBPACK_DEST_ENTRIES := public/assets/js public/assets/css public/assets/fonts
  97. BINDATA_DEST := modules/public/bindata.go modules/options/bindata.go modules/templates/bindata.go
  98. BINDATA_HASH := $(addsuffix .hash,$(BINDATA_DEST))
  99. GENERATED_GO_DEST := modules/charset/invisible_gen.go modules/charset/ambiguous_gen.go
  100. SVG_DEST_DIR := public/assets/img/svg
  101. AIR_TMP_DIR := .air
  102. GO_LICENSE_TMP_DIR := .go-licenses
  103. GO_LICENSE_FILE := assets/go-licenses.json
  104. TAGS ?=
  105. TAGS_SPLIT := $(subst $(COMMA), ,$(TAGS))
  106. TAGS_EVIDENCE := $(MAKE_EVIDENCE_DIR)/tags
  107. TEST_TAGS ?= sqlite sqlite_unlock_notify
  108. 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)
  109. GO_DIRS := build cmd models modules routers services tests
  110. WEB_DIRS := web_src/js web_src/css
  111. ESLINT_FILES := web_src/js tools *.js tests/e2e
  112. STYLELINT_FILES := web_src/css web_src/js/components/*.vue
  113. SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) docs/content templates options/locale/locale_en-US.ini .github $(filter-out CHANGELOG.md, $(wildcard *.go *.js *.md *.yml *.yaml *.toml))
  114. EDITORCONFIG_FILES := templates .github/workflows options/locale/locale_en-US.ini
  115. GO_SOURCES := $(wildcard *.go)
  116. 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)
  117. GO_SOURCES += $(GENERATED_GO_DEST)
  118. GO_SOURCES_NO_BINDATA := $(GO_SOURCES)
  119. ifeq ($(filter $(TAGS_SPLIT),bindata),bindata)
  120. GO_SOURCES += $(BINDATA_DEST)
  121. GENERATED_GO_DEST += $(BINDATA_DEST)
  122. endif
  123. # Force installation of playwright dependencies by setting this flag
  124. ifdef DEPS_PLAYWRIGHT
  125. PLAYWRIGHT_FLAGS += --with-deps
  126. endif
  127. SWAGGER_SPEC := templates/swagger/v1_json.tmpl
  128. SWAGGER_SPEC_S_TMPL := s|"basePath": *"/api/v1"|"basePath": "{{AppSubUrl \| JSEscape}}/api/v1"|g
  129. SWAGGER_SPEC_S_JSON := s|"basePath": *"{{AppSubUrl \| JSEscape}}/api/v1"|"basePath": "/api/v1"|g
  130. SWAGGER_EXCLUDE := code.gitea.io/sdk
  131. SWAGGER_NEWLINE_COMMAND := -e '$$a\'
  132. TEST_MYSQL_HOST ?= mysql:3306
  133. TEST_MYSQL_DBNAME ?= testgitea
  134. TEST_MYSQL_USERNAME ?= root
  135. TEST_MYSQL_PASSWORD ?=
  136. TEST_PGSQL_HOST ?= pgsql:5432
  137. TEST_PGSQL_DBNAME ?= testgitea
  138. TEST_PGSQL_USERNAME ?= postgres
  139. TEST_PGSQL_PASSWORD ?= postgres
  140. TEST_PGSQL_SCHEMA ?= gtestschema
  141. TEST_MSSQL_HOST ?= mssql:1433
  142. TEST_MSSQL_DBNAME ?= gitea
  143. TEST_MSSQL_USERNAME ?= sa
  144. TEST_MSSQL_PASSWORD ?= MwantsaSecurePassword1
  145. .PHONY: all
  146. all: build
  147. .PHONY: help
  148. help:
  149. @echo "Make Routines:"
  150. @echo " - \"\" equivalent to \"build\""
  151. @echo " - build build everything"
  152. @echo " - frontend build frontend files"
  153. @echo " - backend build backend files"
  154. @echo " - watch watch everything and continuously rebuild"
  155. @echo " - watch-frontend watch frontend files and continuously rebuild"
  156. @echo " - watch-backend watch backend files and continuously rebuild"
  157. @echo " - clean delete backend and integration files"
  158. @echo " - clean-all delete backend, frontend and integration files"
  159. @echo " - deps install dependencies"
  160. @echo " - deps-frontend install frontend dependencies"
  161. @echo " - deps-backend install backend dependencies"
  162. @echo " - deps-tools install tool dependencies"
  163. @echo " - deps-py install python dependencies"
  164. @echo " - lint lint everything"
  165. @echo " - lint-fix lint everything and fix issues"
  166. @echo " - lint-actions lint action workflow files"
  167. @echo " - lint-frontend lint frontend files"
  168. @echo " - lint-frontend-fix lint frontend files and fix issues"
  169. @echo " - lint-backend lint backend files"
  170. @echo " - lint-backend-fix lint backend files and fix issues"
  171. @echo " - lint-go lint go files"
  172. @echo " - lint-go-fix lint go files and fix issues"
  173. @echo " - lint-go-vet lint go files with vet"
  174. @echo " - lint-js lint js files"
  175. @echo " - lint-js-fix lint js files and fix issues"
  176. @echo " - lint-css lint css files"
  177. @echo " - lint-css-fix lint css files and fix issues"
  178. @echo " - lint-md lint markdown files"
  179. @echo " - lint-swagger lint swagger files"
  180. @echo " - lint-templates lint template files"
  181. @echo " - lint-yaml lint yaml files"
  182. @echo " - lint-spell lint spelling"
  183. @echo " - lint-spell-fix lint spelling and fix issues"
  184. @echo " - checks run various consistency checks"
  185. @echo " - checks-frontend check frontend files"
  186. @echo " - checks-backend check backend files"
  187. @echo " - test test everything"
  188. @echo " - test-frontend test frontend files"
  189. @echo " - test-backend test backend files"
  190. @echo " - test-e2e[\#TestSpecificName] test end to end using playwright"
  191. @echo " - update update js and py dependencies"
  192. @echo " - update-js update js dependencies"
  193. @echo " - update-py update py dependencies"
  194. @echo " - webpack build webpack files"
  195. @echo " - svg build svg files"
  196. @echo " - fomantic build fomantic files"
  197. @echo " - generate run \"go generate\""
  198. @echo " - fmt format the Go code"
  199. @echo " - generate-license update license files"
  200. @echo " - generate-gitignore update gitignore files"
  201. @echo " - generate-manpage generate manpage"
  202. @echo " - generate-swagger generate the swagger spec from code comments"
  203. @echo " - swagger-validate check if the swagger spec is valid"
  204. @echo " - go-licenses regenerate go licenses"
  205. @echo " - tidy run go mod tidy"
  206. @echo " - test[\#TestSpecificName] run unit test"
  207. @echo " - test-sqlite[\#TestSpecificName] run integration test for sqlite"
  208. .PHONY: go-check
  209. go-check:
  210. $(eval MIN_GO_VERSION_STR := $(shell grep -Eo '^go\s+[0-9]+\.[0-9]+' go.mod | cut -d' ' -f2))
  211. $(eval MIN_GO_VERSION := $(shell printf "%03d%03d" $(shell echo '$(MIN_GO_VERSION_STR)' | tr '.' ' ')))
  212. $(eval GO_VERSION := $(shell printf "%03d%03d" $(shell $(GO) version | grep -Eo '[0-9]+\.[0-9]+' | tr '.' ' ');))
  213. @if [ "$(GO_VERSION)" -lt "$(MIN_GO_VERSION)" ]; then \
  214. echo "Gitea requires Go $(MIN_GO_VERSION_STR) or greater to build. You can get it at https://go.dev/dl/"; \
  215. exit 1; \
  216. fi
  217. .PHONY: git-check
  218. git-check:
  219. @if git lfs >/dev/null 2>&1 ; then : ; else \
  220. echo "Gitea requires git with lfs support to run tests." ; \
  221. exit 1; \
  222. fi
  223. .PHONY: node-check
  224. node-check:
  225. $(eval MIN_NODE_VERSION_STR := $(shell grep -Eo '"node":.*[0-9.]+"' package.json | sed -n 's/.*[^0-9.]\([0-9.]*\)"/\1/p'))
  226. $(eval MIN_NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell echo '$(MIN_NODE_VERSION_STR)' | tr '.' ' ')))
  227. $(eval NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell node -v | cut -c2- | tr '.' ' ');))
  228. $(eval NPM_MISSING := $(shell hash npm > /dev/null 2>&1 || echo 1))
  229. @if [ "$(NODE_VERSION)" -lt "$(MIN_NODE_VERSION)" -o "$(NPM_MISSING)" = "1" ]; then \
  230. 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/"; \
  231. exit 1; \
  232. fi
  233. .PHONY: clean-all
  234. clean-all: clean
  235. rm -rf $(WEBPACK_DEST_ENTRIES) node_modules
  236. .PHONY: clean
  237. clean:
  238. rm -rf $(EXECUTABLE) $(DIST) $(BINDATA_DEST) $(BINDATA_HASH) \
  239. integrations*.test \
  240. e2e*.test \
  241. tests/integration/gitea-integration-* \
  242. tests/integration/indexers-* \
  243. tests/mysql.ini tests/pgsql.ini tests/mssql.ini man/ \
  244. tests/e2e/gitea-e2e-*/ \
  245. tests/e2e/indexers-*/ \
  246. tests/e2e/reports/ tests/e2e/test-artifacts/ tests/e2e/test-snapshots/
  247. .PHONY: fmt
  248. fmt:
  249. @GOFUMPT_PACKAGE=$(GOFUMPT_PACKAGE) $(GO) run build/code-batch-process.go gitea-fmt -w '{file-list}'
  250. $(eval TEMPLATES := $(shell find templates -type f -name '*.tmpl'))
  251. @# strip whitespace after '{{' or '(' and before '}}' or ')' unless there is only
  252. @# whitespace before it
  253. @$(SED_INPLACE) \
  254. -e 's/{{[ ]\{1,\}/{{/g' -e '/^[ ]\{1,\}}}/! s/[ ]\{1,\}}}/}}/g' \
  255. -e 's/([ ]\{1,\}/(/g' -e '/^[ ]\{1,\})/! s/[ ]\{1,\})/)/g' \
  256. $(TEMPLATES)
  257. .PHONY: fmt-check
  258. fmt-check: fmt
  259. @diff=$$(git diff --color=always $(GO_SOURCES) templates $(WEB_DIRS)); \
  260. if [ -n "$$diff" ]; then \
  261. echo "Please run 'make fmt' and commit the result:"; \
  262. echo "$${diff}"; \
  263. exit 1; \
  264. fi
  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 swagger-validate security-check
  297. .PHONY: lint
  298. lint: lint-frontend lint-backend lint-spell
  299. .PHONY: lint-fix
  300. lint-fix: lint-frontend-fix lint-backend-fix lint-spell-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 $(ESLINT_FILES)
  312. .PHONY: lint-js-fix
  313. lint-js-fix: node_modules
  314. npx eslint --color --max-warnings=0 --ext js,vue $(ESLINT_FILES) --fix
  315. .PHONY: lint-css
  316. lint-css: node_modules
  317. npx stylelint --color --max-warnings=0 $(STYLELINT_FILES)
  318. .PHONY: lint-css-fix
  319. lint-css-fix: node_modules
  320. npx stylelint --color --max-warnings=0 $(STYLELINT_FILES) --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-spell
  328. lint-spell:
  329. @go run $(MISSPELL_PACKAGE) -dict tools/misspellings.csv -error $(SPELLCHECK_FILES)
  330. .PHONY: lint-spell-fix
  331. lint-spell-fix:
  332. @go run $(MISSPELL_PACKAGE) -dict tools/misspellings.csv -w $(SPELLCHECK_FILES)
  333. .PHONY: lint-go
  334. lint-go:
  335. $(GO) run $(GOLANGCI_LINT_PACKAGE) run
  336. .PHONY: lint-go-fix
  337. lint-go-fix:
  338. $(GO) run $(GOLANGCI_LINT_PACKAGE) run --fix
  339. # workaround step for the lint-go-windows CI task because 'go run' can not
  340. # have distinct GOOS/GOARCH for its build and run steps
  341. .PHONY: lint-go-windows
  342. lint-go-windows:
  343. @GOOS= GOARCH= $(GO) install $(GOLANGCI_LINT_PACKAGE)
  344. golangci-lint run
  345. .PHONY: lint-go-vet
  346. lint-go-vet:
  347. @echo "Running go vet..."
  348. @GOOS= GOARCH= $(GO) build code.gitea.io/gitea-vet
  349. @$(GO) vet -vettool=gitea-vet ./...
  350. .PHONY: lint-editorconfig
  351. lint-editorconfig:
  352. @$(GO) run $(EDITORCONFIG_CHECKER_PACKAGE) $(EDITORCONFIG_FILES)
  353. .PHONY: lint-actions
  354. lint-actions:
  355. $(GO) run $(ACTIONLINT_PACKAGE)
  356. .PHONY: lint-templates
  357. lint-templates: .venv node_modules
  358. @node tools/lint-templates-svg.js
  359. @poetry run djlint $(shell find templates -type f -iname '*.tmpl')
  360. .PHONY: lint-yaml
  361. lint-yaml: .venv
  362. @poetry run yamllint .
  363. .PHONY: watch
  364. watch:
  365. @bash tools/watch.sh
  366. .PHONY: watch-frontend
  367. watch-frontend: node-check node_modules
  368. @rm -rf $(WEBPACK_DEST_ENTRIES)
  369. NODE_ENV=development npx webpack --watch --progress
  370. .PHONY: watch-backend
  371. watch-backend: go-check
  372. GITEA_RUN_MODE=dev $(GO) run $(AIR_PACKAGE) -c .air.toml
  373. .PHONY: test
  374. test: test-frontend test-backend
  375. .PHONY: test-backend
  376. test-backend:
  377. @echo "Running go test with $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
  378. @$(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' $(GO_TEST_PACKAGES)
  379. .PHONY: test-frontend
  380. test-frontend: node_modules
  381. npx vitest
  382. .PHONY: test-check
  383. test-check:
  384. @echo "Running test-check...";
  385. @diff=$$(git status -s); \
  386. if [ -n "$$diff" ]; then \
  387. echo "make test-backend has changed files in the source tree:"; \
  388. echo "$${diff}"; \
  389. echo "You should change the tests to create these files in a temporary directory."; \
  390. echo "Do not simply add these files to .gitignore"; \
  391. exit 1; \
  392. fi
  393. .PHONY: test\#%
  394. test\#%:
  395. @echo "Running go test with -tags '$(TEST_TAGS)'..."
  396. @$(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' -run $(subst .,/,$*) $(GO_TEST_PACKAGES)
  397. .PHONY: coverage
  398. coverage:
  399. grep '^\(mode: .*\)\|\(.*:[0-9]\+\.[0-9]\+,[0-9]\+\.[0-9]\+ [0-9]\+ [0-9]\+\)$$' coverage.out > coverage-bodged.out
  400. grep '^\(mode: .*\)\|\(.*:[0-9]\+\.[0-9]\+,[0-9]\+\.[0-9]\+ [0-9]\+ [0-9]\+\)$$' integration.coverage.out > integration.coverage-bodged.out
  401. $(GO) run build/gocovmerge.go integration.coverage-bodged.out coverage-bodged.out > coverage.all
  402. .PHONY: unit-test-coverage
  403. unit-test-coverage:
  404. @echo "Running unit-test-coverage $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
  405. @$(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
  406. .PHONY: tidy
  407. tidy:
  408. $(eval MIN_GO_VERSION := $(shell grep -Eo '^go\s+[0-9]+\.[0-9.]+' go.mod | cut -d' ' -f2))
  409. $(GO) mod tidy -compat=$(MIN_GO_VERSION)
  410. @$(MAKE) --no-print-directory $(GO_LICENSE_FILE)
  411. vendor: go.mod go.sum
  412. $(GO) mod vendor
  413. @touch vendor
  414. .PHONY: tidy-check
  415. tidy-check: tidy
  416. @diff=$$(git diff --color=always go.mod go.sum $(GO_LICENSE_FILE)); \
  417. if [ -n "$$diff" ]; then \
  418. echo "Please run 'make tidy' and commit the result:"; \
  419. echo "$${diff}"; \
  420. exit 1; \
  421. fi
  422. .PHONY: go-licenses
  423. go-licenses: $(GO_LICENSE_FILE)
  424. $(GO_LICENSE_FILE): go.mod go.sum
  425. -$(GO) run $(GO_LICENSES_PACKAGE) save . --force --save_path=$(GO_LICENSE_TMP_DIR) 2>/dev/null
  426. $(GO) run build/generate-go-licenses.go $(GO_LICENSE_TMP_DIR) $(GO_LICENSE_FILE)
  427. @rm -rf $(GO_LICENSE_TMP_DIR)
  428. generate-ini-sqlite:
  429. sed -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  430. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  431. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  432. tests/sqlite.ini.tmpl > tests/sqlite.ini
  433. .PHONY: test-sqlite
  434. test-sqlite: integrations.sqlite.test generate-ini-sqlite
  435. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test
  436. .PHONY: test-sqlite\#%
  437. test-sqlite\#%: integrations.sqlite.test generate-ini-sqlite
  438. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test -test.run $(subst .,/,$*)
  439. .PHONY: test-sqlite-migration
  440. test-sqlite-migration: migrations.sqlite.test migrations.individual.sqlite.test
  441. generate-ini-mysql:
  442. sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \
  443. -e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \
  444. -e 's|{{TEST_MYSQL_USERNAME}}|${TEST_MYSQL_USERNAME}|g' \
  445. -e 's|{{TEST_MYSQL_PASSWORD}}|${TEST_MYSQL_PASSWORD}|g' \
  446. -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  447. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  448. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  449. tests/mysql.ini.tmpl > tests/mysql.ini
  450. .PHONY: test-mysql
  451. test-mysql: integrations.mysql.test generate-ini-mysql
  452. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test
  453. .PHONY: test-mysql\#%
  454. test-mysql\#%: integrations.mysql.test generate-ini-mysql
  455. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test -test.run $(subst .,/,$*)
  456. .PHONY: test-mysql-migration
  457. test-mysql-migration: migrations.mysql.test migrations.individual.mysql.test
  458. generate-ini-pgsql:
  459. sed -e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \
  460. -e 's|{{TEST_PGSQL_DBNAME}}|${TEST_PGSQL_DBNAME}|g' \
  461. -e 's|{{TEST_PGSQL_USERNAME}}|${TEST_PGSQL_USERNAME}|g' \
  462. -e 's|{{TEST_PGSQL_PASSWORD}}|${TEST_PGSQL_PASSWORD}|g' \
  463. -e 's|{{TEST_PGSQL_SCHEMA}}|${TEST_PGSQL_SCHEMA}|g' \
  464. -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  465. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  466. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  467. tests/pgsql.ini.tmpl > tests/pgsql.ini
  468. .PHONY: test-pgsql
  469. test-pgsql: integrations.pgsql.test generate-ini-pgsql
  470. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test
  471. .PHONY: test-pgsql\#%
  472. test-pgsql\#%: integrations.pgsql.test generate-ini-pgsql
  473. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test -test.run $(subst .,/,$*)
  474. .PHONY: test-pgsql-migration
  475. test-pgsql-migration: migrations.pgsql.test migrations.individual.pgsql.test
  476. generate-ini-mssql:
  477. sed -e 's|{{TEST_MSSQL_HOST}}|${TEST_MSSQL_HOST}|g' \
  478. -e 's|{{TEST_MSSQL_DBNAME}}|${TEST_MSSQL_DBNAME}|g' \
  479. -e 's|{{TEST_MSSQL_USERNAME}}|${TEST_MSSQL_USERNAME}|g' \
  480. -e 's|{{TEST_MSSQL_PASSWORD}}|${TEST_MSSQL_PASSWORD}|g' \
  481. -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
  482. -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
  483. -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
  484. tests/mssql.ini.tmpl > tests/mssql.ini
  485. .PHONY: test-mssql
  486. test-mssql: integrations.mssql.test generate-ini-mssql
  487. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test
  488. .PHONY: test-mssql\#%
  489. test-mssql\#%: integrations.mssql.test generate-ini-mssql
  490. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test -test.run $(subst .,/,$*)
  491. .PHONY: test-mssql-migration
  492. test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test
  493. .PHONY: playwright
  494. playwright: deps-frontend
  495. npx playwright install $(PLAYWRIGHT_FLAGS)
  496. .PHONY: test-e2e%
  497. test-e2e%: TEST_TYPE ?= e2e
  498. # Clear display env variable. Otherwise, chromium tests can fail.
  499. DISPLAY=
  500. .PHONY: test-e2e
  501. test-e2e: test-e2e-sqlite
  502. .PHONY: test-e2e-sqlite
  503. test-e2e-sqlite: playwright e2e.sqlite.test generate-ini-sqlite
  504. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test
  505. .PHONY: test-e2e-sqlite\#%
  506. test-e2e-sqlite\#%: playwright e2e.sqlite.test generate-ini-sqlite
  507. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run TestE2e/$*
  508. .PHONY: test-e2e-mysql
  509. test-e2e-mysql: playwright e2e.mysql.test generate-ini-mysql
  510. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test
  511. .PHONY: test-e2e-mysql\#%
  512. test-e2e-mysql\#%: playwright e2e.mysql.test generate-ini-mysql
  513. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run TestE2e/$*
  514. .PHONY: test-e2e-pgsql
  515. test-e2e-pgsql: playwright e2e.pgsql.test generate-ini-pgsql
  516. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test
  517. .PHONY: test-e2e-pgsql\#%
  518. test-e2e-pgsql\#%: playwright e2e.pgsql.test generate-ini-pgsql
  519. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run TestE2e/$*
  520. .PHONY: test-e2e-mssql
  521. test-e2e-mssql: playwright e2e.mssql.test generate-ini-mssql
  522. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test
  523. .PHONY: test-e2e-mssql\#%
  524. test-e2e-mssql\#%: playwright e2e.mssql.test generate-ini-mssql
  525. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run TestE2e/$*
  526. .PHONY: bench-sqlite
  527. bench-sqlite: integrations.sqlite.test generate-ini-sqlite
  528. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  529. .PHONY: bench-mysql
  530. bench-mysql: integrations.mysql.test generate-ini-mysql
  531. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  532. .PHONY: bench-mssql
  533. bench-mssql: integrations.mssql.test generate-ini-mssql
  534. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  535. .PHONY: bench-pgsql
  536. bench-pgsql: integrations.pgsql.test generate-ini-pgsql
  537. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench .
  538. .PHONY: integration-test-coverage
  539. integration-test-coverage: integrations.cover.test generate-ini-mysql
  540. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.cover.test -test.coverprofile=integration.coverage.out
  541. .PHONY: integration-test-coverage-sqlite
  542. integration-test-coverage-sqlite: integrations.cover.sqlite.test generate-ini-sqlite
  543. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.cover.sqlite.test -test.coverprofile=integration.coverage.out
  544. integrations.mysql.test: git-check $(GO_SOURCES)
  545. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.mysql.test
  546. integrations.pgsql.test: git-check $(GO_SOURCES)
  547. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.pgsql.test
  548. integrations.mssql.test: git-check $(GO_SOURCES)
  549. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.mssql.test
  550. integrations.sqlite.test: git-check $(GO_SOURCES)
  551. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.sqlite.test -tags '$(TEST_TAGS)'
  552. integrations.cover.test: git-check $(GO_SOURCES)
  553. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -coverpkg $(shell echo $(GO_TEST_PACKAGES) | tr ' ' ',') -o integrations.cover.test
  554. integrations.cover.sqlite.test: git-check $(GO_SOURCES)
  555. $(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)'
  556. .PHONY: migrations.mysql.test
  557. migrations.mysql.test: $(GO_SOURCES) generate-ini-mysql
  558. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.mysql.test
  559. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./migrations.mysql.test
  560. .PHONY: migrations.pgsql.test
  561. migrations.pgsql.test: $(GO_SOURCES) generate-ini-pgsql
  562. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.pgsql.test
  563. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./migrations.pgsql.test
  564. .PHONY: migrations.mssql.test
  565. migrations.mssql.test: $(GO_SOURCES) generate-ini-mssql
  566. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.mssql.test
  567. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.mssql.test
  568. .PHONY: migrations.sqlite.test
  569. migrations.sqlite.test: $(GO_SOURCES) generate-ini-sqlite
  570. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.sqlite.test -tags '$(TEST_TAGS)'
  571. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./migrations.sqlite.test
  572. .PHONY: migrations.individual.mysql.test
  573. migrations.individual.mysql.test: $(GO_SOURCES)
  574. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini $(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' -p 1 $(MIGRATE_TEST_PACKAGES)
  575. .PHONY: migrations.individual.sqlite.test\#%
  576. migrations.individual.sqlite.test\#%: $(GO_SOURCES) generate-ini-sqlite
  577. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' code.gitea.io/gitea/models/migrations/$*
  578. .PHONY: migrations.individual.pgsql.test
  579. migrations.individual.pgsql.test: $(GO_SOURCES)
  580. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini $(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' -p 1 $(MIGRATE_TEST_PACKAGES)
  581. .PHONY: migrations.individual.pgsql.test\#%
  582. migrations.individual.pgsql.test\#%: $(GO_SOURCES) generate-ini-pgsql
  583. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' code.gitea.io/gitea/models/migrations/$*
  584. .PHONY: migrations.individual.mssql.test
  585. migrations.individual.mssql.test: $(GO_SOURCES) generate-ini-mssql
  586. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini $(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' -p 1 $(MIGRATE_TEST_PACKAGES)
  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. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini $(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' -p 1 $(MIGRATE_TEST_PACKAGES)
  593. .PHONY: migrations.individual.sqlite.test\#%
  594. migrations.individual.sqlite.test\#%: $(GO_SOURCES) generate-ini-sqlite
  595. GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini $(GO) test $(GOTESTFLAGS) -tags '$(TEST_TAGS)' code.gitea.io/gitea/models/migrations/$*
  596. e2e.mysql.test: $(GO_SOURCES)
  597. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mysql.test
  598. e2e.pgsql.test: $(GO_SOURCES)
  599. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.pgsql.test
  600. e2e.mssql.test: $(GO_SOURCES)
  601. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mssql.test
  602. e2e.sqlite.test: $(GO_SOURCES)
  603. $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.sqlite.test -tags '$(TEST_TAGS)'
  604. .PHONY: check
  605. check: test
  606. .PHONY: install $(TAGS_PREREQ)
  607. install: $(wildcard *.go)
  608. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)'
  609. .PHONY: build
  610. build: frontend backend
  611. .PHONY: frontend
  612. frontend: $(WEBPACK_DEST)
  613. .PHONY: backend
  614. backend: go-check generate-backend $(EXECUTABLE)
  615. # 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
  616. .PHONY: generate
  617. generate: generate-backend
  618. .PHONY: generate-backend
  619. generate-backend: $(TAGS_PREREQ) generate-go
  620. .PHONY: generate-go
  621. generate-go: $(TAGS_PREREQ)
  622. @echo "Running go generate..."
  623. @CC= GOOS= GOARCH= CGO_ENABLED=0 $(GO) generate -tags '$(TAGS)' ./...
  624. .PHONY: security-check
  625. security-check:
  626. go run $(GOVULNCHECK_PACKAGE) ./...
  627. $(EXECUTABLE): $(GO_SOURCES) $(TAGS_PREREQ)
  628. CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
  629. .PHONY: release
  630. release: frontend generate release-windows release-linux release-darwin release-freebsd release-copy release-compress vendor release-sources release-docs release-check
  631. $(DIST_DIRS):
  632. mkdir -p $(DIST_DIRS)
  633. .PHONY: release-windows
  634. release-windows: | $(DIST_DIRS)
  635. 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) .
  636. ifeq (,$(findstring gogit,$(TAGS)))
  637. 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 .
  638. endif
  639. .PHONY: release-linux
  640. release-linux: | $(DIST_DIRS)
  641. 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) .
  642. .PHONY: release-darwin
  643. release-darwin: | $(DIST_DIRS)
  644. 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) .
  645. .PHONY: release-freebsd
  646. release-freebsd: | $(DIST_DIRS)
  647. 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) .
  648. .PHONY: release-copy
  649. release-copy: | $(DIST_DIRS)
  650. cd $(DIST); for file in `find . -type f -name "*"`; do cp $${file} ./release/; done;
  651. .PHONY: release-check
  652. release-check: | $(DIST_DIRS)
  653. cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "checksumming $${file}" && $(SHASUM) `echo $${file} | sed 's/^..//'` > $${file}.sha256; done;
  654. .PHONY: release-compress
  655. release-compress: | $(DIST_DIRS)
  656. cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && $(GO) run $(GXZ_PACKAGE) -k -9 $${file}; done;
  657. .PHONY: release-sources
  658. release-sources: | $(DIST_DIRS)
  659. echo $(VERSION) > $(STORED_VERSION_FILE)
  660. # bsdtar needs a ^ to prevent matching subdirectories
  661. $(eval EXCL := --exclude=$(shell tar --help | grep -q bsdtar && echo "^")./)
  662. # use transform to a add a release-folder prefix; in bsdtar the transform parameter equivalent is -s
  663. $(eval TRANSFORM := $(shell tar --help | grep -q bsdtar && echo "-s '/^./gitea-src-$(VERSION)/'" || echo "--transform 's|^./|gitea-src-$(VERSION)/|'"))
  664. tar $(addprefix $(EXCL),$(TAR_EXCLUDES)) $(TRANSFORM) -czf $(DIST)/release/gitea-src-$(VERSION).tar.gz .
  665. rm -f $(STORED_VERSION_FILE)
  666. .PHONY: release-docs
  667. release-docs: | $(DIST_DIRS) docs
  668. tar -czf $(DIST)/release/gitea-docs-$(VERSION).tar.gz -C ./docs .
  669. .PHONY: deps
  670. deps: deps-frontend deps-backend deps-tools deps-py
  671. .PHONY: deps-py
  672. deps-py: .venv
  673. .PHONY: deps-frontend
  674. deps-frontend: node_modules
  675. .PHONY: deps-backend
  676. deps-backend:
  677. $(GO) mod download
  678. .PHONY: deps-tools
  679. deps-tools:
  680. $(GO) install $(AIR_PACKAGE)
  681. $(GO) install $(EDITORCONFIG_CHECKER_PACKAGE)
  682. $(GO) install $(GOFUMPT_PACKAGE)
  683. $(GO) install $(GOLANGCI_LINT_PACKAGE)
  684. $(GO) install $(GXZ_PACKAGE)
  685. $(GO) install $(MISSPELL_PACKAGE)
  686. $(GO) install $(SWAGGER_PACKAGE)
  687. $(GO) install $(XGO_PACKAGE)
  688. $(GO) install $(GO_LICENSES_PACKAGE)
  689. $(GO) install $(GOVULNCHECK_PACKAGE)
  690. $(GO) install $(ACTIONLINT_PACKAGE)
  691. node_modules: package-lock.json
  692. npm install --no-save
  693. @touch node_modules
  694. .venv: poetry.lock
  695. poetry install --no-root
  696. @touch .venv
  697. .PHONY: update
  698. update: update-js update-py
  699. .PHONY: update-js
  700. update-js: node-check | node_modules
  701. npx updates -u -f package.json
  702. rm -rf node_modules package-lock.json
  703. npm install --package-lock
  704. @touch node_modules
  705. .PHONY: update-py
  706. update-py: node-check | node_modules
  707. npx updates -u -f pyproject.toml
  708. rm -rf .venv poetry.lock
  709. poetry install --no-root
  710. @touch .venv
  711. .PHONY: fomantic
  712. fomantic:
  713. rm -rf $(FOMANTIC_WORK_DIR)/build
  714. cd $(FOMANTIC_WORK_DIR) && npm install --no-save
  715. cp -f $(FOMANTIC_WORK_DIR)/theme.config.less $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui/src/theme.config
  716. cp -rf $(FOMANTIC_WORK_DIR)/_site $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui/src/
  717. $(SED_INPLACE) -e 's/ overrideBrowserslist\r/ overrideBrowserslist: ["defaults"]\r/g' $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui/tasks/config/tasks.js
  718. cd $(FOMANTIC_WORK_DIR) && npx gulp -f node_modules/fomantic-ui/gulpfile.js build
  719. # fomantic uses "touchstart" as click event for some browsers, it's not ideal, so we force fomantic to always use "click" as click event
  720. $(SED_INPLACE) -e 's/clickEvent[ \t]*=/clickEvent = "click", unstableClickEvent =/g' $(FOMANTIC_WORK_DIR)/build/semantic.js
  721. $(SED_INPLACE) -e 's/\r//g' $(FOMANTIC_WORK_DIR)/build/semantic.css $(FOMANTIC_WORK_DIR)/build/semantic.js
  722. rm -f $(FOMANTIC_WORK_DIR)/build/*.min.*
  723. .PHONY: webpack
  724. webpack: $(WEBPACK_DEST)
  725. $(WEBPACK_DEST): $(WEBPACK_SOURCES) $(WEBPACK_CONFIGS) package-lock.json
  726. @$(MAKE) -s node-check node_modules
  727. @rm -rf $(WEBPACK_DEST_ENTRIES)
  728. @echo "Running webpack..."
  729. @BROWSERSLIST_IGNORE_OLD_DATA=true npx webpack
  730. @touch $(WEBPACK_DEST)
  731. .PHONY: svg
  732. svg: node-check | node_modules
  733. rm -rf $(SVG_DEST_DIR)
  734. node tools/generate-svg.js
  735. .PHONY: svg-check
  736. svg-check: svg
  737. @git add $(SVG_DEST_DIR)
  738. @diff=$$(git diff --color=always --cached $(SVG_DEST_DIR)); \
  739. if [ -n "$$diff" ]; then \
  740. echo "Please run 'make svg' and 'git add $(SVG_DEST_DIR)' and commit the result:"; \
  741. echo "$${diff}"; \
  742. exit 1; \
  743. fi
  744. .PHONY: lockfile-check
  745. lockfile-check:
  746. npm install --package-lock-only
  747. @diff=$$(git diff --color=always package-lock.json); \
  748. if [ -n "$$diff" ]; then \
  749. echo "package-lock.json is inconsistent with package.json"; \
  750. echo "Please run 'npm install --package-lock-only' and commit the result:"; \
  751. echo "$${diff}"; \
  752. exit 1; \
  753. fi
  754. .PHONY: update-translations
  755. update-translations:
  756. mkdir -p ./translations
  757. cd ./translations && curl -L https://crowdin.com/download/project/gitea.zip > gitea.zip && unzip gitea.zip
  758. rm ./translations/gitea.zip
  759. $(SED_INPLACE) -e 's/="/=/g' -e 's/"$$//g' ./translations/*.ini
  760. $(SED_INPLACE) -e 's/\\"/"/g' ./translations/*.ini
  761. mv ./translations/*.ini ./options/locale/
  762. rmdir ./translations
  763. .PHONY: generate-license
  764. generate-license:
  765. $(GO) run build/generate-licenses.go
  766. .PHONY: generate-gitignore
  767. generate-gitignore:
  768. $(GO) run build/generate-gitignores.go
  769. .PHONY: generate-images
  770. generate-images: | node_modules
  771. npm install --no-save fabric@6.0.0-beta20 imagemin-zopfli@7
  772. node tools/generate-images.js $(TAGS)
  773. .PHONY: generate-manpage
  774. generate-manpage:
  775. @[ -f gitea ] || make backend
  776. @mkdir -p man/man1/ man/man5
  777. @./gitea docs --man > man/man1/gitea.1
  778. @gzip -9 man/man1/gitea.1 && echo man/man1/gitea.1.gz created
  779. @#TODO A small script that formats config-cheat-sheet.en-us.md nicely for use as a config man page
  780. .PHONY: docker
  781. docker:
  782. docker build --disable-content-trust=false -t $(DOCKER_REF) .
  783. # support also build args docker build --build-arg GITEA_VERSION=v1.2.3 --build-arg TAGS="bindata sqlite sqlite_unlock_notify" .
  784. # This endif closes the if at the top of the file
  785. endif
  786. # Disable parallel execution because it would break some targets that don't
  787. # specify exact dependencies like 'backend' which does currently not depend
  788. # on 'frontend' to enable Node.js-less builds from source tarballs.
  789. .NOTPARALLEL: