康维
康威权力 焊德共享,将高质量,精准的CAD带入网络. 这种为IFC和STEP格式专门设计的尖端CAD引擎提供了先进的几何表示,使团队能够以超乎寻常的精确度和速度打开并可视化复杂的模型.
康威包括两个主要子组件:
- IFC- gen (英语),一个大多是自动生成的 TypeScript 框架(~400kloc),用于对 IFC 2x3, 4 兼容的 API 覆盖解析
*.ifc文档和初始支持 步骤AP2xx*.step支持 Automotive 和 3D 打印应用程序的文件。 这是基于原始作品 hypar-io/IFC-gen 电源,由bldrs-ai为康威进一步发展. 运行时间在本计划中是完全开源的. 请与我们联系 以便我们完全进入我们的一代管道. - 连线地心 危险核心,bldrs-ai的重写 网络- ifc,为高性能而设计,支持国际金融公司和STEP家族内全套开放式CAD标准.
开始
代码设置
- 忽略以下内容并参考AGENTS.md.
窗口设置
- 安装 MinGW- 64 添加
g++.exe位置到您的 PATH 变量.
MacOS 设置
- 安装
gmake财务报告和审定财务报表node通过Homebrew的依赖性(brew install gmake node) (中文(简体) ).
EMSDK 设置
- 切开 EMSDK 服务器 复出并加入你的路径(见他们的指示)
- 康威正在使用
6.0.2(或运行)scripts/setup-emsdk.sh,它安装了被绑定的版本)
> cd $EMSDK
> ./emsdk install 6.0.2
> ./emsdk activate 6.0.2
> cd $CONWAY
conway> emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 6.0.2
...
初始构建
克隆 Conway 寄存器, 然后在寄存器的根目录 :
# Make sure EMSDK environment is set up.
yarn setup
yarn build
yarn test
示例用途
您现在可以装入您的 IFC 文件 。 从康威根:
yarn browser model.ifcyarn validator model.ifc "IFCWINDOW.OverallHeight <= 1500"
见文件全文 浏览器. md 财务报告和审定财务报表 验证器. md
发展
更新客户端自上次同步以来的更改 :
git pull
yarn setup
完全建造Conway(TypeScript)和Conway-geom(WASM次级项目):
yarn build
构建仅仅是conway,而不是conway-geom,例如用于仅更新Conway API或工具:
yarn build-incremental
在不构建凸起地( 无 EMSDK) 的情况下进行测试
欢乐套间装入平时生产的 Conway-geom WASM 二进制
由EMSDK/Genie本土建筑所建. 如果您只碰了 TypeScript, 您可以跳过
整个工具链: yarn setup 构建类型脚本( E)build-incremental(中文(简体) )
然后运行 yarn wasm-prebuilt,可以获取WASM Dist/ 捆绑从
最后发表的 @bldrs-ai/conway npm 软件包——如此新鲜 yarn setup && yarn test 工作没有 EMSDK。 以 CONWAY_PREBUILT_WASM_VERSION,或
刷新为 yarn wasm-prebuilt --force。 。 。 .
这是只为TS工作的便利——如果你改变 conway-geom
您必须做一个真实的子模块 yarn build 以获得匹配的二进制.
为了一个完整的,干净的重建:
yarn build-rebuild
您也可以使用 joest 进行测试 :
yarn test
最后,使用手表功能,您还可以在更改时自动重建代码,并使用:
yarn build-test-watch
IFC 解析控制台测试应用程序
Conway有一个测试应用程序,用于解析 IFC 步骤文件以查看性能,并在 src/core/ifc/ifc command line main.ts 中包含实体类型.
您可以设置一个别名来引用最新的软件包或从源创建并使用线程 cli:
alias conway='yarn cli'
OR
alias conway='npx --package=@bldrs-ai/conway@latest exec cli'
可以使用:
conway [ifc file path]
# To output geometry
conway -g [ifc file path]
# Use -m 1024 for larger files
CLI 几何输出选项
您现在可以使用 CLI 输出各种几何格式 :
conway [ifc file path] [options]
实例:
- 输出全部几何( 默认 GLTF + GLB ):
conway index.ifc --geometry - 只输出 GLTF :
conway index.ifc --geometry --gltf - 仅输出 GLB :
conway index.ifc --geometry --glb - 用 Draco 压缩输出 GLTF :
conway index.ifc --geometry --gltf-draco - 输出带有 Draco 压缩的 GLB :
conway index.ifc --geometry --glb-draco - 在不保存输出文件的情况下运行几何处理 :
conway index.ifc --geometry --nooutput
也可以根据需要合并旗帜. 例如:
conway index.ifc --geometry --gltf-draco --glb-draco
运行 conway --help 用于完整可用的旗帜和选项列表.
建议测试repo中包含的索引.ifc.
在节点中分析 WASM 构建
利用DWARF信息建立Conway-Geom WASM二进制,并生成带有WASM符号的火焰图,可以通过下列步骤进行:
- 运行 构建- profile-conway geom 从康威的包裹
- 配置您的应用程序 :
node --prof --experimental-specifier-resolution=node ./compiled/src/ifc/ifc_command_line_main.js <model.ifc> -g
- 将生成一个孤立 *.log 文件 。 运行 :
node --prof-process --preprocess -j isolate*.log > v8.json # generate a V8 log
- 转到 https://mapbox.github.io/flamebearer/ 页面存档备份,存于互联网档案馆 并放下日志文件,查看详细的火焰图.
GIT 合并中的重命名问题
由于conway中有大量文件是代码修改,有时会导致合并中的大量修改,特别是如果生成位置被改变,因此有时需要为合并而上调git配置中重命名次数的限制. 可以这样:
git config merge.renameLimit 99999
您还不妨对其中一些情况使用低重命名阈值不承诺合并策略,以增加文件在合并过程中关联的可能性并跟踪一些更复杂的变化:
git merge -X rename-threshold=25 --no-commit
CI 和测试
CI为 分级 因此,全公司回归+性能成本每笔支付一次 释放候选者,而不是每次推。 完整的结构、成本理由和 rc/re-bless/LFS 运行本 : 设计/新/部分后退费用。 。 。 .
每张公关都封上两张支票 .github/workflows/build.yml数字 :
| 任务 | 它会做什么 |
|---|---|
build | yarn install,WASM + TS 编译(WASM 缓存于 conway-geom sHA子模块, yarn test, (中文(简体) ), yarn lint,并检查在取回时的几何-Digest data/ 模特儿对抗忠心耿耿的金子. |
run-ifc-regression | needs: build重用相同的 WASM 缓存 。 将回归批次运行于 烟雾子集 (单位:千美元)regression/smoke_models.txt(a) 公众 test-models 参考(TEST_MODELS_REF默认值 main),被困在了解决的承诺SHA. 任何失败 failed.csv 行; 文摘 变动 信息化(通过可视-diff评论审查,在正弧处获得祝福)。 将每个PR的评论与解决的SHA + 烟雾镜一起张贴 failed.csv 编号 : errors.csv / perf 摘要,并上传候选 npm 沥青球 + perf.csv 作为工作流程的文物. |
A 类 concurrency 组取消被取代的 PR 运行( 主运行从不)
已取消, 因此发布总是完整). 合并为 main 重新运行这两个
任务,然后链入 auto-publish (见 释放 页:1.
完整的公共+私人人身保护令每一次公布候选人 - 推一个
rc-* 标签和 rc-regression.yml 重新生成每个基线(打开
每一试验型号的可审查基准PR) perf-three-* 任务运行
完整的基准。 参见上文链接的CI-cost doc中的运行本.
递归批次
本地可以引用同样批次的回归 CI 任务运行 回归/README.md 用于文摘 / 动词 / 批量模式和模型固定件目录。 CI 轨迹 TEST_MODELS_REF 靠近顶端 build.yml (默认) main)),决心每跑一次承诺SHA并记录在PR注释+工作摘要中,因此每跑一次都是可复制的而无需依赖测试-模型剪切标记.
A级:内部速查模式data/(中文(简体) )
这个 build 工作还运行一个快速, 隐形的几何门 每个 data/*.ifc 型号——无 test-models 克隆和没有符号,所以它保护 每一个公关包括叉子。 每个模型的几何文摘(相同) ifc_regression_main.js -d 消化批量的出产) 被分解出它的金子 data/<name>.csv; 不匹配失败 build 带有再无提示的提示。 金子是检查的(由CI被钉住的EMSDK工具链生成),所以门是 现场直播。 。 。 .
重出所想变化. 由于正确的文摘只能从新代码上的 CI 运行中得知,所以门首先失败: 同一文摘上传重制文摘和 tierA-goldens-<run_id> 艺术品,所以你下载它, 承诺新的 data/<name>.csv推着 一次公关,但一次失败的时空无阻的回转而不是一次编辑. 一个全新的 data/*.ifc 没有金子的模型 只会发出警告(它不会失败) 并以同样的方式释放出其候选者.
业绩基准
1级——CI中只使用Conway-perf(活性). 每一次回归都会发出一个 perf.csv 联 合 国 parseTimeMs / geometryTimeMs / totalTimeMs / rssMb / heapUsedMb / heapTotalMb 每个模型。 最上-最慢的10个被张贴在PR评论上;完整的CSV被上传为工作流程文物. 现有回归批次上的这个回扣 所以成本是~0额外跑道分数.
2级——CI中全无头-3平方英寸活. 两个工作,
perf-three-public 财务报告和审定财务报表 perf-three-private运行 rc-* 标签和
workflow_dispatch (单位:千美元)needs: run-ifc-regression)——每次释放一次
选手,不是每个合并, 所以每个模型的计时 保持低波动
被隔离的跑者(参见 部分递减成本
为什么频率,而不是跑道大小是成本杠杆。 每一次下载候选人 Conway tarball
返回任务包装, 克隆 无头 三
被钉住 H3_SHA,并迫使整个H3 → 适配器 → 接合链
候选人通过线条 resolutions 覆盖( 无) yarn link),然后运行
scripts/benchmark.cjs 给每个模特计时 公共职位a
每个模型表到合并后的公关;私人工作(test-models-private, (中文(简体) ),
打开 secrets.TEST_MODELS_PRIVATE_TOKEN从来没有在公关事件 所以叉子
不能泄露秘密)只公布汇总数据,所以没有私人模型
名称出现在公共线索中。 两者都计算出一个跨版本的 Delta vs
上一个 push: main 运行( 通过 .github/actions/perf-delta
复合动作)并上传细节CSV作为工作流程的文物.
释放
释放是连续的. 每个绿色合并到 main 自动标签和
发布到 npm 在 latest dis. 这个版本是
<major>.<commit>.<issue>-g<shorthash> 其中:
major来自package.json打开main(仅限第一部分; 在每一次发布之后,每一次发布都重述)commit实值git rev-list HEAD --count合并时的 (全球承诺立场)issue这是 第一个#N在合并中发送消息在此下 转帐#<issue>: description (#<pr>)标题公约,即 将合并关闭,而不是 PR 数字 壁球相接的附着物第二。 标题无问题 参考文献 附加的 PR 编号, 以及一个没有 PR 的 消息( 直接推) 改为main)还原为0shorthash是第一个 8 个字符git rev-parse HEAD,所以一个 已公布的版本名称 。 这是一个 切换没有git rev-parse --short- 见下文
第985期的321号合并结稿 main 发表
作为 1.985.321-g1a2b3c4d。没有 PR 编号编码,也不需要 :
散列名称 承诺名称 其公关.
为何承诺是次要的. npm 拒绝发布 a
除非
ditt-tag 被明确命名,并且 发行/PR 编号是 没有 单声道-
他们无序地降落,所以老人 <major>.<issue>.<commit> 计划
可能计算出一个低于全时最大值的版本, 且该版本的硬故障
发布(Conway#533). 承诺数是绝对单调的 main, (中文(简体) ),
所以,在小插槽里,每个放出 绝对大于
最后一个 发行号保持其可追踪值在补丁槽,
它不能颠倒命令.
为什么散列被切除,而不是被切除. 每个缩写
自动缩略语 财务报告和审定财务报表 --short=N 是一个 最低 宽度 :
以将结果相对于当前对象数据库保持唯一性。 开始
2.43, (韩语), git rev-parse --short=1 HEAD 返回四个字符,而不是一个;
根据同一规则 --short=8 开始返回九 二起
对象共享一个八字符前缀。 两者都算一个
不同 用于 repo 增长时相同承诺的版本字符串
恰好是散列可以复制的 断线
完全的散列只取决于承诺.
取舍:固定的截断 能够 撞来撞去,一个"出"字
缩写不能。 这一点在这里是可以接受的——承诺在
次要部分已经是每个任务独有的 main因此,散列是一个
方便指代人类 而不是识别钥匙 碰撞会
使两个版本共享后缀; 它不会使它们相等
命令不当.
为什么 -g 而不是赤裸的大麻. SemVer 不允许在其中出现领先的零
全部数字预发标识符,所以短的散列像 0512345 将
使该版本无效并未能发布(占承诺的0.4%)。 这个
g 前缀为 git describe 公约和确定标识符
字母数字。 大麻不能是四分点的部分
(单位:千美元)1.985.321.1a2b3c4d: SemVer 正好是三个数字组件,并且
npm 拒绝其他任何东西.
消费者必须精确地标注. 这个 -g<hash> 后缀使每个
已发布版本 a SemVer 预释,以及 ^编号 :~ 区域不匹配
预释. 共享已完全接通 Conway
(单位:千美元)"@bldrs-ai/conway": "1.594.1554";任何其他消费者必须这样做
相同或通过 latest ditt-tag( 秒数) (yarn add @bldrs-ai/conway@latest) (中文(简体) ).
自动推出的工作住在 .github/workflows/build.yml 运行为
needs: [build, run-ifc-regression] 打开 push: branches: [main]。
从合并中解析发行号
计算版本为 package.json + 键 src/version/version.ts 内
CI的工作树(没有承诺返回),重建,出版到npm
明确 --tag latest,然后标记合并承诺.
这个 --tag latest 无条件,必须: npm 永远不适用
latest 隐含 每个版本都是现在的.
(用于探测的一步) npm view @bldrs-ai/conway@latest version 财务报告和审定财务报表
只通过 --tag latest 当新版本失去比较时。 那个
与最高版本相比
曾经出版,而不是反对 latest ditt-tag, 探测器失败
打开后退为 0.0.0 任何错误,并采用隐含的
路径。 )
认证 : npm 通过 GitHub OIDC 信任出版. 一个信任的出版商
在 npmjs.com 上配置 @bldrs-ai/conway 绑定于此 repo +
build.yml无长寿 NPM_TOKEN 使用密钥; 工作流程
每次通过OIDC获得一个短命的发布符.
正常流量: 进行改变
- 用你的零钱打开公关 CI 运行
build财务报告和审定财务报表run-ifc-regression。 。 。 . - 一旦两张支票都是绿色的,就合并起来.
- 主推时,CI重跑
build+ 键run-ifc-regression,则auto-publish标记和船只。 监视动作中的工作流程运行 选项卡;新版本在合并后 ~5-10 分钟内的 npm 上.
弹出主
编辑 version 输入 package.json 在公关上
分节事项(每件事被重算后)。 譬如说,
变动 "version": "1.0.0" 改为 "version": "2.0.0" 开始
2.x.x 线条。 在那之后的第一台自动推放机
2.<commit>.<issue>-g<hash>。 。 。 .
没有手卷起的微小起落——承诺数生活在其中
插槽 - 横跨 1.x 线条看起来像
1.1556.546-g3eae7637, (中文(简体) ), 1.1557.610-g9f81cd0a等,每次合并一次.
卷入无头三和分享
同样的流动对双方都适用——真的 H3 先是共享数字 :
cd $H3_DIR
git fetch upstream # or origin if not on a fork
git checkout -b conway-<VERSION> upstream/main
# Edit package.json dep for @bldrs-ai/conway to "<VERSION>"
yarn install
yarn build && yarn test
yarn serve
# Smoke test the local candidate: load all sample models, load a local model,
# exercise dialogs, etc.
git add . && git commit -m "Upgrade conway from <OLD> to <VERSION>"
git push origin HEAD
然后说:
- 发送公关审查.
- 在合并时,Netlify自动构建并部署到 prod;监视部署日志.
- 烟道测试(与当地检查相同).
- 员额
#bot或者说#share: 有链接的"新康威"在prod 到更改日志.
保佑一个 stable 版本
共享 prod 在给定的 Conway 版本中验证后 :
# Create the GitHub release from the auto-pushed tag
gh release create <VERSION> --generate-notes
# Promote the npm package to the stable dist-tag
npm dist-tag add @bldrs-ai/conway@<VERSION> stable
路线图
CI/释放管道是连续的,并且 分级数字 : build (固定)和
run-ifc-regression (烟雾子集) 门 每个公关; 完整的公用+私有
无头3个个人工作 rc-* 释放候选人;
每次绿色合并到 main 自动出版(参见 释放) (中文(简体) ). 这个
结构、成本原理和rc/re-bless/LFS 运行本都在
设计/新/部分后退费用。退缩
使(可视-diff注释)和按型号 per-in-CI 发送
伞形瀑布 (# 316) 和性能 CI (# 314) 问题关闭.
打开后续
- 错误为硬门.
errors.csv重新生成和审查(和, 在弧度,祝福入基线),但公关不是 失败 意外发生 新错误——只针对解析/摘录失败(failed.csv) (中文(简体) ). 一个金发女郎 门可能故障 烟雾扫描错误churn 这不是一个预期的变化. - 烟花名人名录. 烟雾子集
regression/smoke_models.txt(中文(简体) ) 是一个手工挑选的散开; 当引擎故障表面移动时, 重温 哪些模型最能便宜地捕捉回归. - 平地地取地为地. 这个
perf-three-*任务后三角洲但不要 在回归时会失败弧; 阈值可以将perf变为放出门.