[{"data":1,"prerenderedAt":452},["ShallowReactive",2],{"\u002Fdocs\u002Fdevelopers\u002Fpublishing-packages":3},{"id":4,"title":5,"body":6,"description":444,"extension":445,"meta":446,"navigation":447,"path":448,"seo":449,"stem":450,"__hash__":451},"docs\u002Fdocs\u002Fdevelopers\u002Fpublishing-packages.md","Publishing Packages",{"type":7,"value":8,"toc":427},"minimark",[9,13,23,28,31,74,78,85,155,158,183,188,205,214,222,232,296,306,310,372,376,393,403,417,423],[10,11,5],"h1",{"id":12},"publishing-packages",[14,15,16,17,22],"p",{},"Anyone with a ",[18,19,21],"a",{"href":20},"\u002Fdocs\u002Fdevelopers\u002Fdeveloper-hub","Developer Hub"," account and a role in a publisher can\nship Debian packages to LeiOS users. This page walks through the process and the checks your\npackage has to pass.",[24,25,27],"h2",{"id":26},"before-you-start","Before you start",[14,29,30],{},"You need:",[32,33,34,46,54],"ul",{},[35,36,37,38,45],"li",{},"a Developer Hub account (ask on ",[18,39,44],{"href":40,"rel":41,"target":43},"https:\u002F\u002Fdiscord.gg\u002F8YC5BXjCc5",[42],"nofollow","_blank","Discord","),",[35,47,48,49,53],{},"a publisher you are a member of, with at least the ",[50,51,52],"strong",{},"Developer"," role,",[35,55,56,57,61,62,65,66,69,70,73],{},"a ",[58,59,60],"code",{},".deb"," package built for ",[58,63,64],{},"amd64",", ",[58,67,68],{},"arm64",", or ",[58,71,72],{},"all"," architectures.",[24,75,77],{"id":76},"prepare-your-package","Prepare your package",[14,79,80,81,84],{},"When you upload a build, the repository inspects it with ",[58,82,83],{},"dpkg --info"," and rejects it unless these\nfields match what you entered on the Hub.",[86,87,88,103],"table",{},[89,90,91],"thead",{},[92,93,94,100],"tr",{},[95,96,97,98],"th",{},"Field in the ",[58,99,60],{},[95,101,102],{},"Must match",[104,105,106,117,127,145],"tbody",{},[92,107,108,114],{},[109,110,111],"td",{},[58,112,113],{},"Package",[109,115,116],{},"The package name on the Hub, without the publisher prefix.",[92,118,119,124],{},[109,120,121],{},[58,122,123],{},"Version",[109,125,126],{},"The version of the release you upload to.",[92,128,129,134],{},[109,130,131],{},[58,132,133],{},"Architecture",[109,135,136,137,65,139,141,142,144],{},"The architecture you upload for: ",[58,138,64],{},[58,140,68],{}," or ",[58,143,72],{},".",[92,146,147,152],{},[109,148,149],{},[58,150,151],{},"Maintainer",[109,153,154],{},"The publisher owner's display name and email. See below.",[14,156,157],{},"You can check the fields of a package locally:",[159,160,165],"pre",{"className":161,"code":162,"language":163,"meta":164,"style":164},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dpkg --info my-package_1.2.0-1_amd64.deb\n","bash","",[58,166,167],{"__ignoreMap":164},[168,169,172,176,180],"span",{"class":170,"line":171},"line",1,[168,173,175],{"class":174},"sBMFI","dpkg",[168,177,179],{"class":178},"sfazB"," --info",[168,181,182],{"class":178}," my-package_1.2.0-1_amd64.deb\n",[184,185,187],"h3",{"id":186},"the-maintainer-field","The Maintainer field",[14,189,190,192,193,196,197,200,201,204],{},[58,191,151],{}," must be exactly ",[58,194,195],{},"\u003Cdisplay name> \u003C\u003Cemail>>"," of the ",[50,198,199],{},"publisher's owner",", as shown in\ntheir Hub account. For example, if the owner is \"Jane Doe\" with ",[58,202,203],{},"jane@example.com",":",[159,206,212],{"className":207,"code":209,"filename":210,"language":211,"meta":164},[208],"language-text","Maintainer: Jane Doe \u003Cjane@example.com>\n","debian\u002Fcontrol","text",[58,213,209],{"__ignoreMap":164},[184,215,217,218,221],{"id":216},"versions-and-the-leios-suffix","Versions and the ",[58,219,220],{},"leios"," suffix",[14,223,224,225,228,229,231],{},"Versions follow the usual Debian rules, except that they must start with a digit and epochs (",[58,226,227],{},"1:",")\nare not supported. To mark a LeiOS-specific build of software that also exists elsewhere, add a\n",[58,230,220],{}," suffix with up to three numeric parts:",[86,233,234,243],{},[89,235,236],{},[92,237,238,240],{},[95,239,123],{},[95,241,242],{},"Valid",[104,244,245,255,264,273,286],{},[92,246,247,252],{},[109,248,249],{},[58,250,251],{},"1.2.0-1",[109,253,254],{},"Yes",[92,256,257,262],{},[109,258,259],{},[58,260,261],{},"1.2.0-1leios1",[109,263,254],{},[92,265,266,271],{},[109,267,268],{},[58,269,270],{},"1.2.0-1leios1.2.3",[109,272,254],{},[92,274,275,280],{},[109,276,277],{},[58,278,279],{},"1.2.0-1leios",[109,281,282,283,285],{},"No: ",[58,284,220],{}," must be followed by a number.",[92,287,288,293],{},[109,289,290],{},[58,291,292],{},"1.2.0-1leios1.2.3.4",[109,294,295],{},"No: at most three numeric parts.",[14,297,298,299,302,303,305],{},"Some packages are flagged as ",[50,300,301],{},"requiring a LeiOS patch",". Every release of such a package must\ncarry the ",[58,304,220],{}," suffix.",[24,307,309],{"id":308},"publish-a-release","Publish a release",[311,312,314,318,326,330,336,340,355,359],"steps",{"level":313},"3",[184,315,317],{"id":316},"create-the-package","Create the package",[14,319,320,321,323,324,144],{},"On the Hub, create a package under your publisher. Its name must match the ",[58,322,113],{}," field of your\n",[58,325,60],{},[184,327,329],{"id":328},"create-a-release","Create a release",[14,331,332,333,335],{},"Add a release with the exact version from your ",[58,334,60],{}," and a changelog. The changelog is required\nand can be up to 10,000 characters.",[184,337,339],{"id":338},"upload-the-builds","Upload the builds",[14,341,342,343,345,346,348,349,354],{},"Upload one ",[58,344,60],{}," per architecture, or a single ",[58,347,72],{}," build. Each file can be up to 1 GB. The\nrepository runs the checks above, adds the package to its archive, and publishes it to the\n",[50,350,351],{},[58,352,353],{},"testing"," suite.",[184,356,358],{"id":357},"request-promotion-to-stable","Request promotion to stable",[14,360,361,362,367,368,144],{},"Once the release has been tested, request promotion to stable. A LeiOS admin reviews the request.\nApproved packages are included in the next LeiOS release and published to the ",[50,363,364],{},[58,365,366],{},"stable"," suite.\nSee ",[18,369,371],{"href":370},"\u002Fdocs\u002Fusage\u002Frelease-channels","Release Channels",[24,373,375],{"id":374},"troubleshooting","Troubleshooting",[14,377,378,381,382,384,385,387,388,392],{},[50,379,380],{},"The upload is rejected because a field doesn't match.","\nCompare ",[58,383,83],{}," with the values on the Hub. The ",[58,386,151],{}," field is the most common cause:\nit has to name the publisher's ",[389,390,391],"em",{},"owner",", not the person uploading.",[14,394,395,398,399,402],{},[50,396,397],{},"\"Package requires leios patch suffix in version\".","\nThe package is flagged as requiring a LeiOS patch. Add a ",[58,400,401],{},"leios\u003CN>"," suffix to the version and\nrebuild.",[14,404,405,408,409,412,413,416],{},[50,406,407],{},"\"Package release with this version already exists\".","\nVersions are immutable. Bump the version, for example from ",[58,410,411],{},"-1leios1"," to ",[58,414,415],{},"-1leios2",", and upload a\nnew release.",[14,418,419,422],{},[50,420,421],{},"\"Package release already contains a release for this architecture\".","\nEach release accepts one build per architecture. Publish a new version instead of replacing a\nbuild.",[424,425,426],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}",{"title":164,"searchDepth":428,"depth":428,"links":429},2,[430,431,437,443],{"id":26,"depth":428,"text":27},{"id":76,"depth":428,"text":77,"children":432},[433,435],{"id":186,"depth":434,"text":187},3,{"id":216,"depth":434,"text":436},"Versions and the leios suffix",{"id":308,"depth":428,"text":309,"children":438},[439,440,441,442],{"id":316,"depth":434,"text":317},{"id":328,"depth":434,"text":329},{"id":338,"depth":434,"text":339},{"id":357,"depth":434,"text":358},{"id":374,"depth":428,"text":375},"Build a .deb that passes the LeiOS repository checks and ship it to the testing and stable suites.","md",{},{"title":5},"\u002Fdocs\u002Fdevelopers\u002Fpublishing-packages",{"title":5,"description":444},"docs\u002Fdevelopers\u002Fpublishing-packages","BQOETyGU2Rpj_bERj9GWl-5UCx-eqvLWfN6ZY995sNw",1792353301761]