Backport clean cherry-picks oftags/v1.21.69c39f8515f
andc7a21cbb0c
onto 1.21. - Use maintained fork https://github.com/golangci/misspell - Rename `mispell-check` to `lint-spell`, add `lint-spell-fix` - Run `lint-spell` in separate actions step - Lint more files, fix discovered issues - Remove inaccurate and outdated info in docs (we do not need GOPATH for tools anymore) Maybe later we can add more spellchecking tools, but I have not found any good ones yet.
- run: make deps-frontend | - run: make deps-frontend | ||||
- run: make lint-swagger | - run: make lint-swagger | ||||
lint-spell: | |||||
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' || needs.files-changed.outputs.actions == 'true' || needs.files-changed.outputs.docs == 'true' || needs.files-changed.outputs.templates == 'true' | |||||
needs: files-changed | |||||
runs-on: ubuntu-latest | |||||
steps: | |||||
- uses: actions/checkout@v4 | |||||
- uses: actions/setup-go@v5 | |||||
with: | |||||
go-version-file: go.mod | |||||
check-latest: true | |||||
- run: make lint-spell | |||||
lint-go-windows: | lint-go-windows: | ||||
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.actions == 'true' | if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.actions == 'true' | ||||
needs: files-changed | needs: files-changed |
GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.5.0 | GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.5.0 | ||||
GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.1 | GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.1 | ||||
GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.11 | GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.11 | ||||
MISSPELL_PACKAGE ?= github.com/client9/misspell/cmd/misspell@v0.3.4 | |||||
MISSPELL_PACKAGE ?= github.com/golangci/misspell/cmd/misspell@v0.4.1 | |||||
SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.30.5 | SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.30.5 | ||||
XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest | XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest | ||||
GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1.6.0 | GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1.6.0 | ||||
GO_DIRS := build cmd models modules routers services tests | GO_DIRS := build cmd models modules routers services tests | ||||
WEB_DIRS := web_src/js web_src/css | WEB_DIRS := web_src/js web_src/css | ||||
SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) docs/content templates options/locale/locale_en-US.ini .github | |||||
GO_SOURCES := $(wildcard *.go) | GO_SOURCES := $(wildcard *.go) | ||||
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) | 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) | ||||
GO_SOURCES += $(GENERATED_GO_DEST) | GO_SOURCES += $(GENERATED_GO_DEST) | ||||
@echo " - lint-swagger lint swagger files" | @echo " - lint-swagger lint swagger files" | ||||
@echo " - lint-templates lint template files" | @echo " - lint-templates lint template files" | ||||
@echo " - lint-yaml lint yaml files" | @echo " - lint-yaml lint yaml files" | ||||
@echo " - lint-spell lint spelling" | |||||
@echo " - lint-spell-fix lint spelling and fix issues" | |||||
@echo " - checks run various consistency checks" | @echo " - checks run various consistency checks" | ||||
@echo " - checks-frontend check frontend files" | @echo " - checks-frontend check frontend files" | ||||
@echo " - checks-backend check backend files" | @echo " - checks-backend check backend files" | ||||
exit 1; \ | exit 1; \ | ||||
fi | fi | ||||
.PHONY: misspell-check | |||||
misspell-check: | |||||
go run $(MISSPELL_PACKAGE) -error $(GO_DIRS) $(WEB_DIRS) | |||||
.PHONY: $(TAGS_EVIDENCE) | .PHONY: $(TAGS_EVIDENCE) | ||||
$(TAGS_EVIDENCE): | $(TAGS_EVIDENCE): | ||||
@mkdir -p $(MAKE_EVIDENCE_DIR) | @mkdir -p $(MAKE_EVIDENCE_DIR) | ||||
checks-frontend: lockfile-check svg-check | checks-frontend: lockfile-check svg-check | ||||
.PHONY: checks-backend | .PHONY: checks-backend | ||||
checks-backend: tidy-check swagger-check fmt-check misspell-check swagger-validate security-check | |||||
checks-backend: tidy-check swagger-check fmt-check swagger-validate security-check | |||||
.PHONY: lint | .PHONY: lint | ||||
lint: lint-frontend lint-backend | |||||
lint: lint-frontend lint-backend lint-spell | |||||
.PHONY: lint-fix | .PHONY: lint-fix | ||||
lint-fix: lint-frontend-fix lint-backend-fix | |||||
lint-fix: lint-frontend-fix lint-backend-fix lint-spell-fix | |||||
.PHONY: lint-frontend | .PHONY: lint-frontend | ||||
lint-frontend: lint-js lint-css | lint-frontend: lint-js lint-css | ||||
lint-md: node_modules | lint-md: node_modules | ||||
npx markdownlint docs *.md | npx markdownlint docs *.md | ||||
.PHONY: lint-spell | |||||
lint-spell: | |||||
@go run $(MISSPELL_PACKAGE) -error $(SPELLCHECK_FILES) | |||||
.PHONY: lint-spell-fix | |||||
lint-spell-fix: | |||||
@go run $(MISSPELL_PACKAGE) -w $(SPELLCHECK_FILES) | |||||
.PHONY: lint-go | .PHONY: lint-go | ||||
lint-go: | lint-go: | ||||
$(GO) run $(GOLANGCI_LINT_PACKAGE) run | $(GO) run $(GOLANGCI_LINT_PACKAGE) run |
[ini](https://github.com/go-ini/ini/#recursive-values) 这里的说明。 | [ini](https://github.com/go-ini/ini/#recursive-values) 这里的说明。 | ||||
标注了 :exclamation: 的配置项表明除非你真的理解这个配置项的意义,否则最好使用默认值。 | 标注了 :exclamation: 的配置项表明除非你真的理解这个配置项的意义,否则最好使用默认值。 | ||||
在下面的默认值中,`$XYZ`代表环境变量`XYZ`的值(详见:`enviroment-to-ini`)。 _`XxYyZz`_是指默认配置的一部分列出的值。这些在 app.ini 文件中不起作用,仅在此处列出作为文档说明。 | |||||
在下面的默认值中,`$XYZ`代表环境变量`XYZ`的值(详见:`environment-to-ini`)。 _`XxYyZz`_是指默认配置的一部分列出的值。这些在 app.ini 文件中不起作用,仅在此处列出作为文档说明。 | |||||
包含`#`或者`;`的变量必须使用引号(`` ` ``或者`""""`)包裹,否则会被解析为注释。 | 包含`#`或者`;`的变量必须使用引号(`` ` ``或者`""""`)包裹,否则会被解析为注释。 | ||||
make generate-swagger | make generate-swagger | ||||
``` | ``` | ||||
You should validate your generated Swagger file and spell-check it with: | |||||
You should validate your generated Swagger file: | |||||
```bash | ```bash | ||||
make swagger-validate misspell-check | |||||
make swagger-validate | |||||
``` | ``` | ||||
You should commit the changed swagger JSON file. The continuous integration | You should commit the changed swagger JSON file. The continuous integration |
make generate-swagger | make generate-swagger | ||||
``` | ``` | ||||
您应该验证生成的 Swagger 文件并使用以下命令对其进行拼写检查: | |||||
您应该验证生成的 Swagger 文件: | |||||
```bash | ```bash | ||||
make swagger-validate misspell-check | |||||
make swagger-validate | |||||
``` | ``` | ||||
您应该提交更改后的 swagger JSON 文件。持续集成服务器将使用以下方法检查是否已完成: | 您应该提交更改后的 swagger JSON 文件。持续集成服务器将使用以下方法检查是否已完成: |
required to build the JavaScript and CSS files. The minimum supported Node.js | required to build the JavaScript and CSS files. The minimum supported Node.js | ||||
version is @minNodeVersion@ and the latest LTS version is recommended. | version is @minNodeVersion@ and the latest LTS version is recommended. | ||||
**Note**: When executing make tasks that require external tools, like | |||||
`make misspell-check`, Gitea will automatically download and build these as | |||||
necessary. To be able to use these, you must have the `"$GOPATH/bin"` directory | |||||
on the executable path. If you don't add the go bin directory to the | |||||
executable path, you will have to manage this yourself. | |||||
**Note 2**: Go version @minGoVersion@ or higher is required. However, it is recommended to | |||||
**Note**: Go version @minGoVersion@ or higher is required. However, it is recommended to | |||||
obtain the same version as our continuous integration, see the advice given in | obtain the same version as our continuous integration, see the advice given in | ||||
[Hacking on Gitea](development/hacking-on-gitea.md) | [Hacking on Gitea](development/hacking-on-gitea.md) | ||||
接下来,[安装 Node.js 和 npm](https://nodejs.org/zh-cn/download/), 这是构建 JavaScript 和 CSS 文件所需的。最低支持的 Node.js 版本是 @minNodeVersion@,建议使用最新的 LTS 版本。 | 接下来,[安装 Node.js 和 npm](https://nodejs.org/zh-cn/download/), 这是构建 JavaScript 和 CSS 文件所需的。最低支持的 Node.js 版本是 @minNodeVersion@,建议使用最新的 LTS 版本。 | ||||
**注意**:当执行需要外部工具的 make 任务(如`make misspell-check`)时,Gitea 将根据需要自动下载和构建这些工具。为了能够实现这个目的,你必须将`"$GOPATH/bin"`目录添加到可执行路径中。如果没有将 Go 的二进制目录添加到可执行路径中,你需要自行解决产生的问题。 | |||||
**注意2**:需要 Go 版本 @minGoVersion@ 或更高版本。不过,建议获取与我们的持续集成(continuous integration, CI)相同的版本,请参阅在 [Hacking on Gitea](development/hacking-on-gitea.md) 中给出的建议。 | |||||
**注意**:需要 Go 版本 @minGoVersion@ 或更高版本。不过,建议获取与我们的持续集成(continuous integration, CI)相同的版本,请参阅在 [Hacking on Gitea](development/hacking-on-gitea.md) 中给出的建议。 | |||||
## 下载 | ## 下载 | ||||
{{/* Attributes: | {{/* Attributes: | ||||
* root | * root | ||||
* ContainerClasses | * ContainerClasses | ||||
* (TODO: search "branch_dropdown" in the template direcotry) | |||||
* (TODO: search "branch_dropdown" in the template directory) | |||||
*/}} | */}} | ||||
{{$defaultSelectedRefName := $.root.BranchName}} | {{$defaultSelectedRefName := $.root.BranchName}} | ||||
{{if and .root.IsViewTag (not .noTag)}} | {{if and .root.IsViewTag (not .noTag)}} |
<div class="timeline-item event"> | <div class="timeline-item event"> | ||||
{{if .OriginalAuthor}} | {{if .OriginalAuthor}} | ||||
{{else}} | {{else}} | ||||
{{/* Some timeline avatars need a offset to correctly allign with their speech | |||||
{{/* Some timeline avatars need a offset to correctly align with their speech | |||||
bubble. The condition depends on review type and for positive reviews whether | bubble. The condition depends on review type and for positive reviews whether | ||||
there is a comment element or not */}} | there is a comment element or not */}} | ||||
<a class="timeline-avatar{{if or (and (eq .Review.Type 1) (or .Content .Attachments)) (and (eq .Review.Type 2) (or .Content .Attachments)) (eq .Review.Type 3)}} timeline-avatar-offset{{end}}"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}> | <a class="timeline-avatar{{if or (and (eq .Review.Type 1) (or .Content .Attachments)) (and (eq .Review.Type 2) (or .Content .Attachments)) (eq .Review.Type 3)}} timeline-avatar-offset{{end}}"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}> |