Skip to content

Commit 250f993

Browse files
committed
Merge branch 'release/v1.21' into blender-merged-develop
2 parents c055e4d + 932e282 commit 250f993

File tree

85 files changed

+782
-410
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+782
-410
lines changed

.github/workflows/release-tag-rc.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ jobs:
7878
id: meta
7979
with:
8080
images: gitea/gitea
81+
flavor: |
82+
latest=false
8183
# 1.2.3-rc0
8284
tags: |
8385
type=semver,pattern={{version}}
@@ -109,6 +111,7 @@ jobs:
109111
images: gitea/gitea
110112
# each tag below will have the suffix of -rootless
111113
flavor: |
114+
latest=false
112115
suffix=-rootless
113116
# 1.2.3-rc0
114117
tags: |

.github/workflows/release-tag-version.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ jobs:
8686
# 1.2
8787
# 1.2.3
8888
tags: |
89-
type=raw,value=latest
9089
type=semver,pattern={{major}}
9190
type=semver,pattern={{major}}.{{minor}}
9291
type=semver,pattern={{version}}
@@ -118,14 +117,13 @@ jobs:
118117
images: gitea/gitea
119118
# each tag below will have the suffix of -rootless
120119
flavor: |
121-
suffix=-rootless
120+
suffix=-rootless,onlatest=true
122121
# this will generate tags in the following format (with -rootless suffix added):
123122
# latest
124123
# 1
125124
# 1.2
126125
# 1.2.3
127126
tags: |
128-
type=raw,value=latest
129127
type=semver,pattern={{major}}
130128
type=semver,pattern={{major}}.{{minor}}
131129
type=semver,pattern={{version}}

CHANGELOG.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,45 @@ This changelog goes through all the changes that have been made in each release
44
without substantial changes to our git log; to see the highlights of what has
55
been added to each release, please refer to the [blog](https://blog.gitea.com).
66

7+
## [1.21.2](https://github.com/go-gitea/gitea/releases/tag/1.21.2) - 2023-12-12
8+
9+
* SECURITY
10+
* Rebuild with recently released golang version
11+
* Fix missing check (#28406) (#28411)
12+
* Do some missing checks (#28423) (#28432)
13+
* BUGFIXES
14+
* Fix margin in server signed signature verification view (#28379) (#28381)
15+
* Fix object does not exist error when checking citation file (#28314) (#28369)
16+
* Use `filepath` instead of `path` to create SQLite3 database file (#28374) (#28378)
17+
* Fix the runs will not be displayed bug when the main branch have no workflows but other branches have (#28359) (#28365)
18+
* Handle repository.size column being NULL in migration v263 (#28336) (#28363)
19+
* Convert git commit summary to valid UTF8. (#28356) (#28358)
20+
* Fix migration panic due to an empty review comment diff (#28334) (#28362)
21+
* Add `HEAD` support for rpm repo files (#28309) (#28360)
22+
* Fix RPM/Debian signature key creation (#28352) (#28353)
23+
* Keep profile tab when clicking on Language (#28320) (#28331)
24+
* Fix missing issue search index update when changing status (#28325) (#28330)
25+
* Fix wrong link in `protect_branch_name_pattern_desc` (#28313) (#28315)
26+
* Read `previous` info from git blame (#28306) (#28310)
27+
* Ignore "non-existing" errors when getDirectorySize calculates the size (#28276) (#28285)
28+
* Use appSubUrl for OAuth2 callback URL tip (#28266) (#28275)
29+
* Meilisearch: require all query terms to be matched (#28293) (#28296)
30+
* Fix required error for token name (#28267) (#28284)
31+
* Fix issue will be detected as pull request when checking `First-time contributor` (#28237) (#28271)
32+
* Use full width for project boards (#28225) (#28245)
33+
* Increase "version" when update the setting value to a same value as before (#28243) (#28244)
34+
* Also sync DB branches on push if necessary (#28361) (#28403)
35+
* Make gogit Repository.GetBranchNames consistent (#28348) (#28386)
36+
* Recover from panic in cron task (#28409) (#28425)
37+
* Deprecate query string auth tokens (#28390) (#28430)
38+
* ENHANCEMENTS
39+
* Improve doctor cli behavior (#28422) (#28424)
40+
* Fix margin in server signed signature verification view (#28379) (#28381)
41+
* Refactor template empty checks (#28351) (#28354)
42+
* Read `previous` info from git blame (#28306) (#28310)
43+
* Use full width for project boards (#28225) (#28245)
44+
* Enable system users search via the API (#28013) (#28018)
45+
746
## [1.21.1](https://github.com/go-gitea/gitea/releases/tag/1.21.1) - 2023-11-26
847

948
* SECURITY

cmd/doctor.go

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"code.gitea.io/gitea/models/db"
1515
"code.gitea.io/gitea/models/migrations"
1616
migrate_base "code.gitea.io/gitea/models/migrations/base"
17+
"code.gitea.io/gitea/modules/container"
1718
"code.gitea.io/gitea/modules/doctor"
1819
"code.gitea.io/gitea/modules/log"
1920
"code.gitea.io/gitea/modules/setting"
@@ -22,6 +23,19 @@ import (
2223
"xorm.io/xorm"
2324
)
2425

26+
// CmdDoctor represents the available doctor sub-command.
27+
var CmdDoctor = &cli.Command{
28+
Name: "doctor",
29+
Usage: "Diagnose and optionally fix problems",
30+
Description: "A command to diagnose problems with the current Gitea instance according to the given configuration. Some problems can optionally be fixed by modifying the database or data storage.",
31+
32+
Subcommands: []*cli.Command{
33+
cmdDoctorCheck,
34+
cmdRecreateTable,
35+
cmdDoctorConvert,
36+
},
37+
}
38+
2539
var cmdDoctorCheck = &cli.Command{
2640
Name: "check",
2741
Usage: "Diagnose and optionally fix problems",
@@ -60,19 +74,6 @@ var cmdDoctorCheck = &cli.Command{
6074
},
6175
}
6276

63-
// CmdDoctor represents the available doctor sub-command.
64-
var CmdDoctor = &cli.Command{
65-
Name: "doctor",
66-
Usage: "Diagnose and optionally fix problems",
67-
Description: "A command to diagnose problems with the current Gitea instance according to the given configuration. Some problems can optionally be fixed by modifying the database or data storage.",
68-
69-
Subcommands: []*cli.Command{
70-
cmdDoctorCheck,
71-
cmdRecreateTable,
72-
cmdDoctorConvert,
73-
},
74-
}
75-
7677
var cmdRecreateTable = &cli.Command{
7778
Name: "recreate-table",
7879
Usage: "Recreate tables from XORM definitions and copy the data.",
@@ -177,6 +178,7 @@ func runDoctorCheck(ctx *cli.Context) error {
177178
if ctx.IsSet("list") {
178179
w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0)
179180
_, _ = w.Write([]byte("Default\tName\tTitle\n"))
181+
doctor.SortChecks(doctor.Checks)
180182
for _, check := range doctor.Checks {
181183
if check.IsDefault {
182184
_, _ = w.Write([]byte{'*'})
@@ -192,33 +194,26 @@ func runDoctorCheck(ctx *cli.Context) error {
192194

193195
var checks []*doctor.Check
194196
if ctx.Bool("all") {
195-
checks = doctor.Checks
197+
checks = make([]*doctor.Check, len(doctor.Checks))
198+
copy(checks, doctor.Checks)
196199
} else if ctx.IsSet("run") {
197200
addDefault := ctx.Bool("default")
198-
names := ctx.StringSlice("run")
199-
for i, name := range names {
200-
names[i] = strings.ToLower(strings.TrimSpace(name))
201-
}
202-
201+
runNamesSet := container.SetOf(ctx.StringSlice("run")...)
203202
for _, check := range doctor.Checks {
204-
if addDefault && check.IsDefault {
203+
if (addDefault && check.IsDefault) || runNamesSet.Contains(check.Name) {
205204
checks = append(checks, check)
206-
continue
207-
}
208-
for _, name := range names {
209-
if name == check.Name {
210-
checks = append(checks, check)
211-
break
212-
}
205+
runNamesSet.Remove(check.Name)
213206
}
214207
}
208+
if len(runNamesSet) > 0 {
209+
return fmt.Errorf("unknown checks: %q", strings.Join(runNamesSet.Values(), ","))
210+
}
215211
} else {
216212
for _, check := range doctor.Checks {
217213
if check.IsDefault {
218214
checks = append(checks, check)
219215
}
220216
}
221217
}
222-
223218
return doctor.RunChecks(stdCtx, colorize, ctx.Bool("fix"), checks)
224219
}

cmd/doctor_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package cmd
5+
6+
import (
7+
"context"
8+
"testing"
9+
10+
"code.gitea.io/gitea/modules/doctor"
11+
"code.gitea.io/gitea/modules/log"
12+
13+
"github.com/stretchr/testify/assert"
14+
"github.com/urfave/cli/v2"
15+
)
16+
17+
func TestDoctorRun(t *testing.T) {
18+
doctor.Register(&doctor.Check{
19+
Title: "Test Check",
20+
Name: "test-check",
21+
Run: func(ctx context.Context, logger log.Logger, autofix bool) error { return nil },
22+
23+
SkipDatabaseInitialization: true,
24+
})
25+
app := cli.NewApp()
26+
app.Commands = []*cli.Command{cmdDoctorCheck}
27+
err := app.Run([]string{"./gitea", "check", "--run", "test-check"})
28+
assert.NoError(t, err)
29+
err = app.Run([]string{"./gitea", "check", "--run", "no-such"})
30+
assert.ErrorContains(t, err, `unknown checks: "no-such"`)
31+
err = app.Run([]string{"./gitea", "check", "--run", "test-check,no-such"})
32+
assert.ErrorContains(t, err, `unknown checks: "no-such"`)
33+
}

custom/conf/app.example.ini

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,11 @@ INTERNAL_TOKEN=
491491
;; Cache successful token hashes. API tokens are stored in the DB as pbkdf2 hashes however, this means that there is a potentially significant hashing load when there are multiple API operations.
492492
;; This cache will store the successfully hashed tokens in a LRU cache as a balance between performance and security.
493493
;SUCCESSFUL_TOKENS_CACHE_SIZE = 20
494+
;;
495+
;; Reject API tokens sent in URL query string (Accept Header-based API tokens only). This avoids security vulnerabilities
496+
;; stemming from cached/logged plain-text API tokens.
497+
;; In future releases, this will become the default behavior
498+
;DISABLE_QUERY_AUTH_TOKEN = false
494499

495500
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
496501
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1205,6 +1210,9 @@ LEVEL = Info
12051210
;; Max size of files to be displayed (default is 8MiB)
12061211
;MAX_DISPLAY_FILE_SIZE = 8388608
12071212
;;
1213+
;; Detect ambiguous unicode characters in file contents and show warnings on the UI
1214+
;AMBIGUOUS_UNICODE_DETECTION = true
1215+
;;
12081216
;; Whether the email of the user should be shown in the Explore Users page
12091217
;SHOW_USER_EMAIL = true
12101218
;;

docs/content/administration/adding-legal-pages.en-us.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ Some jurisdictions (such as EU), requires certain legal pages (e.g. Privacy Poli
1919

2020
## Getting Pages
2121

22-
Gitea source code ships with sample pages, available in `contrib/legal` directory. Copy them to `custom/public/`. For example, to add Privacy Policy:
22+
Gitea source code ships with sample pages, available in `contrib/legal` directory. Copy them to `custom/public/assets/`. For example, to add Privacy Policy:
2323

2424
```
25-
wget -O /path/to/custom/public/privacy.html https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/legal/privacy.html.sample
25+
wget -O /path/to/custom/public/assets/privacy.html https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/legal/privacy.html.sample
2626
```
2727

2828
Now you need to edit the page to meet your requirements. In particular you must change the email addresses, web addresses and references to "Your Gitea Instance" to match your situation.

docs/content/administration/adding-legal-pages.zh-cn.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ menu:
1919

2020
## 获取页面
2121

22-
Gitea 源代码附带了示例页面,位于 `contrib/legal` 目录中。将它们复制到 `custom/public/` 目录下。例如,如果要添加隐私政策:
22+
Gitea 源代码附带了示例页面,位于 `contrib/legal` 目录中。将它们复制到 `custom/public/assets/` 目录下。例如,如果要添加隐私政策:
2323

2424
```
25-
wget -O /path/to/custom/public/privacy.html https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/legal/privacy.html.sample
25+
wget -O /path/to/custom/public/assets/privacy.html https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/legal/privacy.html.sample
2626
```
2727

2828
现在,你需要编辑该页面以满足你的需求。特别是,你必须更改电子邮件地址、网址以及与 "Your Gitea Instance" 相关的引用,以匹配你的情况。

docs/content/administration/config-cheat-sheet.en-us.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ The following configuration set `Content-Type: application/vnd.android.package-a
220220
- `THEMES`: **auto,gitea,arc-green**: All available themes. Allow users select personalized themes.
221221
regardless of the value of `DEFAULT_THEME`.
222222
- `MAX_DISPLAY_FILE_SIZE`: **8388608**: Max size of files to be displayed (default is 8MiB)
223+
- `AMBIGUOUS_UNICODE_DETECTION`: **true**: Detect ambiguous unicode characters in file contents and show warnings on the UI
223224
- `REACTIONS`: All available reactions users can choose on issues/prs and comments
224225
Values can be emoji alias (:smile:) or a unicode emoji.
225226
For custom reactions, add a tightly cropped square image to public/assets/img/emoji/reaction_name.png
@@ -570,6 +571,7 @@ And the following unique queues:
570571
- off - do not check password complexity
571572
- `PASSWORD_CHECK_PWN`: **false**: Check [HaveIBeenPwned](https://haveibeenpwned.com/Passwords) to see if a password has been exposed.
572573
- `SUCCESSFUL_TOKENS_CACHE_SIZE`: **20**: Cache successful token hashes. API tokens are stored in the DB as pbkdf2 hashes however, this means that there is a potentially significant hashing load when there are multiple API operations. This cache will store the successfully hashed tokens in a LRU cache as a balance between performance and security.
574+
- `DISABLE_QUERY_AUTH_TOKEN`: **false**: Reject API tokens sent in URL query string (Accept Header-based API tokens only). This setting will default to `true` in Gitea 1.23 and be deprecated in Gitea 1.24.
573575

574576
## Camo (`camo`)
575577

docs/content/administration/config-cheat-sheet.zh-cn.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,10 +1039,11 @@ Gitea 创建以下非唯一队列:
10391039

10401040
## API (`api`)
10411041

1042-
- `ENABLE_SWAGGER`: **true**: 是否启用swagger路由 (`/api/swagger`, `/api/v1/swagger`, …)。
1043-
- `MAX_RESPONSE_ITEMS`: **50**: 单个页面的最大 Feed.
1044-
- `ENABLE_OPENID_SIGNIN`: **false**: 允许使用OpenID登录,当设置为`true`时可以通过 `/user/login` 页面进行OpenID登录。
1045-
- `DISABLE_REGISTRATION`: **false**: 关闭用户注册。
1042+
- `ENABLE_SWAGGER`: **true**: 启用API文档接口 (`/api/swagger`, `/api/v1/swagger`, …). True or false。
1043+
- `MAX_RESPONSE_ITEMS`: **50**: API分页的最大单页项目数。
1044+
- `DEFAULT_PAGING_NUM`: **30**: API分页的默认分页数。
1045+
- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: Git trees API的默认单页项目数。
1046+
- `DEFAULT_MAX_BLOB_SIZE`: **10485760** (10MiB): blobs API的默认最大文件大小。
10461047

10471048
## OAuth2 (`oauth2`)
10481049

docs/content/administration/customizing-gitea.zh-cn.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板
4242

4343
将自定义的公共文件(比如页面和图片)作为 webroot 放在 `custom/public/` 中来让 Gitea 提供这些自定义内容(符号链接将被追踪)。
4444

45-
举例说明:`image.png` 存放在 `custom/public/`中,那么它可以通过链接 http://gitea.domain.tld/assets/image.png 访问。
45+
举例说明:`image.png` 存放在 `custom/public/assets/`中,那么它可以通过链接 http://gitea.domain.tld/assets/image.png 访问。
4646

4747
## 修改默认头像
4848

49-
替换以下目录中的 png 图片: `custom/public/img/avatar\_default.png`
49+
替换以下目录中的 png 图片: `custom/public/assets/img/avatar\_default.png`
5050

5151
## 自定义 Gitea 页面
5252

docs/content/administration/external-renderers.zh-cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ ALLOW_DATA_URI_IMAGES = true
194194
}
195195
```
196196

197-
将您的样式表添加到自定义目录中,例如 `custom/public/css/my-style-XXXXX.css`,并使用自定义的头文件 `custom/templates/custom/header.tmpl` 进行导入:
197+
将您的样式表添加到自定义目录中,例如 `custom/public/assets/css/my-style-XXXXX.css`,并使用自定义的头文件 `custom/templates/custom/header.tmpl` 进行导入:
198198

199199
```html
200200
<link rel="stylesheet" href="{{AppSubUrl}}/assets/css/my-style-XXXXX.css" />

docs/content/administration/https-support.zh-cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ CERT_FILE = cert.pem
3333
KEY_FILE = key.pem
3434
```
3535

36-
请注意,如果您的证书由第三方证书颁发机构签名(即不是自签名的),则 cert.pem 应包含证书链。服务器证书必须是 cert.pem 中的第一个条目,后跟中介(如果有)。不必包含根证书,因为连接客户端必须已经拥有根证书才能建立信任关系。要了解有关配置值的更多信息,请查看 [配置备忘单](../config-cheat-sheet#server-server)
36+
请注意,如果您的证书由第三方证书颁发机构签名(即不是自签名的),则 cert.pem 应包含证书链。服务器证书必须是 cert.pem 中的第一个条目,后跟中介(如果有)。不必包含根证书,因为连接客户端必须已经拥有根证书才能建立信任关系。要了解有关配置值的更多信息,请查看 [配置备忘单](administration/config-cheat-sheet#server-server)
3737

3838
对于“CERT_FILE”或“KEY_FILE”字段,当文件路径是相对路径时,文件路径相对于“GITEA_CUSTOM”环境变量。它也可以是绝对路径。
3939

docs/content/development/api-usage.en-us.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ menu:
1919

2020
## Enabling/configuring API access
2121

22-
By default, `ENABLE_SWAGGER` is true, and
23-
`MAX_RESPONSE_ITEMS` is set to 50. See [Config Cheat
24-
Sheet](administration/config-cheat-sheet.md) for more
25-
information.
22+
By default, `ENABLE_SWAGGER` is true, and `MAX_RESPONSE_ITEMS` is set to 50. See [Config Cheat Sheet](administration/config-cheat-sheet.md) for more information.
2623

2724
## Authentication
2825

docs/content/development/api-usage.zh-cn.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ menu:
1919

2020
## 开启/配置 API 访问
2121

22-
通常情况下, `ENABLE_SWAGGER` 默认开启并且参数 `MAX_RESPONSE_ITEMS` 默认为 50。您可以从 [Config Cheat
23-
Sheet](administration/config-cheat-sheet.md) 中获取更多配置相关信息。
22+
通常情况下, `ENABLE_SWAGGER` 默认开启并且参数 `MAX_RESPONSE_ITEMS` 默认为 50。您可以从 [Config Cheat Sheet](administration/config-cheat-sheet.md) 中获取更多配置相关信息。
2423

2524
## 通过 API 认证
2625

docs/content/help/faq.zh-cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ Gitea 目前支持三个官方主题,分别是 `gitea`(亮色)、`arc-gree
190190

191191
假设我们的主题是 `arc-blue`(这是一个真实的主题,可以在[此问题](https://github.com/go-gitea/gitea/issues/6011)中找到)
192192

193-
`.css`文件命名为`theme-arc-blue.css`并将其添加到`custom/public/css`文件夹中
193+
`.css`文件命名为`theme-arc-blue.css`并将其添加到`custom/public/assets/css`文件夹中
194194

195195
通过将`arc-blue`添加到`app.ini`中的`THEMES`列表中,允许用户使用该主题
196196

docs/content/installation/from-binary.zh-cn.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ chmod 770 /etc/gitea
117117
- 使用 `gitea generate secret` 创建 `SECRET_KEY``INTERNAL_TOKEN`
118118
- 提供所有必要的密钥
119119
120-
详情参考 [命令行文档](/zh-cn/command-line/) 中有关 `gitea generate secret` 的内容。
120+
详情参考 [命令行文档](administration/command-line.md) 中有关 `gitea generate secret` 的内容。
121121
122122
### 配置 Gitea 工作路径
123123
@@ -209,6 +209,6 @@ remote: ./hooks/pre-receive.d/gitea: line 2: [...]: No such file or directory
209209

210210
如果您没有使用 Gitea 内置的 SSH 服务器,您还需要通过在管理选项中运行任务 `Update the '.ssh/authorized_keys' file with Gitea SSH keys.` 来重新编写授权密钥文件。
211211

212-
> 更多经验总结,请参考英文版 [Troubleshooting](/en-us/install-from-binary/#troubleshooting)
212+
> 更多经验总结,请参考英文版 [Troubleshooting](https://docs.gitea.com/installation/install-from-binary#troubleshooting)
213213
214214
如果从本页中没有找到你需要的内容,请访问 [帮助页面](help/support.md)

docs/content/installation/from-source.zh-cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ git checkout v@version@ # or git checkout pr-xyz
6464

6565
- `go` @minGoVersion@ 或更高版本,请参阅 [这里](https://golang.org/dl/)
6666
- `node` @minNodeVersion@ 或更高版本,并且安装 `npm`, 请参阅 [这里](https://nodejs.org/zh-cn/download/)
67-
- `make`, 请参阅 [这里](/zh-cn/hacking-on-gitea/)
67+
- `make`, 请参阅 [这里](development/hacking-on-gitea.md)
6868

6969
为了尽可能简化编译过程,提供了各种 [make任务](https://github.com/go-gitea/gitea/blob/main/Makefile)
7070

0 commit comments

Comments
 (0)