Skip to content

檢查規則 ​

nginx-ui plugin lint 和 nginx-ui plugin conformance 回報的每個問題都附帶它違反的規則名稱。本頁解釋每一條規則,並連結到指南中的相關內容。

  • lint 規則根據外掛目錄或外掛套件中的檔案檢查。error 會阻止外掛套件安裝;warning 指出安裝外掛的人會注意到的問題。
  • conformance 規則透過執行外掛來檢查。每個測試案例的結果為通過、失敗,或在不適用時略過。

清單 ​

manifest-json ​

lint error

plugin.json 缺少,或不是單一 JSON 物件。參見清單檔案。

manifest-id ​

lint error

id 缺少、超過 64 個字元,或不是 io.github.example.mydns 這樣以點分隔的小寫 ID。參見命名規則。

manifest-name ​

lint error

name 缺少或為空。

manifest-version ​

lint error

version 缺少,或不是語意化版本。

manifest-api-version ​

lint error

api_version 缺少,或不是 Nginx UI 實作的協定世代。參見版本與相容性。

manifest-parts ​

lint error

清單沒有宣告 server、webapp 和 content 中的任何一個,外掛什麼也不會安裝。

manifest-icon ​

lint error

icon_path 不是安全的相對路徑。

manifest-i18n ​

lint error warning

i18n 的某個鍵不是 zh_CN 這樣的語言代碼時為錯誤;執行檢查工具的 Nginx UI 沒有該語言時為警告,這時它顯示英文。參見清單檔案。

manifest-requires ​

lint error

requires 中某一項的外掛 ID 無效。參見相依與衝突。

manifest-conflicts ​

lint error

conflicts 中某一項不是有效的外掛 ID、是外掛自己的 ID、重複出現,或同時出現在 requires 中。參見相依與衝突。

manifest-permissions ​

lint error warning

未知權限為錯誤,重複列出的權限為警告。參見權限與安全。

manifest-permission-reasons ​

lint error

permission_reasons 或 i18n 中它的翻譯裡,某個鍵不是 permissions 中的一項,或者原因超過 300 個字元。參見說明權限用途。

manifest-screenshots ​

lint error

screenshots 超過 8 張;某個 id 缺少、格式不對或者重複;某個路徑缺少、不是安全的相對路徑、不是 PNG、JPEG 或 WebP 圖片,或者重複出現;某則說明超過 200 個字元;或者 i18n 的 screenshot_captions 中某個鍵不是螢幕截圖的 id。參見螢幕截圖。

capability-name ​

lint error

某個能力名稱不是 Nginx UI 認識的能力。參見清單檔案。

capability-duplicate ​

lint error

某個能力被列出了兩次。

server-entry ​

lint error

server 既沒有 executables 也沒有 command。參見伺服器端進程。

server-command ​

lint error

server.command 的第一個元素為空。

server-lifecycle ​

lint error

server.lifecycle 不是 resident 或 on_demand。

server-idle-timeout ​

lint error

server.idle_timeout_seconds 為負數。

server-paths ​

lint error warning

可執行檔路徑,或包含分隔符號的 command 第一個元素不是安全的相對路徑時為錯誤;在執行檢查工具的機器上,command 指定的程式在 PATH 中找不到時為警告。

server-resources ​

lint error

server.resources 的某個值為負數。參見資源。

settings-key ​

lint error

某個設定欄位沒有鍵,或兩個欄位使用了同一個鍵。參見設定。

settings-type ​

lint error warning

欄位型別未知,或 list 的預設值不是字串陣列時為錯誤;預設值與型別不符時為警告。

settings-options ​

lint error

select 欄位沒有選項。

event-permission ​

lint warning

訂閱了 log.paths_changed 卻沒有 log.files 權限,因此該事件永遠不會送達。參見宿主 API。

reserved-namespace ​

lint warning

ID 使用了保留給 Nginx UI 專案的 com.nginxui.*。參見命名規則。

network-permission ​

lint warning

與服務商或目標通訊的能力沒有宣告 network 權限。參見權限與安全。

unused-permission ​

lint warning

請求了只有外掛未宣告的能力才會用到的權限,例如沒有 mcp 能力卻請求 mcp。

外掛套件 ​

package-file-name ​

lint warning

外掛套件檔名中的 ID 或版本與清單不一致。參見命名規則。

package-layout ​

lint error

plugin.json 既不在封存檔根目錄,也不在一層目錄之下,或者封存檔無法讀取。參見打包。

package-paths ​

lint error

某個封存檔項目不是安全的相對路徑。

lint error

封存檔中包含符號連結或硬連結。

package-escape ​

lint error

某個項目會被解壓縮到外掛目錄之外。

package-entries ​

lint error

外掛套件的項目超過 10,000 個。參見限制。

package-size ​

lint error

外掛套件中的檔案解壓縮後超過 256 MiB。

package-docs ​

lint error warning

缺少 README.md 時為錯誤;缺少 LICENSE,或者 README 缺少應有的章節時為警告。參見打包。

package-executables ​

lint error warning

server.executables 或 server.command 宣告的檔案缺少或不是一般檔案時為錯誤;缺少執行權限時為警告。參見可執行檔。

package-platform ​

lint error

單一平台的外掛套件沒有在 server.executables 中恰好只宣告自己的平台。參見單一平台的外掛套件。

簽章 ​

signature-sums ​

lint error

plugin.sums 不符合規定的格式。參見手動簽章。

signature-files ​

lint warning

plugin.sums 和 plugin.sums.minisig 只有一個,因此外掛套件被視為未簽章。

signature-mismatch ​

lint error

plugin.sums 與檔案不符:列出的檔案缺少或 SHA-256 不同,或者有檔案沒有列出。外掛套件在簽章後被修改過,永遠無法安裝。參見 Nginx UI 如何檢查外掛套件。

signature-signer ​

lint warning

簽章無法用檢查工具已知的金鑰驗證:專案的官方外掛簽章金鑰,或外掛套件中帶有有效憑證的合作夥伴金鑰。對於社群外掛這是預期的,因為它的金鑰只由外掛目錄或維運人員指定。參見信任等級。

partner-files ​

lint warning

plugin.partner 和 plugin.partner.minisig 只有一個,因此外掛套件沒有合作夥伴憑證。參見合作夥伴外掛。

partner-comment ​

lint warning

合作夥伴憑證無法驗證:plugin.partner 不是公鑰,沒有官方外掛簽章金鑰為它簽章,或者可信註解的格式錯誤。

partner-certificate ​

lint warning

合作夥伴憑證已到期,或者 plugin.sums.minisig 不是由憑證指定的金鑰簽署的,因此憑證對外掛套件不起作用。

signer-files ​

lint warning

外掛套件中只有 plugin.signer 和 plugin.signer.minisig 之一,因此簽章金鑰憑證被忽略。參見簽章金鑰。

signer-certificate ​

lint warning

簽章金鑰憑證無法解析、可信註解指明的不是外掛套件本身的外掛,或者 plugin.sums.minisig 不是由憑證指定的金鑰簽署的,因此憑證對外掛套件不起作用。lint 不知道主金鑰,憑證由誰簽發由外掛目錄和 Nginx UI 檢查。參見簽章金鑰。

協定與生命週期 ​

protocol-stderr ​

conformance

外掛把日誌寫到標準錯誤。參見通訊協定。

protocol-notification ​

conformance

未知方法的通知不會得到回覆,且連線仍然可用。參見訊息。

protocol-concurrency ​

conformance

20 個並行的 plugin.ping 呼叫全部得到回覆。

protocol-errors ​

conformance

外掛沒有的方法回覆 -32601,格式錯誤的參數回覆 -32602 或 -32000,而不是停滯。參見錯誤碼。

protocol-grpc ​

conformance

外掛回報的 gRPC 端點接受連線並回覆 plugin.ping。參見 gRPC 傳輸。

protocol-transports ​

conformance

同一個呼叫透過標準輸入輸出和透過 gRPC 得到相同的結果或錯誤。兩種傳輸方式都測試過時才執行。

lifecycle-handshake ​

conformance

交握在時間限制內完成。參見生命週期。

lifecycle-api-version ​

conformance

交握回報的協定世代與 Nginx UI 實作的一致。

lifecycle-capabilities ​

conformance

交握回報的能力與清單完全一致。

lifecycle-ping ​

conformance

plugin.ping 得到回覆。參見健康檢查。

lifecycle-shutdown ​

conformance

plugin.shutdown 和 plugin.exit 能及時停止進程。參見停止。

網頁介面 ​

webapp-paths ​

lint error

webapp.bundle_path 或 webapp.style_path 不是安全的相對路徑。參見瀏覽器套件。

webapp-pages ​

lint error

某個頁面沒有 path,或其 file 不是安全的相對路徑。參見靜態頁面。

webapp-chunks ​

lint error

宣告了 webapp.chunks 卻沒有 bundle_path,或者某個分塊的名稱或路徑無效、指向瀏覽器套件本身、與其他分塊共用路徑,或指向缺少的檔案。參見分塊。

webapp-bundle ​

lint conformance

瀏覽器套件檔案存在,並且是 Nginx UI 可以載入的指令碼。參見建置。

webapp-register ​

conformance

瀏覽器套件用清單 ID 註冊自己。參見註冊外掛。

webapp-chunk-files ​

lint conformance

分塊檔案為空或缺少時為錯誤;位於 Nginx UI 提供瀏覽器套件的目錄之外時為警告。

DNS-01 ​

dns01-block ​

lint error

宣告了 dns01 能力卻沒有服務商。參見 DNS-01。

dns01-code ​

lint error

服務商代碼不符合 ^[a-z0-9-]{2,32}$,或被宣告了兩次。

dns01-name ​

lint error

服務商沒有名稱。

dns01-form ​

lint error

服務商沒有 form,或者表單違反了認證表單的規則:欄位沒有鍵或標籤、鍵重複、group 或 unit 未知、只有一種登入方式、方式名稱重複、方式列出了非認證欄位、values 的鍵使用不當、兩種方式完全相同,或者有多個推薦方式。

dns01-present ​

conformance

dns01.present 對第一個服務商有回覆。

dns01-validate ​

conformance

dns01.validate 對空設定的回覆符合預期。

dns01-options ​

conformance

dns01.options 有回覆,或回覆 -32002。

dns01-check ​

conformance

dns01.check 有回覆,或回覆 -32002。

HTTP 介面 ​

http-block ​

lint error

宣告了 http 能力卻沒有 http 區塊,或者 listen 不是 unix 或 rpc。參見 HTTP 介面。

設定表單 ​

configuration-fields ​

lint error

configuration 表單中的某個欄位沒有鍵、鍵重複、型別未知或沒有 display_name。參見設定表單。

通知通道 ​

notify-block ​

lint error

宣告了 notify 能力卻沒有通道。參見通知通道。

notify-code ​

lint error

通道代碼不符合 ^[a-z0-9-]{2,32}$,或被宣告了兩次。

notify-name ​

lint error

通道沒有名稱。

notify-validate ​

conformance

notify.validate 對空設定回覆指出必填欄位的 -32003,或者在通道沒有必填欄位時回覆 {}。測試從不呼叫 notify.send,因為它會存取真實服務。

健康檢查 ​

probe-block ​

lint error

宣告了 probe 能力卻沒有類型。參見健康檢查。

probe-code ​

lint error

類型代碼不符合 ^[a-z0-9-]{2,32}$,或被宣告了兩次。

probe-kind ​

lint error

類型沒有名稱,或其設定表單無效。

probe-check ​

conformance

對無法連線的目標執行第一個類型的 probe.check,能夠及時回覆。

probe-result ​

conformance

回覆包含已知的 status 和非負的 latency_ms,或者是指出欄位的 -32003。

MCP 工具 ​

mcp-block ​

lint error

宣告了 mcp 能力卻沒有工具,或沒有 mcp 權限。參見 MCP 工具。

mcp-tool ​

lint error

工具名稱不符合 ^[a-z0-9][a-z0-9_-]{0,47}$、被宣告了兩次,或者工具沒有描述。

mcp-input-schema ​

lint error

input_schema 的 type 不是 object。

mcp-unknown-tool ​

conformance

呼叫清單未宣告的工具會得到 -32602。測試不會呼叫任何已宣告的工具,因為它們可能改變狀態。

儲存 ​

storage-block ​

lint error

宣告了 storage 能力卻沒有後端。參見儲存。

storage-code ​

lint error

後端代碼不符合 ^[a-z0-9-]{2,32}$,或被宣告了兩次。

storage-backend ​

lint error

後端沒有名稱,或其設定表單無效。

storage-list ​

conformance

使用空設定的 storage.list 能及時回覆,結果為指出必填欄位的 -32003 或一份清單。測試不會儲存、取回或刪除任何內容。

storage-validate ​

conformance

storage.validate 對空設定回覆指出必填欄位的 -32003,或回覆 {}。

憑證部署 ​

deploy-block ​

lint error

宣告了 cert.deploy 能力卻沒有目標,或沒有 cert.deploy 權限。參見憑證部署。

deploy-code ​

lint error

目標代碼不符合 ^[a-z0-9-]{2,32}$,或被宣告了兩次。

deploy-target ​

lint error

目標沒有名稱,或其設定表單無效。

deploy-dry-run ​

conformance

對一張臨時憑證的試執行推送能及時回覆。測試從不進行真正的推送。

deploy-validate ​

conformance

deploy.validate 對空設定回覆指出必填欄位的 -32003,或回覆 {}。

封鎖清單 ​

blocklist-block ​

lint error

宣告了 security.blocklist 能力卻沒有來源,或沒有 network 權限。參見封鎖清單。

blocklist-code ​

lint error

來源代碼不符合 ^[a-z0-9-]{2,32}$,或被宣告了兩次。

blocklist-source ​

lint error

來源沒有名稱、設定表單無效,或者 refresh_seconds 介於 1 到 59 之間或為負數。

blocklist-fetch ​

conformance

使用空設定的 blocklist.fetch 能及時回覆,且項目中的位址都能解析。

blocklist-errors ​

conformance

需要設定的來源回覆指出欄位的 -32003,而不是空清單。

上游探索 ​

discovery-block ​

lint error

宣告了 upstream.discovery 能力卻沒有提供者,或沒有 network 權限。參見上游探索。

discovery-code ​

lint error

提供者代碼不符合 ^[a-z0-9-]{2,32}$,或被宣告了兩次。

discovery-provider ​

lint error

提供者沒有名稱,或其設定表單無效。

discovery-resolve ​

conformance

使用空設定的 discovery.resolve 能及時回覆,且目標的連接埠都在 1 到 65535 之間。

discovery-errors ​

conformance

需要設定的提供者或未知的服務回覆指出欄位的 -32003。

存取日誌串流 ​

log-sink-permission ​

lint error

宣告了 log.sink 能力卻沒有 log.read 權限。參見存取日誌串流。

log-sink-block ​

lint warning

有 log_sink 區塊卻沒有 log.sink 能力,該區塊不起作用。

log-sink-batch ​

lint error

batch_size 不在 0 到 4096 之間,或者 flush_interval_ms 介於 1 到 49 之間或為負數。

log-sink-formats ​

lint error

格式不是 combined 或 raw,或被列出了兩次。

log-sink-transport ​

conformance

透過標準輸入輸出傳送的 log.push 得到 -32601,並且外掛提供 gRPC。

log-sink-push ​

conformance

包含三個項目的串流能及時得到 accepted 為 3 的回覆。只測試標準輸入輸出時略過。

範本與翻譯 ​

content-paths ​

lint error

content.templates 或 content.locales 不是安全的相對路徑。參見範本與翻譯。

content-without-server ​

lint error

沒有 server 的清單宣告了 capabilities、cron 或 events,而它們都需要進程。

content-templates ​

lint error warning

範本目錄缺少、不是目錄,或者 conf/ 和 block/ 中都沒有範本時為錯誤;有不是範本的項目時為警告。參見範本。

content-template ​

lint error warning

範本無法解析或無法用預設值渲染時為錯誤;沒有 name 時為警告。

content-locales ​

lint error warning

翻譯目錄缺少、沒有 .po 檔案,或者有檔名不是語言代碼的檔案時為錯誤;有執行檢查工具的 Nginx UI 沒有的語言的檔案,或者有其他項目時為警告。參見翻譯。

content-locale ​

lint error

某個翻譯檔案無法解析。

Released under the AGPL-3.0 License. (350eea3f)