如何验证GitHub仓库名称?Backstage脚手架仓库命名校验方案
Backstage脚手架仓库命名验证方案
一、GitHub仓库名称的验证规则与正则
GitHub仓库名称的官方规则:
- 可包含字母(大小写)、数字、连字符(
-)、下划线(_)、点(.) - 不能以连字符、下划线、点开头或结尾
- 长度限制在1-100字符以内
对应验证正则:
^[a-zA-Z0-9]+(?:[._-][a-zA-Z0-9]+)*$
搭配长度校验:需确保字符串长度在1-100之间。
二、Backstage中repoURL输入的命名规范强制方案
在Backstage的软件模板里,repoURL属于特殊的URL类型输入(通常绑定RepoUrlPicker组件),默认的pattern正则无法直接生效——因为组件会先解析URL,而非直接校验原始输入文本。可以通过以下两种方式解决:
方式1:为repoURL添加自定义验证逻辑
在template.yaml的inputs字段中,给repoURL配置custom验证器,通过JS代码解析URL并提取仓库名称进行校验:
inputs: - id: repoURL title: 仓库URL type: string ui:field: RepoUrlPicker validation: custom: message: "仓库名称不符合规范:仅允许字母、数字、连字符、下划线、点,且不能以特殊字符开头/结尾,长度1-100字符" code: | (value) => { // 匹配GitHub仓库URL,提取仓库名称部分 const githubRepoMatch = value.match(/^https?:\/\/github\.com\/[^\/]+\/([^\/\?#]+)/); if (!githubRepoMatch) return false; const repoName = githubRepoMatch[1]; // 应用命名规范正则与长度校验 const nameRule = /^[a-zA-Z0-9]+(?:[._-][a-zA-Z0-9]+)*$/; return nameRule.test(repoName) && repoName.length >= 1 && repoName.length <= 100; }
方式2:替换为自定义文本输入(可选)
如果不需要使用RepoUrlPicker组件的自动补全功能,可以将repoURL改为普通文本输入,直接用pattern校验:
inputs: - id: repoURL title: 仓库URL type: string pattern: "^https?:\\/\\/github\\.com\\/[^\\/]+\\/[a-zA-Z0-9]+(?:[._-][a-zA-Z0-9]+)*$" patternErrorMessage: "仓库URL不符合命名规范,请检查仓库名称部分"
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

