拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何为 diagrams 添加新的节点图标资源并用 autogen.sh 重新生成节点类

如何为 diagrams 添加新的节点图标资源并用 autogen.sh 重新生成节点类【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams在 diagrams 项目中所有节点类例如diagram.aws.compute.EC2都不是手写的而是由resources/目录下的图片资源文件自动生成的diagram.aws.compute.EC2类就是基于resources/aws/compute/ec2.png这个资源文件生成的。CONTRIBUTING.md 明确要求不要手动编辑diagrams/目录下的节点类文件。因此当你需要为某个云厂商添加一个新节点图标时正确的做法是把图片放进resources/provider/type/image运行./autogen.sh重新生成节点类再用单元测试确认没有破坏现有模块。节点类是如何从图片生成的理解生成规则有助于你正确命名图片文件。scripts/generate.py 会遍历resources/provider/下的子目录每个子目录对应一个节点类型typ对其中不含 rounded 的.png文件生成节点类templates/module.tmpl 展示了生成的模块结构# This module is automatically generated by autogen.sh. DO NOT EDIT. from . import _{{ pvd|up_or_title(pvd) }} class _{{ pvd|up_or_title(typ) }}(_{{ pvd|up_or_title(pvd) }}): _type {{ typ }} _icon_dir resources/{{ pvd }}/{{ typ }} class {{ meta[name] }}(_{{ pvd|up_or_title(typ) }}): _icon {{ meta[icon] }}类名由图片文件名决定去掉扩展名后按-分割逐词做 Upper/Title 化再拼接见 scripts/generate.py 中的gen_classes和 config.py 中的UPPER_WORDS/TITLE_WORDS规则。例如ec2.png生成EC2类。同时每个 provider 还会在 docs/nodes 下生成一份 API 文档docs/nodes/provider.md。如果你还希望为新节点设置别名需要修改 config.py 中的ALIASES映射CONTRIBUTING.md 的 Update Aliases 一节描述了这一流程。准备开发环境autogen.sh依赖四个命令行工具round、inkscape、convertImageMagick和black脚本开头会逐一检查缺失时直接报错退出如round is not installed。有两条环境搭建路径以下命令均取自 DEVELOPMENT.md。路径一Docker 开发镜像最短路径适合本机没有上述工具的情况。在 diagrams 仓库根目录构建镜像docker build --tag diagrams:1.0 -f ./docker/dev/Dockerfile .以后台方式创建容器并把项目源码挂载进去docker run -d \ -it \ --name diagrams \ --mount typebind,source$(pwd),target/usr/src/diagrams \ diagrams:1.0在宿主机上通过容器运行单元测试确认环境可用docker exec diagrams python -m unittest tests/*.py -v运行autogen.sh测试docker exec diagrams ./autogen.shDEVELOPMENT.md 的判定标准是单元测试和autogen.sh都正确运行即系统就绪。路径二本机Mac环境按 DEVELOPMENT.md 说明需要 Python、Go 和 brew然后# 1. 安装 poetry pip install poetry # 2. 安装项目 Python 依赖 poetry install # 3. 安装二进制依赖 brew install imagemagick inkscape black go install github.com/mingrammer/roundlatest # ln -sf ~/go/bin/round ~/.local/bin/round最后同样用python -m unittest tests/*.py -v和./autogen.sh各跑一遍验证。添加新的节点图标资源把新图标放到resources/provider/type/image其中provider是云厂商目录如aws、gcp、onpremtype是节点类型子目录如compute两者对应 config.py 中PROVIDERS列出的 provider。CONTRIBUTING.md 要求图片宽度或高度最大不超过 256 像素可用文档给出的两个命令之一缩放下面命令中的my_big_image.jpg、my_image.jpg/my_image.png是文档示例文件名替换成你自己的源图和目标图# ImageMagick convert -resize 256 my_big_image.jpg my_image.jpg # 或 FFmpeg ffmpeg -i my_big_image.jpg -vf scalew256:h256:force_original_aspect_ratiodecrease my_image.png注意最终参与生成的是.png文件scripts/generate.py 只筛选.png。如果新图属于某个尚无子目录的节点类型需要先在resources/provider/下创建该类型目录。运行 autogen.sh 重新生成节点类./autogen.shDocker 方式则用docker exec diagrams ./autogen.sh需要了解 autogen.sh 会做什么因为它会批量修改仓库文件对全部 16 个 provider 依次做资源预处理onprem/azure用 inkscape 把 svg 转 pngoci/ibm用 ImageMagick 转 png然后统一清理资源文件名aws额外把图片圆角化接着对每个 provider 运行python -m scripts.generate provider重写diagrams/provider/下的节点模块和docs/nodes/下的 API 文档再把resources复制到website/static/img/最后用black格式化diagrams下所有 Python 文件。也就是说即使你只加了一张图它也会重新生成整个仓库的节点模块——这是文档指定的唯一生成入口请在可提交、可回滚如干净的 git 工作区的状态下运行。验证生成结果运行单元测试确认现有模块未被破坏python -m unittest tests/*.py -vDocker 环境下对应docker exec diagrams python -m unittest tests/*.py -v。查看生成的模块文件diagrams/provider/type.py确认新节点类已按文件名规则生成且_icon_dir指向resources/provider/type。文件头部有自动生成的注释# This module is automatically generated by autogen.sh. DO NOT EDIT.说明该文件确实被脚本重写。查看docs/nodes/provider.md确认新节点出现在 API 文档中。限制与说明不要手动编辑diagrams/下的节点类文件任何手工修改都会在下次运行autogen.sh时被覆盖CONTRIBUTING.md。图片超过 256 像素宽或高不符合要求需先按上文命令缩放。autogen.sh中providers列表与 config.py 的PROVIDERS保持一致base与custom不在此列脚本对不在列表内的 provider 调用python -m scripts.generate时会直接退出。autogen.sh 中有注释azure icon set is not latest version说明 azure 的图标集并非最新版添加 azure 资源时需留意。生成依赖round、inkscape、convert、black四个工具同时存在任一缺失脚本会打印对应提示并退出需回到环境准备一节补齐。【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门