Root config: Add env config#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 的代码,你研究一下 |
|
|
已同步添加文档。 |
|
所以 Xray run 那个 ReloadEnvSettings() 是否有必要 |
|
已调整: 具体改动:
这样配置根 |
|
|
|
重新梳理和优化了一下,逻辑上没问题了。 这三个本身配置内 env 是不支持的,也不受 reload 的影响。 这两个会在 其余的 均在 |
|
@yiguodev 把配置解析 env 的优先级提到最前面就可以在配置中写那两个 env 了 |
|
目前的执行顺序是对的。 ApplyConfigEnvSettings 在第一行。 读到的就是 config 里配置的 env value 。 |
|
感觉配置解析的代码有点啰嗦了,不能简化为 for 加上 os.SetEnv 吗,不要一个个都写出来,另外需要支持 这样的话由于 ReloadEnvSettings() 主要是回调调用,只放启动 instance 前那一处似乎没问题,因为那两个 env 不需要回调 |
|
env_reload.go 里似乎也不需要把所有 env 都列出来,都走 os 包来存取就行,这个文件似乎也能大幅简化代码 |
这块是有意设计,本意是限制开发者不要随意设置 env ,只暴露支持的 env key。 |
|
|
|
重新简化了一版。支持的 key 已进行运行时验证,读取正常。 |
|
不用搞查表加限制,直接写入就行,效果和在 Xray 外设置的 env 一样 |
|
比如这里甚至能写作用于 Go 的 env(前提是它的代码是实时读取 env),区别只是解析配置文件后这里的 env 才生效 |
|
AI特有的只完成任务不管后面维护 |
|
|
|
已重新简化。( |
|
这才是我想要的代码,简单直接,之前的代码太复杂了 @yiguodev 所以你测过现在的代码针对 asset 和 cert 有效果吧 |
|
已经针对每个 key 做过读取前 print ,可以正确输出。 |
env config
|
差不多就这样吧,文档记得把 env 加到最上面,包括侧边栏,特性是 #6400 (comment) |
XTLS/Xray-core#6400 --------- Co-authored-by: yiguodev <147401898+yiguodev@users.noreply.github.com>
XTLS/Xray-core#6400 Co-authored-by: yiguodev <147401898+yiguodev@users.noreply.github.com>
XTLS/Xray-core#6400 Co-authored-by: yiguodev <147401898+yiguodev@users.noreply.github.com>
修改内容
新增配置根
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