Skip to content

Support structured env config reload#6400

Open
yiguodev wants to merge 9 commits into
XTLS:mainfrom
OneXray:run-set-env
Open

Support structured env config reload#6400
yiguodev wants to merge 9 commits into
XTLS:mainfrom
OneXray:run-set-env

Conversation

@yiguodev

@yiguodev yiguodev commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

修改内容

新增配置根 env,使用结构化 EnvConfig 配置可运行时重载的 Xray 环境项,并在配置构建时应用。

xray run --env 已移除;xray.json.strictxray.location.configxray.location.confdir 继续通过进程环境变量提供。

验证

  • go test ./main ./common/platform ./infra/conf ./infra/conf/serial -count=1

AI 辅助:GPT-5.5 Extra High

Copilot AI review requested due to automatic review settings June 29, 2026 09:37

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/--env flag (backed by cmdarg.Arg) and apply the provided KEY=VALUE pairs via os.Setenv at the start of executeRun.
  • Add applyRunEnvVars helper to parse and validate KEY=VALUE inputs.
  • Add unit tests covering valid and invalid --env values.

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.

Comment thread main/run.go Outdated
Comment thread main/run_env_test.go Outdated
@RPRX

RPRX commented Jul 3, 2026

Copy link
Copy Markdown
Member

之前我想给配置文件加个 env 结构但有些地方读 env 是在 init() 里的就搁置了,你这个 PR 没问题吗

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

AI 梳理了一下,确实不行。目前仅支持以下 env 可用。

xray.location.config
xray.location.confdir
xray.location.asset
xray.location.cert
xray.cone.disabled
xray.tun.fd

后续可以单独开 PR 优化一下。

@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

说实话这个 PR 可能不会合,你都命令行启动了,命令行本来就能设临时环境变量

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

你说的对。
不过这个 PR 核心就解决一个场景,就是 Windows 上 UAC 提权启动的时候,是没有可靠手段来设置或者传递环境变量的。
大概位置在 https://github.com/OneXray/OneXray/blob/ae9e3f61ddb7033fdaa8648794d6833b6d19be04/lib/core/ffi/windows_ffi_api.dart#L50

@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

Windows 上设临时环境变量需要多行,你就不能弄个特权命令行再启动 Xray 吗

@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

总之你要真想加这种东西就加个 env 根配置,用的人还更多一些,然后有些 init() 的看看能不能改成延时读取啥的

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

OK。我再研究研究。

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

目前有三个 env 设置没法放到配置里。

xray.json.strict
xray.location.config
xray.location.confdir

计划分成两部分,--env 可以设置这三个 key,其他 key 统一由配置文件更新。

@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

读配置文件之前的 env 那确实没办法,但还是我说的,命令行本来就能设临时环境变量,感觉没必要徒增复杂度

@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

就是说有一种多打包进了一个 wxray.exe 的那种感觉

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

其实做这个修改主要想在 Windows 和 Linux 上直接用官方裸核,原来 libXray 是有一层 wrapper 的。

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

算了,PR 先关了。我再想想用哪种方式更好一些。

@yiguodev yiguodev closed this Jul 4, 2026
@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

PR 不用关,改成配置文件里写 env 就行

我的意思是通过命令行加临时环境变量本来就不用改 Xray 的代码,你研究一下

@RPRX RPRX reopened this Jul 4, 2026
@yiguodev yiguodev changed the title Add --env flag to xray run Support structured env config reload Jul 4, 2026
@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author
  1. 除 xray.tun.fd 外,单元测试已覆盖所有 key 。
  2. xray.tun.fd,xray.location.asset 已经通过所有平台的实机测试。

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

已同步添加文档。

XTLS/Xray-docs-next#874

@Meo597

Meo597 commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator

新开配置块的话要不要给默认配置文件标个编号 docker install doc 里目前是都有

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

已补充 12_env.json

@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

文档把 env 移到“基础配置”吧,这个的确更应该跟配置项们放一起

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

文档已调整

@RPRX

RPRX commented Jul 4, 2026

Copy link
Copy Markdown
Member

没看你那个 test 是咋写的但如果只是读取、验证的话盲猜没用,因为你这个读取、验证不是在 init()

写 test 用处不大,要把 init() 里的都改成延时读取才行

@Fangliding

Copy link
Copy Markdown
Member

只是AI干什么都喜欢写个test而已

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

没看你那个 test 是咋写的但如果只是读取、验证的话盲猜没用,因为你这个读取、验证不是在 init()

写 test 用处不大,要把 init() 里的都改成延时读取才行

现在 init 里已经不读取环境变量了。

@yiguodev

yiguodev commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator Author

核心的修改思路是保留原有的包内变量,但改为实时读取,并加入 reload 机制。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants