Support structured env config reload#6400
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a repeatable --env KEY=VALUE flag to xray run, applying environment variables before config load and before -test / -dump / normal startup, improving reliability in launch scenarios where environment inheritance is unreliable (e.g., Windows elevation).
Changes:
- Add a repeatable
-env/--envflag (backed bycmdarg.Arg) and apply the providedKEY=VALUEpairs viaos.Setenvat the start ofexecuteRun. - Add
applyRunEnvVarshelper to parse and validateKEY=VALUEinputs. - Add unit tests covering valid and invalid
--envvalues.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| main/run.go | Adds --env flag wiring, applies env vars before config-related actions, and documents the new flag. |
| main/run_env_test.go | Adds tests for applyRunEnvVars behavior (success cases and invalid input rejection). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
之前我想给配置文件加个 |
|
AI 梳理了一下,确实不行。目前仅支持以下 env 可用。 后续可以单独开 PR 优化一下。 |
|
|
|
你说的对。 |
|
|
|
总之你要真想加这种东西就加个 |
|
OK。我再研究研究。 |
|
目前有三个 env 设置没法放到配置里。 计划分成两部分,--env 可以设置这三个 key,其他 key 统一由配置文件更新。 |
|
读配置文件之前的 env 那确实没办法,但还是我说的,命令行本来就能设临时环境变量,感觉没必要徒增复杂度 |
|
|
|
其实做这个修改主要想在 Windows 和 Linux 上直接用官方裸核,原来 libXray 是有一层 wrapper 的。 |
|
算了,PR 先关了。我再想想用哪种方式更好一些。 |
|
PR 不用关,改成配置文件里写 env 就行 我的意思是通过命令行加临时环境变量本来就不用改 Xray 的代码,你研究一下 |
|
|
已同步添加文档。 |
|
新开配置块的话要不要给默认配置文件标个编号 docker install doc 里目前是都有 |
|
已补充 |
|
文档把 env 移到“基础配置”吧,这个的确更应该跟配置项们放一起 |
|
文档已调整 |
|
没看你那个 test 是咋写的但如果只是读取、验证的话盲猜没用,因为你这个读取、验证不是在 写 test 用处不大,要把 |
|
只是AI干什么都喜欢写个test而已 |
现在 init 里已经不读取环境变量了。 |
|
核心的修改思路是保留原有的包内变量,但改为实时读取,并加入 reload 机制。 |
修改内容
新增配置根
env,使用结构化EnvConfig配置可运行时重载的 Xray 环境项,并在配置构建时应用。xray run --env已移除;xray.json.strict、xray.location.config、xray.location.confdir继续通过进程环境变量提供。验证
go test ./main ./common/platform ./infra/conf ./infra/conf/serial -count=1AI 辅助:GPT-5.5 Extra High