forgejo/modules
wxiaoguang 061b68e995
Refactor path & config system (#25330) (#25416)
Backport #25330

# The problem

There were many "path tricks":

* By default, Gitea uses its program directory as its work path
* Gitea tries to use the "work path" to guess its "custom path" and
"custom conf (app.ini)"
* Users might want to use other directories as work path
* The non-default work path should be passed to Gitea by GITEA_WORK_DIR
or "--work-path"
* But some Gitea processes are started without these values
    * The "serv" process started by OpenSSH server
    * The CLI sub-commands started by site admin
* The paths are guessed by SetCustomPathAndConf again and again
* The default values of "work path / custom path / custom conf" can be
changed when compiling

# The solution

* Use `InitWorkPathAndCommonConfig` to handle these path tricks, and use
test code to cover its behaviors.
* When Gitea's web server runs, write the WORK_PATH to "app.ini", this
value must be the most correct one, because if this value is not right,
users would find that the web UI doesn't work and then they should be
able to fix it.
* Then all other sub-commands can use the WORK_PATH in app.ini to
initialize their paths.
* By the way, when Gitea starts for git protocol, it shouldn't output
any log, otherwise the git protocol gets broken and client blocks
forever.

The "work path" priority is: WORK_PATH in app.ini > cmd arg --work-path
> env var GITEA_WORK_DIR > builtin default

The "app.ini" searching order is: cmd arg --config > cmd arg "work path
/ custom path" > env var "work path / custom path" > builtin default


## ⚠️ BREAKING

If your instance's "work path / custom path / custom conf" doesn't meet
the requirements (eg: work path must be absolute), Gitea will report a
fatal error and exit. You need to set these values according to the
error log.
2023-06-22 16:27:18 +00:00
..
actions Use the type RefName for all the needed places and fix pull mirror sync bugs (#24634) 2023-05-26 01:04:48 +00:00
activitypub
analyze
assetfs
auth
avatar Improve avatar uploading / resizing / compressing, remove Fomantic card module (#24653) 2023-05-13 20:59:11 +02:00
base
cache
charset Update go tool dependencies, restructure lint targets (#24239) 2023-04-22 14:53:00 -04:00
container
context Fix open redirect check for more cases (#25143) (#25154) 2023-06-08 18:03:42 +02:00
csv Refactor locale number (#24134) 2023-04-17 11:37:23 +08:00
doctor Refactor path & config system (#25330) (#25416) 2023-06-22 16:27:18 +00:00
emoji
eventsource
generate
git Fix index generation parallelly failure (#25235) (#25269) 2023-06-15 02:14:00 +00:00
gitgraph
graceful Improve queue and logger context (#24924) 2023-05-26 07:31:55 +00:00
hcaptcha
highlight
hostmatcher
html
httpcache Use standard HTTP library to serve files (#24693) 2023-05-13 16:04:57 +02:00
httplib Use standard HTTP library to serve files (#24693) 2023-05-13 16:04:57 +02:00
indexer Improve queue and logger context (#24924) 2023-05-26 07:31:55 +00:00
issue/template
json
label
lfs Rewrite logger system (#24726) 2023-05-21 22:35:11 +00:00
log Improve logger Pause handling (#24946) 2023-05-27 22:35:44 +02:00
markup Refactor path & config system (#25330) (#25416) 2023-06-22 16:27:18 +00:00
mcaptcha
metrics Use a separate admin page to show global stats, remove actions stat (#25062) 2023-06-03 22:03:41 +08:00
migration
mirror Improve queue and logger context (#24924) 2023-05-26 07:31:55 +00:00
nosql
notification Rename NotifyPullReviewRequest to NotifyPullRequestReviewRequest (#24988) 2023-05-31 15:54:46 +08:00
options
packages Add CRAN package registry (#22331) 2023-05-22 10:57:49 +08:00
paginator Use more specific test methods (#24265) 2023-04-22 17:56:27 -04:00
pprof
private Use the type RefName for all the needed places and fix pull mirror sync bugs (#24634) 2023-05-26 01:04:48 +00:00
process Do not output "Trace" level logs from process manager by default (#24952) 2023-05-27 10:55:24 +00:00
proxy
proxyprotocol
public Use standard HTTP library to serve files (#24693) 2023-05-13 16:04:57 +02:00
queue Help to recover from corrupted levelqueue (#24912) 2023-05-29 10:52:32 +08:00
recaptcha
references
regexplru
repository Remove stars when repo goes private (#19904) 2023-06-05 13:25:43 +00:00
secret Improve decryption failure message (#24573) 2023-05-07 19:29:43 +08:00
session
setting Refactor path & config system (#25330) (#25416) 2023-06-22 16:27:18 +00:00
sitemap
ssh Fix incorrect config argument position for builtin SSH server (#25341) 2023-06-18 16:56:21 +00:00
storage Fix all possible setting error related storages and added some tests (#23911) (#25244) 2023-06-14 08:36:52 +02:00
structs Fix Permission in API returned repository struct (#25388) (#25441) 2023-06-22 17:01:42 +02:00
svg Use inline SVG for built-in OAuth providers (#25171) (#25234) 2023-06-13 12:04:40 +00:00
sync
system
templates Fix missing commit message body when the message has leading newlines (#25418) (#25422) 2023-06-21 13:55:08 +02:00
test Fix admin config page error, use tests to cover the admin config and 500 error page (#24965) 2023-05-29 15:00:21 +00:00
testlogger Refactor path & config system (#25330) (#25416) 2023-06-22 16:27:18 +00:00
timeutil Fix incorrect webhook time and use relative-time to display it (#24477) 2023-05-03 19:53:43 -04:00
translation Refactor INI package (first step) (#25024) 2023-06-02 17:27:30 +08:00
turnstile
typesniffer
updatechecker
upload
uri
user
util Move some regexp out of functions (#25430) (#25445) 2023-06-22 16:01:54 +00:00
validation
web Fix install page context, make the install page tests really test (#24858) 2023-05-23 09:29:15 +08:00
webhook New webhook trigger for receiving Pull Request review requests (#24481) 2023-05-24 22:06:27 -04:00