[{"data":1,"prerenderedAt":1003},["ShallowReactive",2],{"content-doc-\u002Fzh\u002Fblogs\u002Fsig-new-app-creation":3,"surround-\u002Fzh\u002Fblogs\u002Fsig-new-app-creation":1001},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"category":11,"author":12,"body":16,"_type":993,"_id":994,"_source":995,"_file":996,"_stem":997,"_extension":998,"plainText":999,"authorNames":1000},"\u002Fzh\u002Fblogs\u002Fsig-new-app-creation","blogs",false,"","openUBMC社区新建仓库指南","本指南详细介绍了在openUBMC社区创建新代码仓库的标准流程与最佳实践，旨在帮助贡献者高效完成组件提交与集成。","2025\u002F12\u002F15","guide",[13],{"name":14,"description":15},"openUBMC小助手","openUBMC小助手是openUBMC社区的活跃推手，专注于为开发者提供前沿技术动态、深度文章解析以及丰富的社区互动内容，致力于打造一个开放、互助、充满活力的技术社区，助力每一位成员在技术探索中不断进步。",{"type":17,"children":18,"toc":983},"root",[19,27,33,39,44,77,92,97,113,135,140,146,163,250,263,268,341,345,350,366,379,438,442,594,600,605,619,624,636,665,909,921,934,939,944,949,967,972,977],{"type":20,"tag":21,"props":22,"children":24},"element","h1",{"id":23},"openubmc社区新建仓库指南",[25],{"type":26,"value":8},"text",{"type":20,"tag":28,"props":29,"children":30},"p",{},[31],{"type":26,"value":32},"在开源社区中贡献代码、共享组件，是推动技术进步和生态繁荣的重要方式。在openUBMC社区中，每一个APP都需通过一个独立的代码仓库进行管理。本文旨在为希望在openUBMC社区中创建新仓库的开发者或贡献者，提供一份完整、清晰的操作指南。无论您是希望贡献一个全新的功能模块，还是计划将一个现有项目迁移到社区，遵循本指南将帮助您高效地完成从构思、评审到最终集成的全流程，让您的创意与努力顺利融入社区中。",{"type":20,"tag":34,"props":35,"children":37},"h2",{"id":36},"新增组件评审",[38],{"type":26,"value":36},{"type":20,"tag":28,"props":40,"children":41},{},[42],{"type":26,"value":43},"根据社区运作规则，组件创建者需要向社区TC申请，在TC例会中评审并通过后才可以创建。为了保证会上评审的质量和效率，需要在会前准备好以下信息，以便TC委员更好地评估申请。",{"type":20,"tag":45,"props":46,"children":47},"ul",{},[48,54,67,72],{"type":20,"tag":49,"props":50,"children":51},"li",{},[52],{"type":26,"value":53},"**组件的名字和职责：**需要明确组件的名字和职责，以及组件的实现思路、长期发展是否符合社区整体方向。",{"type":20,"tag":49,"props":55,"children":56},{},[57,59,65],{"type":26,"value":58},"**组件所属的SIG：**需要明确组件的归属，",{"type":20,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":26,"value":64},"建议提前与你认为合适的SIG组Maintainer进行讨论",{"type":26,"value":66},"。如果希望新增SIG，可以将SIG申请和组件申请合并成一个议题。",{"type":20,"tag":49,"props":68,"children":69},{},[70],{"type":26,"value":71},"**组件的License：**如果组件涉及引入三方库，需要明确其使用的License，确保新增组件使用的License符合社区规范。",{"type":20,"tag":49,"props":73,"children":74},{},[75],{"type":26,"value":76},"**组件的编程语言：**主要用于评估当前社区CICD是否支持，若不支持则需要与Infra、CICD持续合作确保组件可被覆盖。",{"type":20,"tag":78,"props":79,"children":80},"blockquote",{},[81],{"type":20,"tag":28,"props":82,"children":83},{},[84,90],{"type":20,"tag":85,"props":86,"children":87},"span",{},[88],{"type":26,"value":89},"!NOTE",{"type":26,"value":91},"注意：\n可以利用SIG例会、社区邮件、社区论坛等途径提前沟通，确保会前便得到一些TC委员的支持，增加会上评审的通过率。",{"type":20,"tag":34,"props":93,"children":95},{"id":94},"创建仓库",[96],{"type":26,"value":94},{"type":20,"tag":28,"props":98,"children":99},{},[100,102,111],{"type":26,"value":101},"当完成社区评审后，需要通过",{"type":20,"tag":103,"props":104,"children":108},"a",{"href":105,"rel":106},"https:\u002F\u002Fgitcode.com\u002Fopenubmc\u002Fcommunity",[107],"nofollow",[109],{"type":26,"value":110},"community",{"type":26,"value":112},"仓库完成仓库的自动创建。",{"type":20,"tag":28,"props":114,"children":115},{},[116,118,125,127,133],{"type":26,"value":117},"每个SIG的目录中，都会存在两个文件，分别是",{"type":20,"tag":119,"props":120,"children":122},"code",{"className":121},[],[123],{"type":26,"value":124},"sig-info.yaml",{"type":26,"value":126},"（保存SIG组信息）和",{"type":20,"tag":119,"props":128,"children":130},{"className":129},[],[131],{"type":26,"value":132},"repo-info.yaml",{"type":26,"value":134},"（保存SIG组对应的Repo仓库信息）文件。所有由该SIG管理的代码仓库，其信息都记录在这两个对应的YAML文件中。",{"type":20,"tag":28,"props":136,"children":137},{},[138],{"type":26,"value":139},"修改对应的代码文件，提交PR时附上TC评审结论即可，TC委员将在1-2个工作日内合入PR。",{"type":20,"tag":141,"props":142,"children":144},"h3",{"id":143},"repo-infoyaml",[145],{"type":26,"value":132},{"type":20,"tag":28,"props":147,"children":148},{},[149,154,156,161],{"type":20,"tag":119,"props":150,"children":152},{"className":151},[],[153],{"type":26,"value":132},{"type":26,"value":155}," 文件描述了 SIG 组的",{"type":20,"tag":60,"props":157,"children":158},{},[159],{"type":26,"value":160},"仓库信息",{"type":26,"value":162},"，包含如下基本元素：",{"type":20,"tag":164,"props":165,"children":166},"table",{},[167,192],{"type":20,"tag":168,"props":169,"children":170},"thead",{},[171],{"type":20,"tag":172,"props":173,"children":174},"tr",{},[175,182,187],{"type":20,"tag":176,"props":177,"children":179},"th",{"align":178},"left",[180],{"type":26,"value":181},"名称",{"type":20,"tag":176,"props":183,"children":184},{"align":178},[185],{"type":26,"value":186},"类型",{"type":20,"tag":176,"props":188,"children":189},{"align":178},[190],{"type":26,"value":191},"说明",{"type":20,"tag":193,"props":194,"children":195},"tbody",{},[196,215,232],{"type":20,"tag":172,"props":197,"children":198},{},[199,205,210],{"type":20,"tag":200,"props":201,"children":202},"td",{"align":178},[203],{"type":26,"value":204},"name",{"type":20,"tag":200,"props":206,"children":207},{"align":178},[208],{"type":26,"value":209},"字符串",{"type":20,"tag":200,"props":211,"children":212},{"align":178},[213],{"type":26,"value":214},"仓库名称",{"type":20,"tag":172,"props":216,"children":217},{},[218,223,227],{"type":20,"tag":200,"props":219,"children":220},{"align":178},[221],{"type":26,"value":222},"description",{"type":20,"tag":200,"props":224,"children":225},{"align":178},[226],{"type":26,"value":209},{"type":20,"tag":200,"props":228,"children":229},{"align":178},[230],{"type":26,"value":231},"仓库包含组件的描述",{"type":20,"tag":172,"props":233,"children":234},{},[235,240,245],{"type":20,"tag":200,"props":236,"children":237},{"align":178},[238],{"type":26,"value":239},"type",{"type":20,"tag":200,"props":241,"children":242},{"align":178},[243],{"type":26,"value":244},"枚举类型，可选 public 或者 private",{"type":20,"tag":200,"props":246,"children":247},{"align":178},[248],{"type":26,"value":249},"仓库是否可公开访问",{"type":20,"tag":28,"props":251,"children":252},{},[253,255,261],{"type":26,"value":254},"在某些场景下，如果不想在仓库ready前正式公开，可以在创建的时候选择",{"type":20,"tag":119,"props":256,"children":258},{"className":257},[],[259],{"type":26,"value":260},"private",{"type":26,"value":262},"，默认SIG的Maintainer有权限访问仓库，并通过Maintainer邀请加入仓库。",{"type":20,"tag":28,"props":264,"children":265},{},[266],{"type":26,"value":267},"例：",{"type":20,"tag":269,"props":270,"children":274},"pre",{"className":271,"code":272,"language":273,"meta":7,"style":7},"language-yaml shiki shiki-themes github-light github-dark monokai","- name: mdb_interface\n  description: \"Resource collaboration APIs definition\"\n  type: public\n","yaml",[275],{"type":20,"tag":119,"props":276,"children":277},{"__ignoreMap":7},[278,305,323],{"type":20,"tag":85,"props":279,"children":282},{"class":280,"line":281},"line",1,[283,289,294,299],{"type":20,"tag":85,"props":284,"children":286},{"style":285},"--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[287],{"type":26,"value":288},"- ",{"type":20,"tag":85,"props":290,"children":292},{"style":291},"--shiki-default:#22863A;--shiki-dark:#85E89D;--shiki-sepia:#F92672",[293],{"type":26,"value":204},{"type":20,"tag":85,"props":295,"children":296},{"style":285},[297],{"type":26,"value":298},": ",{"type":20,"tag":85,"props":300,"children":302},{"style":301},"--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[303],{"type":26,"value":304},"mdb_interface\n",{"type":20,"tag":85,"props":306,"children":308},{"class":280,"line":307},2,[309,314,318],{"type":20,"tag":85,"props":310,"children":311},{"style":291},[312],{"type":26,"value":313},"  description",{"type":20,"tag":85,"props":315,"children":316},{"style":285},[317],{"type":26,"value":298},{"type":20,"tag":85,"props":319,"children":320},{"style":301},[321],{"type":26,"value":322},"\"Resource collaboration APIs definition\"\n",{"type":20,"tag":85,"props":324,"children":326},{"class":280,"line":325},3,[327,332,336],{"type":20,"tag":85,"props":328,"children":329},{"style":291},[330],{"type":26,"value":331},"  type",{"type":20,"tag":85,"props":333,"children":334},{"style":285},[335],{"type":26,"value":298},{"type":20,"tag":85,"props":337,"children":338},{"style":301},[339],{"type":26,"value":340},"public\n",{"type":20,"tag":342,"props":343,"children":344},"hr",{},[],{"type":20,"tag":141,"props":346,"children":348},{"id":347},"sig-infoyaml",[349],{"type":26,"value":124},{"type":20,"tag":28,"props":351,"children":352},{},[353,358,359,364],{"type":20,"tag":119,"props":354,"children":356},{"className":355},[],[357],{"type":26,"value":124},{"type":26,"value":155},{"type":20,"tag":60,"props":360,"children":361},{},[362],{"type":26,"value":363},"人员和权限信息",{"type":26,"value":365},"，针对新增组件，如果无需单独配置Committers，则无需改动。**默认所有Maintainer都拥有该仓库的合入权限。",{"type":20,"tag":28,"props":367,"children":368},{},[369,371,377],{"type":26,"value":370},"如果需要配置Committers，则需要修改",{"type":20,"tag":119,"props":372,"children":374},{"className":373},[],[375],{"type":26,"value":376},"repositories",{"type":26,"value":378},"配置：",{"type":20,"tag":164,"props":380,"children":381},{},[382,400],{"type":20,"tag":168,"props":383,"children":384},{},[385],{"type":20,"tag":172,"props":386,"children":387},{},[388,392,396],{"type":20,"tag":176,"props":389,"children":390},{"align":178},[391],{"type":26,"value":181},{"type":20,"tag":176,"props":393,"children":394},{"align":178},[395],{"type":26,"value":186},{"type":20,"tag":176,"props":397,"children":398},{"align":178},[399],{"type":26,"value":191},{"type":20,"tag":193,"props":401,"children":402},{},[403,421],{"type":20,"tag":172,"props":404,"children":405},{},[406,411,416],{"type":20,"tag":200,"props":407,"children":408},{"align":178},[409],{"type":26,"value":410},"repo",{"type":20,"tag":200,"props":412,"children":413},{"align":178},[414],{"type":26,"value":415},"Array",{"type":20,"tag":200,"props":417,"children":418},{"align":178},[419],{"type":26,"value":420},"需要独立配置的仓库名称列表",{"type":20,"tag":172,"props":422,"children":423},{},[424,429,433],{"type":20,"tag":200,"props":425,"children":426},{"align":178},[427],{"type":26,"value":428},"committers",{"type":20,"tag":200,"props":430,"children":431},{"align":178},[432],{"type":26,"value":415},{"type":20,"tag":200,"props":434,"children":435},{"align":178},[436],{"type":26,"value":437},"该仓库配置的Committers列表",{"type":20,"tag":28,"props":439,"children":440},{},[441],{"type":26,"value":267},{"type":20,"tag":269,"props":443,"children":445},{"className":271,"code":444,"language":273,"meta":7,"style":7},"repositories:\n  - repo:\n      - openUBMC\u002Frepo_1\n      - openUBMC\u002Frepo_2\n    committers:\n      - gitcode_id: committer_1\n        name: Committer 1 Name\n      - gitcode_id: committer_2\n        name: Committer 2 Name\n",[446],{"type":20,"tag":119,"props":447,"children":448},{"__ignoreMap":7},[449,461,477,490,503,516,538,556,577],{"type":20,"tag":85,"props":450,"children":451},{"class":280,"line":281},[452,456],{"type":20,"tag":85,"props":453,"children":454},{"style":291},[455],{"type":26,"value":376},{"type":20,"tag":85,"props":457,"children":458},{"style":285},[459],{"type":26,"value":460},":\n",{"type":20,"tag":85,"props":462,"children":463},{"class":280,"line":307},[464,469,473],{"type":20,"tag":85,"props":465,"children":466},{"style":285},[467],{"type":26,"value":468},"  - ",{"type":20,"tag":85,"props":470,"children":471},{"style":291},[472],{"type":26,"value":410},{"type":20,"tag":85,"props":474,"children":475},{"style":285},[476],{"type":26,"value":460},{"type":20,"tag":85,"props":478,"children":479},{"class":280,"line":325},[480,485],{"type":20,"tag":85,"props":481,"children":482},{"style":285},[483],{"type":26,"value":484},"      - ",{"type":20,"tag":85,"props":486,"children":487},{"style":301},[488],{"type":26,"value":489},"openUBMC\u002Frepo_1\n",{"type":20,"tag":85,"props":491,"children":493},{"class":280,"line":492},4,[494,498],{"type":20,"tag":85,"props":495,"children":496},{"style":285},[497],{"type":26,"value":484},{"type":20,"tag":85,"props":499,"children":500},{"style":301},[501],{"type":26,"value":502},"openUBMC\u002Frepo_2\n",{"type":20,"tag":85,"props":504,"children":506},{"class":280,"line":505},5,[507,512],{"type":20,"tag":85,"props":508,"children":509},{"style":291},[510],{"type":26,"value":511},"    committers",{"type":20,"tag":85,"props":513,"children":514},{"style":285},[515],{"type":26,"value":460},{"type":20,"tag":85,"props":517,"children":519},{"class":280,"line":518},6,[520,524,529,533],{"type":20,"tag":85,"props":521,"children":522},{"style":285},[523],{"type":26,"value":484},{"type":20,"tag":85,"props":525,"children":526},{"style":291},[527],{"type":26,"value":528},"gitcode_id",{"type":20,"tag":85,"props":530,"children":531},{"style":285},[532],{"type":26,"value":298},{"type":20,"tag":85,"props":534,"children":535},{"style":301},[536],{"type":26,"value":537},"committer_1\n",{"type":20,"tag":85,"props":539,"children":541},{"class":280,"line":540},7,[542,547,551],{"type":20,"tag":85,"props":543,"children":544},{"style":291},[545],{"type":26,"value":546},"        name",{"type":20,"tag":85,"props":548,"children":549},{"style":285},[550],{"type":26,"value":298},{"type":20,"tag":85,"props":552,"children":553},{"style":301},[554],{"type":26,"value":555},"Committer 1 Name\n",{"type":20,"tag":85,"props":557,"children":559},{"class":280,"line":558},8,[560,564,568,572],{"type":20,"tag":85,"props":561,"children":562},{"style":285},[563],{"type":26,"value":484},{"type":20,"tag":85,"props":565,"children":566},{"style":291},[567],{"type":26,"value":528},{"type":20,"tag":85,"props":569,"children":570},{"style":285},[571],{"type":26,"value":298},{"type":20,"tag":85,"props":573,"children":574},{"style":301},[575],{"type":26,"value":576},"committer_2\n",{"type":20,"tag":85,"props":578,"children":580},{"class":280,"line":579},9,[581,585,589],{"type":20,"tag":85,"props":582,"children":583},{"style":291},[584],{"type":26,"value":546},{"type":20,"tag":85,"props":586,"children":587},{"style":285},[588],{"type":26,"value":298},{"type":20,"tag":85,"props":590,"children":591},{"style":301},[592],{"type":26,"value":593},"Committer 2 Name\n",{"type":20,"tag":34,"props":595,"children":597},{"id":596},"组件cicd配置",[598],{"type":26,"value":599},"组件CICD配置",{"type":20,"tag":28,"props":601,"children":602},{},[603],{"type":26,"value":604},"当PR合入后，大约1小时内社区机器人便会完成仓库创建，接下来需要完成CICD配置，确保组件PR可被合入。",{"type":20,"tag":28,"props":606,"children":607},{},[608,610,617],{"type":26,"value":609},"社区所有的CI门禁设置都在",{"type":20,"tag":103,"props":611,"children":614},{"href":612,"rel":613},"https:\u002F\u002Fgitcode.com\u002Fopenubmc\u002Fopenubmc-ci",[107],[615],{"type":26,"value":616},"openubmc-ci",{"type":26,"value":618},"仓库进行管理。",{"type":20,"tag":141,"props":620,"children":622},{"id":621},"ci-repos",[623],{"type":26,"value":621},{"type":20,"tag":28,"props":625,"children":626},{},[627,629,634],{"type":26,"value":628},"openUBMC社区CI设置较为复杂，详情请参考",{"type":20,"tag":103,"props":630,"children":632},{"href":612,"rel":631},[107],[633],{"type":26,"value":616},{"type":26,"value":635},"仓库的文档。此处仅提供最初始的配置方法。",{"type":20,"tag":637,"props":638,"children":639},"ol",{},[640,652],{"type":20,"tag":49,"props":641,"children":642},{},[643,645,650],{"type":26,"value":644},"在",{"type":20,"tag":119,"props":646,"children":648},{"className":647},[],[649],{"type":26,"value":621},{"type":26,"value":651},"目录下，创建一个与组件仓同名的文件夹。",{"type":20,"tag":49,"props":653,"children":654},{},[655,657,663],{"type":26,"value":656},"在该文件夹下，创建",{"type":20,"tag":119,"props":658,"children":660},{"className":659},[],[661],{"type":26,"value":662},"config.yaml",{"type":26,"value":664},"文件，配置组件的门禁开关。",{"type":20,"tag":269,"props":666,"children":668},{"className":271,"code":667,"language":273,"meta":7,"style":7},"name: dcmid # 组件名\ncodecheck: false\nit: false\nut: false\npoison: false\nsca: false\ncoverage: false\nbuild: false\nversion_check: false\nipmi_check: false\ndependency_check: false\nline_limit_check: false\nmodel_check: false\nheader: false\n",[669],{"type":20,"tag":119,"props":670,"children":671},{"__ignoreMap":7},[672,694,712,728,744,760,776,792,808,824,841,858,875,892],{"type":20,"tag":85,"props":673,"children":674},{"class":280,"line":281},[675,679,683,688],{"type":20,"tag":85,"props":676,"children":677},{"style":291},[678],{"type":26,"value":204},{"type":20,"tag":85,"props":680,"children":681},{"style":285},[682],{"type":26,"value":298},{"type":20,"tag":85,"props":684,"children":685},{"style":301},[686],{"type":26,"value":687},"dcmid",{"type":20,"tag":85,"props":689,"children":691},{"style":690},"--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F",[692],{"type":26,"value":693}," # 组件名\n",{"type":20,"tag":85,"props":695,"children":696},{"class":280,"line":307},[697,702,706],{"type":20,"tag":85,"props":698,"children":699},{"style":291},[700],{"type":26,"value":701},"codecheck",{"type":20,"tag":85,"props":703,"children":704},{"style":285},[705],{"type":26,"value":298},{"type":20,"tag":85,"props":707,"children":709},{"style":708},"--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[710],{"type":26,"value":711},"false\n",{"type":20,"tag":85,"props":713,"children":714},{"class":280,"line":325},[715,720,724],{"type":20,"tag":85,"props":716,"children":717},{"style":291},[718],{"type":26,"value":719},"it",{"type":20,"tag":85,"props":721,"children":722},{"style":285},[723],{"type":26,"value":298},{"type":20,"tag":85,"props":725,"children":726},{"style":708},[727],{"type":26,"value":711},{"type":20,"tag":85,"props":729,"children":730},{"class":280,"line":492},[731,736,740],{"type":20,"tag":85,"props":732,"children":733},{"style":291},[734],{"type":26,"value":735},"ut",{"type":20,"tag":85,"props":737,"children":738},{"style":285},[739],{"type":26,"value":298},{"type":20,"tag":85,"props":741,"children":742},{"style":708},[743],{"type":26,"value":711},{"type":20,"tag":85,"props":745,"children":746},{"class":280,"line":505},[747,752,756],{"type":20,"tag":85,"props":748,"children":749},{"style":291},[750],{"type":26,"value":751},"poison",{"type":20,"tag":85,"props":753,"children":754},{"style":285},[755],{"type":26,"value":298},{"type":20,"tag":85,"props":757,"children":758},{"style":708},[759],{"type":26,"value":711},{"type":20,"tag":85,"props":761,"children":762},{"class":280,"line":518},[763,768,772],{"type":20,"tag":85,"props":764,"children":765},{"style":291},[766],{"type":26,"value":767},"sca",{"type":20,"tag":85,"props":769,"children":770},{"style":285},[771],{"type":26,"value":298},{"type":20,"tag":85,"props":773,"children":774},{"style":708},[775],{"type":26,"value":711},{"type":20,"tag":85,"props":777,"children":778},{"class":280,"line":540},[779,784,788],{"type":20,"tag":85,"props":780,"children":781},{"style":291},[782],{"type":26,"value":783},"coverage",{"type":20,"tag":85,"props":785,"children":786},{"style":285},[787],{"type":26,"value":298},{"type":20,"tag":85,"props":789,"children":790},{"style":708},[791],{"type":26,"value":711},{"type":20,"tag":85,"props":793,"children":794},{"class":280,"line":558},[795,800,804],{"type":20,"tag":85,"props":796,"children":797},{"style":291},[798],{"type":26,"value":799},"build",{"type":20,"tag":85,"props":801,"children":802},{"style":285},[803],{"type":26,"value":298},{"type":20,"tag":85,"props":805,"children":806},{"style":708},[807],{"type":26,"value":711},{"type":20,"tag":85,"props":809,"children":810},{"class":280,"line":579},[811,816,820],{"type":20,"tag":85,"props":812,"children":813},{"style":291},[814],{"type":26,"value":815},"version_check",{"type":20,"tag":85,"props":817,"children":818},{"style":285},[819],{"type":26,"value":298},{"type":20,"tag":85,"props":821,"children":822},{"style":708},[823],{"type":26,"value":711},{"type":20,"tag":85,"props":825,"children":827},{"class":280,"line":826},10,[828,833,837],{"type":20,"tag":85,"props":829,"children":830},{"style":291},[831],{"type":26,"value":832},"ipmi_check",{"type":20,"tag":85,"props":834,"children":835},{"style":285},[836],{"type":26,"value":298},{"type":20,"tag":85,"props":838,"children":839},{"style":708},[840],{"type":26,"value":711},{"type":20,"tag":85,"props":842,"children":844},{"class":280,"line":843},11,[845,850,854],{"type":20,"tag":85,"props":846,"children":847},{"style":291},[848],{"type":26,"value":849},"dependency_check",{"type":20,"tag":85,"props":851,"children":852},{"style":285},[853],{"type":26,"value":298},{"type":20,"tag":85,"props":855,"children":856},{"style":708},[857],{"type":26,"value":711},{"type":20,"tag":85,"props":859,"children":861},{"class":280,"line":860},12,[862,867,871],{"type":20,"tag":85,"props":863,"children":864},{"style":291},[865],{"type":26,"value":866},"line_limit_check",{"type":20,"tag":85,"props":868,"children":869},{"style":285},[870],{"type":26,"value":298},{"type":20,"tag":85,"props":872,"children":873},{"style":708},[874],{"type":26,"value":711},{"type":20,"tag":85,"props":876,"children":878},{"class":280,"line":877},13,[879,884,888],{"type":20,"tag":85,"props":880,"children":881},{"style":291},[882],{"type":26,"value":883},"model_check",{"type":20,"tag":85,"props":885,"children":886},{"style":285},[887],{"type":26,"value":298},{"type":20,"tag":85,"props":889,"children":890},{"style":708},[891],{"type":26,"value":711},{"type":20,"tag":85,"props":893,"children":895},{"class":280,"line":894},14,[896,901,905],{"type":20,"tag":85,"props":897,"children":898},{"style":291},[899],{"type":26,"value":900},"header",{"type":20,"tag":85,"props":902,"children":903},{"style":285},[904],{"type":26,"value":298},{"type":20,"tag":85,"props":906,"children":907},{"style":708},[908],{"type":26,"value":711},{"type":20,"tag":78,"props":910,"children":911},{},[912],{"type":20,"tag":28,"props":913,"children":914},{},[915,919],{"type":20,"tag":85,"props":916,"children":917},{},[918],{"type":26,"value":89},{"type":26,"value":920},"注意\n初始化阶段建议将门禁项关闭，避免在组件未准备好时被门禁拦截。",{"type":20,"tag":637,"props":922,"children":923},{"start":325},[924,929],{"type":20,"tag":49,"props":925,"children":926},{},[927],{"type":26,"value":928},"提交PR并合入后，完成组件的初始化和构建脚本开发。",{"type":20,"tag":49,"props":930,"children":931},{},[932],{"type":26,"value":933},"构建脚本ready后，再根据实际情况打开各门禁项。",{"type":20,"tag":21,"props":935,"children":937},{"id":936},"总结",[938],{"type":26,"value":936},{"type":20,"tag":28,"props":940,"children":941},{},[942],{"type":26,"value":943},"在openUBMC社区创建一个新的仓库，远不止是在代码托管平台上点击“新建”按钮。它是一个严谨的社区协作过程，旨在确保每一个新增组件都能与社区的整体技术方向、质量标准和协作规范保持一致。",{"type":20,"tag":28,"props":945,"children":946},{},[947],{"type":26,"value":948},"回顾整个流程，关键在于三个核心步骤：",{"type":20,"tag":45,"props":950,"children":951},{},[952,957,962],{"type":20,"tag":49,"props":953,"children":954},{},[955],{"type":26,"value":956},"**充分的会前沟通与评审准备：**在正式向TC提交申请前，通过与SIG例会、邮件讨论、论坛等方式明确组件的定位、归属和合规性，不仅能提升TC评审会的效率，更能显著增加提案通过的成功率。",{"type":20,"tag":49,"props":958,"children":959},{},[960],{"type":26,"value":961},"**通过配置化方式实现仓库管理：**配置化管理社区组件有效地避免了人为操作带来的不确定性，同时也为长期维护提供了有效的方式。",{"type":20,"tag":49,"props":963,"children":964},{},[965],{"type":26,"value":966},"**渐进式地集成CICD：**根据实际情况进行组件的CICD配置，既保证前期能够快速地完成组件创建，又能持续保障组件的代码合入质量。",{"type":20,"tag":28,"props":968,"children":969},{},[970],{"type":26,"value":971},"总而言之，这份指南不仅是一套操作说明，更体现了openUBMC社区对开放、透明和高质量协作的追求。我们鼓励每一位开发者在贡献代码的同时，也积极融入社区的治理流程。希望本文能成为您参与openUBMC社区建设的得力助手，期待您的精彩贡献。",{"type":20,"tag":28,"props":973,"children":974},{},[975],{"type":26,"value":976},"如果您在流程中遇到任何问题，欢迎通过社区论坛、邮件列表或相应的SIG频道寻求帮助。社区的成功，离不开每一位成员的积极参与和共同努力。",{"type":20,"tag":978,"props":979,"children":980},"style",{},[981],{"type":26,"value":982},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":7,"searchDepth":492,"depth":492,"links":984},[985,986,990],{"id":36,"depth":307,"text":36},{"id":94,"depth":307,"text":94,"children":987},[988,989],{"id":143,"depth":325,"text":132},{"id":347,"depth":325,"text":124},{"id":596,"depth":307,"text":599,"children":991},[992],{"id":621,"depth":325,"text":621},"markdown","content:zh:blogs:sig-new-app-creation.md","content","zh\u002Fblogs\u002Fsig-new-app-creation.md","zh\u002Fblogs\u002Fsig-new-app-creation","md","openUBMC社区新建仓库指南 在开源社区中贡献代码、共享组件，是推动技术进步和生态繁荣的重要方式。在openUBMC社区中，每一个APP都需通过一个独立的代码仓库进行管理。本文旨在为希望在openUBMC社区中创建新仓库的开发者或贡献者，提供一份完整、清晰的操作指南。无论您是希望贡献一个全新的功能模块，还是计划将一个现有项目迁移到社区，遵循本指南将帮助您高效地完成从构思、评审到最终集成的全流程，让您的创意与努力顺利融入社区中。 新增组件评审 根据社区运作规则，组件创建者需要向社区TC申请，在TC例会中评审并通过后才可以创建。为了保证会上评审的质量和效率，需要在会前准备好以下信息，以便TC委员更好地评估申请。 **组件的名字和职责：**需要明确组件的名字和职责，以及组件的实现思路、长期发展是否符合社区整体方向。 **组件所属的SIG：**需要明确组件的归属， 建议提前与你认为合适的SIG组Maintainer进行讨论 。如果希望新增SIG，可以将SIG申请和组件申请合并成一个议题。 **组件的License：**如果组件涉及引入三方库，需要明确其使用的License，确保新增组件使用的License符合社区规范。 **组件的编程语言：**主要用于评估当前社区CICD是否支持，若不支持则需要与Infra、CICD持续合作确保组件可被覆盖。 !NOTE 注意：\n可以利用SIG例会、社区邮件、社区论坛等途径提前沟通，确保会前便得到一些TC委员的支持，增加会上评审的通过率。 创建仓库 当完成社区评审后，需要通过 community 仓库完成仓库的自动创建。 每个SIG的目录中，都会存在两个文件，分别是 sig-info.yaml （保存SIG组信息）和 repo-info.yaml （保存SIG组对应的Repo仓库信息）文件。所有由该SIG管理的代码仓库，其信息都记录在这两个对应的YAML文件中。 修改对应的代码文件，提交PR时附上TC评审结论即可，TC委员将在1-2个工作日内合入PR。 repo-info.yaml repo-info.yaml  文件描述了 SIG 组的 仓库信息 ，包含如下基本元素： 名称 类型 说明 name 字符串 仓库名称 description 字符串 仓库包含组件的描述 type 枚举类型，可选 public 或者 private 仓库是否可公开访问 在某些场景下，如果不想在仓库ready前正式公开，可以在创建的时候选择 private ，默认SIG的Maintainer有权限访问仓库，并通过Maintainer邀请加入仓库。 例： -  name :  mdb_interface\n   description :  \"Resource collaboration APIs definition\"\n   type :  public\n  sig-info.yaml sig-info.yaml  文件描述了 SIG 组的 人员和权限信息 ，针对新增组件，如果无需单独配置Committers，则无需改动。**默认所有Maintainer都拥有该仓库的合入权限。 如果需要配置Committers，则需要修改 repositories 配置： 名称 类型 说明 repo Array 需要独立配置的仓库名称列表 committers Array 该仓库配置的Committers列表 例： repositories :\n   -  repo :\n       -  openUBMC\u002Frepo_1\n       -  openUBMC\u002Frepo_2\n     committers :\n       -  gitcode_id :  committer_1\n         name :  Committer 1 Name\n       -  gitcode_id :  committer_2\n         name :  Committer 2 Name\n 组件CICD配置 当PR合入后，大约1小时内社区机器人便会完成仓库创建，接下来需要完成CICD配置，确保组件PR可被合入。 社区所有的CI门禁设置都在 openubmc-ci 仓库进行管理。 ci-repos openUBMC社区CI设置较为复杂，详情请参考 openubmc-ci 仓库的文档。此处仅提供最初始的配置方法。 在 ci-repos 目录下，创建一个与组件仓同名的文件夹。 在该文件夹下，创建 config.yaml 文件，配置组件的门禁开关。 name :  dcmid  # 组件名\n codecheck :  false\n it :  false\n ut :  false\n poison :  false\n sca :  false\n coverage :  false\n build :  false\n version_check :  false\n ipmi_check :  false\n dependency_check :  false\n line_limit_check :  false\n model_check :  false\n header :  false\n !NOTE 注意\n初始化阶段建议将门禁项关闭，避免在组件未准备好时被门禁拦截。 提交PR并合入后，完成组件的初始化和构建脚本开发。 构建脚本ready后，再根据实际情况打开各门禁项。 总结 在openUBMC社区创建一个新的仓库，远不止是在代码托管平台上点击“新建”按钮。它是一个严谨的社区协作过程，旨在确保每一个新增组件都能与社区的整体技术方向、质量标准和协作规范保持一致。 回顾整个流程，关键在于三个核心步骤： **充分的会前沟通与评审准备：**在正式向TC提交申请前，通过与SIG例会、邮件讨论、论坛等方式明确组件的定位、归属和合规性，不仅能提升TC评审会的效率，更能显著增加提案通过的成功率。 **通过配置化方式实现仓库管理：**配置化管理社区组件有效地避免了人为操作带来的不确定性，同时也为长期维护提供了有效的方式。 **渐进式地集成CICD：**根据实际情况进行组件的CICD配置，既保证前期能够快速地完成组件创建，又能持续保障组件的代码合入质量。 总而言之，这份指南不仅是一套操作说明，更体现了openUBMC社区对开放、透明和高质量协作的追求。我们鼓励每一位开发者在贡献代码的同时，也积极融入社区的治理流程。希望本文能成为您参与openUBMC社区建设的得力助手，期待您的精彩贡献。 如果您在流程中遇到任何问题，欢迎通过社区论坛、邮件列表或相应的SIG频道寻求帮助。社区的成功，离不开每一位成员的积极参与和共同努力。 html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",[14],[1002,1002],null,1785415973934]