[{"data":1,"prerenderedAt":4707},["ShallowReactive",2],{"navigation_docs":3,"-systems-serverless-registry-sreg-cli":296,"-systems-serverless-registry-sreg-cli-surround":4702},[4,65,110],{"title":5,"path":6,"stem":7,"children":8,"icon":64},"Systems & Solutions","\u002Fsystems","1.systems\u002F0.index",[9,11,29,46],{"title":10,"path":6,"stem":7},"Overview",{"title":12,"path":13,"stem":14,"children":15},"Serverless Registry","\u002Fsystems\u002Fserverless-registry","1.systems\u002Fserverless-registry\u002F0.index",[16,17,21,25],{"title":10,"path":13,"stem":14},{"title":18,"path":19,"stem":20},"CloudFlare Worker","\u002Fsystems\u002Fserverless-registry\u002Fworker","1.systems\u002Fserverless-registry\u002F1.worker",{"title":22,"path":23,"stem":24},"sreg CLI","\u002Fsystems\u002Fserverless-registry\u002Fsreg-cli","1.systems\u002Fserverless-registry\u002F2.sreg-cli",{"title":26,"path":27,"stem":28},"GitHub Actions","\u002Fsystems\u002Fserverless-registry\u002Fgithub-actions","1.systems\u002Fserverless-registry\u002F3.github-actions",{"title":30,"path":31,"stem":32,"children":33},"Serverless Satis","\u002Fsystems\u002Fserverless-satis","1.systems\u002Fserverless-satis\u002F0.index",[34,35,39,43],{"title":10,"path":31,"stem":32},{"title":36,"path":37,"stem":38},"CLI generator","\u002Fsystems\u002Fserverless-satis\u002Fs3-satis","1.systems\u002Fserverless-satis\u002F1.s3-satis",{"title":40,"path":41,"stem":42},"GitHub Action","\u002Fsystems\u002Fserverless-satis\u002Fs3-satis-github-action","1.systems\u002Fserverless-satis\u002F2.s3-satis-github-action",{"title":18,"path":44,"stem":45},"\u002Fsystems\u002Fserverless-satis\u002Fcloudflare-worker","1.systems\u002Fserverless-satis\u002F3.cloudflare-worker",{"title":47,"path":48,"stem":49,"children":50},"WebPrint","\u002Fsystems\u002Fwebprint","1.systems\u002Fwebprint\u002F0.index",[51,52,56,60],{"title":10,"path":48,"stem":49},{"title":53,"path":54,"stem":55},"Server","\u002Fsystems\u002Fwebprint\u002Fserver","1.systems\u002Fwebprint\u002F1.server",{"title":57,"path":58,"stem":59},"Host Service","\u002Fsystems\u002Fwebprint\u002Fservice","1.systems\u002Fwebprint\u002F2.service",{"title":61,"path":62,"stem":63},"API","\u002Fsystems\u002Fwebprint\u002Fapi","1.systems\u002Fwebprint\u002F3.api","mdi:monitor",{"title":66,"path":67,"stem":68,"children":69,"icon":109},"Apps & Tools","\u002Fapps","2.apps\u002F0.index",[70,71,75,79,83,87,91],{"title":10,"path":67,"stem":68},{"title":72,"path":73,"stem":74},"File Hasher.NET","\u002Fapps\u002Ffile-hasher","2.apps\u002F1.file-hasher",{"title":76,"path":77,"stem":78},"GitFlow Tool","\u002Fapps\u002Fgit-flow","2.apps\u002F1.git-flow",{"title":80,"path":81,"stem":82},"NFC to RFID","\u002Fapps\u002Fnfc-to-rfid","2.apps\u002F1.nfc-to-rfid",{"title":84,"path":85,"stem":86},"PDF Scan Splitter","\u002Fapps\u002Fpdf-scan-splitter","2.apps\u002F1.pdf-scan-splitter",{"title":88,"path":89,"stem":90},"USB Scale Counter","\u002Fapps\u002Fusb-scale-counter","2.apps\u002F1.usb-scale-counter",{"title":92,"path":93,"stem":94,"children":95,"page":108},"Deprecated","\u002Fapps\u002Fdeprecated","2.apps\u002F9.deprecated",[96,100,104],{"title":97,"path":98,"stem":99},"Batch Comparator","\u002Fapps\u002Fdeprecated\u002Fcomparator","2.apps\u002F9.deprecated\u002Fcomparator",{"title":101,"path":102,"stem":103},"ContactBridge","\u002Fapps\u002Fdeprecated\u002Fcontact-bridge","2.apps\u002F9.deprecated\u002Fcontact-bridge",{"title":105,"path":106,"stem":107},"File Hasher.PY","\u002Fapps\u002Fdeprecated\u002Ffile-hasher-python","2.apps\u002F9.deprecated\u002Ffile-hasher-python",false,"teenyicons:terminal-outline",{"title":111,"path":112,"stem":113,"children":114,"icon":295},"Libraries & Packages","\u002Flibraries","3.libraries\u002F0.index",[115,116,173,214,227,239],{"title":10,"path":112,"stem":113},{"title":117,"path":118,"stem":119,"children":120,"page":108},"PHP & Laravel","\u002Flibraries\u002Fphp","3.libraries\u002F100.php",[121,125,129,133,137,141,145,149,153,157,161,165,169],{"title":122,"path":123,"stem":124},"Binary Tools","\u002Flibraries\u002Fphp\u002Fbinary-tools","3.libraries\u002F100.php\u002Fbinary-tools",{"title":126,"path":127,"stem":128},"Certificate Chain","\u002Flibraries\u002Fphp\u002Fcert-chain","3.libraries\u002F100.php\u002Fcert-chain",{"title":130,"path":131,"stem":132},"Eloquent Sluggable","\u002Flibraries\u002Fphp\u002Feloquent-sluggable","3.libraries\u002F100.php\u002Feloquent-sluggable",{"title":134,"path":135,"stem":136},"Eloquent Tokenable","\u002Flibraries\u002Fphp\u002Feloquent-tokenable","3.libraries\u002F100.php\u002Feloquent-tokenable",{"title":138,"path":139,"stem":140},"Eloquent ULID-able","\u002Flibraries\u002Fphp\u002Feloquent-ulidable","3.libraries\u002F100.php\u002Feloquent-ulidable",{"title":142,"path":143,"stem":144},"Eloquent UUID-able","\u002Flibraries\u002Fphp\u002Feloquent-uuidable","3.libraries\u002F100.php\u002Feloquent-uuidable",{"title":146,"path":147,"stem":148},"emSzmal Banking API wrapper","\u002Flibraries\u002Fphp\u002Femszmal","3.libraries\u002F100.php\u002Femszmal",{"title":150,"path":151,"stem":152},"EPC Tag Data Standard","\u002Flibraries\u002Fphp\u002Fepc-tds","3.libraries\u002F100.php\u002Fepc-tds",{"title":154,"path":155,"stem":156},"File Hasher.PHP","\u002Flibraries\u002Fphp\u002Ffile-hasher","3.libraries\u002F100.php\u002Ffile-hasher",{"title":158,"path":159,"stem":160},"Content Negotiable Responses for Laravel","\u002Flibraries\u002Fphp\u002Flaravel-content-negotiable-responses","3.libraries\u002F100.php\u002Flaravel-content-negotiable-responses",{"title":162,"path":163,"stem":164},"LPD Client and Server","\u002Flibraries\u002Fphp\u002Flpd","3.libraries\u002F100.php\u002Flpd",{"title":166,"path":167,"stem":168},"Partial Key Verification Library for PHP","\u002Flibraries\u002Fphp\u002Fpartial-key-verification","3.libraries\u002F100.php\u002Fpartial-key-verification",{"title":170,"path":171,"stem":172},"WebPrint.PHP","\u002Flibraries\u002Fphp\u002Fwebprint","3.libraries\u002F100.php\u002Fwebprint",{"title":174,"path":175,"stem":176,"children":177,"page":108},"Capacitor.JS","\u002Flibraries\u002Fcapacitor","3.libraries\u002F200.capacitor",[178,182,186,190,194,198,202,206,210],{"title":179,"path":180,"stem":181},"SPP Bluetooth Printer for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fbluetooth-printer","3.libraries\u002F200.capacitor\u002Fbluetooth-printer",{"title":183,"path":184,"stem":185},"Sunmi Camera Scanner for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-camera-scanner","3.libraries\u002F200.capacitor\u002Fsunmi-camera-scanner",{"title":187,"path":188,"stem":189},"Sunmi Keyboard Handler for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-keyboard-handler","3.libraries\u002F200.capacitor\u002Fsunmi-keyboard-handler",{"title":191,"path":192,"stem":193},"Sunmi Inner Printer SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-printer","3.libraries\u002F200.capacitor\u002Fsunmi-printer",{"title":195,"path":196,"stem":197},"Sunmi Scan Head  SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-scanhead","3.libraries\u002F200.capacitor\u002Fsunmi-scanhead",{"title":199,"path":200,"stem":201},"Sunmi Scan Head (lite) SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-scanhead-lite","3.libraries\u002F200.capacitor\u002Fsunmi-scanhead-lite",{"title":203,"path":204,"stem":205},"Sunmi UHF RFID SDK for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fsunmi-uhf","3.libraries\u002F200.capacitor\u002Fsunmi-uhf",{"title":207,"path":208,"stem":209},"Dymo M10 USB Scale driver for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fusb-scale","3.libraries\u002F200.capacitor\u002Fusb-scale",{"title":211,"path":212,"stem":213},"WebView WatchDog for Capacitor.js","\u002Flibraries\u002Fcapacitor\u002Fwebview-watchdog","3.libraries\u002F200.capacitor\u002Fwebview-watchdog",{"title":215,"path":216,"stem":217,"children":218,"page":108},"JavaScript & TypeScript","\u002Flibraries\u002Fjs","3.libraries\u002F300.js",[219,223],{"title":220,"path":221,"stem":222},"Partial Key Verification Library for TS\u002FJS","\u002Flibraries\u002Fjs\u002Fpartial-key-verification","3.libraries\u002F300.js\u002Fpartial-key-verification",{"title":224,"path":225,"stem":226},"WebPrint.JS","\u002Flibraries\u002Fjs\u002Fwebprint","3.libraries\u002F300.js\u002Fwebprint",{"title":228,"path":229,"stem":230,"children":231,"page":108},".NET & C#","\u002Flibraries\u002Fnet","3.libraries\u002F400.net",[232,235],{"title":72,"path":233,"stem":234},"\u002Flibraries\u002Fnet\u002Ffile-hasher","3.libraries\u002F400.net\u002Ffile-hasher",{"title":236,"path":237,"stem":238},"Partial Key Verification Library for Compact Framework","\u002Flibraries\u002Fnet\u002Fpartial-key-verification","3.libraries\u002F400.net\u002Fpartial-key-verification",{"title":92,"path":240,"stem":241,"children":242,"page":108},"\u002Flibraries\u002Fdeprecated","3.libraries\u002F999.deprecated",[243,247,251,255,259,263,267,271,275,279,283,287,291],{"title":244,"path":245,"stem":246},"CoinHive API and Captcha","\u002Flibraries\u002Fdeprecated\u002Fcoinhive-api","3.libraries\u002F999.deprecated\u002Fcoinhive-api",{"title":248,"path":249,"stem":250},"Eloquent Encryptable","\u002Flibraries\u002Fdeprecated\u002Feloquent-encryptable","3.libraries\u002F999.deprecated\u002Feloquent-encryptable",{"title":252,"path":253,"stem":254},"Eloquent GUID-able","\u002Flibraries\u002Fdeprecated\u002Feloquent-guidable","3.libraries\u002F999.deprecated\u002Feloquent-guidable",{"title":256,"path":257,"stem":258},"Laravel Web Cron","\u002Flibraries\u002Fdeprecated\u002Flaravel-cron","3.libraries\u002F999.deprecated\u002Flaravel-cron",{"title":260,"path":261,"stem":262},"Laravel .env filler","\u002Flibraries\u002Fdeprecated\u002Flaravel-dotenv-filler","3.libraries\u002F999.deprecated\u002Flaravel-dotenv-filler",{"title":264,"path":265,"stem":266},"Laravel Permissions","\u002Flibraries\u002Fdeprecated\u002Flaravel-permissions","3.libraries\u002F999.deprecated\u002Flaravel-permissions",{"title":268,"path":269,"stem":270},"Polish Validator Rules for Laravel","\u002Flibraries\u002Fdeprecated\u002Flaravel-polish-validator","3.libraries\u002F999.deprecated\u002Flaravel-polish-validator",{"title":272,"path":273,"stem":274},"Laravel SMS Notification Channel","\u002Flibraries\u002Fdeprecated\u002Flaravel-sms","3.libraries\u002F999.deprecated\u002Flaravel-sms",{"title":276,"path":277,"stem":278},"Laravel SMS Notification Channel - JustSend.pl Driver","\u002Flibraries\u002Fdeprecated\u002Flaravel-sms-justsend","3.libraries\u002F999.deprecated\u002Flaravel-sms-justsend",{"title":280,"path":281,"stem":282},"Laravel SMS Notification Channel - SerwerSMS.pl Driver","\u002Flibraries\u002Fdeprecated\u002Flaravel-sms-serwersms","3.libraries\u002F999.deprecated\u002Flaravel-sms-serwersms",{"title":284,"path":285,"stem":286},"Diceware Generator","\u002Flibraries\u002Fdeprecated\u002Fpassphrase-generator","3.libraries\u002F999.deprecated\u002Fpassphrase-generator",{"title":288,"path":289,"stem":290},"Raw Printer tools for C#","\u002Flibraries\u002Fdeprecated\u002Fraw-printer","3.libraries\u002F999.deprecated\u002Fraw-printer",{"title":292,"path":293,"stem":294},"Signed Document","\u002Flibraries\u002Fdeprecated\u002Fsigned-document","3.libraries\u002F999.deprecated\u002Fsigned-document","charm:package",{"id":297,"title":298,"active":299,"body":300,"description":4693,"extension":4694,"featured":4695,"featured_description":4695,"featured_icon":4695,"github":321,"layout":4695,"links":4695,"list_title":298,"meta":4696,"navigation":4697,"path":23,"platform":4698,"seo":4699,"stem":24,"system":12,"system_url":13,"type":4700,"__hash__":4701},"docs\u002F1.systems\u002Fserverless-registry\u002F2.sreg-cli.md","sreg tool",true,{"type":301,"value":302,"toc":4667},"minimark",[303,315,330,335,338,429,439,443,446,564,567,572,582,616,678,685,689,715,719,905,913,916,949,967,1160,1165,1188,1337,1349,1353,1381,1448,1543,1551,1557,1561,1567,1602,1609,1614,1620,1626,1658,1672,1675,1799,1883,1889,1899,1904,1910,1916,2000,2002,2067,2125,2131,2136,2142,2150,2234,2236,2305,2347,2353,2358,2364,2372,2461,2463,2517,2564,2569,2575,2581,2666,2668,2765,2836,2841,2847,2852,2884,2886,3003,3088,3093,3099,3102,3252,3254,3273,3362,3368,3376,3381,3387,3394,3539,3575,3645,3651,3656,3662,3675,3794,3801,3809,3911,3917,4048,4061,4249,4255,4266,4271,4277,4296,4339,4341,4367,4398,4411,4469,4475,4483,4490,4499,4504,4510,4517,4523,4536,4541,4547,4558,4564,4571,4575,4635,4639,4663],[304,305,306,310,311,314],"p",{},[307,308,309],"code",{},"sreg"," is the only way to publish a version to ",[312,313,12],"a",{"href":13},". It packages the project,\nuploads the files straight to R2 through presigned URLs and commits the version through the registry's API. Published\nversions are immutable. It also downloads generic files and writes credentials for package managers, including GitHub Actions OIDC tokens.\nAdministration (credentials, yank, delete) is done in the registry's web panel.",[316,317,318,325],"u-button-group",{},[319,320,324],"u-button",{"href":321,"icon":322,"target":323},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli","bxl:github","_blank","GitHub Repository",[319,326,329],{"href":327,"icon":328,"target":323},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli\u002Freleases\u002Flatest\u002F","material-symbols:cloud-download","Releases",[331,332,334],"h2",{"id":333},"setup","Setup",[304,336,337],{},"Release binaries are published for macOS (arm64, x86_64), Linux (x86_64 glibc and musl, arm64) and Windows (x86_64).",[339,340,341,391,403],"code-group",{},[342,343,349],"pre",{"className":344,"code":345,"filename":346,"language":347,"meta":348,"style":348},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","curl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli\u002Freleases\u002Flatest\u002Fdownload\u002Fsreg-cli-installer.sh | sh\n","macOS \u002F Linux","bash","",[307,350,351],{"__ignoreMap":348},[352,353,356,360,364,368,372,375,378,381,384,388],"span",{"class":354,"line":355},"line",1,[352,357,359],{"class":358},"sR7ES","curl",[352,361,363],{"class":362},"sFhLe"," --proto",[352,365,367],{"class":366},"siCPE"," '",[352,369,371],{"class":370},"sLACW","=https",[352,373,374],{"class":366},"'",[352,376,377],{"class":362}," --tlsv1.2",[352,379,380],{"class":362}," -LsSf",[352,382,383],{"class":370}," https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli\u002Freleases\u002Flatest\u002Fdownload\u002Fsreg-cli-installer.sh",[352,385,387],{"class":386},"sGXK2"," |",[352,389,390],{"class":358}," sh\n",[342,392,397],{"className":393,"code":394,"filename":395,"language":396,"meta":348,"style":348},"language-powershell shiki shiki-themes material-theme-lighter github-light github-dark monokai","powershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli\u002Freleases\u002Flatest\u002Fdownload\u002Fsreg-cli-installer.ps1 | iex\"\n","Windows","powershell",[307,398,399],{"__ignoreMap":348},[352,400,401],{"class":354,"line":355},[352,402,394],{},[342,404,407],{"className":344,"code":405,"filename":406,"language":347,"meta":348,"style":348},"cargo install --git https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli --locked sreg-cli\n","Cargo",[307,408,409],{"__ignoreMap":348},[352,410,411,414,417,420,423,426],{"class":354,"line":355},[352,412,413],{"class":358},"cargo",[352,415,416],{"class":370}," install",[352,418,419],{"class":362}," --git",[352,421,422],{"class":370}," https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli",[352,424,425],{"class":362}," --locked",[352,427,428],{"class":370}," sreg-cli\n",[304,430,431,432,435,436,438],{},"Building from source needs Rust 1.88 or newer. In GitHub Actions use the ",[312,433,434],{"href":27},"actions"," instead - they install ",[307,437,309],{}," with checksum verification.",[331,440,442],{"id":441},"configuration","Configuration",[304,444,445],{},"There is no configuration file, only flags and environment variables. They are accepted by every command (global options):",[447,448,449,465],"table",{},[450,451,452],"thead",{},[453,454,455,459,462],"tr",{},[456,457,458],"th",{},"Flag",[456,460,461],{},"Environment variable",[456,463,464],{},"Description",[466,467,468,488,507,519,545],"tbody",{},[453,469,470,476,481],{},[471,472,473],"td",{},[307,474,475],{},"--registry \u003CURL>",[471,477,478],{},[307,479,480],{},"REGISTRY_URL",[471,482,483,484,487],{},"Base URL of the registry, e.g. ",[307,485,486],{},"https:\u002F\u002Fpackages.example.com",". It may carry the token (see below).",[453,489,490,495,500],{},[471,491,492],{},[307,493,494],{},"--token \u003CTOKEN>",[471,496,497],{},[307,498,499],{},"REGISTRY_TOKEN",[471,501,502,503,506],{},"Token in the form ",[307,504,505],{},"[\u003Csource>.]\u003Cproject>:[\u003Ctype>.]\u003Csecret>",".",[453,508,509,514,516],{},[471,510,511],{},[307,512,513],{},"--json",[471,515],{},[471,517,518],{},"Print machine-readable JSON only on stdout.",[453,520,521,530,532],{},[471,522,523,526,527],{},[307,524,525],{},"-v",", ",[307,528,529],{},"--verbose",[471,531],{},[471,533,534,535,537,538,540,541,544],{},"Logs of ",[307,536,309],{}," itself to stderr (",[307,539,525],{}," debug, ",[307,542,543],{},"-vv"," trace). Tokens and presigned URLs are never logged.",[453,546,547,552,557],{},[471,548,549],{},[307,550,551],{},"--no-browser",[471,553,554],{},[307,555,556],{},"SREG_NO_BROWSER",[471,558,559,560,563],{},"With ",[307,561,562],{},"--login",": print the approval page instead of opening it in a browser.",[304,565,566],{},"In CI pass both the URL and the token as environment variables from repository secrets.",[568,569,571],"h3",{"id":570},"credentials-in-the-registry-url","Credentials in the registry URL",[304,573,574,575,578,579,581],{},"As with Composer, the registry URL may carry the token instead of ",[307,576,577],{},"--token"," \u002F ",[307,580,499],{},":",[342,583,585],{"className":344,"code":584,"language":347,"meta":348,"style":348},"export REGISTRY_URL='https:\u002F\u002Fshop-frontend:k7Qx2mN9pLw4@packages.example.com\u002F'\nsreg whoami\n",[307,586,587,608],{"__ignoreMap":348},[352,588,589,593,597,600,602,605],{"class":354,"line":355},[352,590,592],{"class":591},"sTNss","export",[352,594,596],{"class":595},"ss--_"," REGISTRY_URL",[352,598,599],{"class":386},"=",[352,601,374],{"class":366},[352,603,604],{"class":370},"https:\u002F\u002Fshop-frontend:k7Qx2mN9pLw4@packages.example.com\u002F",[352,606,607],{"class":366},"'\n",[352,609,611,613],{"class":354,"line":610},2,[352,612,309],{"class":358},[352,614,615],{"class":370}," whoami\n",[617,618,619,642,660,672],"ul",{},[620,621,622,623,526,626,526,628,526,631,526,634,637,638,641],"li",{},"both a login and a password are required; percent-encode ",[307,624,625],{},"@",[307,627,581],{},[307,629,630],{},"\u002F",[307,632,633],{},"?",[307,635,636],{},"#"," and ",[307,639,640],{},"%"," in them,",[620,643,644,645,648,649,652,653,637,656,659],{},"credentials are accepted only over ",[307,646,647],{},"https"," (plain ",[307,650,651],{},"http"," only for ",[307,654,655],{},"localhost",[307,657,658],{},"127.0.0.1","),",[620,661,662,664,665,667,668,671],{},[307,663,309],{}," strips the credentials before using the URL: requests, output, logs and ",[307,666,513],{}," only show ",[307,669,670],{},"https:\u002F\u002Fpackages.example.com\u002F",",",[620,673,674,677],{},[307,675,676],{},"--oidc"," wins over everything; otherwise an explicit token and the URL's credentials must agree when both are given.",[304,679,680,681,684],{},"Treat such a URL as a secret (in GitHub Actions store it in ",[307,682,683],{},"secrets.",").",[568,686,688],{"id":687},"where-the-token-comes-from","Where the token comes from",[304,690,691,692,578,694,696,697,699,700,702,703,709,710,637,712,714],{},"A static token (",[307,693,577],{},[307,695,499],{},", or the credentials of the registry URL), or one of two options that replace it: ",[307,698,676],{}," (GitHub Actions OIDC) and ",[307,701,562],{}," (a short-lived token approved in the browser, see ",[312,704,706],{"href":705},"#sreg-login",[307,707,708],{},"sreg login","). ",[307,711,562],{},[307,713,676],{}," cannot be combined.",[331,716,718],{"id":717},"commands","Commands",[447,720,721,731],{},[450,722,723],{},[453,724,725,728],{},[456,726,727],{},"Command",[456,729,730],{},"What it does",[466,732,733,750,767,784,800,813,826,839,852,865,876,889],{},[453,734,735,743],{},[471,736,737],{},[312,738,740],{"href":739},"#sreg-composer-publish",[307,741,742],{},"sreg composer publish",[471,744,745,746,749],{},"Archive a Composer package with ",[307,747,748],{},"git archive"," and publish it.",[453,751,752,760],{},[471,753,754],{},[312,755,757],{"href":756},"#sreg-npm-publish",[307,758,759],{},"sreg npm publish",[471,761,762,763,766],{},"Pack with ",[307,764,765],{},"npm pack"," and publish an npm package.",[453,768,769,777],{},[471,770,771],{},[312,772,774],{"href":773},"#sreg-cargo-publish",[307,775,776],{},"sreg cargo publish",[471,778,779,780,783],{},"Package with ",[307,781,782],{},"cargo package"," and publish a crate.",[453,785,786,794],{},[471,787,788],{},[312,789,791],{"href":790},"#sreg-nuget-publish",[307,792,793],{},"sreg nuget publish",[471,795,762,796,799],{},[307,797,798],{},"dotnet pack"," and publish a NuGet package.",[453,801,802,810],{},[471,803,804],{},[312,805,807],{"href":806},"#sreg-swift-publish",[307,808,809],{},"sreg swift publish",[471,811,812],{},"Archive a Swift package and publish it.",[453,814,815,823],{},[471,816,817],{},[312,818,820],{"href":819},"#sreg-maven-publish",[307,821,822],{},"sreg maven publish",[471,824,825],{},"Publish Maven \u002F Gradle artifacts from a local repository.",[453,827,828,836],{},[471,829,830],{},[312,831,833],{"href":832},"#sreg-generic-publish",[307,834,835],{},"sreg generic publish",[471,837,838],{},"Publish arbitrary files as a version of a generic package.",[453,840,841,849],{},[471,842,843],{},[312,844,846],{"href":845},"#sreg-generic-get",[307,847,848],{},"sreg generic get",[471,850,851],{},"Download and verify files of a generic package version.",[453,853,854,862],{},[471,855,856],{},[312,857,859],{"href":858},"#sreg-auth",[307,860,861],{},"sreg auth",[471,863,864],{},"Write registry credentials for a package manager, or print them.",[453,866,867,873],{},[471,868,869],{},[312,870,871],{"href":705},[307,872,708],{},[471,874,875],{},"Sign in through the browser and print a short-lived token to export.",[453,877,878,886],{},[471,879,880],{},[312,881,883],{"href":882},"#sreg-whoami",[307,884,885],{},"sreg whoami",[471,887,888],{},"Show the identity and grants of the current token.",[453,890,891,899],{},[471,892,893],{},[312,894,896],{"href":895},"#sreg-version",[307,897,898],{},"sreg version",[471,900,901,902,904],{},"Show the version of ",[307,903,309],{}," and of the registry.",[568,906,908,909,912],{"id":907},"common-behaviour-of-publish-commands","Common behaviour of ",[307,910,911],{},"publish"," commands",[304,914,915],{},"Every publish command works the same way:",[917,918,919,922,932,942],"ol",{},[620,920,921],{},"packages the project (see the table below),",[620,923,924,925,928,929,931],{},"computes the SHA-256 digest and size of every file and calls ",[307,926,927],{},"init"," - the registry checks the token's ",[307,930,911],{}," grant for the package and version and returns one presigned upload URL per file,",[620,933,934,935,938,939,941],{},"uploads every file straight to R2 with ",[307,936,937],{},"PUT"," (3 attempts with backoff; a new ",[307,940,927],{}," when the URLs expire),",[620,943,944,945,948],{},"calls ",[307,946,947],{},"commit"," - the registry verifies the uploaded files, writes the immutable version manifest and rebuilds the index.",[304,950,951,953,954,956,957,960,961,963,964,684],{},[307,952,309],{}," never runs the native tools' ",[307,955,911],{},", only their packing commands. The flags it sets itself are reserved and rejected after ",[307,958,959],{},"--",";\neverything else after ",[307,962,959],{}," goes verbatim to the tool (",[307,965,966],{},"sreg cargo publish --version 1.2.0 -- --features ssl --locked",[447,968,969,988],{},[450,970,971],{},[453,972,973,976,978,983],{},[456,974,975],{},"Ecosystem",[456,977,727],{},[456,979,980,981],{},"Flags set by ",[307,982,309],{},[456,984,985,986],{},"Examples of flags to pass after ",[307,987,959],{},[466,989,990,1013,1041,1077,1109,1132,1148],{},[453,991,992,995,1008,1011],{},[471,993,994],{},"composer",[471,996,997,1000,1001,637,1004,1007],{},[307,998,999],{},"git archive --format=zip HEAD:\u003Cpath>"," (fallback: a zip of the directory without ",[307,1002,1003],{},"vendor\u002F",[307,1005,1006],{},".git\u002F",")",[471,1009,1010],{},"-",[471,1012,1010],{},[453,1014,1015,1018,1022,1036],{},[471,1016,1017],{},"npm",[471,1019,1020],{},[307,1021,765],{},[471,1023,1024,526,1026,526,1029,1032,1033],{},[307,1025,513],{},[307,1027,1028],{},"--pack-destination \u003Ctmp>",[307,1030,1031],{},"-w \u003Cpkg>"," from ",[307,1034,1035],{},"--workspace",[471,1037,1038],{},[307,1039,1040],{},"--ignore-scripts",[453,1042,1043,1045,1049,1066],{},[471,1044,413],{},[471,1046,1047],{},[307,1048,782],{},[471,1050,1051,526,1054,526,1057,1032,1060,526,1063],{},[307,1052,1053],{},"--no-verify",[307,1055,1056],{},"--allow-dirty",[307,1058,1059],{},"-p \u003Ccrate>",[307,1061,1062],{},"--package",[307,1064,1065],{},"--target-dir \u003Ctmp>",[471,1067,1068,526,1071,526,1074],{},[307,1069,1070],{},"--features",[307,1072,1073],{},"--locked",[307,1075,1076],{},"--manifest-path",[453,1078,1079,1082,1087,1098],{},[471,1080,1081],{},"nuget",[471,1083,1084],{},[307,1085,1086],{},"dotnet pack \u003Cproject>",[471,1088,1089,526,1092,1032,1095],{},[307,1090,1091],{},"-o \u003Ctmp>",[307,1093,1094],{},"-p:PackageVersion=\u003Cv>",[307,1096,1097],{},"--version",[471,1099,1100,526,1103,526,1106],{},[307,1101,1102],{},"-c Release",[307,1104,1105],{},"--no-build",[307,1107,1108],{},"--include-symbols",[453,1110,1111,1114,1123,1128],{},[471,1112,1113],{},"swift",[471,1115,1116,1119,1120],{},[307,1117,1118],{},"swift package dump-package",", then ",[307,1121,1122],{},"swift package archive-source",[471,1124,1125],{},[307,1126,1127],{},"-o \u003Ctmp>\u002F\u003Cname>-\u003Cversion>.zip",[471,1129,1130],{},[307,1131,529],{},[453,1133,1134,1137,1144,1146],{},[471,1135,1136],{},"maven",[471,1138,1139,1140,1143],{},"none - the build deploys into ",[307,1141,1142],{},"--from-dir"," first",[471,1145,1010],{},[471,1147,1010],{},[453,1149,1150,1153,1156,1158],{},[471,1151,1152],{},"generic",[471,1154,1155],{},"none - the files are ready",[471,1157,1010],{},[471,1159,1010],{},[1161,1162,1164],"h4",{"id":1163},"options-shared-by-the-publish-commands","Options shared by the publish commands",[304,1166,1167,1168,526,1170,526,1172,526,1174,526,1176,637,1178,1180,1181,1183,1184,1187],{},"Accepted by ",[307,1169,994],{},[307,1171,1017],{},[307,1173,413],{},[307,1175,1081],{},[307,1177,1113],{},[307,1179,1136],{}," ",[307,1182,911],{}," (",[307,1185,1186],{},"generic publish"," has its own set, see below).",[447,1189,1190,1199],{},[450,1191,1192],{},[453,1193,1194,1197],{},[456,1195,1196],{},"Option",[456,1198,464],{},[466,1200,1201,1228,1259,1272,1294,1309,1321],{},[453,1202,1203,1208],{},[471,1204,1205],{},[307,1206,1207],{},"--version \u003CVERSION>",[471,1209,1210,1211,1183,1214,1217,1218,1221,1222,1224,1225,1227],{},"Version to publish. Composer and Swift: instead of the release tag on ",[307,1212,1213],{},"HEAD",[307,1215,1216],{},"v1.2.3"," becomes ",[307,1219,1220],{},"1.2.3","). npm, cargo and NuGet: written into the manifest (or passed to ",[307,1223,798],{},") before packaging; ",[307,1226,309],{}," says so on stderr and leaves the change in the working tree. Maven: selects the version directory.",[453,1229,1230,1235],{},[471,1231,1232],{},[307,1233,1234],{},"--tag-prefix \u003CPREFIX>",[471,1236,1237,1238,1240,1241,1244,1245,1248,1249,1251,1252,1255,1256,1258],{},"Take the version from the tag on ",[307,1239,1213],{}," that starts with the prefix, e.g. ",[307,1242,1243],{},"sdk\u002Fv"," for ",[307,1246,1247],{},"sdk\u002Fv1.2.3",". Cannot be combined with ",[307,1250,1097],{},". Without both, only ",[307,1253,1254],{},"v\u003Csemver>"," tags are considered and more than one on ",[307,1257,1213],{}," is an error. For monorepos.",[453,1260,1261,1266],{},[471,1262,1263],{},[307,1264,1265],{},"--dry-run",[471,1267,1268,1269,1271],{},"Stop after the registry accepted the upload declaration (",[307,1270,927],{},"): everything is validated, nothing is uploaded.",[453,1273,1274,1279],{},[471,1275,1276],{},[307,1277,1278],{},"--skip-existing",[471,1280,1281,1282,1285,1286,1289,1290,1293],{},"When the version is already published, print ",[307,1283,1284],{},"version already published, skipping"," and exit ",[307,1287,1288],{},"0"," instead of ",[307,1291,1292],{},"2",". Makes re-running a workflow safe.",[453,1295,1296,1300],{},[471,1297,1298],{},[307,1299,676],{},[471,1301,1302,1303,1305,1306,684],{},"Authenticate with a GitHub Actions OIDC token instead of ",[307,1304,499],{}," (the job needs ",[307,1307,1308],{},"permissions: id-token: write",[453,1310,1311,1316],{},[471,1312,1313],{},[307,1314,1315],{},"--oidc-project \u003CPROJECT>",[471,1317,559,1318,1320],{},[307,1319,676],{},": the project the token is issued for. Without it the registry finds the project from the repository the token was issued to.",[453,1322,1323,1327],{},[471,1324,1325],{},[307,1326,562],{},[471,1328,1329,1330,1334,1335,506],{},"Sign in through the browser and approve this publish: you get a 15-minute token for exactly the version being published (see ",[312,1331,1332],{"href":705},[307,1333,708],{},"). Cannot be combined with ",[307,1336,676],{},[304,1338,559,1339,1341,1342,1345,1346,506],{},[307,1340,513],{},", a successful publish prints ",[307,1343,1344],{},"{ \"eco\", \"name\", \"version\", \"url\", \"files\": [{ \"name\", \"url\" }] }",";\na skipped version prints ",[307,1347,1348],{},"{ \"skipped\": true, \"eco\", \"name\", \"version\" }",[568,1350,1352],{"id":1351},"publishing-prebuilt-archives","Publishing prebuilt archives",[304,1354,1355,526,1357,526,1359,637,1361,1364,1365,1183,1368,526,1371,526,1374,526,1377,1380],{},[307,1356,994],{},[307,1358,1017],{},[307,1360,413],{},[307,1362,1363],{},"nuget publish"," accept ",[307,1366,1367],{},"--archive \u003CFILE>",[307,1369,1370],{},".zip",[307,1372,1373],{},".tgz",[307,1375,1376],{},".crate",[307,1378,1379],{},".nupkg",") to publish an\narchive built earlier, byte for byte. Build, test and sign the archive in one job and publish exactly those bytes from another,\nor migrate historical releases without changing their checksums.",[342,1382,1384],{"className":344,"code":1383,"language":347,"meta":348,"style":348},"sreg npm publish      --archive package.tgz\nsreg composer publish --archive package.zip\nsreg cargo publish    --archive package.crate\nsreg nuget publish    --archive Package.1.2.3.nupkg\n",[307,1385,1386,1402,1417,1433],{"__ignoreMap":348},[352,1387,1388,1390,1393,1396,1399],{"class":354,"line":355},[352,1389,309],{"class":358},[352,1391,1392],{"class":370}," npm",[352,1394,1395],{"class":370}," publish",[352,1397,1398],{"class":362},"      --archive",[352,1400,1401],{"class":370}," package.tgz\n",[352,1403,1404,1406,1409,1411,1414],{"class":354,"line":610},[352,1405,309],{"class":358},[352,1407,1408],{"class":370}," composer",[352,1410,1395],{"class":370},[352,1412,1413],{"class":362}," --archive",[352,1415,1416],{"class":370}," package.zip\n",[352,1418,1420,1422,1425,1427,1430],{"class":354,"line":1419},3,[352,1421,309],{"class":358},[352,1423,1424],{"class":370}," cargo",[352,1426,1395],{"class":370},[352,1428,1429],{"class":362},"    --archive",[352,1431,1432],{"class":370}," package.crate\n",[352,1434,1436,1438,1441,1443,1445],{"class":354,"line":1435},4,[352,1437,309],{"class":358},[352,1439,1440],{"class":370}," nuget",[352,1442,1395],{"class":370},[352,1444,1429],{"class":362},[352,1446,1447],{"class":370}," Package.1.2.3.nupkg\n",[617,1449,1450,1457,1476,1482,1499],{},[620,1451,1452,1456],{},[1453,1454,1455],"strong",{},"The file is uploaded as it is",": the SHA-256 the registry records is the SHA-256 of the input file. Only the name it is stored under follows the registry's conventions.",[620,1458,1459,1183,1462,526,1465,526,1468,1471,1472,1475],{},[1453,1460,1461],{},"Identity, version and dependencies come from the manifest inside the archive",[307,1463,1464],{},"package\u002Fpackage.json",[307,1466,1467],{},"composer.json",[307,1469,1470],{},"Cargo.toml",", the ",[307,1473,1474],{},".nuspec","). The archive is validated completely before the first request.",[620,1477,1478,1481],{},[1453,1479,1480],{},"No git checkout and no native tool is needed",", and tags in the current directory are ignored.",[620,1483,1484,1488,1489,1491,1492,1495,1496,1498],{},[1453,1485,1486],{},[307,1487,1097],{}," is only a consistency check - it must equal the version in the archive (a Composer archive whose ",[307,1490,1467],{}," has no ",[307,1493,1494],{},"version"," is the exception: there ",[307,1497,1097],{}," is the version to publish).",[620,1500,1501,526,1504,1507,1508,1510,1511,1513,1514,637,1517,1520,1521,1523,1524,1527,1528,526,1530,526,1532,1534,1535,1538,1539,1542],{},[307,1502,1503],{},"--tag-prefix",[307,1505,1506],{},"--path"," (composer), ",[307,1509,1035],{}," (npm), ",[307,1512,1062],{}," (cargo), ",[307,1515,1516],{},"--project",[307,1518,1519],{},"--no-symbols"," (nuget) and arguments after ",[307,1522,959],{}," are rejected together with ",[307,1525,1526],{},"--archive",". ",[307,1529,1265],{},[307,1531,1278],{},[307,1533,513],{},", authentication and exit codes work as before; ",[307,1536,1537],{},"npm publish --archive"," still takes ",[307,1540,1541],{},"--tag",". A NuGet symbols package is not published in this mode.",[342,1544,1549],{"className":1545,"code":1547,"language":1548,"meta":348},[1546],"language-text","$ sreg npm publish --archive acme-ui-2.2.0.tgz --dry-run\nDry run: the registry accepted npm @acme\u002Fui 2.2.0; nothing was uploaded.\nFILE               SIZE  SHA256                                                            LABELS\nacme-ui-2.2.0.tgz  225   d4ea7dc95643a011146180e0d224fb91dfe3efbc544d3841e955d82c9586183c\n\n$ sreg npm publish --archive acme-ui-2.2.0.tgz --version 9.9.9\nerror: failed to read the npm archive acme-ui-2.2.0.tgz: invalid input: the tarball contains @acme\u002Fui@2.2.0, but --version 9.9.9 was given\n","text",[307,1550,1547],{"__ignoreMap":348},[304,1552,1553,1554,1556],{},"Requires ",[307,1555,309],{}," 0.1.3 or newer.",[1161,1558,1560],{"id":1559},"migrating-cargo-crates-from-another-registry","Migrating Cargo crates from another registry",[304,1562,1563,1564,1566],{},"A crate built for a retired registry names that registry's index in its ",[307,1565,1470],{},". To publish it here without touching the archive, name the old index:",[342,1568,1570],{"className":344,"code":1569,"language":347,"meta":348,"style":348},"sreg cargo publish \\\n  --archive licensing-kit-example-1.2.3.crate \\\n  --source-registry-index sparse+https:\u002F\u002Fold.example.com\u002Fcargo\u002Findex\u002F\n",[307,1571,1572,1584,1594],{"__ignoreMap":348},[352,1573,1574,1576,1578,1580],{"class":354,"line":355},[352,1575,309],{"class":358},[352,1577,1424],{"class":370},[352,1579,1395],{"class":370},[352,1581,1583],{"class":1582},"sQeA1"," \\\n",[352,1585,1586,1589,1592],{"class":354,"line":610},[352,1587,1588],{"class":362},"  --archive",[352,1590,1591],{"class":370}," licensing-kit-example-1.2.3.crate",[352,1593,1583],{"class":1582},[352,1595,1596,1599],{"class":354,"line":1419},[352,1597,1598],{"class":362},"  --source-registry-index",[352,1600,1601],{"class":370}," sparse+https:\u002F\u002Fold.example.com\u002Fcargo\u002Findex\u002F\n",[304,1603,1604,1605,1608],{},"Dependencies that refer to that index are described in this registry's sparse index as dependencies from the same registry\n(",[307,1606,1607],{},"registry: null","), so cargo resolves them here and the old host is never contacted. The archive and its checksum stay unchanged;\ndependencies from other registries keep their identity.",[568,1610,1612],{"id":1611},"sreg-composer-publish",[307,1613,742],{},[342,1615,1618],{"className":1616,"code":1617,"language":1548,"meta":348},[1546],"sreg composer publish [--path \u003CDIR> | --archive \u003CFILE>] [--version \u003CV> | --tag-prefix \u003CP>] [--dry-run] [--skip-existing] [--oidc [--oidc-project \u003CP>] | --login]\n",[307,1619,1617],{"__ignoreMap":348},[304,1621,1622,1623,1625],{},"Archives a Composer package and publishes it. Composer has no packing tool, so ",[307,1624,309],{}," packs by itself.",[447,1627,1628,1639],{},[450,1629,1630],{},[453,1631,1632,1634,1637],{},[456,1633,1196],{},[456,1635,1636],{},"Default",[456,1638,464],{},[466,1640,1641],{},[453,1642,1643,1648,1652],{},[471,1644,1645],{},[307,1646,1647],{},"--path \u003CDIR>",[471,1649,1650],{},[307,1651,506],{},[471,1653,1654,1655,684],{},"Directory of the package to publish (monorepos: ",[307,1656,1657],{},"--path packages\u002Fsdk",[304,1659,1660,1661,1183,1663,1667,1668,506],{},"Plus ",[307,1662,1367],{},[312,1664,1666],{"href":1665},"#publishing-prebuilt-archives","prebuilt archives",") and the ",[312,1669,1671],{"href":1670},"#options-shared-by-the-publish-commands","shared options",[304,1673,1674],{},"How it works:",[617,1676,1677,1694,1755,1780],{},[620,1678,1679,1682,1683,1686,1687,1689,1690,1693],{},[1453,1680,1681],{},"Name",": ",[307,1684,1685],{},"name"," in ",[307,1688,1467],{}," is required and must be a valid Composer name (",[307,1691,1692],{},"vendor\u002Fpackage",", lower case).",[620,1695,1696,1699,1700,1702,1703,1183,1705,1217,1707,1709,1710,526,1713,1715,1716,1719,1720,1722,1723,1726,1727,526,1730,1733,1734,1737,1738,526,1741,1744,1745,1748,1749,1751,1752,1754],{},[1453,1697,1698],{},"Version",": from ",[307,1701,1097],{},", or the release tag pointing at ",[307,1704,1213],{},[307,1706,1216],{},[307,1708,1220],{},"; with ",[307,1711,1712],{},"--tag-prefix sdk\u002Fv",[307,1714,1247],{},"; ",[307,1717,1718],{},"--tag-prefix \"\""," for bare ",[307,1721,1220],{}," tags). Versions are ",[307,1724,1725],{},"MAJOR.MINOR.PATCH",", optionally with ",[307,1728,1729],{},"-alpha",[307,1731,1732],{},"-beta"," or ",[307,1735,1736],{},"-rc"," and a number (",[307,1739,1740],{},"1.0.0-rc1",[307,1742,1743],{},"1.0.0-beta.2","); ",[307,1746,1747],{},"dev-*"," branches, other prerelease labels and build metadata are rejected. If ",[307,1750,1467],{}," declares a ",[307,1753,1494],{},", it must equal the published one - best leave it out.",[620,1756,1757,1760,1761,1764,1765,1768,1769,1527,1772,1774,1775,637,1777,506],{},[1453,1758,1759],{},"Archive",": in a git repository ",[307,1762,1763],{},"git archive HEAD:\u003Cpath>",": the package directory becomes the archive root, only committed files are published and paths marked ",[307,1766,1767],{},"export-ignore"," are left out. Put the rules into the package directory's own ",[307,1770,1771],{},".gitattributes",[307,1773,1467],{}," must be committed and equal to the one on disk. Outside a git repository the directory is zipped without ",[307,1776,1003],{},[307,1778,1779],{},".git",[620,1781,1782,1785,1786,1183,1789,1792,1793,1744,1796,1798],{},[1453,1783,1784],{},"Upload",": the archive as ",[307,1787,1788],{},"\u003Cpackage>-\u003Cversion>.zip",[307,1790,1791],{},"acme\u002Fsdk"," 1.2.3 becomes ",[307,1794,1795],{},"sdk-1.2.3.zip",[307,1797,1467],{}," is the version's manifest.",[342,1800,1802],{"className":344,"code":1801,"language":347,"meta":348,"style":348},"git tag v1.2.3\nsreg composer publish                                    # acme\u002Fsdk 1.2.3 from the tag\nsreg composer publish --version 1.2.4                    # explicit version\nsreg composer publish --dry-run                          # validate only\nsreg composer publish --path packages\u002Fsdk --tag-prefix sdk\u002Fv   # monorepo\n",[307,1803,1804,1815,1827,1845,1859],{"__ignoreMap":348},[352,1805,1806,1809,1812],{"class":354,"line":355},[352,1807,1808],{"class":358},"git",[352,1810,1811],{"class":370}," tag",[352,1813,1814],{"class":370}," v1.2.3\n",[352,1816,1817,1819,1821,1823],{"class":354,"line":610},[352,1818,309],{"class":358},[352,1820,1408],{"class":370},[352,1822,1395],{"class":370},[352,1824,1826],{"class":1825},"ss7Ak","                                    # acme\u002Fsdk 1.2.3 from the tag\n",[352,1828,1829,1831,1833,1835,1838,1842],{"class":354,"line":1419},[352,1830,309],{"class":358},[352,1832,1408],{"class":370},[352,1834,1395],{"class":370},[352,1836,1837],{"class":362}," --version",[352,1839,1841],{"class":1840},"sYThS"," 1.2.4",[352,1843,1844],{"class":1825},"                    # explicit version\n",[352,1846,1847,1849,1851,1853,1856],{"class":354,"line":1435},[352,1848,309],{"class":358},[352,1850,1408],{"class":370},[352,1852,1395],{"class":370},[352,1854,1855],{"class":362}," --dry-run",[352,1857,1858],{"class":1825},"                          # validate only\n",[352,1860,1862,1864,1866,1868,1871,1874,1877,1880],{"class":354,"line":1861},5,[352,1863,309],{"class":358},[352,1865,1408],{"class":370},[352,1867,1395],{"class":370},[352,1869,1870],{"class":362}," --path",[352,1872,1873],{"class":370}," packages\u002Fsdk",[352,1875,1876],{"class":362}," --tag-prefix",[352,1878,1879],{"class":370}," sdk\u002Fv",[352,1881,1882],{"class":1825},"   # monorepo\n",[342,1884,1887],{"className":1885,"code":1886,"language":1548,"meta":348},[1546],"$ sreg composer publish --version 1.0.0\nPublished composer acme\u002Fsdk 1.0.0\nhttps:\u002F\u002Fpackages.example.com\u002Fcomposer\u002Fdist\u002Facme\u002Fsdk\u002F1.0.0.zip\n\n$ sreg composer publish --version 1.0.0\nerror: failed to publish composer acme\u002Fsdk 1.0.0: this version already exists in the registry\nhint: published versions are immutable; bump the version to publish again\n",[307,1888,1886],{"__ignoreMap":348},[304,1890,1891,1892,1709,1894,1896,1897,684],{},"(the second call exits with ",[307,1893,1292],{},[307,1895,1278],{}," it exits with ",[307,1898,1288],{},[568,1900,1902],{"id":1901},"sreg-npm-publish",[307,1903,759],{},[342,1905,1908],{"className":1906,"code":1907,"language":1548,"meta":348},[1546],"sreg npm publish [--version \u003CV> | --tag-prefix \u003CP>] [--tag \u003CTAG>] [--workspace \u003CW> | --archive \u003CFILE>] [shared options] [-- \u003Cnpm pack args>]\n",[307,1909,1907],{"__ignoreMap":348},[304,1911,1912,1913,1915],{},"Packs the project in the current directory with ",[307,1914,765],{}," and publishes the tarball.",[447,1917,1918,1928],{},[450,1919,1920],{},[453,1921,1922,1924,1926],{},[456,1923,1196],{},[456,1925,1636],{},[456,1927,464],{},[466,1929,1930,1949,1964,1983],{},[453,1931,1932,1937,1946],{},[471,1933,1934],{},[307,1935,1936],{},"--tag \u003CTAG>",[471,1938,1939,1183,1942,1945],{},[307,1940,1941],{},"latest",[307,1943,1944],{},"next"," for prereleases)",[471,1947,1948],{},"Distribution tag of this version.",[453,1950,1951,1956,1958],{},[471,1952,1953],{},[307,1954,1955],{},"--workspace \u003CW>",[471,1957,1010],{},[471,1959,1960,1961,506],{},"Publish this npm workspace (name or path) of the project in the current directory: ",[307,1962,1963],{},"npm pack -w \u003CW>",[453,1965,1966,1970,1972],{},[471,1967,1968],{},[307,1969,1367],{},[471,1971,1010],{},[471,1973,1974,1975,1977,1978,1183,1980,684],{},"Publish this ",[307,1976,1373],{}," as it is instead of running ",[307,1979,765],{},[312,1981,1982],{"href":1665},"details",[453,1984,1985,1990,1992],{},[471,1986,1987],{},[307,1988,1989],{},"-- \u003Cnpm pack args>",[471,1991,1010],{},[471,1993,1994,1995,1997,1998,506],{},"Extra arguments passed verbatim to ",[307,1996,765],{},", e.g. ",[307,1999,1040],{},[304,2001,1674],{},[617,2003,2004,2011,2041,2055],{},[620,2005,2006,2007,2010],{},"Only scoped packages (",[307,2008,2009],{},"@scope\u002Fname",") are served by the registry; the version must be semver.",[620,2012,2013,2014,2016,2017,1183,2020,2023,2024,2027,2028,637,2030,2032,2033,2035,2036,2038,2039,506],{},"With a version requested, ",[307,2015,309],{}," first writes it into ",[307,2018,2019],{},"package.json",[307,2021,2022],{},"npm pkg set version=\u003Cv>",", with ",[307,2025,2026],{},"-w"," for workspaces) and says so on stderr. Without ",[307,2029,1097],{},[307,2031,1503],{}," it uses the ",[307,2034,1254],{}," tag on ",[307,2037,1213],{},", falling back to the version in ",[307,2040,2019],{},[620,2042,2043,2044,2047,2048,2050,2051,2054],{},"Runs ",[307,2045,2046],{},"npm pack --json --pack-destination \u003Ctmp>"," and reads ",[307,2049,1464],{}," from the tarball (without fields starting with ",[307,2052,2053],{},"_",") as the manifest.",[620,2056,2057,2058,2060,2061,1792,2064,684],{},"Uploads the tarball under the name ",[307,2059,765],{}," gave it (",[307,2062,2063],{},"@acme\u002Fsdk",[307,2065,2066],{},"acme-sdk-1.2.3.tgz",[342,2068,2070],{"className":344,"code":2069,"language":347,"meta":348,"style":348},"sreg npm publish --version 1.2.3\nsreg npm publish --tag beta -- --ignore-scripts\nsreg npm publish --workspace packages\u002Fsdk --tag-prefix sdk\u002Fv   # npm workspaces\n",[307,2071,2072,2085,2105],{"__ignoreMap":348},[352,2073,2074,2076,2078,2080,2082],{"class":354,"line":355},[352,2075,309],{"class":358},[352,2077,1392],{"class":370},[352,2079,1395],{"class":370},[352,2081,1837],{"class":362},[352,2083,2084],{"class":1840}," 1.2.3\n",[352,2086,2087,2089,2091,2093,2096,2099,2102],{"class":354,"line":610},[352,2088,309],{"class":358},[352,2090,1392],{"class":370},[352,2092,1395],{"class":370},[352,2094,2095],{"class":362}," --tag",[352,2097,2098],{"class":370}," beta",[352,2100,2101],{"class":362}," --",[352,2103,2104],{"class":362}," --ignore-scripts\n",[352,2106,2107,2109,2111,2113,2116,2118,2120,2122],{"class":354,"line":1419},[352,2108,309],{"class":358},[352,2110,1392],{"class":370},[352,2112,1395],{"class":370},[352,2114,2115],{"class":362}," --workspace",[352,2117,1873],{"class":370},[352,2119,1876],{"class":362},[352,2121,1879],{"class":370},[352,2123,2124],{"class":1825},"   # npm workspaces\n",[342,2126,2129],{"className":2127,"code":2128,"language":1548,"meta":348},[1546],"$ sreg npm publish --version 2.1.0\nnote: set the version in .\u002Fpackage.json to 2.1.0 (npm pkg set)\nPublished npm @acme\u002Fui 2.1.0\nhttps:\u002F\u002Fpackages.example.com\u002Fnpm\u002F@acme\u002Fui\u002F-\u002Fui-2.1.0.tgz\n",[307,2130,2128],{"__ignoreMap":348},[568,2132,2134],{"id":2133},"sreg-cargo-publish",[307,2135,776],{},[342,2137,2140],{"className":2138,"code":2139,"language":1548,"meta":348},[1546],"sreg cargo publish [--version \u003CV> | --tag-prefix \u003CP>] [--package \u003CCRATE> | --archive \u003CFILE> [--source-registry-index \u003CURL>]] [shared options] [-- \u003Ccargo package args>]\n",[307,2141,2139],{"__ignoreMap":348},[304,2143,2144,2145,2147,2148,506],{},"Packages a crate with ",[307,2146,782],{}," and publishes the ",[307,2149,1376],{},[447,2151,2152,2162],{},[450,2153,2154],{},[453,2155,2156,2158,2160],{},[456,2157,1196],{},[456,2159,1636],{},[456,2161,464],{},[466,2163,2164,2180,2196,2214],{},[453,2165,2166,2171,2174],{},[471,2167,2168],{},[307,2169,2170],{},"--package \u003CCRATE>",[471,2172,2173],{},"the crate of the current directory, or the only crate of the workspace",[471,2175,2176,2177,684],{},"Publish this workspace member (",[307,2178,2179],{},"cargo package -p \u003CCRATE>",[453,2181,2182,2186,2188],{},[471,2183,2184],{},[307,2185,1367],{},[471,2187,1010],{},[471,2189,1974,2190,1977,2192,1183,2194,684],{},[307,2191,1376],{},[307,2193,782],{},[312,2195,1982],{"href":1665},[453,2197,2198,2203,2205],{},[471,2199,2200],{},[307,2201,2202],{},"--source-registry-index \u003CURL>",[471,2204,1010],{},[471,2206,559,2207,2209,2210,684],{},[307,2208,1526],{},": index URL of the retired registry the crate was built for (",[312,2211,2213],{"href":2212},"#migrating-cargo-crates-from-another-registry","migrating crates",[453,2215,2216,2221,2223],{},[471,2217,2218],{},[307,2219,2220],{},"-- \u003Ccargo package args>",[471,2222,1010],{},[471,2224,1994,2225,1997,2227,526,2229,526,2232,506],{},[307,2226,782],{},[307,2228,1073],{},[307,2230,2231],{},"--features ssl",[307,2233,1076],{},[304,2235,1674],{},[617,2237,2238,2270,2275,2297],{},[620,2239,2240,2243,2244,2246,2247,2249,2250,2253,2254,2256,2257,2260,2261,2032,2263,2035,2265,2267,2268,506],{},[307,2241,2242],{},"cargo metadata --no-deps"," finds the crate. With a requested version, ",[307,2245,309],{}," writes it into the crate's ",[307,2248,1470],{}," (formatting preserved); a crate with ",[307,2251,2252],{},"version.workspace = true"," cannot get its own ",[307,2255,1097],{}," - set it in ",[307,2258,2259],{},"[workspace.package]"," instead. Without ",[307,2262,1097],{},[307,2264,1254],{},[307,2266,1213],{},", falling back to ",[307,2269,1470],{},[620,2271,2043,2272,506],{},[307,2273,2274],{},"cargo package --no-verify --allow-dirty -p \u003Ccrate> --target-dir \u003Ctmp>",[620,2276,2277,2278,2280,2281,2284,2285,2288,2289,2292,2293,2296],{},"Uploads the ",[307,2279,1376],{}," as ",[307,2282,2283],{},"\u003Cname>-\u003Cversion>.crate",". The manifest is the crate's line of the cargo sparse index, built from ",[307,2286,2287],{},"cargo metadata",": dependencies from crates.io point at the crates.io index, dependencies from another registry (declared with ",[307,2290,2291],{},"registry = \"\u003Cname>\"",") are taken to come from this registry. Path-only dev-dependencies are left out, as ",[307,2294,2295],{},"cargo publish"," does.",[620,2298,2299,2300,506],{},"Make the registry known to cargo for consumers with ",[312,2301,2302],{"href":858},[307,2303,2304],{},"sreg auth cargo",[342,2306,2308],{"className":344,"code":2307,"language":347,"meta":348,"style":348},"sreg cargo publish --version 1.4.2\nsreg cargo publish --package acme-core --tag-prefix core\u002Fv -- --locked\n",[307,2309,2310,2323],{"__ignoreMap":348},[352,2311,2312,2314,2316,2318,2320],{"class":354,"line":355},[352,2313,309],{"class":358},[352,2315,1424],{"class":370},[352,2317,1395],{"class":370},[352,2319,1837],{"class":362},[352,2321,2322],{"class":1840}," 1.4.2\n",[352,2324,2325,2327,2329,2331,2334,2337,2339,2342,2344],{"class":354,"line":610},[352,2326,309],{"class":358},[352,2328,1424],{"class":370},[352,2330,1395],{"class":370},[352,2332,2333],{"class":362}," --package",[352,2335,2336],{"class":370}," acme-core",[352,2338,1876],{"class":362},[352,2340,2341],{"class":370}," core\u002Fv",[352,2343,2101],{"class":362},[352,2345,2346],{"class":362}," --locked\n",[342,2348,2351],{"className":2349,"code":2350,"language":1548,"meta":348},[1546],"$ sreg cargo publish --version 0.3.0\nnote: set the version in \u002Fwork\u002FCargo.toml to 0.3.0 (was 0.1.0)\nPublished cargo acme-core 0.3.0\nhttps:\u002F\u002Fpackages.example.com\u002Fcargo\u002Fdl\u002Facme-core\u002F0.3.0\n",[307,2352,2350],{"__ignoreMap":348},[568,2354,2356],{"id":2355},"sreg-nuget-publish",[307,2357,793],{},[342,2359,2362],{"className":2360,"code":2361,"language":1548,"meta":348},[1546],"sreg nuget publish [--version \u003CV> | --tag-prefix \u003CP>] [--project \u003CPROJECT>] [--no-symbols] [--archive \u003CFILE>] [shared options] [-- \u003Cdotnet pack args>]\n",[307,2363,2361],{"__ignoreMap":348},[304,2365,2366,2367,2147,2369,2371],{},"Packs a project with ",[307,2368,798],{},[307,2370,1379],{}," (and symbols).",[447,2373,2374,2384],{},[450,2375,2376],{},[453,2377,2378,2380,2382],{},[456,2379,1196],{},[456,2381,1636],{},[456,2383,464],{},[466,2385,2386,2407,2425,2441],{},[453,2387,2388,2393,2400],{},[471,2389,2390],{},[307,2391,2392],{},"--project \u003CPROJECT>",[471,2394,2395,2396,2399],{},"the single ",[307,2397,2398],{},".csproj"," in the current directory",[471,2401,2402,2403,2406],{},"Project file to pack. Solutions (",[307,2404,2405],{},".sln",") are refused because they produce several packages.",[453,2408,2409,2413,2415],{},[471,2410,2411],{},[307,2412,1519],{},[471,2414],{},[471,2416,2417,2418,2421,2422,2424],{},"Do not publish the ",[307,2419,2420],{},".snupkg"," symbols package that ",[307,2423,798],{}," produced.",[453,2426,2427,2431,2433],{},[471,2428,2429],{},[307,2430,1367],{},[471,2432,1010],{},[471,2434,1974,2435,1977,2437,1183,2439,684],{},[307,2436,1379],{},[307,2438,798],{},[312,2440,1982],{"href":1665},[453,2442,2443,2448,2450],{},[471,2444,2445],{},[307,2446,2447],{},"-- \u003Cdotnet pack args>",[471,2449,1010],{},[471,2451,2452,2453,1997,2455,526,2457,526,2459,506],{},"Extra arguments for ",[307,2454,798],{},[307,2456,1102],{},[307,2458,1105],{},[307,2460,1108],{},[304,2462,1674],{},[617,2464,2465,2484,2508],{},[620,2466,2043,2467,2470,2471,2473,2474,637,2476,2478,2479,2035,2481,2483],{},[307,2468,2469],{},"dotnet pack \u003Cproject> -o \u003Ctmp>"," with the requested version passed as ",[307,2472,1094],{},". Without ",[307,2475,1097],{},[307,2477,1503],{}," the ",[307,2480,1254],{},[307,2482,1213],{}," is used, falling back to the project's own version.",[620,2485,2277,2486,2280,2488,2491,2492,2494,2495,2498,2499,1471,2501,2503,2504,2507],{},[307,2487,1379],{},[307,2489,2490],{},"\u003Cid>.\u003Cversion>.nupkg"," (lower case) and, when ",[307,2493,798],{}," produced one (e.g. with ",[307,2496,2497],{},"-p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg",") and unless ",[307,2500,1519],{},[307,2502,2420],{},". Legacy ",[307,2505,2506],{},".symbols.nupkg"," packages are ignored.",[620,2509,2510,2511,2513,2514,2516],{},"The manifest holds the id, version, description, authors, project URL, license expression, tags and dependency groups from the ",[307,2512,1474],{},", plus the ",[307,2515,1474],{}," itself.",[342,2518,2520],{"className":344,"code":2519,"language":347,"meta":348,"style":348},"sreg nuget publish --version 1.2.0 -- -c Release\nsreg nuget publish --project src\u002FAcme.Sdk\u002FAcme.Sdk.csproj --tag-prefix sdk\u002Fv --no-symbols\n",[307,2521,2522,2543],{"__ignoreMap":348},[352,2523,2524,2526,2528,2530,2532,2535,2537,2540],{"class":354,"line":355},[352,2525,309],{"class":358},[352,2527,1440],{"class":370},[352,2529,1395],{"class":370},[352,2531,1837],{"class":362},[352,2533,2534],{"class":1840}," 1.2.0",[352,2536,2101],{"class":362},[352,2538,2539],{"class":362}," -c",[352,2541,2542],{"class":370}," Release\n",[352,2544,2545,2547,2549,2551,2554,2557,2559,2561],{"class":354,"line":610},[352,2546,309],{"class":358},[352,2548,1440],{"class":370},[352,2550,1395],{"class":370},[352,2552,2553],{"class":362}," --project",[352,2555,2556],{"class":370}," src\u002FAcme.Sdk\u002FAcme.Sdk.csproj",[352,2558,1876],{"class":362},[352,2560,1879],{"class":370},[352,2562,2563],{"class":362}," --no-symbols\n",[568,2565,2567],{"id":2566},"sreg-swift-publish",[307,2568,809],{},[342,2570,2573],{"className":2571,"code":2572,"language":1548,"meta":348},[1546],"sreg swift publish --scope \u003CSCOPE> [--path \u003CDIR>] [--repository-url \u003CURL>] [--version \u003CV> | --tag-prefix \u003CP>] [shared options] [-- \u003Carchive-source args>]\n",[307,2574,2572],{"__ignoreMap":348},[304,2576,2577,2578,506],{},"Archives a Swift package and publishes it as ",[307,2579,2580],{},"\u003Cscope>.\u003Cname>",[447,2582,2583,2593],{},[450,2584,2585],{},[453,2586,2587,2589,2591],{},[456,2588,1196],{},[456,2590,1636],{},[456,2592,464],{},[466,2594,2595,2620,2636,2653],{},[453,2596,2597,2602,2605],{},[471,2598,2599],{},[307,2600,2601],{},"--scope \u003CSCOPE>",[471,2603,2604],{},"required",[471,2606,2607,2608,526,2611,526,2614,637,2617,2619],{},"Registry scope to publish under (1-39 characters of ",[307,2609,2610],{},"A-Z",[307,2612,2613],{},"a-z",[307,2615,2616],{},"0-9",[307,2618,1010],{},"). Swift packages have no scope of their own.",[453,2621,2622,2626,2630],{},[471,2623,2624],{},[307,2625,1647],{},[471,2627,2628],{},[307,2629,506],{},[471,2631,2632,2633,684],{},"Directory of the package (with ",[307,2634,2635],{},"Package.swift",[453,2637,2638,2643,2650],{},[471,2639,2640],{},[307,2641,2642],{},"--repository-url \u003CURL>",[471,2644,2645,2646,2649],{},"the URL of the ",[307,2647,2648],{},"origin"," git remote, if any",[471,2651,2652],{},"Source repository URL recorded with the version. Credentials in the URL are stripped.",[453,2654,2655,2660,2662],{},[471,2656,2657],{},[307,2658,2659],{},"-- \u003Carchive-source args>",[471,2661,1010],{},[471,2663,2452,2664,506],{},[307,2665,1122],{},[304,2667,1674],{},[617,2669,2670,2695,2718,2741,2749],{},[620,2671,2672,1682,2674,1686,2676,2678,2679,2681,2682,526,2684,526,2686,526,2688,637,2690,2692,2693,506],{},[1453,2673,1681],{},[307,2675,1685],{},[307,2677,2635],{}," as reported by ",[307,2680,1118],{}," (1-100 characters of ",[307,2683,2610],{},[307,2685,2613],{},[307,2687,2616],{},[307,2689,2053],{},[307,2691,1010],{},"); published as ",[307,2694,2580],{},[620,2696,2697,1682,2699,2701,2702,2704,2705,1183,2707,2710,2711,2714,2715,506],{},[1453,2698,1698],{},[307,2700,2635],{}," has no version, so it comes from ",[307,2703,1097],{}," or the release tag on ",[307,2706,1213],{},[307,2708,2709],{},"v1.2.0",", or ",[307,2712,2713],{},"\u003Cprefix>1.2.0","); without either, the command fails. Versions are semver 2 without a leading ",[307,2716,2717],{},"v",[620,2719,2720,2723,2724,2726,2727,1715,2730,2732,2733,2736,2737,2740],{},[1453,2721,2722],{},"Files",": the zip written by ",[307,2725,1122],{}," (it archives the committed state of a git repository) as ",[307,2728,2729],{},"\u003Cname>-\u003Cversion>.zip",[307,2731,2635],{}," and every ",[307,2734,2735],{},"Package@swift-\u003Cversion>.swift"," next to it as ",[307,2738,2739],{},"manifest"," files.",[620,2742,2743,2746,2747,506],{},[1453,2744,2745],{},"Manifest",": the tools version, the repository URL and the complete output of ",[307,2748,1118],{},[620,2750,2751,2752,2755,2756,2759,2760,506],{},"Consumers point SwiftPM at ",[307,2753,2754],{},"\u003Cregistry>\u002Fswift"," with ",[307,2757,2758],{},"swift package-registry set \u003Cregistry>\u002Fswift --scope acme"," and log in with ",[312,2761,2762],{"href":858},[307,2763,2764],{},"sreg auth swift",[342,2766,2768],{"className":344,"code":2767,"language":347,"meta":348,"style":348},"git tag v1.2.0\nsreg swift publish --scope acme                              # acme.DemoKit 1.2.0 from the tag\nsreg swift publish --scope acme --version 1.3.0-beta.1\nsreg swift publish --scope acme --path packages\u002FKit --tag-prefix kit\u002Fv\n",[307,2769,2770,2779,2797,2814],{"__ignoreMap":348},[352,2771,2772,2774,2776],{"class":354,"line":355},[352,2773,1808],{"class":358},[352,2775,1811],{"class":370},[352,2777,2778],{"class":370}," v1.2.0\n",[352,2780,2781,2783,2786,2788,2791,2794],{"class":354,"line":610},[352,2782,309],{"class":358},[352,2784,2785],{"class":370}," swift",[352,2787,1395],{"class":370},[352,2789,2790],{"class":362}," --scope",[352,2792,2793],{"class":370}," acme",[352,2795,2796],{"class":1825},"                              # acme.DemoKit 1.2.0 from the tag\n",[352,2798,2799,2801,2803,2805,2807,2809,2811],{"class":354,"line":1419},[352,2800,309],{"class":358},[352,2802,2785],{"class":370},[352,2804,1395],{"class":370},[352,2806,2790],{"class":362},[352,2808,2793],{"class":370},[352,2810,1837],{"class":362},[352,2812,2813],{"class":370}," 1.3.0-beta.1\n",[352,2815,2816,2818,2820,2822,2824,2826,2828,2831,2833],{"class":354,"line":1435},[352,2817,309],{"class":358},[352,2819,2785],{"class":370},[352,2821,1395],{"class":370},[352,2823,2790],{"class":362},[352,2825,2793],{"class":370},[352,2827,1870],{"class":362},[352,2829,2830],{"class":370}," packages\u002FKit",[352,2832,1876],{"class":362},[352,2834,2835],{"class":370}," kit\u002Fv\n",[568,2837,2839],{"id":2838},"sreg-maven-publish",[307,2840,822],{},[342,2842,2845],{"className":2843,"code":2844,"language":1548,"meta":348},[1546],"sreg maven publish --from-dir \u003CDIR> [--coords \u003CGROUP:ARTIFACT>] [--version \u003CV> | --tag-prefix \u003CP>] [shared options]\n",[307,2846,2844],{"__ignoreMap":348},[304,2848,2849,2851],{},[307,2850,309],{}," does not run Maven or Gradle. Let the build deploy into a local directory (a Maven-2 file repository) and publish one artifact version from it.",[447,2853,2854,2862],{},[450,2855,2856],{},[453,2857,2858,2860],{},[456,2859,1196],{},[456,2861,464],{},[466,2863,2864,2874],{},[453,2865,2866,2871],{},[471,2867,2868],{},[307,2869,2870],{},"--from-dir \u003CDIR>",[471,2872,2873],{},"Required. The local repository the build deployed to.",[453,2875,2876,2881],{},[471,2877,2878],{},[307,2879,2880],{},"--coords \u003CGROUP:ARTIFACT>",[471,2882,2883],{},"The artifact to publish when the repository holds several (multi-module builds; publish each module with its own call).",[304,2885,1674],{},[617,2887,2888,2904,2920,2947,2982],{},[620,2889,2890,2893,2894,2897,2898,2900,2901,506],{},[1453,2891,2892],{},"Artifact",": looks for ",[307,2895,2896],{},"\u003Cgroup\u002Fas\u002Fpath>\u002F\u003CartifactId>\u002F\u003Cversion>\u002F\u003CartifactId>-\u003Cversion>.pom"," under ",[307,2899,1142],{},". The package name in the registry is ",[307,2902,2903],{},"\u003CgroupId>:\u003CartifactId>",[620,2905,2906,1682,2908,2704,2910,2912,2913,2916,2917,2919],{},[1453,2907,1698],{},[307,2909,1097],{},[307,2911,1213],{}," selects the version directory; without either the directory must hold exactly one version. ",[307,2914,2915],{},"-SNAPSHOT"," versions are rejected. ",[307,2918,309],{}," does not change the build: the version the build used must be the one being published.",[620,2921,2922,2925,2926,2929,2930,2933,2934,2937,2938,526,2941,637,2944,2946],{},[1453,2923,2924],{},"POM",": must be an effective POM - a ",[307,2927,2928],{},"\u003Cparent>"," or a ",[307,2931,2932],{},"${...}"," property in coordinates, packaging or dependencies is rejected (Gradle writes resolved POMs; with Maven deploy a flattened POM, e.g. with ",[307,2935,2936],{},"flatten-maven-plugin","). Its ",[307,2939,2940],{},"groupId",[307,2942,2943],{},"artifactId",[307,2945,1494],{}," must match its location.",[620,2948,2949,2951,2952,2955,2956,526,2959,2962,2963,526,2966,2969,2970,2973,2974,2977,2978,2981],{},[1453,2950,2722],{},": every file of the version directory except checksums (the registry serves its own) and ",[307,2953,2954],{},"maven-metadata*.xml",", each with a role: ",[307,2957,2958],{},"pom",[307,2960,2961],{},"archive"," (the packaging's extension), ",[307,2964,2965],{},"sources",[307,2967,2968],{},"javadoc",", Gradle ",[307,2971,2972],{},"module"," metadata, or ",[307,2975,2976],{},"extra"," (classified jars, distributions, ",[307,2979,2980],{},".asc"," signatures).",[620,2983,2984,1682,2986,526,2988,526,2990,526,2992,2995,2996,637,2999,3002],{},[1453,2985,2745],{},[307,2987,2940],{},[307,2989,2943],{},[307,2991,1494],{},[307,2993,2994],{},"packaging",", the POM itself and the dependencies with their ",[307,2997,2998],{},"scope",[307,3000,3001],{},"optional"," flag.",[339,3004,3005,3046],{},[342,3006,3009],{"className":344,"code":3007,"filename":3008,"language":347,"meta":348,"style":348},"mvn -B deploy -DaltDeploymentRepository=local::file:.\u002Fout\nsreg maven publish --from-dir out --coords com.acme:sdk\n","Maven",[307,3010,3011,3025],{"__ignoreMap":348},[352,3012,3013,3016,3019,3022],{"class":354,"line":355},[352,3014,3015],{"class":358},"mvn",[352,3017,3018],{"class":362}," -B",[352,3020,3021],{"class":370}," deploy",[352,3023,3024],{"class":362}," -DaltDeploymentRepository=local::file:.\u002Fout\n",[352,3026,3027,3029,3032,3034,3037,3040,3043],{"class":354,"line":610},[352,3028,309],{"class":358},[352,3030,3031],{"class":370}," maven",[352,3033,1395],{"class":370},[352,3035,3036],{"class":362}," --from-dir",[352,3038,3039],{"class":370}," out",[352,3041,3042],{"class":362}," --coords",[352,3044,3045],{"class":370}," com.acme:sdk\n",[342,3047,3050],{"className":344,"code":3048,"filename":3049,"language":347,"meta":348,"style":348},"# maven-publish with a repository pointing at a file:\u002F\u002F URL (build\u002Frepo)\n.\u002Fgradlew publish\nsreg maven publish --from-dir build\u002Frepo --coords com.acme:sdk --version 1.4.0\n","Gradle",[307,3051,3052,3057,3065],{"__ignoreMap":348},[352,3053,3054],{"class":354,"line":355},[352,3055,3056],{"class":1825},"# maven-publish with a repository pointing at a file:\u002F\u002F URL (build\u002Frepo)\n",[352,3058,3059,3062],{"class":354,"line":610},[352,3060,3061],{"class":358},".\u002Fgradlew",[352,3063,3064],{"class":370}," publish\n",[352,3066,3067,3069,3071,3073,3075,3078,3080,3083,3085],{"class":354,"line":1419},[352,3068,309],{"class":358},[352,3070,3031],{"class":370},[352,3072,1395],{"class":370},[352,3074,3036],{"class":362},[352,3076,3077],{"class":370}," build\u002Frepo",[352,3079,3042],{"class":362},[352,3081,3082],{"class":370}," com.acme:sdk",[352,3084,1837],{"class":362},[352,3086,3087],{"class":1840}," 1.4.0\n",[568,3089,3091],{"id":3090},"sreg-generic-publish",[307,3092,835],{},[342,3094,3097],{"className":3095,"code":3096,"language":1548,"meta":348},[1546],"sreg generic publish \u003CNAME> \u003CVERSION> [FILE]... [--label \u003CK=V>]... [--meta \u003CK=V>]... [--meta-file \u003CFILE>] [--spec \u003CFILE>] [--no-append] [--dry-run] [--skip-existing] [--oidc [--oidc-project \u003CP>] | --login]\n",[307,3098,3096],{"__ignoreMap":348},[304,3100,3101],{},"Publishes files as one version of a generic package (binaries, installers, anything).",[447,3103,3104,3113],{},[450,3105,3106],{},[453,3107,3108,3111],{},[456,3109,3110],{},"Argument \u002F option",[456,3112,464],{},[466,3114,3115,3132,3149,3159,3176,3186,3200,3218,3228],{},[453,3116,3117,3122],{},[471,3118,3119],{},[307,3120,3121],{},"\u003CNAME>",[471,3123,3124,3125,3128,3129,506],{},"Package name ",[307,3126,3127],{},"[\u003Cgroup>\u002F]\u003Cname>",", lower case, e.g. ",[307,3130,3131],{},"tools\u002Facme-tool",[453,3133,3134,3139],{},[471,3135,3136],{},[307,3137,3138],{},"\u003CVERSION>",[471,3140,3141,3142,1733,3145,3148],{},"Semver, e.g. ",[307,3143,3144],{},"1.2.0",[307,3146,3147],{},"1.3.0-rc.1",". There is no version autodetection.",[453,3150,3151,3156],{},[471,3152,3153],{},[307,3154,3155],{},"[FILE]...",[471,3157,3158],{},"Files to publish; each is published under its file name.",[453,3160,3161,3166],{},[471,3162,3163],{},[307,3164,3165],{},"--label \u003CK=V>",[471,3167,3168,3169,3172,3173,3175],{},"Label applied to every file of the call (repeatable), e.g. ",[307,3170,3171],{},"os=linux",". Consumers filter by labels. ",[307,3174,309],{}," adds no default labels.",[453,3177,3178,3183],{},[471,3179,3180],{},[307,3181,3182],{},"--meta \u003CK=V>",[471,3184,3185],{},"Metadata entry of the version, as a string (repeatable).",[453,3187,3188,3193],{},[471,3189,3190],{},[307,3191,3192],{},"--meta-file \u003CFILE>",[471,3194,3195,3196,3199],{},"JSON object with the metadata of the version; ",[307,3197,3198],{},"--meta"," entries override its keys.",[453,3201,3202,3207],{},[471,3203,3204],{},[307,3205,3206],{},"--spec \u003CFILE>",[471,3208,3209,3210,3213,3214,3217],{},"JSON file listing files with their own labels: ",[307,3211,3212],{},"[{\"path\": \"...\", \"labels\": {\"os\": \"linux\"}}, ...]"," - instead of ",[307,3215,3216],{},"FILE"," arguments.",[453,3219,3220,3225],{},[471,3221,3222],{},[307,3223,3224],{},"--no-append",[471,3226,3227],{},"Require a new version instead of adding the files to an already published one.",[453,3229,3230,3243],{},[471,3231,3232,526,3234,526,3236,526,3238,526,3241],{},[307,3233,1265],{},[307,3235,1278],{},[307,3237,676],{},[307,3239,3240],{},"--oidc-project",[307,3242,562],{},[471,3244,3245,3246,3248,3249,3251],{},"As in the ",[312,3247,1671],{"href":1670},". Here ",[307,3250,1278],{}," also applies to a file being appended that already exists.",[304,3253,1674],{},[617,3255,3256,3267],{},[620,3257,3258,3259,3262,3263,3266],{},"By default files are ",[1453,3260,3261],{},"appended"," to an already published version, as long as the registry's append window (",[307,3264,3265],{},"APPEND_WINDOW_HOURS",", 24 h by default) has not passed and the file names are new. This lets a CI matrix publish one file per job (Linux, macOS, Windows builds) into the same version. A committed file is immutable.",[620,3268,3269,3270,3272],{},"Arguments after ",[307,3271,959],{}," are rejected.",[342,3274,3276],{"className":344,"code":3275,"language":347,"meta":348,"style":348},"sreg generic publish tools\u002Facme-tool 1.4.0 acme-linux.tar.gz   --label os=linux   --label arch=x86_64\nsreg generic publish tools\u002Facme-tool 1.4.0 acme-macos.tar.gz   --label os=macos   --label arch=arm64\nsreg generic publish tools\u002Facme-tool 1.4.0 acme-windows.zip    --label os=windows --label arch=x86_64 --json\n",[307,3277,3278,3307,3332],{"__ignoreMap":348},[352,3279,3280,3282,3285,3287,3290,3293,3296,3299,3302,3304],{"class":354,"line":355},[352,3281,309],{"class":358},[352,3283,3284],{"class":370}," generic",[352,3286,1395],{"class":370},[352,3288,3289],{"class":370}," tools\u002Facme-tool",[352,3291,3292],{"class":1840}," 1.4.0",[352,3294,3295],{"class":370}," acme-linux.tar.gz",[352,3297,3298],{"class":362},"   --label",[352,3300,3301],{"class":370}," os=linux",[352,3303,3298],{"class":362},[352,3305,3306],{"class":370}," arch=x86_64\n",[352,3308,3309,3311,3313,3315,3317,3319,3322,3324,3327,3329],{"class":354,"line":610},[352,3310,309],{"class":358},[352,3312,3284],{"class":370},[352,3314,1395],{"class":370},[352,3316,3289],{"class":370},[352,3318,3292],{"class":1840},[352,3320,3321],{"class":370}," acme-macos.tar.gz",[352,3323,3298],{"class":362},[352,3325,3326],{"class":370}," os=macos",[352,3328,3298],{"class":362},[352,3330,3331],{"class":370}," arch=arm64\n",[352,3333,3334,3336,3338,3340,3342,3344,3347,3350,3353,3356,3359],{"class":354,"line":1419},[352,3335,309],{"class":358},[352,3337,3284],{"class":370},[352,3339,1395],{"class":370},[352,3341,3289],{"class":370},[352,3343,3292],{"class":1840},[352,3345,3346],{"class":370}," acme-windows.zip",[352,3348,3349],{"class":362},"    --label",[352,3351,3352],{"class":370}," os=windows",[352,3354,3355],{"class":362}," --label",[352,3357,3358],{"class":370}," arch=x86_64",[352,3360,3361],{"class":362}," --json\n",[342,3363,3366],{"className":3364,"code":3365,"language":1548,"meta":348},[1546],"$ sreg generic publish tools\u002Facme-tool 1.4.0 acme-linux.tar.gz --label os=linux\nPublished generic tools\u002Facme-tool 1.4.0\nhttps:\u002F\u002Fpackages.example.com\u002Fgeneric\u002Ftools%2Facme-tool\u002F1.4.0\n",[307,3367,3365],{"__ignoreMap":348},[304,3369,3370,3371,1183,3373,684],{},"Publishing the same file again exits with ",[307,3372,1292],{},[307,3374,3375],{},"a file with this name already exists in the published version",[568,3377,3379],{"id":3378},"sreg-generic-get",[307,3380,848],{},[342,3382,3385],{"className":3383,"code":3384,"language":1548,"meta":348},[1546],"sreg generic get \u003CNAME> [VERSION] [--label \u003CK=V>]... [--sole] [--out \u003CPATH>] [--prerelease] [--oidc [--oidc-project \u003CP>] | --login]\n",[307,3386,3384],{"__ignoreMap":348},[304,3388,3389,3390,3393],{},"Downloads the files of a generic package version after verifying their size and SHA-256. Needs a ",[307,3391,3392],{},"read"," token with a grant for the package.",[447,3395,3396,3406],{},[450,3397,3398],{},[453,3399,3400,3402,3404],{},[456,3401,3110],{},[456,3403,1636],{},[456,3405,464],{},[466,3407,3408,3420,3447,3458,3476,3496,3510,3523],{},[453,3409,3410,3414,3416],{},[471,3411,3412],{},[307,3413,3121],{},[471,3415],{},[471,3417,3124,3418,506],{},[307,3419,3127],{},[453,3421,3422,3427,3431],{},[471,3423,3424],{},[307,3425,3426],{},"[VERSION]",[471,3428,3429],{},[307,3430,1941],{},[471,3432,3433,3434,526,3437,526,3440,3443,3444,3446],{},"An exact version, a constraint resolved by the registry (npm syntax: ",[307,3435,3436],{},"^1.2",[307,3438,3439],{},"\">=1 \u003C2\"",[307,3441,3442],{},"1.x",") or ",[307,3445,1941],{},". The resolved version is printed on stderr.",[453,3448,3449,3453,3455],{},[471,3450,3451],{},[307,3452,3165],{},[471,3454],{},[471,3456,3457],{},"Only files with this label (repeatable; all must match).",[453,3459,3460,3465,3467],{},[471,3461,3462],{},[307,3463,3464],{},"--sole",[471,3466],{},[471,3468,3469,3470,3472,3473,506],{},"Fail unless the label filter selects exactly one file, and download that file. When several match, the candidates are listed and ",[307,3471,309],{}," exits with ",[307,3474,3475],{},"1",[453,3477,3478,3483,3487],{},[471,3479,3480],{},[307,3481,3482],{},"--out \u003CPATH>",[471,3484,3485],{},[307,3486,506],{},[471,3488,3489,3490,3492,3493,3495],{},"Directory to write the files to; with ",[307,3491,3464],{}," also the path of the file (an existing directory or a path ending in ",[307,3494,630],{}," stays a directory).",[453,3497,3498,3503,3505],{},[471,3499,3500],{},[307,3501,3502],{},"--prerelease",[471,3504],{},[471,3506,559,3507,3509],{},[307,3508,1941],{}," or a constraint, consider prerelease versions too.",[453,3511,3512,3518,3520],{},[471,3513,3514,526,3516],{},[307,3515,676],{},[307,3517,3240],{},[471,3519],{},[471,3521,3522],{},"Authenticate with a GitHub Actions OIDC token.",[453,3524,3525,3529,3531],{},[471,3526,3527],{},[307,3528,562],{},[471,3530],{},[471,3532,3533,3534,3538],{},"Sign in through the browser and approve this download (",[312,3535,3536],{"href":705},[307,3537,708],{},"); the token is kept in memory only.",[304,3540,3541,3542,1180,3544,3546,3547,526,3550,526,3553,637,3556,2755,3559,526,3562,526,3565,637,3568,3571,3572,506],{},"The paths of the downloaded files are printed on stdout. With ",[307,3543,513],{},[307,3545,309],{}," prints the version's feed entry (name, version, ",[307,3548,3549],{},"published",[307,3551,3552],{},"yanked",[307,3554,3555],{},"meta",[307,3557,3558],{},"files",[307,3560,3561],{},"size",[307,3563,3564],{},"sha256",[307,3566,3567],{},"labels",[307,3569,3570],{},"url",") ",[1453,3573,3574],{},"without downloading",[342,3576,3578],{"className":344,"code":3577,"language":347,"meta":348,"style":348},"sreg generic get tools\u002Facme-tool '^1.0' --label os=linux --sole --out acme.tar.gz\nsreg generic get tools\u002Facme-tool --label os=macos --out dist\u002F\nsreg generic get tools\u002Facme-tool latest --json\n",[307,3579,3580,3611,3630],{"__ignoreMap":348},[352,3581,3582,3584,3586,3589,3591,3593,3596,3598,3600,3602,3605,3608],{"class":354,"line":355},[352,3583,309],{"class":358},[352,3585,3284],{"class":370},[352,3587,3588],{"class":370}," get",[352,3590,3289],{"class":370},[352,3592,367],{"class":366},[352,3594,3595],{"class":370},"^1.0",[352,3597,374],{"class":366},[352,3599,3355],{"class":362},[352,3601,3301],{"class":370},[352,3603,3604],{"class":362}," --sole",[352,3606,3607],{"class":362}," --out",[352,3609,3610],{"class":370}," acme.tar.gz\n",[352,3612,3613,3615,3617,3619,3621,3623,3625,3627],{"class":354,"line":610},[352,3614,309],{"class":358},[352,3616,3284],{"class":370},[352,3618,3588],{"class":370},[352,3620,3289],{"class":370},[352,3622,3355],{"class":362},[352,3624,3326],{"class":370},[352,3626,3607],{"class":362},[352,3628,3629],{"class":370}," dist\u002F\n",[352,3631,3632,3634,3636,3638,3640,3643],{"class":354,"line":1419},[352,3633,309],{"class":358},[352,3635,3284],{"class":370},[352,3637,3588],{"class":370},[352,3639,3289],{"class":370},[352,3641,3642],{"class":370}," latest",[352,3644,3361],{"class":362},[342,3646,3649],{"className":3647,"code":3648,"language":1548,"meta":348},[1546],"$ sreg generic get tools\u002Facme-tool '^1.0' --label os=linux --sole --out acme.tar.gz\nResolved tools\u002Facme-tool ^1.0 to 1.4.0 acme-linux.tar.gz\n\u002Fwork\u002Facme.tar.gz\n\n$ sreg generic get tools\u002Facme-tool --sole\nerror: the labels select more than one file: 3 files of tools\u002Facme-tool 1.4.0 match; add labels to select one.\nhint: add --label filters to select one of these files of 1.4.0:\n  acme-linux.tar.gz\n  acme-macos.tar.gz\n  acme-windows.zip\n",[307,3650,3648],{"__ignoreMap":348},[568,3652,3654],{"id":3653},"sreg-auth",[307,3655,861],{},[342,3657,3660],{"className":3658,"code":3659,"language":1548,"meta":348},[1546],"sreg auth \u003Ccomposer|npm|cargo|nuget|swift|maven> [--oidc [--project \u003CPROJECT>] | --login] [--write \u003CFILE>] [--registry-name \u003CNAME>]\n",[307,3661,3659],{"__ignoreMap":348},[304,3663,3664,3665,3668,3669,578,3672,3674],{},"Hands the registry token to a package manager so that installing packages works. It either writes the token into the package manager's credentials file (",[307,3666,3667],{},"--write",") or prints what puts it in place. ",[307,3670,3671],{},"--registry",[307,3673,480],{}," is always required (the host and path determine where the token is stored); no request is made to the registry.",[447,3676,3677,3687],{},[450,3678,3679],{},[453,3680,3681,3683,3685],{},[456,3682,1196],{},[456,3684,1636],{},[456,3686,464],{},[466,3688,3689,3717,3737,3761,3777],{},[453,3690,3691,3695,3697],{},[471,3692,3693],{},[307,3694,676],{},[471,3696],{},[471,3698,3699,3700,2710,3703,3706,3707,3709,3710,3713,3714,506],{},"Build the token from a GitHub Actions OIDC token (",[307,3701,3702],{},"\u003CPROJECT>:gh.\u003Cjwt>",[307,3704,3705],{},"_:gh.\u003Cjwt>",") instead of ",[307,3708,499],{},". Needs ",[307,3711,3712],{},"id-token: write","; the audience is the registry URL, which must equal the Worker's ",[307,3715,3716],{},"PUBLIC_URL",[453,3718,3719,3723,3725],{},[471,3720,3721],{},[307,3722,562],{},[471,3724],{},[471,3726,3727,3728,3730,3731,1248,3735,506],{},"Sign in through the browser and get a short-lived pull token (one hour, longer with \"extended validity\") instead of ",[307,3729,499],{}," - see ",[312,3732,3733],{"href":705},[307,3734,708],{},[307,3736,676],{},[453,3738,3739,3743,3746],{},[471,3740,3741],{},[307,3742,2392],{},[471,3744,3745],{},"the registry finds it from the repository",[471,3747,559,3748,3750,3751,3754,3755,3757,3758,3760],{},[307,3749,676],{},": the project the token is issued for; its credential must have a matching ",[307,3752,3753],{},"gh"," secret. Only accepted together with ",[307,3756,676],{},". (Publish commands call it ",[307,3759,3240],{},".)",[453,3762,3763,3768,3771],{},[471,3764,3765],{},[307,3766,3767],{},"--write \u003CFILE>",[471,3769,3770],{},"print instead",[471,3772,3773,3774,506],{},"Write to this file; an existing file is updated in place, other content is kept, a new file gets mode ",[307,3775,3776],{},"0600",[453,3778,3779,3784,3788],{},[471,3780,3781],{},[307,3782,3783],{},"--registry-name \u003CNAME>",[471,3785,3786],{},[307,3787,309],{},[471,3789,3790,3791,506],{},"cargo: registry name; NuGet: source name; Maven: server ",[307,3792,3793],{},"\u003Cid>",[304,3795,3796,3797,3800],{},"GitHub OIDC tokens are valid for minutes only, so run ",[307,3798,3799],{},"sreg auth --oidc"," right before the install step.",[304,3802,3803,3808],{},[1453,3804,3805,3806],{},"Without ",[307,3807,3667],{}," it prints a line or a command (treat the output as a secret):",[447,3810,3811,3820],{},[450,3812,3813],{},[453,3814,3815,3817],{},[456,3816,975],{},[456,3818,3819],{},"Printed",[466,3821,3822,3837,3858,3869,3880,3891],{},[453,3823,3824,3828],{},[471,3825,3826],{},[307,3827,994],{},[471,3829,3830,3833,3834,1007],{},[307,3831,3832],{},"export COMPOSER_AUTH='{\"bearer\":{\"\u003Chost>\":\"\u003Ctoken>\"}}'"," (use with ",[307,3835,3836],{},"eval \"$(sreg auth composer)\"",[453,3838,3839,3843],{},[471,3840,3841],{},[307,3842,1017],{},[471,3844,3845,3848,3849,1244,3852,1183,3855,1007],{},[307,3846,3847],{},"npm_config_\u002F\u002F\u003Chost>\u002Fnpm\u002F:_authToken=\u003Ctoken>",", plain ",[307,3850,3851],{},"NAME=value",[307,3853,3854],{},"\"$GITHUB_ENV\"",[307,3856,3857],{},"sreg auth npm >> \"$GITHUB_ENV\"",[453,3859,3860,3864],{},[471,3861,3862],{},[307,3863,413],{},[471,3865,3866],{},[307,3867,3868],{},"export CARGO_REGISTRIES_\u003CNAME>_TOKEN='\u003Ctoken>'",[453,3870,3871,3875],{},[471,3872,3873],{},[307,3874,1081],{},[471,3876,3877],{},[307,3878,3879],{},"dotnet nuget add source '\u003Cregistry>\u002Fnuget\u002Findex.json' -n '\u003Cname>' -u '\u003Clogin>' -p '\u003Cpassword>' --store-password-in-clear-text",[453,3881,3882,3886],{},[471,3883,3884],{},[307,3885,1113],{},[471,3887,3888],{},[307,3889,3890],{},"swift package-registry login '\u003Cregistry>\u002Fswift' --username '\u003Clogin>' --password '\u003Cpassword>'",[453,3892,3893,3897],{},[471,3894,3895],{},[307,3896,1136],{},[471,3898,3899,3900,1180,3903,3906,3907,3910],{},"a ",[307,3901,3902],{},"settings.xml",[307,3904,3905],{},"\u003Cserver>"," snippet and a Gradle ",[307,3908,3909],{},"credentials"," snippet",[304,3912,3913],{},[1453,3914,559,3915,581],{},[307,3916,3767],{},[447,3918,3919,3931],{},[450,3920,3921],{},[453,3922,3923,3925,3928],{},[456,3924,975],{},[456,3926,3927],{},"Typical file",[456,3929,3930],{},"Entry written",[466,3932,3933,3949,3970,3996,4014,4030],{},[453,3934,3935,3939,3944],{},[471,3936,3937],{},[307,3938,994],{},[471,3940,3941],{},[307,3942,3943],{},"auth.json",[471,3945,3946],{},[307,3947,3948],{},"\"bearer\": { \"\u003Chost>\": \"\u003Ctoken>\" }",[453,3950,3951,3955,3960],{},[471,3952,3953],{},[307,3954,1017],{},[471,3956,3957],{},[307,3958,3959],{},".npmrc",[471,3961,3962,3965,3966,3969],{},[307,3963,3964],{},"\u002F\u002F\u003Chost>\u002Fnpm\u002F:_authToken=\u003Ctoken>"," (the scope line ",[307,3967,3968],{},"@scope:registry=..."," is not written - add it yourself)",[453,3971,3972,3976,3981],{},[471,3973,3974],{},[307,3975,413],{},[471,3977,3978],{},[307,3979,3980],{},"~\u002F.cargo\u002Fcredentials.toml",[471,3982,3983,2755,3986,3989,3990,2755,3993,1007],{},[307,3984,3985],{},"[registries.\u003Cname>]",[307,3987,3988],{},"token = \"\u003Ctoken>\""," (the registry itself is declared in ",[307,3991,3992],{},".cargo\u002Fconfig.toml",[307,3994,3995],{},"index = \"sparse+\u003Cregistry>\u002Fcargo\u002Findex\u002F\"",[453,3997,3998,4002,4007],{},[471,3999,4000],{},[307,4001,1081],{},[471,4003,4004],{},[307,4005,4006],{},"nuget.config",[471,4008,4009,4010,4013],{},"source ",[307,4011,4012],{},"\u003Cname>"," and its clear-text credentials",[453,4015,4016,4020,4025],{},[471,4017,4018],{},[307,4019,1113],{},[471,4021,4022],{},[307,4023,4024],{},"~\u002F.netrc",[471,4026,4027],{},[307,4028,4029],{},"machine \u003Chostname> login \u003Clogin> password \u003Cpassword>",[453,4031,4032,4036,4041],{},[471,4033,4034],{},[307,4035,1136],{},[471,4037,4038],{},[307,4039,4040],{},"~\u002F.m2\u002Fsettings.xml",[471,4042,4043,2755,4045,4047],{},[307,4044,3905],{},[307,4046,3793],{},", username and password",[304,4049,559,4050,4052,4053,4056,4057,4060],{},[307,4051,513],{}," it prints ",[307,4054,4055],{},"{ \"eco\", \"file\", \"key\" }"," (the token is not printed) when writing, or ",[307,4058,4059],{},"{ \"eco\", \"name\", \"value\" }"," (richer objects for NuGet, Swift and Maven) otherwise.",[342,4062,4064],{"className":344,"code":4063,"language":347,"meta":348,"style":348},"# Local development: store a read token for Composer\nsreg auth composer --write auth.json\n\n# GitHub Actions: npm packages with an OIDC token of the project shop-frontend\nsreg auth npm --oidc --project shop-frontend >> \"$GITHUB_ENV\"\n\n# cargo with a custom registry name\neval \"$(sreg auth cargo --registry-name acme)\"\n\n# Local development: sign in through the browser, no token to copy around\nsreg auth npm --login --write .npmrc\n\n# NuGet \u002F Swift \u002F Maven in CI\nsreg auth nuget --oidc --project shop-frontend --write nuget.config\nsreg auth swift --oidc --write ~\u002F.netrc\nsreg auth maven --oidc --write ~\u002F.m2\u002Fsettings.xml\n",[307,4065,4066,4071,4086,4091,4096,4124,4129,4135,4158,4163,4169,4186,4191,4197,4217,4233],{"__ignoreMap":348},[352,4067,4068],{"class":354,"line":355},[352,4069,4070],{"class":1825},"# Local development: store a read token for Composer\n",[352,4072,4073,4075,4078,4080,4083],{"class":354,"line":610},[352,4074,309],{"class":358},[352,4076,4077],{"class":370}," auth",[352,4079,1408],{"class":370},[352,4081,4082],{"class":362}," --write",[352,4084,4085],{"class":370}," auth.json\n",[352,4087,4088],{"class":354,"line":1419},[352,4089,4090],{"emptyLinePlaceholder":299},"\n",[352,4092,4093],{"class":354,"line":1435},[352,4094,4095],{"class":1825},"# GitHub Actions: npm packages with an OIDC token of the project shop-frontend\n",[352,4097,4098,4100,4102,4104,4107,4109,4112,4115,4118,4121],{"class":354,"line":1861},[352,4099,309],{"class":358},[352,4101,4077],{"class":370},[352,4103,1392],{"class":370},[352,4105,4106],{"class":362}," --oidc",[352,4108,2553],{"class":362},[352,4110,4111],{"class":370}," shop-frontend",[352,4113,4114],{"class":386}," >>",[352,4116,4117],{"class":366}," \"",[352,4119,4120],{"class":595},"$GITHUB_ENV",[352,4122,4123],{"class":366},"\"\n",[352,4125,4127],{"class":354,"line":4126},6,[352,4128,4090],{"emptyLinePlaceholder":299},[352,4130,4132],{"class":354,"line":4131},7,[352,4133,4134],{"class":1825},"# cargo with a custom registry name\n",[352,4136,4138,4142,4145,4147,4150,4153,4155],{"class":354,"line":4137},8,[352,4139,4141],{"class":4140},"sMLJd","eval",[352,4143,4144],{"class":366}," \"$(",[352,4146,309],{"class":358},[352,4148,4149],{"class":370}," auth cargo ",[352,4151,4152],{"class":362},"--registry-name",[352,4154,2793],{"class":370},[352,4156,4157],{"class":366},")\"\n",[352,4159,4161],{"class":354,"line":4160},9,[352,4162,4090],{"emptyLinePlaceholder":299},[352,4164,4166],{"class":354,"line":4165},10,[352,4167,4168],{"class":1825},"# Local development: sign in through the browser, no token to copy around\n",[352,4170,4172,4174,4176,4178,4181,4183],{"class":354,"line":4171},11,[352,4173,309],{"class":358},[352,4175,4077],{"class":370},[352,4177,1392],{"class":370},[352,4179,4180],{"class":362}," --login",[352,4182,4082],{"class":362},[352,4184,4185],{"class":370}," .npmrc\n",[352,4187,4189],{"class":354,"line":4188},12,[352,4190,4090],{"emptyLinePlaceholder":299},[352,4192,4194],{"class":354,"line":4193},13,[352,4195,4196],{"class":1825},"# NuGet \u002F Swift \u002F Maven in CI\n",[352,4198,4200,4202,4204,4206,4208,4210,4212,4214],{"class":354,"line":4199},14,[352,4201,309],{"class":358},[352,4203,4077],{"class":370},[352,4205,1440],{"class":370},[352,4207,4106],{"class":362},[352,4209,2553],{"class":362},[352,4211,4111],{"class":370},[352,4213,4082],{"class":362},[352,4215,4216],{"class":370}," nuget.config\n",[352,4218,4220,4222,4224,4226,4228,4230],{"class":354,"line":4219},15,[352,4221,309],{"class":358},[352,4223,4077],{"class":370},[352,4225,2785],{"class":370},[352,4227,4106],{"class":362},[352,4229,4082],{"class":362},[352,4231,4232],{"class":370}," ~\u002F.netrc\n",[352,4234,4236,4238,4240,4242,4244,4246],{"class":354,"line":4235},16,[352,4237,309],{"class":358},[352,4239,4077],{"class":370},[352,4241,3031],{"class":370},[352,4243,4106],{"class":362},[352,4245,4082],{"class":362},[352,4247,4248],{"class":370}," ~\u002F.m2\u002Fsettings.xml\n",[342,4250,4253],{"className":4251,"code":4252,"language":1548,"meta":348},[1546],"$ sreg auth composer --write auth.json\nWrote the token of `shop-frontend` for bearer.packages.example.com to auth.json.\n",[307,4254,4252],{"__ignoreMap":348},[304,4256,4257,4258,506],{},"Details of every file format: ",[312,4259,4263],{"href":4260,":target":323,"rel":4261},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli-auth.md",[4262],"nofollow",[307,4264,4265],{},"docs\u002Fcli-auth.md",[568,4267,4269],{"id":4268},"sreg-login",[307,4270,708],{},[342,4272,4275],{"className":4273,"code":4274,"language":1548,"meta":348},[1546],"sreg login [--publish \u003CECO>:\u003CPACKAGE>@\u003CVERSION>]... [--no-browser] [--json]\n",[307,4276,4274],{"__ignoreMap":348},[304,4278,4279,4280,4283,4284,4287,4288,4292,4293,4295],{},"Signs in through the browser and prints a short-lived token to export, for several commands in a row (",[307,4281,4282],{},"eval \"$(sreg login)\"",").\nIt needs a registry credential with a ",[307,4285,4286],{},"login"," secret (a password and an optional one-time code), see\n",[312,4289,4291],{"href":4290},"\u002Fsystems\u002Fserverless-registry\u002Fworker#logins-for-people","logins for people",". Requires ",[307,4294,309],{}," 0.1.4 or newer.",[447,4297,4298,4306],{},[450,4299,4300],{},[453,4301,4302,4304],{},[456,4303,1196],{},[456,4305,464],{},[466,4307,4308,4328],{},[453,4309,4310,4315],{},[471,4311,4312],{},[307,4313,4314],{},"--publish \u003CECO:PACKAGE@VERSION>",[471,4316,4317,4318,4320,4321,1733,4324,4327],{},"Ask for a ",[1453,4319,911],{}," token for this package version (repeatable), e.g. ",[307,4322,4323],{},"composer:acme\u002Fsdk@1.4.0",[307,4325,4326],{},"npm:@acme\u002Fsdk@2.0.0",". Without it the token is for downloading.",[453,4329,4330,4334],{},[471,4331,4332],{},[307,4333,551],{},[471,4335,4336,4337,684],{},"Print the approval page instead of opening it (also ",[307,4338,556],{},[304,4340,1674],{},[917,4342,4343,4351,4360],{},[620,4344,4345,4347,4348,4350],{},[307,4346,309],{}," asks the registry for a login session (no credential is sent), prints the page to open and the operation it requests, and opens the page unless ",[307,4349,551],{}," is given.",[620,4352,4353,4354,4356,4357,4359],{},"On the page you sign in with the project name and password of a ",[307,4355,4286],{}," secret (and a one-time code when it has one) or, if the browser is already signed in, only approve. The password and the page belong to the registry - ",[307,4358,309],{}," never sees them.",[620,4361,4362,4364,4365,506],{},[307,4363,309],{}," polls until you approve or refuse and receives the token. A refusal, an expired session or a timeout fails the command with exit code ",[307,4366,3475],{},[304,4368,4369,4370,4373,4374,4376,4377,4380,4381,4383,4384,4387,4388,4390,4391,4394,4395,4397],{},"The token is short-lived: a ",[1453,4371,4372],{},"pull token"," (needs a ",[307,4375,3392],{}," credential) lasts one hour, or longer when you tick \"extended validity\" (24 hours by default);\na ",[1453,4378,4379],{},"publish token"," lasts 15 minutes and works only for the listed versions - it is approved only when a ",[307,4382,911],{}," credential's grants allow every one of them.\nThe ecosystem in ",[307,4385,4386],{},"--publish"," ends at the first ",[307,4389,581],{}," (a Maven package is ",[307,4392,4393],{},"group:artifact",") and the version starts after the last ",[307,4396,625],{}," (an npm scope starts with one).",[304,4399,4400,4401,4403,4404,526,4406,2732,4408,4410],{},"The same sign-in is available as ",[307,4402,562],{}," on ",[307,4405,861],{},[307,4407,848],{},[307,4409,911],{}," command, where the token is used directly:",[342,4412,4414],{"className":344,"code":4413,"language":347,"meta":348,"style":348},"eval \"$(sreg login)\"                                          # a pull token in $REGISTRY_TOKEN\neval \"$(sreg login --publish composer:acme\u002Fsdk@1.4.0 --publish npm:@acme\u002Fsdk@2.0.0)\"\nsreg composer publish --login                                 # approve the publish of this one version\n",[307,4415,4416,4433,4456],{"__ignoreMap":348},[352,4417,4418,4420,4422,4424,4427,4430],{"class":354,"line":355},[352,4419,4141],{"class":4140},[352,4421,4144],{"class":366},[352,4423,309],{"class":358},[352,4425,4426],{"class":370}," login",[352,4428,4429],{"class":366},")\"",[352,4431,4432],{"class":1825},"                                          # a pull token in $REGISTRY_TOKEN\n",[352,4434,4435,4437,4439,4441,4444,4446,4449,4451,4454],{"class":354,"line":610},[352,4436,4141],{"class":4140},[352,4438,4144],{"class":366},[352,4440,309],{"class":358},[352,4442,4443],{"class":370}," login ",[352,4445,4386],{"class":362},[352,4447,4448],{"class":370}," composer:acme\u002Fsdk@1.4.0 ",[352,4450,4386],{"class":362},[352,4452,4453],{"class":370}," npm:@acme\u002Fsdk@2.0.0",[352,4455,4157],{"class":366},[352,4457,4458,4460,4462,4464,4466],{"class":354,"line":1419},[352,4459,309],{"class":358},[352,4461,1408],{"class":370},[352,4463,1395],{"class":370},[352,4465,4180],{"class":362},[352,4467,4468],{"class":1825},"                                 # approve the publish of this one version\n",[342,4470,4473],{"className":4471,"code":4472,"language":1548,"meta":348},[1546],"$ sreg composer publish --login --no-browser --version 1.3.0\nRequesting a token to publish:\n  composer acme\u002Fsdk 1.3.0\nOpen this page, sign in and approve:\n  https:\u002F\u002Fpackages.example.com\u002Fauthorize\u002F\u003Csession>\nWaiting for the approval (Ctrl-C to cancel)...\nApproved: signed in as ci-acme-sdk (publish); the token is valid until 2026-10-28T20:43:51.000Z.\nPublished composer acme\u002Fsdk 1.3.0\nhttps:\u002F\u002Fpackages.example.com\u002Fcomposer\u002Fdist\u002Facme\u002Fsdk\u002F1.3.0.zip\n",[307,4474,4472],{"__ignoreMap":348},[304,4476,4477,4478,4482],{},"The approval page looks like this (see the ",[312,4479,4481],{"href":4480},"\u002Fsystems\u002Fserverless-registry\u002Fworker#approving-cli-operations","Worker","):",[304,4484,4485],{},[4486,4487],"img",{"alt":4488,"src":4489},"Approving a publish token","\u002Fsystems\u002Fserverless-registry\u002Fpanel-authorize-approve.png",[304,4491,4492,4493,506],{},"Protocol details: ",[312,4494,4497],{"href":4495,":target":323,"rel":4496},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli-auth.md#--login-a-token-from-the-browser",[4262],[307,4498,4265],{},[568,4500,4502],{"id":4501},"sreg-whoami",[307,4503,885],{},[342,4505,4508],{"className":4506,"code":4507,"language":1548,"meta":348},[1546],"sreg whoami\n",[307,4509,4507],{"__ignoreMap":348},[304,4511,4512,4513,4516],{},"Shows the identity of the current token: the project, its kind and its grants (",[307,4514,4515],{},"GET \u002Fapi\u002Fv1\u002Fwhoami","). Useful to check that a token works and what it may do.",[342,4518,4521],{"className":4519,"code":4520,"language":1548,"meta":348},[1546],"$ sreg whoami\nProject: shop-frontend\nKind:    read\nGrants:\n  ECO       PACKAGE  VERSIONS  TRANSITIVE\n  composer  acme\u002F*   ^1.0      yes\n  npm       @acme\u002F*  *         yes\n",[307,4522,4520],{"__ignoreMap":348},[304,4524,559,4525,1682,4527,1183,4530,652,4533,4535],{},[307,4526,513],{},[307,4528,4529],{},"{ \"project\", \"kind\", \"grants\": [{ \"eco\", \"package\", \"versions\", \"transitive\" }] }",[307,4531,4532],{},"transitive",[307,4534,3392],{}," credentials).",[568,4537,4539],{"id":4538},"sreg-version",[307,4540,898],{},[342,4542,4545],{"className":4543,"code":4544,"language":1548,"meta":348},[1546],"sreg version\nsreg --version\n",[307,4546,4544],{"__ignoreMap":348},[304,4548,4549,4550,1709,4552,4554,4555,4557],{},"Prints the version of ",[307,4551,309],{},[307,4553,3671],{}," (or ",[307,4556,480],{},") also the registry's version and the minimum client version it accepts. This endpoint is anonymous - no token is sent.",[342,4559,4562],{"className":4560,"code":4561,"language":1548,"meta":348},[1546],"$ sreg version\nsreg 0.1.5\nregistry 0.1.7 (schema 3, minimum client 0.1.0)\n",[307,4563,4561],{"__ignoreMap":348},[304,4565,559,4566,1682,4568,506],{},[307,4567,513],{},[307,4569,4570],{},"{ \"clientVersion\", \"registry\": { \"version\", \"minClientVersion\", \"schemaVersion\" }, \"compatible\" }",[331,4572,4574],{"id":4573},"exit-codes","Exit codes",[447,4576,4577,4587],{},[450,4578,4579],{},[453,4580,4581,4584],{},[456,4582,4583],{},"Code",[456,4585,4586],{},"Meaning",[466,4588,4589,4598,4607,4619],{},[453,4590,4591,4595],{},[471,4592,4593],{},[307,4594,1288],{},[471,4596,4597],{},"Success.",[453,4599,4600,4604],{},[471,4601,4602],{},[307,4603,3475],{},[471,4605,4606],{},"Generic error.",[453,4608,4609,4613],{},[471,4610,4611],{},[307,4612,1292],{},[471,4614,4615,4616,684],{},"The version already exists (",[307,4617,4618],{},"409",[453,4620,4621,4626],{},[471,4622,4623],{},[307,4624,4625],{},"3",[471,4627,4628,4630,4631,4634],{},[307,4629,309],{}," is too old for the registry (",[307,4632,4633],{},"426",") - update it.",[331,4636,4638],{"id":4637},"documentation","Documentation",[617,4640,4641,4648,4656],{},[620,4642,4643],{},[312,4644,4647],{"href":4645,":target":323,"rel":4646},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli#readme",[4262],"README",[620,4649,4650],{},[312,4651,4653,4655],{"href":4260,":target":323,"rel":4652},[4262],[307,4654,861],{}," design",[620,4657,4658],{},[312,4659,4662],{"href":4660,":target":323,"rel":4661},"https:\u002F\u002Fgithub.com\u002Fkduma-OSS\u002Fserverless-registry-cli\u002Fblob\u002Fmain\u002Fdocs\u002Freleasing.md",[4262],"Release process and version compatibility",[4664,4665,4666],"style",{},"html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sFhLe, html code.shiki .sFhLe{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}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);}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);}html pre.shiki code .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sQeA1, html code.shiki .sQeA1{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sMLJd, html code.shiki .sMLJd{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}",{"title":348,"searchDepth":610,"depth":610,"links":4668},[4669,4670,4674,4691,4692],{"id":333,"depth":610,"text":334},{"id":441,"depth":610,"text":442,"children":4671},[4672,4673],{"id":570,"depth":1419,"text":571},{"id":687,"depth":1419,"text":688},{"id":717,"depth":610,"text":718,"children":4675},[4676,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690],{"id":907,"depth":1419,"text":4677},"Common behaviour of publish commands",{"id":1351,"depth":1419,"text":1352},{"id":1611,"depth":1419,"text":742},{"id":1901,"depth":1419,"text":759},{"id":2133,"depth":1419,"text":776},{"id":2355,"depth":1419,"text":793},{"id":2566,"depth":1419,"text":809},{"id":2838,"depth":1419,"text":822},{"id":3090,"depth":1419,"text":835},{"id":3378,"depth":1419,"text":848},{"id":3653,"depth":1419,"text":861},{"id":4268,"depth":1419,"text":708},{"id":4501,"depth":1419,"text":885},{"id":4538,"depth":1419,"text":898},{"id":4573,"depth":610,"text":4574},{"id":4637,"depth":610,"text":4638},"Command line tool for publishing packages to Serverless Registry and writing package manager credentials.","md",null,{},{"title":22},"Rust",{"title":298,"description":4693},"app","MVRkuEJKu6Tj_ATX5CjtSJRn67o5nzjUxNnpSWmsoyI",[4703,4705],{"title":18,"path":19,"stem":20,"description":4704,"children":-1},"CloudFlare Worker serving a private package registry for Composer, npm, cargo, NuGet, Swift, Maven and generic files.",{"title":26,"path":27,"stem":28,"description":4706,"children":-1},"Composite GitHub Actions for publishing to and installing from Serverless Registry.",1793220976458]