尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Backstage v1.12.0-next.1 更新解读:Scaffolder Zod Schema、TechDocs 代理与 501 错误处理全面落地
Backstage v1.12.0-next.1 更新解读Scaffolder Zod Schema、TechDocs 代理与 501 错误处理全面落地【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage本篇技术解读以 Backstage 官方变更日志 docs/releases/v1.12.0-next.1-changelog.md 为骨架梳理 v1.12.0 第二个预发布版本-next.1中所有 Minor Changes 与值得关注的 Patch Changes并结合当前仓库源码逐一验证实现细节。读完本文你将掌握如何用 Zod 替代手写 JSON Schema 定义 Scaffolder Action 的输入输出、如何为 TechDocs 的 AWS S3 存储配置 HTTPS 代理、如何理解并迁移 GitLab Discovery 的branch/fallbackBranch配置以及后端错误体系新增的NotImplementedError与 501 状态码映射机制。版本概览一次横跨 TechDocs、Catalog、Scaffolder 与后端平台的预发布v1.12.0-next.1 是 v1.12.0 正式版发布前的第二个next里程碑变更集中在四大方向Scaffolder 生态Action 的input/outputSchema 支持用 Zod 声明Minor任务流组件迁移至scaffolder-reactMinorTechDocs 工具链techdocs/cli generate --verbose输出 mkdocs 日志MinorTechDocs 节点层支持 AWS S3 的 HTTPS 代理MinorCatalog 数据接入增量摄取模块新增已知 Provider 列表端点MinorGitLab 发现配置branch弃用并迁移为fallbackBranch后端基础能力backstage/errors新增NotImplementedErrorbackend-app-api将其正确映射为 HTTP 501Patch。此外整个 monorepo 统一把msw依赖升级到^1.0.0并把大量组件中的黑白配色改为主题感知theme aware替换已废弃的Button为LinkButton。Scaffolder用 Zod 声明 Action 的 input/output SchemaMinor Changes 核心zod替代手写 JS/TS 类型与 JSON Schema本次变更日志中最值得关注的开发体验提升来自 plugins/scaffolder-backend7d724d8ef56: Added the ability to be able to define an actionsinputandoutputschema usingzodinstead of hand writing types andjsonschema在此之前编写一个 Scaffolder Action 需要同时维护三份东西TS 类型定义、手写 JSON Schema、以及 Action 的 handler 实现。现在你可以在createTemplateAction中直接以 Zod 回调函数的形式声明schema.input与schema.output类型与校验规则只需写一次。源码级实现从 Zod 到 JSON Schema 的转换链路在 plugins/scaffolder-node/src/actions/createTemplateAction.ts 中createTemplateAction的类型签名同时支持两种写法键值对回调对象{ [key in string]: (zImpl: typeof z) z.ZodType }即每个字段一个(z) z.string()形式的函数整体函数定义(zImpl: typeof z) z.ZodType即一个返回完整 Zod Schema 的函数。函数实现内部会调用parseSchemas完成转换。在 plugins/scaffolder-node/src/actions/util.ts 中可以清楚看到这条链路import zodToJsonSchema from zod-to-json-schema; import { z } from zod/v3; export const parseSchemas ( action: TemplateActionOptionsany, any, any, ): { inputSchema?: Schema; outputSchema?: Schema } { // 键值对回调对象写法逐字段调用 z 生成对象 Schema if (isKeyValueZodCallback(action.schema.input)) { const input z.object( Object.fromEntries( Object.entries(action.schema.input).map(([k, v]) [k, v(z)]), ), ); return { inputSchema: zodToJsonSchema(input) as Schema, outputSchema: isKeyValueZodCallback(action.schema.output) ? (zodToJsonSchema( z.object( Object.fromEntries( Object.entries(action.schema.output).map(([k, v]) [k, v(z)]), ), ), ) as Schema) : undefined, }; } // 整体函数写法直接调用得到 ZodType 后转换 if (isZodFunctionDefinition(action.schema.input)) { return { inputSchema: zodToJsonSchema(action.schema.input(z)) as Schema, outputSchema: isZodFunctionDefinition(action.schema.output) ? (zodToJsonSchema(action.schema.output(z)) as Schema) : undefined, }; } return { inputSchema: undefined, outputSchema: undefined }; };关键点在于运行时系统内部仍然消费 JSON Schemazod-to-json-schema负责把 Zod 对象转换为jsonschema格式的Schema因此表单渲染、校验、文档生成等既有链路完全不受影响而handler的ctx.input类型则通过z.inferReturnTypeTInputSchema[key]从 Zod 定义自动推导实现声明即类型。从源码结构看这一能力是向后兼容的——不传schema或仍传手写 JSON Schema 的旧 Action 依旧可用。配套变化uiSchema独立成属性、任务流组件迁移同一版本中 plugins/scaffolder-react 的两项调整与上述能力直接相关44941fc97eb在 validationcontext中把uiSchema挪到独立属性与组件开发及ui:options的访问方式对齐避免校验逻辑与uiSchema混在同一命名空间8f4d13f21cf与 plugins/scaffolder 同步useTaskStream、TaskBorder、TaskLogStream、TaskSteps从plugin-scaffolder移入plugin-scaffolder-react使任务流 UI 能力可以在非 Scaffolder 插件例如自定义前端插件中复用。此外值得记录的 Scaffolder 修复与改进还包括be3cddaab5fRepoUrlPicker获取凭据的逻辑现在也支持没有 owner 的目标典型场景为 Bitbucket Server 的project/repo结构本次同步更新了 plugins/scaffolder-node/src/actions/util.ts 中parseRepoUrl对不同 SCM 类型的必填参数校验分支eb877bad736当给scaffolder/next传入分组时未分组的模板会自动归入 Other Templates 分组避免模板无处安放。TechDocsCLI 输出 mkdocs 日志S3 请求支持 HTTPS 代理techdocs/cli generate --verbose直接透传 mkdocs 输出TechDocs 的本地生成调试一直是痛点techdocs-cli在容器内执行mkdocs build一旦失败很难定位是哪个 mkdocs 插件或语法出了问题。本次 packages/techdocs-cli 的 Minor Change 解决了这个问题8e465ce52e2: Runningtechdocs/cli generatewith the--verboseflag will now print the mkdocs output.升级后执行生成命令时加上--verbose即可把 mkdocs 的实时输出直接打印到终端yarn techdocs-cli generate --source-dir ./docs --output-dir ./site --verbose在排查 mkdocs-material 版本兼容、插件加载失败等问题时这一参数能让错误定位从黑盒变为开箱即查。plugin-techdocs-nodeAWS S3 请求的 HTTPS 代理支持另一项 Minor Changeea2bbef1b16同时出现在techdocs/cli与 plugins/techdocs-node 的变更中为 TechDocs 的 AWS S3 发布器增加了HTTPS 代理支持。对于部署在需要出网代理的企业网络中的 Backstage 实例此前 S3 上传请求无法走代理导致 TechDocs 站点发布失败本版本通过底层请求库packages/integration-aws-node 的依赖升级同步引入支持了标准 HTTPS 代理环境变量配置。相关修复与前端联动bfe350ef4ce修复删除陈旧文件时如果目标目录同时包含非空子目录会删除失败的 bug保证了 TechDocs 重新构建后旧静态资源的彻底清理plugins/techdocs 前端侧54a1e133b56修复了特定 mkdocs-material 版本下 Next/Previous 翻页链接失效的问题238cf657c09让复制到剪贴板在非安全上下文非 HTTPS 页面中也能工作plugins/techdocs-backend 的40298b02778增强了构建失败时对文档找不到原因的解释性错误信息。Catalog增量摄取 Provider 列表端点与 GitLab 配置迁移增量摄取查询已知 Provider 的新端点plugins/catalog-backend-module-incremental-ingestion 本次升级到0.3.0-next.1带来一项 Minor Changea811bd246c4: Added endpoint to get a list of known incremental entity providers配合该项新端点运维人员可以通过 HTTP 接口直接查看当前已注册的增量实体 Provider 清单用于排查某个 Provider 是否被正确注册/加载的常见问题而不必翻查启动日志。GitLab Discoverybranch弃用改用fallbackBranch这是一个必须主动跟进的破坏性虽不立即生效变更来自 plugins/catalog-backend-module-gitlabaf1095f1e11: The configuration keybranchof theGitlabDiscoveryEntityProviderhas been deprecated in favor of the configuration keyfallbackBranch. It will be reused in future release to enforce a concrete branch to be used in catalog file discovery. To migrate, renamebranchtofallbackBranch.即GitlabDiscoveryEntityProvider的配置项branch更名为fallbackBranch未来版本将复用branch这个键来强制指定catalog 文件发现使用的具体分支。迁移方式非常直接——把 app-config 中的branch键改名为fallbackBranch即可catalog: providers: gitlab: yourProviderId: host: gitlab.example.com group: backstage # 迁移前branch: master # 迁移后 fallbackBranch: master从源码 plugins/catalog-backend-module-gitlab/src/providers/config.ts 可以看到配置解析的完整逻辑branch仍通过config.getOptionalString(branch)读取兼容期保留而fallbackBranch默认值为masterconst branch config.getOptionalString(branch); const fallbackBranch config.getOptionalString(fallbackBranch) ?? master;同一文件中还可以看到GitlabDiscoveryEntityProvider的其它可用配置项group、host、entityFilename默认catalog-info.yaml、projectPattern/userPattern/groupPattern、useSearch、orgEnabled、allowInherited、relations、skipForkedRepos、includeArchivedRepos、excludeRepos、schedule、restrictUsersToGroup、includeUsersWithoutSeat、topics等。Catalog 核心与前端批处理查询修复、columns属性扩展plugins/catalog-backend 的f093ce83d58修复了按 ref 批量获取端点在叠加过滤条件例如开启鉴权后时失效的 bugplugins/catalog 与 plugins/api-docs 的c9a9f3c834f/9820eb5d24f为基于EntityTable的组件新增columnsprop便于按需自定义列7e8930ae1c6修复CatalogSearchResultListItem中图标对齐问题。后端平台NotImplementedError与 501 状态码backstage/errors新增标准错误类型packages/errors 的3bf83a2aabf新增了NotImplementedError语义定义为服务器无法识别请求方法且无法为任何资源支持该方法。该错误继承自CustomErrorBase与InputError、NotFoundError、ConflictError等并列实现在 packages/errors/src/errors/common.ts/** * The server does not support the functionality required to fulfill the request. * * public */ export class NotImplementedError extends CustomErrorBase { name NotImplementedError as const; }从源码注释可以看出这类错误专门设计为被后端错误处理中间件识别并翻译成规范的 HTTP 响应。backend-app-api错误到 HTTP 501 的映射packages/backend-app-api 的915e46622cf正是补上了这一环——它让错误处理逻辑识别NotImplementedError并正确返回 501 状态码。这意味着插件或自定义后端模块在实现尚未支持的接口时可以直接抛出NotImplementedError由框架层统一转换为符合 HTTP 语义的501 Not Implemented响应而不是笼统的 500。其它后端基础设施变更packages/backend-defaults 的5d0693edc09为backstage/backend-common与backstage/backend-app-api之间的循环依赖 bug 增加了 workaroundplugins/permission-node 的27a103ca07b放宽了 createPermissionIntegrationRouter 的 API——getResources、resourceType、rules均变为可选让仅需权限列表注册的简单场景不必再传空实现plugins/linguist-backend 的b271d5ca052允许通过kind配置指定要处理的实体类型return createRouter({ schedule: schedule, kind: [Component] }, { ...env });大量后端包的文档链接统一更新482dae5de1c。前端组件与 UI 一致化主题感知、LinkButton与无障碍本次版本中一个横切几乎所有前端插件的主题是UI 一致化具体表现为三条贯穿性变更黑白配色主题感知cb8ec97cdebplugin-catalog、core-components、plugin-azure-sites、plugin-code-climate、plugin-code-coverage、plugin-explore、plugin-firehydrant、plugin-gcalendar、plugin-git-release-manager、plugin-ilert、plugin-microsoft-calendar、plugin-newrelic-dashboard、plugin-org、plugin-shortcuts、plugin-tech-radar、plugin-techdocs等插件中硬编码的黑色/白色字色与背景色改为从当前主题theme取值解决了暗色主题下文字不可见的问题LinkButton替换废弃Buttonc10384a9235core-components、plugin-scaffolder、plugin-circleci、plugin-entity-validation、plugin-explore、plugin-kubernetes、plugin-playlist、plugin-techdocs统一改用LinkButton无障碍改进core-components的e1aae2f5a0c更新了HeaderTabs组件的aria-label。另外 plugins/tech-radar 的e14dcfa4994将配色更新为与 Zalando 的 Tech Radar 一致并为标题和图例增加了与环ring颜色匹配的上色。工程化与依赖升级msw 1.0 时代本版本中一个全仓库范围的 Patch 级变更值得注意mswMock Service Worker依赖从0.x统一升级到^1.0.052b0022dab7波及plugin-scaffolder、plugin-scaffolder-backend、backend-common、catalog-client、core-app-api、core-components、core-plugin-api、integration、test-utils以及绝大多数插件包。对应用开发者而言这意味着测试环境的 mock 基础设施切换到 msw 1.x 语义如果自建测试中直接依赖了 msw 的内部 API升级时需对照 msw 1.0 的破坏性变更说明进行调整对普通使用者则基本无感知。packages/cli 侧同步做了配套更新9bf50a36674模板中的msw版本直接提升到1.0.01ad8d885d30修复本地开发时后端包额外入口未被正确标记为 internal 的问题867f4752ca1yarn start --check启用的 ESLint 插件配置现在只捡取有效的源文件a11b9a23f5a保留 package.json 中自定义的 exports 入口4b4998466b4del依赖升级到^7.0.0。升级建议与注意事项结合本版本变更建议在升级到 v1.12.0及其中间版本时重点核对以下几点GitLab Discovery 配置迁移立即把catalog.providers.gitlab.id.branch重命名为fallbackBranch默认值为master避免未来版本branch语义变更带来的行为差异NotImplementedError使用自定义后端模块中遇到方法/能力尚未实现的场景优先抛出 packages/errors 的NotImplementedError框架会自动返回 501便于调用方准确区分不存在404与未实现501Scaffolder Action 重写新编写的 Action 可直接使用 Zod 声明input/outputSchema参考 plugins/scaffolder-node/src/actions/createTemplateAction.ts运行时由parseSchemas转换为 JSON Schema类型由z.infer自动推导TechDocs S3 出网环境如部署在需要代理的网络中升级techdocs/cli与plugin-techdocs-node后可正常走 HTTPS 代理发布 S3 存储调试生成失败时善用--verbose依赖升级msw 1.0 升级主要影响测试代码scaffolder-react中的任务流组件导出是新增位置若曾直接从plugin-scaffolder内部路径导入这些符号请改为从plugin-scaffolder-react导入。完整变更明细可对照 docs/releases/v1.12.0-next.1-changelog.md并参考本仓库中对应包的CHANGELOG.md例如 packages/backend-app-api/CHANGELOG.md、packages/errors/CHANGELOG.md追踪正式发布前的后续迭代。【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

CYW240128+ESP32+FPGA协同开发实战指南

CYW240128+ESP32+FPGA协同开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/12 1:26:57
10分钟整合20+平台:Playnite开源游戏库管理完整指南

10分钟整合20+平台:Playnite开源游戏库管理完整指南

10分钟整合20平台:Playnite开源游戏库管理完整指南 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址: https:…

📅 2026/9/12 1:26:57
设计模式:迭代器模式(Iterator Pattern)

设计模式:迭代器模式(Iterator Pattern)

/*** 迭代器模式。* author Bright Lee*/ public class IteratorPattern {public static void main(String[] args) {String[] strings new String[] {"红烧肉","鱼香肉丝","毛血旺"};Iterator<String> it new StringIterator(strings);…

📅 2026/9/12 1:21:57
MORE NEWS

更多资讯

📰

ruflo 层级协调器实战指南:Queen 主导的智能体分群编排与超球注意力机制解析

ruflo 层级协调器实战指南&#xff1a;Queen 主导的智能体分群编排与超球注意力机制解析 【免费下载链接】ruflo &#x1f30a; The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems.…

📰

秒档导出助手怎么用?农特产原产地直播带货用抖音聊天记录导出做品控与理赔留痕

摘要 农特产原产地直播带货&#xff0c;卖的是"产地直发、所见即所得"&#xff0c;但最容易翻车的也恰恰是这两点&#xff1a;发货前说好的品控标准、发货时效&#xff0c;到手之后对不上&#xff1b;坏果、缺斤少两的理赔&#xff0c;往往因为聊天记录散在抖音里说不…

📰

SerenityOS RAMFS 文件系统深入解析:基于内存的 /tmp 与 /dev 实现原理

SerenityOS RAMFS 文件系统深入解析&#xff1a;基于内存的 /tmp 与 /dev 实现原理 【免费下载链接】serenity The Serenity Operating System &#x1f41e; 项目地址: https://gitcode.com/GitHub_Trending/se/serenity RAMFS 是 SerenityOS 内核中一个完全基于内存&a…

📰

WezTerm 的 `font_shaper` 配置详解:从字形整形原理到 HarfBuzz 实践

WezTerm 的 font_shaper 配置详解&#xff1a;从字形整形原理到 HarfBuzz 实践 【免费下载链接】wezterm A GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust 项目地址: https://gitcode.com/GitHub_Trending/we/w…

📰

茶器艺科智造HarmonyOS应用实战-05-写死0.22mm层高,70mm杯体为何显示0.29mm:给演示切片估算划清边界

茶器艺科智造HarmonyOS应用实战-05-写死0.22mm层高&#xff0c;70mm杯体为何显示0.29mm&#xff1a;给演示切片估算划清边界 在一个茶器建模演示里&#xff0c;页面入口内部把目标层高写成 0.22 mm&#xff1b;70 mm 高的杯体生成后&#xff0c;结果弹窗却显示“层高约 0.29 m…

📰

Neuropixels 数据可视化实战指南:用 SpikeInterface 绘制发表级科研图表(scientific-agent-skills / neuropixels-analysis)

Neuropixels 数据可视化实战指南&#xff1a;用 SpikeInterface 绘制发表级科研图表&#xff08;scientific-agent-skills / neuropixels-analysis&#xff09; 【免费下载链接】scientific-agent-skills Turn any AI agent into an AI Scientist. The #1 Agent Skills library…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬