[{"data":1,"prerenderedAt":5819},["ShallowReactive",2],{"blog-current-traefik-magic-en":3,"blog-previous-traefik-magic-en":1240,"blog-next-traefik-magic-en":1254,"blog-alt-de-traefik-magic-en":1255,"blog-alt-en-traefik-magic-en":1257,"employee-robert-juzak":1258,"related-refs-devops--en":1357,"content-query-lDWCmQfCc3":1382,"content-query-KtO3wftRle":5784},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"image":11,"releaseDate":12,"blogCategories":13,"articleTags":16,"tags":17,"body":19,"_type":1234,"_id":1235,"_source":1236,"_file":1237,"_stem":1238,"_extension":1239},"/en/blog/traefik-magic","blog",false,"","Using Traefik as reverse proxy - convention over configuration","How to configure Traefik reverse proxy to get rid of any Traefik specific labels and automatically route to subdomains matching compose project name","robert-juzak","/images/dev-ops-dark.svg","2026-03-13",[14,15],"What moves us","DevOps",[15],[18],"devops",{"type":20,"children":21,"toc":1224},"root",[22,37,42,191,196,271,278,307,312,336,349,368,374,391,492,497,502,527,573,577,582,948,953,989,996,1004,1055,1059,1066,1094,1100,1105,1111,1116,1128,1136,1142,1154,1218],{"type":23,"tag":24,"props":25,"children":26},"element","p",{},[27,35],{"type":23,"tag":28,"props":29,"children":31},"a",{"href":30},"https://doc.traefik.io/traefik/",[32],{"type":33,"value":34},"text","Traefik",{"type":33,"value":36}," is a reverse proxy with excellent docker integration. It uses labeln attached to containers to route traffic to them.",{"type":23,"tag":24,"props":38,"children":39},{},[40],{"type":33,"value":41},"A common label set looks similar to this:",{"type":23,"tag":43,"props":44,"children":55},"pre",{"code":45,"filename":46,"highlights":47,"language":53,"meta":7,"className":54,"style":7},"services:\n  whoami:\n    image: traefik/whoami\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.whoami.rule=Host(`whoami.example.com`)\"\n      - \"traefik.http.routers.whoami.entrypoints=websecure\"\n      - \"traefik.http.routers.whoami.tls=true\"\n      - \"traefik.http.routers.whoami.tls.certresolver=letsencrypt\"\n","whoami/docker-compose.yaml",[48,49,50,51,52],5,6,7,8,9,"yaml","language-yaml shiki shiki-themes github-dark github-dark monokai",[56],{"type":23,"tag":57,"props":58,"children":59},"code",{"__ignoreMap":7},[60,78,91,111,124,139,152,165,178],{"type":23,"tag":61,"props":62,"children":65},"span",{"class":63,"line":64},"line",1,[66,72],{"type":23,"tag":61,"props":67,"children":69},{"style":68},"--shiki-default:#85E89D;--shiki-dark:#85E89D;--shiki-sepia:#F92672",[70],{"type":33,"value":71},"services",{"type":23,"tag":61,"props":73,"children":75},{"style":74},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[76],{"type":33,"value":77},":\n",{"type":23,"tag":61,"props":79,"children":81},{"class":63,"line":80},2,[82,87],{"type":23,"tag":61,"props":83,"children":84},{"style":68},[85],{"type":33,"value":86},"  whoami",{"type":23,"tag":61,"props":88,"children":89},{"style":74},[90],{"type":33,"value":77},{"type":23,"tag":61,"props":92,"children":94},{"class":63,"line":93},3,[95,100,105],{"type":23,"tag":61,"props":96,"children":97},{"style":68},[98],{"type":33,"value":99},"    image",{"type":23,"tag":61,"props":101,"children":102},{"style":74},[103],{"type":33,"value":104},": ",{"type":23,"tag":61,"props":106,"children":108},{"style":107},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[109],{"type":33,"value":110},"traefik/whoami\n",{"type":23,"tag":61,"props":112,"children":114},{"class":63,"line":113},4,[115,120],{"type":23,"tag":61,"props":116,"children":117},{"style":68},[118],{"type":33,"value":119},"    labels",{"type":23,"tag":61,"props":121,"children":122},{"style":74},[123],{"type":33,"value":77},{"type":23,"tag":61,"props":125,"children":128},{"class":126,"line":48},[63,127],"highlight",[129,134],{"type":23,"tag":61,"props":130,"children":131},{"style":74},[132],{"type":33,"value":133},"      - ",{"type":23,"tag":61,"props":135,"children":136},{"style":107},[137],{"type":33,"value":138},"\"traefik.enable=true\"\n",{"type":23,"tag":61,"props":140,"children":142},{"class":141,"line":49},[63,127],[143,147],{"type":23,"tag":61,"props":144,"children":145},{"style":74},[146],{"type":33,"value":133},{"type":23,"tag":61,"props":148,"children":149},{"style":107},[150],{"type":33,"value":151},"\"traefik.http.routers.whoami.rule=Host(`whoami.example.com`)\"\n",{"type":23,"tag":61,"props":153,"children":155},{"class":154,"line":50},[63,127],[156,160],{"type":23,"tag":61,"props":157,"children":158},{"style":74},[159],{"type":33,"value":133},{"type":23,"tag":61,"props":161,"children":162},{"style":107},[163],{"type":33,"value":164},"\"traefik.http.routers.whoami.entrypoints=websecure\"\n",{"type":23,"tag":61,"props":166,"children":168},{"class":167,"line":51},[63,127],[169,173],{"type":23,"tag":61,"props":170,"children":171},{"style":74},[172],{"type":33,"value":133},{"type":23,"tag":61,"props":174,"children":175},{"style":107},[176],{"type":33,"value":177},"\"traefik.http.routers.whoami.tls=true\"\n",{"type":23,"tag":61,"props":179,"children":181},{"class":180,"line":52},[63,127],[182,186],{"type":23,"tag":61,"props":183,"children":184},{"style":74},[185],{"type":33,"value":133},{"type":23,"tag":61,"props":187,"children":188},{"style":107},[189],{"type":33,"value":190},"\"traefik.http.routers.whoami.tls.certresolver=letsencrypt\"\n",{"type":23,"tag":24,"props":192,"children":193},{},[194],{"type":33,"value":195},"In this example:",{"type":23,"tag":197,"props":198,"children":199},"ul",{},[200,212,228,233,245,250],{"type":23,"tag":201,"props":202,"children":203},"li",{},[204,210],{"type":23,"tag":57,"props":205,"children":207},{"className":206},[],[208],{"type":33,"value":209},"whoami",{"type":33,"value":211}," the name of the \"main\" service (2)",{"type":23,"tag":201,"props":213,"children":214},{},[215,220,222],{"type":23,"tag":57,"props":216,"children":218},{"className":217},[],[219],{"type":33,"value":209},{"type":33,"value":221}," the also the default ",{"type":23,"tag":28,"props":223,"children":225},{"href":224},"https://docs.docker.com/compose/how-tos/project-name/",[226],{"type":33,"value":227},"compose project name",{"type":23,"tag":201,"props":229,"children":230},{},[231],{"type":33,"value":232},"Traefik is activated (5)",{"type":23,"tag":201,"props":234,"children":235},{},[236,238,243],{"type":33,"value":237},"It is exposed under ",{"type":23,"tag":57,"props":239,"children":241},{"className":240},[],[242],{"type":33,"value":209},{"type":33,"value":244}," subdomain (6)",{"type":23,"tag":201,"props":246,"children":247},{},[248],{"type":33,"value":249},"It is served over https (7)",{"type":23,"tag":201,"props":251,"children":252},{},[253,255,261,263,269],{"type":33,"value":254},"A preconfigured certresolver named ",{"type":23,"tag":57,"props":256,"children":258},{"className":257},[],[259],{"type":33,"value":260},"letsencrypt",{"type":33,"value":262}," is used for ",{"type":23,"tag":57,"props":264,"children":266},{"className":265},[],[267],{"type":33,"value":268},"tls",{"type":33,"value":270}," (8-9)",{"type":23,"tag":272,"props":273,"children":275},"h2",{"id":274},"the-problem",[276],{"type":33,"value":277},"The problem",{"type":23,"tag":24,"props":279,"children":280},{},[281,283,289,291,297,299,305],{"type":33,"value":282},"In my ",{"type":23,"tag":28,"props":284,"children":286},{"href":285},"/blog/gitops-docker-renovate",[287],{"type":33,"value":288},"other post about gitops with docker",{"type":33,"value":290}," I introduced a concept of using ",{"type":23,"tag":57,"props":292,"children":294},{"className":293},[],[295],{"type":33,"value":296},"git",{"type":33,"value":298},"\nas the sources of truth for docker deployments using ",{"type":23,"tag":28,"props":300,"children":302},{"href":301},"https://docs.docker.com/compose/",[303],{"type":33,"value":304},"docker compose",{"type":33,"value":306},".",{"type":23,"tag":24,"props":308,"children":309},{},[310],{"type":33,"value":311},"Now there are some requirements to this approach:",{"type":23,"tag":197,"props":313,"children":314},{},[315,326],{"type":23,"tag":201,"props":316,"children":317},{},[318,320],{"type":33,"value":319},"every stack is exposer under ",{"type":23,"tag":57,"props":321,"children":323},{"className":322},[],[324],{"type":33,"value":325},"\u003Cstack_name>.\u003Cyour_domain>",{"type":23,"tag":201,"props":327,"children":328},{},[329,331],{"type":33,"value":330},"every stack is protected with ",{"type":23,"tag":57,"props":332,"children":334},{"className":333},[],[335],{"type":33,"value":268},{"type":23,"tag":24,"props":337,"children":338},{},[339,341,347],{"type":33,"value":340},"We could of course edit every ",{"type":23,"tag":57,"props":342,"children":344},{"className":343},[],[345],{"type":33,"value":346},"docker-compose.yaml",{"type":33,"value":348}," file and add the required labels, but it quickly becomes obvious,\nthat all the labels are the same!",{"type":23,"tag":350,"props":351,"children":352},"ol",{},[353,358,363],{"type":23,"tag":201,"props":354,"children":355},{},[356],{"type":33,"value":357},"Enable Traefik",{"type":23,"tag":201,"props":359,"children":360},{},[361],{"type":33,"value":362},"Assign a subdomain",{"type":23,"tag":201,"props":364,"children":365},{},[366],{"type":33,"value":367},"Enable HTTPS",{"type":23,"tag":272,"props":369,"children":371},{"id":370},"the-solution",[372],{"type":33,"value":373},"The solution",{"type":23,"tag":24,"props":375,"children":376},{},[377,379,389],{"type":33,"value":378},"By using ",{"type":23,"tag":28,"props":380,"children":382},{"href":381},"https://docs.docker.com/compose/how-tos/environment-variables/envvars/#compose_project_name",[383],{"type":23,"tag":57,"props":384,"children":386},{"className":385},[],[387],{"type":33,"value":388},"$COMPOSE_PROJECT_NAME",{"type":33,"value":390},"\nvariable we can create a more generic template.\nThis ensures that the Traefik rules are consistent.",{"type":23,"tag":43,"props":392,"children":395},{"code":393,"filename":394,"language":53,"meta":7,"className":54,"style":7},"services:\n  \u003Cmain_service>:\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.$COMPOSE_PROJECT_NAME.rule=Host(`\u003Cstack_name>.example.com`)\"\n      - \"traefik.http.routers.$COMPOSE_PROJECT_NAME.entrypoints=websecure\"\n      - \"traefik.http.routers.$COMPOSE_PROJECT_NAME.tls=true\"\n      - \"traefik.http.routers.$COMPOSE_PROJECT_NAME.tls.certresolver=letsencrypt\"\n","\u003Cstack_name>/docker-compose.yaml",[396],{"type":23,"tag":57,"props":397,"children":398},{"__ignoreMap":7},[399,410,422,433,444,456,468,480],{"type":23,"tag":61,"props":400,"children":401},{"class":63,"line":64},[402,406],{"type":23,"tag":61,"props":403,"children":404},{"style":68},[405],{"type":33,"value":71},{"type":23,"tag":61,"props":407,"children":408},{"style":74},[409],{"type":33,"value":77},{"type":23,"tag":61,"props":411,"children":412},{"class":63,"line":80},[413,418],{"type":23,"tag":61,"props":414,"children":415},{"style":68},[416],{"type":33,"value":417},"  \u003Cmain_service>",{"type":23,"tag":61,"props":419,"children":420},{"style":74},[421],{"type":33,"value":77},{"type":23,"tag":61,"props":423,"children":424},{"class":63,"line":93},[425,429],{"type":23,"tag":61,"props":426,"children":427},{"style":68},[428],{"type":33,"value":119},{"type":23,"tag":61,"props":430,"children":431},{"style":74},[432],{"type":33,"value":77},{"type":23,"tag":61,"props":434,"children":435},{"class":63,"line":113},[436,440],{"type":23,"tag":61,"props":437,"children":438},{"style":74},[439],{"type":33,"value":133},{"type":23,"tag":61,"props":441,"children":442},{"style":107},[443],{"type":33,"value":138},{"type":23,"tag":61,"props":445,"children":446},{"class":63,"line":48},[447,451],{"type":23,"tag":61,"props":448,"children":449},{"style":74},[450],{"type":33,"value":133},{"type":23,"tag":61,"props":452,"children":453},{"style":107},[454],{"type":33,"value":455},"\"traefik.http.routers.$COMPOSE_PROJECT_NAME.rule=Host(`\u003Cstack_name>.example.com`)\"\n",{"type":23,"tag":61,"props":457,"children":458},{"class":63,"line":49},[459,463],{"type":23,"tag":61,"props":460,"children":461},{"style":74},[462],{"type":33,"value":133},{"type":23,"tag":61,"props":464,"children":465},{"style":107},[466],{"type":33,"value":467},"\"traefik.http.routers.$COMPOSE_PROJECT_NAME.entrypoints=websecure\"\n",{"type":23,"tag":61,"props":469,"children":470},{"class":63,"line":50},[471,475],{"type":23,"tag":61,"props":472,"children":473},{"style":74},[474],{"type":33,"value":133},{"type":23,"tag":61,"props":476,"children":477},{"style":107},[478],{"type":33,"value":479},"\"traefik.http.routers.$COMPOSE_PROJECT_NAME.tls=true\"\n",{"type":23,"tag":61,"props":481,"children":482},{"class":63,"line":51},[483,487],{"type":23,"tag":61,"props":484,"children":485},{"style":74},[486],{"type":33,"value":133},{"type":23,"tag":61,"props":488,"children":489},{"style":107},[490],{"type":33,"value":491},"\"traefik.http.routers.$COMPOSE_PROJECT_NAME.tls.certresolver=letsencrypt\"\n",{"type":23,"tag":24,"props":493,"children":494},{},[495],{"type":33,"value":496},"The good news is that Traefik lets us configure some defaults that will cover the above boilerplate!",{"type":23,"tag":24,"props":498,"children":499},{},[500],{"type":33,"value":501},"Let's us define two simple conventions:",{"type":23,"tag":350,"props":503,"children":504},{},[505,516],{"type":23,"tag":201,"props":506,"children":507},{},[508,514],{"type":23,"tag":57,"props":509,"children":511},{"className":510},[],[512],{"type":33,"value":513},"app",{"type":33,"value":515}," is the main container, where Traefik will route the traffic",{"type":23,"tag":201,"props":517,"children":518},{},[519,525],{"type":23,"tag":57,"props":520,"children":522},{"className":521},[],[523],{"type":33,"value":524},"\u003Cstack_name>",{"type":33,"value":526}," (the compose project name) is the subdomain",{"type":23,"tag":43,"props":528,"children":531},{"code":529,"filename":46,"language":53,"meta":530,"className":54,"style":7},"services:\n  app:\n    image: traefik/whoami\n","(1)",[532],{"type":23,"tag":57,"props":533,"children":534},{"__ignoreMap":7},[535,546,558],{"type":23,"tag":61,"props":536,"children":537},{"class":63,"line":64},[538,542],{"type":23,"tag":61,"props":539,"children":540},{"style":68},[541],{"type":33,"value":71},{"type":23,"tag":61,"props":543,"children":544},{"style":74},[545],{"type":33,"value":77},{"type":23,"tag":61,"props":547,"children":548},{"class":63,"line":80},[549,554],{"type":23,"tag":61,"props":550,"children":551},{"style":68},[552],{"type":33,"value":553},"  app",{"type":23,"tag":61,"props":555,"children":556},{"style":74},[557],{"type":33,"value":77},{"type":23,"tag":61,"props":559,"children":560},{"class":63,"line":93},[561,565,569],{"type":23,"tag":61,"props":562,"children":563},{"style":68},[564],{"type":33,"value":99},{"type":23,"tag":61,"props":566,"children":567},{"style":74},[568],{"type":33,"value":104},{"type":23,"tag":61,"props":570,"children":571},{"style":107},[572],{"type":33,"value":110},{"type":23,"tag":574,"props":575,"children":576},"hr",{},[],{"type":23,"tag":24,"props":578,"children":579},{},[580],{"type":33,"value":581},"Now let's configure traefik to do \"the magic\"",{"type":23,"tag":43,"props":583,"children":587},{"code":584,"filename":585,"language":53,"meta":586,"className":54,"style":7},"volumes:\n  letsencrypt:\n    \nservices:\n  traefik:\n    container_name: traefik\n    restart: always\n    image: traefik:3\n    network_mode: host\n    command:\n      - --certificatesresolvers.letsencrypt.acme.httpchallenge=true\n      - --certificatesresolvers.letsencrypt.acme.email=\u003Cyour_email_here>\n      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json\n      - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web\n\n      - --entrypoints.web.address=:80\n      - --entrypoints.websecure.address=:443\n      \n      - --entrypoints.web.http.redirections.entrypoint.to=websecure\n      - --entrypoints.web.http.redirections.entrypoint.scheme=https\n      - --entrypoints.websecure.http.tls.certresolver=letsencrypt\n\n      - --providers.docker\n      - --providers.docker.defaultrule=Host(`{{ trimPrefix `app-` .Name }}.example.com`)\n      - --providers.docker.constraints=Label(`com.docker.compose.service`,`app`)\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n      - /letsencrypt:/letsencrypt\n","traefik/docker-compose.yaml","(2)",[588],{"type":23,"tag":57,"props":589,"children":590},{"__ignoreMap":7},[591,603,615,623,634,646,663,680,696,713,726,739,752,765,778,788,801,814,823,836,849,862,870,883,896,909,922,935],{"type":23,"tag":61,"props":592,"children":593},{"class":63,"line":64},[594,599],{"type":23,"tag":61,"props":595,"children":596},{"style":68},[597],{"type":33,"value":598},"volumes",{"type":23,"tag":61,"props":600,"children":601},{"style":74},[602],{"type":33,"value":77},{"type":23,"tag":61,"props":604,"children":605},{"class":63,"line":80},[606,611],{"type":23,"tag":61,"props":607,"children":608},{"style":68},[609],{"type":33,"value":610},"  letsencrypt",{"type":23,"tag":61,"props":612,"children":613},{"style":74},[614],{"type":33,"value":77},{"type":23,"tag":61,"props":616,"children":617},{"class":63,"line":93},[618],{"type":23,"tag":61,"props":619,"children":620},{"style":74},[621],{"type":33,"value":622},"    \n",{"type":23,"tag":61,"props":624,"children":625},{"class":63,"line":113},[626,630],{"type":23,"tag":61,"props":627,"children":628},{"style":68},[629],{"type":33,"value":71},{"type":23,"tag":61,"props":631,"children":632},{"style":74},[633],{"type":33,"value":77},{"type":23,"tag":61,"props":635,"children":636},{"class":63,"line":48},[637,642],{"type":23,"tag":61,"props":638,"children":639},{"style":68},[640],{"type":33,"value":641},"  traefik",{"type":23,"tag":61,"props":643,"children":644},{"style":74},[645],{"type":33,"value":77},{"type":23,"tag":61,"props":647,"children":648},{"class":63,"line":49},[649,654,658],{"type":23,"tag":61,"props":650,"children":651},{"style":68},[652],{"type":33,"value":653},"    container_name",{"type":23,"tag":61,"props":655,"children":656},{"style":74},[657],{"type":33,"value":104},{"type":23,"tag":61,"props":659,"children":660},{"style":107},[661],{"type":33,"value":662},"traefik\n",{"type":23,"tag":61,"props":664,"children":665},{"class":63,"line":50},[666,671,675],{"type":23,"tag":61,"props":667,"children":668},{"style":68},[669],{"type":33,"value":670},"    restart",{"type":23,"tag":61,"props":672,"children":673},{"style":74},[674],{"type":33,"value":104},{"type":23,"tag":61,"props":676,"children":677},{"style":107},[678],{"type":33,"value":679},"always\n",{"type":23,"tag":61,"props":681,"children":682},{"class":63,"line":51},[683,687,691],{"type":23,"tag":61,"props":684,"children":685},{"style":68},[686],{"type":33,"value":99},{"type":23,"tag":61,"props":688,"children":689},{"style":74},[690],{"type":33,"value":104},{"type":23,"tag":61,"props":692,"children":693},{"style":107},[694],{"type":33,"value":695},"traefik:3\n",{"type":23,"tag":61,"props":697,"children":698},{"class":63,"line":52},[699,704,708],{"type":23,"tag":61,"props":700,"children":701},{"style":68},[702],{"type":33,"value":703},"    network_mode",{"type":23,"tag":61,"props":705,"children":706},{"style":74},[707],{"type":33,"value":104},{"type":23,"tag":61,"props":709,"children":710},{"style":107},[711],{"type":33,"value":712},"host\n",{"type":23,"tag":61,"props":714,"children":716},{"class":63,"line":715},10,[717,722],{"type":23,"tag":61,"props":718,"children":719},{"style":68},[720],{"type":33,"value":721},"    command",{"type":23,"tag":61,"props":723,"children":724},{"style":74},[725],{"type":33,"value":77},{"type":23,"tag":61,"props":727,"children":729},{"class":63,"line":728},11,[730,734],{"type":23,"tag":61,"props":731,"children":732},{"style":74},[733],{"type":33,"value":133},{"type":23,"tag":61,"props":735,"children":736},{"style":107},[737],{"type":33,"value":738},"--certificatesresolvers.letsencrypt.acme.httpchallenge=true\n",{"type":23,"tag":61,"props":740,"children":742},{"class":63,"line":741},12,[743,747],{"type":23,"tag":61,"props":744,"children":745},{"style":74},[746],{"type":33,"value":133},{"type":23,"tag":61,"props":748,"children":749},{"style":107},[750],{"type":33,"value":751},"--certificatesresolvers.letsencrypt.acme.email=\u003Cyour_email_here>\n",{"type":23,"tag":61,"props":753,"children":755},{"class":63,"line":754},13,[756,760],{"type":23,"tag":61,"props":757,"children":758},{"style":74},[759],{"type":33,"value":133},{"type":23,"tag":61,"props":761,"children":762},{"style":107},[763],{"type":33,"value":764},"--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json\n",{"type":23,"tag":61,"props":766,"children":768},{"class":63,"line":767},14,[769,773],{"type":23,"tag":61,"props":770,"children":771},{"style":74},[772],{"type":33,"value":133},{"type":23,"tag":61,"props":774,"children":775},{"style":107},[776],{"type":33,"value":777},"--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web\n",{"type":23,"tag":61,"props":779,"children":781},{"class":63,"line":780},15,[782],{"type":23,"tag":61,"props":783,"children":785},{"emptyLinePlaceholder":784},true,[786],{"type":33,"value":787},"\n",{"type":23,"tag":61,"props":789,"children":791},{"class":63,"line":790},16,[792,796],{"type":23,"tag":61,"props":793,"children":794},{"style":74},[795],{"type":33,"value":133},{"type":23,"tag":61,"props":797,"children":798},{"style":107},[799],{"type":33,"value":800},"--entrypoints.web.address=:80\n",{"type":23,"tag":61,"props":802,"children":804},{"class":63,"line":803},17,[805,809],{"type":23,"tag":61,"props":806,"children":807},{"style":74},[808],{"type":33,"value":133},{"type":23,"tag":61,"props":810,"children":811},{"style":107},[812],{"type":33,"value":813},"--entrypoints.websecure.address=:443\n",{"type":23,"tag":61,"props":815,"children":817},{"class":63,"line":816},18,[818],{"type":23,"tag":61,"props":819,"children":820},{"style":74},[821],{"type":33,"value":822},"      \n",{"type":23,"tag":61,"props":824,"children":826},{"class":63,"line":825},19,[827,831],{"type":23,"tag":61,"props":828,"children":829},{"style":74},[830],{"type":33,"value":133},{"type":23,"tag":61,"props":832,"children":833},{"style":107},[834],{"type":33,"value":835},"--entrypoints.web.http.redirections.entrypoint.to=websecure\n",{"type":23,"tag":61,"props":837,"children":839},{"class":63,"line":838},20,[840,844],{"type":23,"tag":61,"props":841,"children":842},{"style":74},[843],{"type":33,"value":133},{"type":23,"tag":61,"props":845,"children":846},{"style":107},[847],{"type":33,"value":848},"--entrypoints.web.http.redirections.entrypoint.scheme=https\n",{"type":23,"tag":61,"props":850,"children":852},{"class":63,"line":851},21,[853,857],{"type":23,"tag":61,"props":854,"children":855},{"style":74},[856],{"type":33,"value":133},{"type":23,"tag":61,"props":858,"children":859},{"style":107},[860],{"type":33,"value":861},"--entrypoints.websecure.http.tls.certresolver=letsencrypt\n",{"type":23,"tag":61,"props":863,"children":865},{"class":63,"line":864},22,[866],{"type":23,"tag":61,"props":867,"children":868},{"emptyLinePlaceholder":784},[869],{"type":33,"value":787},{"type":23,"tag":61,"props":871,"children":873},{"class":63,"line":872},23,[874,878],{"type":23,"tag":61,"props":875,"children":876},{"style":74},[877],{"type":33,"value":133},{"type":23,"tag":61,"props":879,"children":880},{"style":107},[881],{"type":33,"value":882},"--providers.docker\n",{"type":23,"tag":61,"props":884,"children":886},{"class":63,"line":885},24,[887,891],{"type":23,"tag":61,"props":888,"children":889},{"style":74},[890],{"type":33,"value":133},{"type":23,"tag":61,"props":892,"children":893},{"style":107},[894],{"type":33,"value":895},"--providers.docker.defaultrule=Host(`{{ trimPrefix `app-` .Name }}.example.com`)\n",{"type":23,"tag":61,"props":897,"children":899},{"class":63,"line":898},25,[900,904],{"type":23,"tag":61,"props":901,"children":902},{"style":74},[903],{"type":33,"value":133},{"type":23,"tag":61,"props":905,"children":906},{"style":107},[907],{"type":33,"value":908},"--providers.docker.constraints=Label(`com.docker.compose.service`,`app`)\n",{"type":23,"tag":61,"props":910,"children":912},{"class":63,"line":911},26,[913,918],{"type":23,"tag":61,"props":914,"children":915},{"style":68},[916],{"type":33,"value":917},"    volumes",{"type":23,"tag":61,"props":919,"children":920},{"style":74},[921],{"type":33,"value":77},{"type":23,"tag":61,"props":923,"children":925},{"class":63,"line":924},27,[926,930],{"type":23,"tag":61,"props":927,"children":928},{"style":74},[929],{"type":33,"value":133},{"type":23,"tag":61,"props":931,"children":932},{"style":107},[933],{"type":33,"value":934},"/var/run/docker.sock:/var/run/docker.sock:ro\n",{"type":23,"tag":61,"props":936,"children":938},{"class":63,"line":937},28,[939,943],{"type":23,"tag":61,"props":940,"children":941},{"style":74},[942],{"type":33,"value":133},{"type":23,"tag":61,"props":944,"children":945},{"style":107},[946],{"type":33,"value":947},"/letsencrypt:/letsencrypt\n",{"type":23,"tag":24,"props":949,"children":950},{},[951],{"type":33,"value":952},"Let's explain this a little",{"type":23,"tag":350,"props":954,"children":955},{},[956,969,974,979,984],{"type":23,"tag":201,"props":957,"children":958},{},[959,961,967],{"type":33,"value":960},"We configure a ",{"type":23,"tag":28,"props":962,"children":964},{"href":963},"https://letsencrypt.org/",[965],{"type":33,"value":966},"Let's Encrypt",{"type":33,"value":968}," certificates resolvers (11-14)",{"type":23,"tag":201,"props":970,"children":971},{},[972],{"type":33,"value":973},"We listen on port 80 and 443 (16-17)",{"type":23,"tag":201,"props":975,"children":976},{},[977],{"type":33,"value":978},"We redirect all http traffic to https (19-20)",{"type":23,"tag":201,"props":980,"children":981},{},[982],{"type":33,"value":983},"and attach the configured certificates resolvers to it (21)",{"type":23,"tag":201,"props":985,"children":986},{},[987],{"type":33,"value":988},"We setup the docker provider (23-25)",{"type":23,"tag":990,"props":991,"children":993},"h3",{"id":992},"explanation-for-lines-24-25",[994],{"type":33,"value":995},"Explanation for lines 24-25",{"type":23,"tag":43,"props":997,"children":999},{"code":998},"--providers.docker.defaultrule=Host(`{{ trimPrefix 'app-'.Name }}.example.com`)\n",[1000],{"type":23,"tag":57,"props":1001,"children":1002},{"__ignoreMap":7},[1003],{"type":33,"value":998},{"type":23,"tag":197,"props":1005,"children":1006},{},[1007,1039],{"type":23,"tag":201,"props":1008,"children":1009},{},[1010,1016,1018,1024,1026,1031,1033],{"type":23,"tag":57,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":33,"value":1015},".Name",{"type":33,"value":1017}," is autogenerated as ",{"type":23,"tag":57,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":33,"value":1023},"\u003Cservice-name>-\u003Cstack_name>",{"type":33,"value":1025}," so for your ",{"type":23,"tag":57,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":33,"value":209},{"type":33,"value":1032}," example it would be ",{"type":23,"tag":57,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":33,"value":1038},"app-whoami",{"type":23,"tag":201,"props":1040,"children":1041},{},[1042,1048,1050],{"type":23,"tag":57,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":33,"value":1047},"trimPrefix 'app-'.Name",{"type":33,"value":1049}," resolves in ",{"type":23,"tag":57,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":33,"value":209},{"type":23,"tag":1056,"props":1057,"children":1058},"br",{},[],{"type":23,"tag":43,"props":1060,"children":1061},{"code":908},[1062],{"type":23,"tag":57,"props":1063,"children":1064},{"__ignoreMap":7},[1065],{"type":33,"value":908},{"type":23,"tag":24,"props":1067,"children":1068},{},[1069,1071,1076,1078,1084,1086,1092],{"type":33,"value":1070},"All services should be exposed by default but should be filtered down, only to ",{"type":23,"tag":57,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":33,"value":513},{"type":33,"value":1077}," services. The label ",{"type":23,"tag":57,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":33,"value":1083},"com.docker.compose.service",{"type":33,"value":1085}," is added by ",{"type":23,"tag":57,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":33,"value":1091},"docker-compose",{"type":33,"value":1093}," to all containers .",{"type":23,"tag":272,"props":1095,"children":1097},{"id":1096},"bonus-configuration",[1098],{"type":33,"value":1099},"Bonus configuration",{"type":23,"tag":24,"props":1101,"children":1102},{},[1103],{"type":33,"value":1104},"We can tweak this configuration even more.",{"type":23,"tag":990,"props":1106,"children":1108},{"id":1107},"exposing-other-services-in-the-stack",[1109],{"type":33,"value":1110},"Exposing other services in the stack",{"type":23,"tag":24,"props":1112,"children":1113},{},[1114],{"type":33,"value":1115},"Sometimes you want to expose more than just the app container.",{"type":23,"tag":24,"props":1117,"children":1118},{},[1119,1121,1126],{"type":33,"value":1120},"The current configuration won't route traffic to any other services other than ",{"type":23,"tag":57,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":33,"value":513},{"type":33,"value":1127},".\nTo still be able to use the default configuration method, we need to re-enable it.",{"type":23,"tag":43,"props":1129,"children":1131},{"code":1130},"--providers.docker.constraints=Label(`com.docker.compose.service`,`app`) || Label(`traefik.enable`, `true`)\n",[1132],{"type":23,"tag":57,"props":1133,"children":1134},{"__ignoreMap":7},[1135],{"type":33,"value":1130},{"type":23,"tag":990,"props":1137,"children":1139},{"id":1138},"stack-name-other-than-directory-name",[1140],{"type":33,"value":1141},"Stack name other than directory name",{"type":23,"tag":24,"props":1143,"children":1144},{},[1145,1147,1152],{"type":33,"value":1146},"When deploying the stacks, the name is generated based on directory name where the ",{"type":23,"tag":57,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":33,"value":346},{"type":33,"value":1153}," file is located.\nWe can change the make in several ways, but here is the easiest one:",{"type":23,"tag":43,"props":1155,"children":1159},{"code":1156,"filename":1157,"highlights":1158,"language":53,"meta":7,"className":54,"style":7},"name: whoami\nservices:\n  app:\n    image: traefik/whoami\n","whoami-example/docker-compose.yaml",[64],[1160],{"type":23,"tag":57,"props":1161,"children":1162},{"__ignoreMap":7},[1163,1181,1192,1203],{"type":23,"tag":61,"props":1164,"children":1166},{"class":1165,"line":64},[63,127],[1167,1172,1176],{"type":23,"tag":61,"props":1168,"children":1169},{"style":68},[1170],{"type":33,"value":1171},"name",{"type":23,"tag":61,"props":1173,"children":1174},{"style":74},[1175],{"type":33,"value":104},{"type":23,"tag":61,"props":1177,"children":1178},{"style":107},[1179],{"type":33,"value":1180},"whoami\n",{"type":23,"tag":61,"props":1182,"children":1183},{"class":63,"line":80},[1184,1188],{"type":23,"tag":61,"props":1185,"children":1186},{"style":68},[1187],{"type":33,"value":71},{"type":23,"tag":61,"props":1189,"children":1190},{"style":74},[1191],{"type":33,"value":77},{"type":23,"tag":61,"props":1193,"children":1194},{"class":63,"line":93},[1195,1199],{"type":23,"tag":61,"props":1196,"children":1197},{"style":68},[1198],{"type":33,"value":553},{"type":23,"tag":61,"props":1200,"children":1201},{"style":74},[1202],{"type":33,"value":77},{"type":23,"tag":61,"props":1204,"children":1205},{"class":63,"line":113},[1206,1210,1214],{"type":23,"tag":61,"props":1207,"children":1208},{"style":68},[1209],{"type":33,"value":99},{"type":23,"tag":61,"props":1211,"children":1212},{"style":74},[1213],{"type":33,"value":104},{"type":23,"tag":61,"props":1215,"children":1216},{"style":107},[1217],{"type":33,"value":110},{"type":23,"tag":1219,"props":1220,"children":1221},"style",{},[1222],{"type":33,"value":1223},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":7,"searchDepth":80,"depth":80,"links":1225},[1226,1227,1230],{"id":274,"depth":80,"text":277},{"id":370,"depth":80,"text":373,"children":1228},[1229],{"id":992,"depth":93,"text":995},{"id":1096,"depth":80,"text":1099,"children":1231},[1232,1233],{"id":1107,"depth":93,"text":1110},{"id":1138,"depth":93,"text":1141},"markdown","common:en:blog:21.traefik-magic.md","common","en/blog/21.traefik-magic.md","en/blog/21.traefik-magic","md",{"_path":1241,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1242,"description":1243,"author":10,"image":11,"releaseDate":1244,"blogCategories":1245,"articleTags":1246,"tags":1249,"_type":1234,"_id":1251,"_source":1236,"_file":1252,"_stem":1253,"_extension":1239},"/en/blog/shopware-plugin-gitlab-pipeline-release","Test, build and release a Shopware 6 Plugin with GitLab CI - Part 1: release","Part 1 - release - of using GitLab for testing, building and releasing a Shopware 6 Plugin","2026-02-26",[14,15],[15,1247,1248],"Open Source","Shopware",[1250,18],"shopware","common:en:blog:18.shopware-plugin-gitlab-pipeline-release.md","en/blog/18.shopware-plugin-gitlab-pipeline-release.md","en/blog/18.shopware-plugin-gitlab-pipeline-release",{},{"_path":1256},"/blog/traefik-magic",{"_path":4},{"_path":1259,"_dir":1260,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":1261,"primaryTeam":1263,"firstName":1264,"lastName":1265,"prefixTitle":7,"suffixTitle":1266,"education":1267,"role":1272,"workingSince":1277,"inTheCompanySince":1278,"techSkills":1279,"skills":1318,"projects":1336,"contactDetails":1346,"_image":1350,"image":1351,"_id":1352,"_type":1353,"title":1354,"_source":1260,"_file":1355,"_stem":1356,"_extension":1353},"/employees/robert-juzak","employees",[1262,1263],"appDev","devOps","Robert","Juzak","B.Sc.",[1268],[1269,1270,1271],"Bachelor of Computer Science","Technische Universität Breslau","2016",[1273,1274,1275,1276],"softwareDeveloper","fullstackDeveloper","admin","consultant","2015","2018",[1280,1284,1286,1289,1292,1295,1297,1300,1303,1307,1310,1312,1315],{"name":1281,"level":1282,"icon":1283},"Docker","expert","/images/Docker.svg",{"name":1285,"level":1282},"GitLab",{"name":1287,"level":1282,"icon":1288},"Kubernetes","/images/Kubernetes.svg",{"name":1290,"level":1282,"icon":1291},"PHPUnit","/images/PHP-Unit.svg",{"name":1293,"level":1282,"icon":1294},"Portainer","/images/Portainer.svg",{"name":1296,"level":1282},"Sentry",{"name":1298,"level":1282,"icon":1299},"Sonarqube","/images/Sonarqube.svg",{"name":1301,"level":1282,"icon":1302},"Linux","/images/linux_os-mono.svg",{"name":1304,"level":1305,"icon":1306},"CSS","advanced","/images/css.svg",{"name":1308,"level":1305,"icon":1309},"HTML","/images/html.svg",{"name":1311,"level":1305},"PHP",{"name":1313,"level":1305,"icon":1314},"SQL","/images/SQL.svg",{"name":1316,"level":1305,"icon":1317},"VueJS","/images/vuejs.svg",[1319,1321,1323,1324,1326,1328,1330,1332,1334],{"name":1320,"level":1282},"CI/CD",{"name":1322,"level":1282},"qualityAssurance",{"name":1263,"level":1282},{"name":1325,"level":1282},"testDrivenBugfix",{"name":1327,"level":1282},"testDrivenDevelopment",{"name":1329,"level":1305},"accessibility",{"name":1331,"level":1305},"databases",{"name":1333,"level":1305},"linuxServerAdministration",{"name":1335,"level":1305},"softwareArchitect",[1337,1342,1344],{"project":1338,"position":1339},"Herole",[1340,1341],"Dev-Ops","Frontend Developer",{"project":1343,"position":1341},"Huawei-Calibration-aaS",{"project":1345,"position":1341},"Huawei-Inspect-3D",{"eMail":1347,"phone":1348,"visibility":1349},"robert.juzak@helmundwalter.de","+49 351 799 035 26","1","images/employees/Portraits/robert_juzak.webp","images/employees/Portraits/RobertJuzak_MS.webp","employees:employees:6.robert-juzak.json","json","Robert Juzak","employees/6.robert-juzak.json","employees/6.robert-juzak",[1358,1371],{"_path":1359,"_dir":1360,"_draft":6,"_partial":784,"_locale":7,"name":1361,"slug":1360,"text":1362,"hoverText":1363,"image":1364,"customer":1361,"tags":1365,"_id":1367,"_type":53,"title":1368,"_source":1236,"_file":1369,"_stem":1370,"_extension":53},"/en/portfolio/pixelx/_teaser","pixelx","PixelX","IT Security with Precision and Expertise","For PixelX, we conducted a targeted security analysis where, thanks to our deep technical understanding, we were able to identify a critical SQL injection vulnerability. With minimal time investment, we achieved maximum security gain.","/images/portfolio/pixelx/pixelx_secured.png",[1366,18],"security","common:en:portfolio:9010.pixelx:_teaser.yaml","Teaser","en/portfolio/9010.pixelx/_teaser.yaml","en/portfolio/9010.pixelx/_teaser",{"_path":1372,"_dir":1373,"_draft":6,"_partial":784,"_locale":7,"name":1374,"slug":1373,"text":1375,"hoverText":1376,"image":1377,"customer":1374,"tags":1378,"_id":1379,"_type":53,"title":1368,"_source":1236,"_file":1380,"_stem":1381,"_extension":53},"/en/portfolio/slimspots/_teaser","slimspots","SlimSpots","Processing large amounts of data in real-time","For SlimSpots, a global provider of ad marketing solutions, we developed a highly scalable infrastructure that enables the processing of trillions of data records in real-time.","/images/portfolio/slimspots/slim_spots_prtfolio.png",[1331,18],"common:en:portfolio:9020.slimspots:_teaser.yaml","en/portfolio/9020.slimspots/_teaser.yaml","en/portfolio/9020.slimspots/_teaser",{"_path":1241,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1242,"description":1243,"author":10,"image":11,"releaseDate":1244,"blogCategories":1383,"articleTags":1384,"tags":1385,"body":1386,"_type":1234,"_id":1251,"_source":1236,"_file":1252,"_stem":1253,"_extension":1239},[14,15],[15,1247,1248],[1250,18],{"type":20,"children":1387,"toc":5772},[1388,1396,1401,1413,1418,1423,1459,1464,1470,1475,1481,1493,2544,2549,2576,2586,2589,2602,2625,2760,2772,2777,2783,2795,2815,3217,3258,3263,3284,3426,3438,3444,3455,3460,3472,3507,3512,4439,4444,4543,4548,4607,4618,4623,4644,4779,4789,4795,4815,4818,4821,4827,4833,4838,4854,4904,5060,5066,5071,5082,5095,5318,5723,5728,5768],{"type":23,"tag":1389,"props":1390,"children":1395},"img",{"alt":7,"aspect-ratio":1391,"height":1392,"object-fit":1393,"src":1394},"1.78",300,"fill","/blog/shopware-plugin-release.png",[],{"type":23,"tag":24,"props":1397,"children":1398},{},[1399],{"type":33,"value":1400},"There are many ways to install Shopware 6 plugins. You can download them directly in the admin panel or install them with composer.",{"type":23,"tag":24,"props":1402,"children":1403},{},[1404,1406,1412],{"type":33,"value":1405},"There is a detailed comparison in the ",{"type":23,"tag":28,"props":1407,"children":1409},{"href":1408},"https://developer.shopware.com/docs/guides/plugins/plugins/",[1410],{"type":33,"value":1411},"official documentation",{"type":33,"value":306},{"type":23,"tag":24,"props":1414,"children":1415},{},[1416],{"type":33,"value":1417},"As a developer and maintainer of themes, customizations, third part API's, etc., I'm focused on Static Plugins.",{"type":23,"tag":24,"props":1419,"children":1420},{},[1421],{"type":33,"value":1422},"The workflow is simple:",{"type":23,"tag":350,"props":1424,"children":1425},{},[1426,1437,1448],{"type":23,"tag":201,"props":1427,"children":1428},{},[1429,1431],{"type":33,"value":1430},"Create a plugin with ",{"type":23,"tag":57,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":33,"value":1436},"bin/console plugin:create --static",{"type":23,"tag":201,"props":1438,"children":1439},{},[1440,1442],{"type":33,"value":1441},"Require it with ",{"type":23,"tag":28,"props":1443,"children":1445},{"href":1444},"https://developer.shopware.com/docs/guides/plugins/plugins/#static-plugins",[1446],{"type":33,"value":1447},"composer",{"type":23,"tag":201,"props":1449,"children":1450},{},[1451,1453],{"type":33,"value":1452},"Build the project with ",{"type":23,"tag":28,"props":1454,"children":1456},{"href":1455},"https://developer.shopware.com/docs/products/cli/project-commands/build.html#example-docker-image",[1457],{"type":33,"value":1458},"shopware-cli",{"type":23,"tag":24,"props":1460,"children":1461},{},[1462],{"type":33,"value":1463},"When we need the same plugin in more than one shop, we could create the same plugin more than ones,\nbut this wouldn't be great for maintenance.",{"type":23,"tag":272,"props":1465,"children":1467},{"id":1466},"extracting-the-plugin",[1468],{"type":33,"value":1469},"Extracting the plugin",{"type":23,"tag":24,"props":1471,"children":1472},{},[1473],{"type":33,"value":1474},"Let's move the source code of our plugin to a separate repository. To make things easier for now, we make the repository public.",{"type":23,"tag":990,"props":1476,"children":1478},{"id":1477},"download-with-git",[1479],{"type":33,"value":1480},"Download with git",{"type":23,"tag":24,"props":1482,"children":1483},{},[1484,1486,1491],{"type":33,"value":1485},"We just need to tell ",{"type":23,"tag":57,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":33,"value":1447},{"type":33,"value":1492}," where to find our plugin",{"type":23,"tag":43,"props":1494,"children":1503},{"className":1495,"code":1496,"filename":1497,"highlights":1498,"language":1353,"meta":7,"style":7},"language-json shiki shiki-themes github-dark github-dark monokai","{\n  \"name\": \"shopware/production\",\n  \"license\": \"MIT\",\n  \"type\": \"project\",\n  \"require\": {\n    \"composer-runtime-api\": \"^2.0\",\n    \"acme/sample-plugin\": \"^1.0\",\n    \"shopware/administration\": \"*\",\n    \"shopware/core\": \"6.6.10.2\",\n    \"shopware/elasticsearch\": \"*\",\n    \"shopware/storefront\": \"*\",\n    \"symfony/flex\": \"~2\"\n  },\n  \"repositories\": [\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/plugins/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/plugins/*/packages/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/static-plugins/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"git\",\n      \"url\": \"https://\u003CDOMAIN-NAME>/\u003Cgroup>/\u003Crepo>.git\"\n    }\n  ],\n  \"autoload\": {\n    \"psr-4\": {\n      \"App\\\\\": \"src/\"\n    }\n  },\n  \"prefer-stable\": true,\n  \"config\": {\n    \"allow-plugins\": {\n      \"symfony/flex\": true,\n      \"symfony/runtime\": true\n    },\n    \"optimize-autoloader\": true,\n    \"sort-packages\": true\n  },\n  \"scripts\": {\n    \"auto-scripts\": {\n      \"assets:install\": \"symfony-cmd\"\n    },\n    \"post-install-cmd\": [\n      \"@auto-scripts\"\n    ],\n    \"post-update-cmd\": [\n      \"@auto-scripts\"\n    ]\n  },\n  \"extra\": {\n    \"symfony\": {\n      \"allow-contrib\": true,\n      \"endpoint\": [\n        \"https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json\",\n        \"flex://defaults\"\n      ]\n    }\n  }\n}\n","\u003Cproject-root>/composer.json",[1499,1500,1501,1502],36,37,38,39,[1504],{"type":23,"tag":57,"props":1505,"children":1506},{"__ignoreMap":7},[1507,1515,1539,1560,1581,1594,1615,1636,1657,1678,1698,1718,1735,1743,1756,1764,1785,1806,1818,1836,1844,1852,1859,1878,1898,1909,1924,1931,1938,1946,1966,1987,1999,2015,2023,2031,2039,2060,2077,2086,2095,2108,2121,2150,2158,2166,2188,2201,2214,2235,2252,2260,2281,2298,2306,2319,2332,2350,2358,2371,2380,2389,2402,2410,2419,2427,2440,2453,2474,2487,2500,2509,2518,2526,2535],{"type":23,"tag":61,"props":1508,"children":1509},{"class":63,"line":64},[1510],{"type":23,"tag":61,"props":1511,"children":1512},{"style":74},[1513],{"type":33,"value":1514},"{\n",{"type":23,"tag":61,"props":1516,"children":1517},{"class":63,"line":80},[1518,1524,1528,1534],{"type":23,"tag":61,"props":1519,"children":1521},{"style":1520},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic",[1522],{"type":33,"value":1523},"  \"name\"",{"type":23,"tag":61,"props":1525,"children":1526},{"style":74},[1527],{"type":33,"value":104},{"type":23,"tag":61,"props":1529,"children":1531},{"style":1530},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2",[1532],{"type":33,"value":1533},"\"shopware/production\"",{"type":23,"tag":61,"props":1535,"children":1536},{"style":74},[1537],{"type":33,"value":1538},",\n",{"type":23,"tag":61,"props":1540,"children":1541},{"class":63,"line":93},[1542,1547,1551,1556],{"type":23,"tag":61,"props":1543,"children":1544},{"style":1520},[1545],{"type":33,"value":1546},"  \"license\"",{"type":23,"tag":61,"props":1548,"children":1549},{"style":74},[1550],{"type":33,"value":104},{"type":23,"tag":61,"props":1552,"children":1553},{"style":1530},[1554],{"type":33,"value":1555},"\"MIT\"",{"type":23,"tag":61,"props":1557,"children":1558},{"style":74},[1559],{"type":33,"value":1538},{"type":23,"tag":61,"props":1561,"children":1562},{"class":63,"line":113},[1563,1568,1572,1577],{"type":23,"tag":61,"props":1564,"children":1565},{"style":1520},[1566],{"type":33,"value":1567},"  \"type\"",{"type":23,"tag":61,"props":1569,"children":1570},{"style":74},[1571],{"type":33,"value":104},{"type":23,"tag":61,"props":1573,"children":1574},{"style":1530},[1575],{"type":33,"value":1576},"\"project\"",{"type":23,"tag":61,"props":1578,"children":1579},{"style":74},[1580],{"type":33,"value":1538},{"type":23,"tag":61,"props":1582,"children":1583},{"class":63,"line":48},[1584,1589],{"type":23,"tag":61,"props":1585,"children":1586},{"style":1520},[1587],{"type":33,"value":1588},"  \"require\"",{"type":23,"tag":61,"props":1590,"children":1591},{"style":74},[1592],{"type":33,"value":1593},": {\n",{"type":23,"tag":61,"props":1595,"children":1596},{"class":63,"line":49},[1597,1602,1606,1611],{"type":23,"tag":61,"props":1598,"children":1599},{"style":1520},[1600],{"type":33,"value":1601},"    \"composer-runtime-api\"",{"type":23,"tag":61,"props":1603,"children":1604},{"style":74},[1605],{"type":33,"value":104},{"type":23,"tag":61,"props":1607,"children":1608},{"style":1530},[1609],{"type":33,"value":1610},"\"^2.0\"",{"type":23,"tag":61,"props":1612,"children":1613},{"style":74},[1614],{"type":33,"value":1538},{"type":23,"tag":61,"props":1616,"children":1617},{"class":63,"line":50},[1618,1623,1627,1632],{"type":23,"tag":61,"props":1619,"children":1620},{"style":1520},[1621],{"type":33,"value":1622},"    \"acme/sample-plugin\"",{"type":23,"tag":61,"props":1624,"children":1625},{"style":74},[1626],{"type":33,"value":104},{"type":23,"tag":61,"props":1628,"children":1629},{"style":1530},[1630],{"type":33,"value":1631},"\"^1.0\"",{"type":23,"tag":61,"props":1633,"children":1634},{"style":74},[1635],{"type":33,"value":1538},{"type":23,"tag":61,"props":1637,"children":1638},{"class":63,"line":51},[1639,1644,1648,1653],{"type":23,"tag":61,"props":1640,"children":1641},{"style":1520},[1642],{"type":33,"value":1643},"    \"shopware/administration\"",{"type":23,"tag":61,"props":1645,"children":1646},{"style":74},[1647],{"type":33,"value":104},{"type":23,"tag":61,"props":1649,"children":1650},{"style":1530},[1651],{"type":33,"value":1652},"\"*\"",{"type":23,"tag":61,"props":1654,"children":1655},{"style":74},[1656],{"type":33,"value":1538},{"type":23,"tag":61,"props":1658,"children":1659},{"class":63,"line":52},[1660,1665,1669,1674],{"type":23,"tag":61,"props":1661,"children":1662},{"style":1520},[1663],{"type":33,"value":1664},"    \"shopware/core\"",{"type":23,"tag":61,"props":1666,"children":1667},{"style":74},[1668],{"type":33,"value":104},{"type":23,"tag":61,"props":1670,"children":1671},{"style":1530},[1672],{"type":33,"value":1673},"\"6.6.10.2\"",{"type":23,"tag":61,"props":1675,"children":1676},{"style":74},[1677],{"type":33,"value":1538},{"type":23,"tag":61,"props":1679,"children":1680},{"class":63,"line":715},[1681,1686,1690,1694],{"type":23,"tag":61,"props":1682,"children":1683},{"style":1520},[1684],{"type":33,"value":1685},"    \"shopware/elasticsearch\"",{"type":23,"tag":61,"props":1687,"children":1688},{"style":74},[1689],{"type":33,"value":104},{"type":23,"tag":61,"props":1691,"children":1692},{"style":1530},[1693],{"type":33,"value":1652},{"type":23,"tag":61,"props":1695,"children":1696},{"style":74},[1697],{"type":33,"value":1538},{"type":23,"tag":61,"props":1699,"children":1700},{"class":63,"line":728},[1701,1706,1710,1714],{"type":23,"tag":61,"props":1702,"children":1703},{"style":1520},[1704],{"type":33,"value":1705},"    \"shopware/storefront\"",{"type":23,"tag":61,"props":1707,"children":1708},{"style":74},[1709],{"type":33,"value":104},{"type":23,"tag":61,"props":1711,"children":1712},{"style":1530},[1713],{"type":33,"value":1652},{"type":23,"tag":61,"props":1715,"children":1716},{"style":74},[1717],{"type":33,"value":1538},{"type":23,"tag":61,"props":1719,"children":1720},{"class":63,"line":741},[1721,1726,1730],{"type":23,"tag":61,"props":1722,"children":1723},{"style":1520},[1724],{"type":33,"value":1725},"    \"symfony/flex\"",{"type":23,"tag":61,"props":1727,"children":1728},{"style":74},[1729],{"type":33,"value":104},{"type":23,"tag":61,"props":1731,"children":1732},{"style":1530},[1733],{"type":33,"value":1734},"\"~2\"\n",{"type":23,"tag":61,"props":1736,"children":1737},{"class":63,"line":754},[1738],{"type":23,"tag":61,"props":1739,"children":1740},{"style":74},[1741],{"type":33,"value":1742},"  },\n",{"type":23,"tag":61,"props":1744,"children":1745},{"class":63,"line":767},[1746,1751],{"type":23,"tag":61,"props":1747,"children":1748},{"style":1520},[1749],{"type":33,"value":1750},"  \"repositories\"",{"type":23,"tag":61,"props":1752,"children":1753},{"style":74},[1754],{"type":33,"value":1755},": [\n",{"type":23,"tag":61,"props":1757,"children":1758},{"class":63,"line":780},[1759],{"type":23,"tag":61,"props":1760,"children":1761},{"style":74},[1762],{"type":33,"value":1763},"    {\n",{"type":23,"tag":61,"props":1765,"children":1766},{"class":63,"line":790},[1767,1772,1776,1781],{"type":23,"tag":61,"props":1768,"children":1769},{"style":1520},[1770],{"type":33,"value":1771},"      \"type\"",{"type":23,"tag":61,"props":1773,"children":1774},{"style":74},[1775],{"type":33,"value":104},{"type":23,"tag":61,"props":1777,"children":1778},{"style":1530},[1779],{"type":33,"value":1780},"\"path\"",{"type":23,"tag":61,"props":1782,"children":1783},{"style":74},[1784],{"type":33,"value":1538},{"type":23,"tag":61,"props":1786,"children":1787},{"class":63,"line":803},[1788,1793,1797,1802],{"type":23,"tag":61,"props":1789,"children":1790},{"style":1520},[1791],{"type":33,"value":1792},"      \"url\"",{"type":23,"tag":61,"props":1794,"children":1795},{"style":74},[1796],{"type":33,"value":104},{"type":23,"tag":61,"props":1798,"children":1799},{"style":1530},[1800],{"type":33,"value":1801},"\"custom/plugins/*\"",{"type":23,"tag":61,"props":1803,"children":1804},{"style":74},[1805],{"type":33,"value":1538},{"type":23,"tag":61,"props":1807,"children":1808},{"class":63,"line":816},[1809,1814],{"type":23,"tag":61,"props":1810,"children":1811},{"style":1520},[1812],{"type":33,"value":1813},"      \"options\"",{"type":23,"tag":61,"props":1815,"children":1816},{"style":74},[1817],{"type":33,"value":1593},{"type":23,"tag":61,"props":1819,"children":1820},{"class":63,"line":825},[1821,1826,1830],{"type":23,"tag":61,"props":1822,"children":1823},{"style":1520},[1824],{"type":33,"value":1825},"        \"symlink\"",{"type":23,"tag":61,"props":1827,"children":1828},{"style":74},[1829],{"type":33,"value":104},{"type":23,"tag":61,"props":1831,"children":1833},{"style":1832},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[1834],{"type":33,"value":1835},"true\n",{"type":23,"tag":61,"props":1837,"children":1838},{"class":63,"line":838},[1839],{"type":23,"tag":61,"props":1840,"children":1841},{"style":74},[1842],{"type":33,"value":1843},"      }\n",{"type":23,"tag":61,"props":1845,"children":1846},{"class":63,"line":851},[1847],{"type":23,"tag":61,"props":1848,"children":1849},{"style":74},[1850],{"type":33,"value":1851},"    },\n",{"type":23,"tag":61,"props":1853,"children":1854},{"class":63,"line":864},[1855],{"type":23,"tag":61,"props":1856,"children":1857},{"style":74},[1858],{"type":33,"value":1763},{"type":23,"tag":61,"props":1860,"children":1861},{"class":63,"line":872},[1862,1866,1870,1874],{"type":23,"tag":61,"props":1863,"children":1864},{"style":1520},[1865],{"type":33,"value":1771},{"type":23,"tag":61,"props":1867,"children":1868},{"style":74},[1869],{"type":33,"value":104},{"type":23,"tag":61,"props":1871,"children":1872},{"style":1530},[1873],{"type":33,"value":1780},{"type":23,"tag":61,"props":1875,"children":1876},{"style":74},[1877],{"type":33,"value":1538},{"type":23,"tag":61,"props":1879,"children":1880},{"class":63,"line":885},[1881,1885,1889,1894],{"type":23,"tag":61,"props":1882,"children":1883},{"style":1520},[1884],{"type":33,"value":1792},{"type":23,"tag":61,"props":1886,"children":1887},{"style":74},[1888],{"type":33,"value":104},{"type":23,"tag":61,"props":1890,"children":1891},{"style":1530},[1892],{"type":33,"value":1893},"\"custom/plugins/*/packages/*\"",{"type":23,"tag":61,"props":1895,"children":1896},{"style":74},[1897],{"type":33,"value":1538},{"type":23,"tag":61,"props":1899,"children":1900},{"class":63,"line":898},[1901,1905],{"type":23,"tag":61,"props":1902,"children":1903},{"style":1520},[1904],{"type":33,"value":1813},{"type":23,"tag":61,"props":1906,"children":1907},{"style":74},[1908],{"type":33,"value":1593},{"type":23,"tag":61,"props":1910,"children":1911},{"class":63,"line":911},[1912,1916,1920],{"type":23,"tag":61,"props":1913,"children":1914},{"style":1520},[1915],{"type":33,"value":1825},{"type":23,"tag":61,"props":1917,"children":1918},{"style":74},[1919],{"type":33,"value":104},{"type":23,"tag":61,"props":1921,"children":1922},{"style":1832},[1923],{"type":33,"value":1835},{"type":23,"tag":61,"props":1925,"children":1926},{"class":63,"line":924},[1927],{"type":23,"tag":61,"props":1928,"children":1929},{"style":74},[1930],{"type":33,"value":1843},{"type":23,"tag":61,"props":1932,"children":1933},{"class":63,"line":937},[1934],{"type":23,"tag":61,"props":1935,"children":1936},{"style":74},[1937],{"type":33,"value":1851},{"type":23,"tag":61,"props":1939,"children":1941},{"class":63,"line":1940},29,[1942],{"type":23,"tag":61,"props":1943,"children":1944},{"style":74},[1945],{"type":33,"value":1763},{"type":23,"tag":61,"props":1947,"children":1949},{"class":63,"line":1948},30,[1950,1954,1958,1962],{"type":23,"tag":61,"props":1951,"children":1952},{"style":1520},[1953],{"type":33,"value":1771},{"type":23,"tag":61,"props":1955,"children":1956},{"style":74},[1957],{"type":33,"value":104},{"type":23,"tag":61,"props":1959,"children":1960},{"style":1530},[1961],{"type":33,"value":1780},{"type":23,"tag":61,"props":1963,"children":1964},{"style":74},[1965],{"type":33,"value":1538},{"type":23,"tag":61,"props":1967,"children":1969},{"class":63,"line":1968},31,[1970,1974,1978,1983],{"type":23,"tag":61,"props":1971,"children":1972},{"style":1520},[1973],{"type":33,"value":1792},{"type":23,"tag":61,"props":1975,"children":1976},{"style":74},[1977],{"type":33,"value":104},{"type":23,"tag":61,"props":1979,"children":1980},{"style":1530},[1981],{"type":33,"value":1982},"\"custom/static-plugins/*\"",{"type":23,"tag":61,"props":1984,"children":1985},{"style":74},[1986],{"type":33,"value":1538},{"type":23,"tag":61,"props":1988,"children":1990},{"class":63,"line":1989},32,[1991,1995],{"type":23,"tag":61,"props":1992,"children":1993},{"style":1520},[1994],{"type":33,"value":1813},{"type":23,"tag":61,"props":1996,"children":1997},{"style":74},[1998],{"type":33,"value":1593},{"type":23,"tag":61,"props":2000,"children":2002},{"class":63,"line":2001},33,[2003,2007,2011],{"type":23,"tag":61,"props":2004,"children":2005},{"style":1520},[2006],{"type":33,"value":1825},{"type":23,"tag":61,"props":2008,"children":2009},{"style":74},[2010],{"type":33,"value":104},{"type":23,"tag":61,"props":2012,"children":2013},{"style":1832},[2014],{"type":33,"value":1835},{"type":23,"tag":61,"props":2016,"children":2018},{"class":63,"line":2017},34,[2019],{"type":23,"tag":61,"props":2020,"children":2021},{"style":74},[2022],{"type":33,"value":1843},{"type":23,"tag":61,"props":2024,"children":2026},{"class":63,"line":2025},35,[2027],{"type":23,"tag":61,"props":2028,"children":2029},{"style":74},[2030],{"type":33,"value":1851},{"type":23,"tag":61,"props":2032,"children":2034},{"class":2033,"line":1499},[63,127],[2035],{"type":23,"tag":61,"props":2036,"children":2037},{"style":74},[2038],{"type":33,"value":1763},{"type":23,"tag":61,"props":2040,"children":2042},{"class":2041,"line":1500},[63,127],[2043,2047,2051,2056],{"type":23,"tag":61,"props":2044,"children":2045},{"style":1520},[2046],{"type":33,"value":1771},{"type":23,"tag":61,"props":2048,"children":2049},{"style":74},[2050],{"type":33,"value":104},{"type":23,"tag":61,"props":2052,"children":2053},{"style":1530},[2054],{"type":33,"value":2055},"\"git\"",{"type":23,"tag":61,"props":2057,"children":2058},{"style":74},[2059],{"type":33,"value":1538},{"type":23,"tag":61,"props":2061,"children":2063},{"class":2062,"line":1501},[63,127],[2064,2068,2072],{"type":23,"tag":61,"props":2065,"children":2066},{"style":1520},[2067],{"type":33,"value":1792},{"type":23,"tag":61,"props":2069,"children":2070},{"style":74},[2071],{"type":33,"value":104},{"type":23,"tag":61,"props":2073,"children":2074},{"style":1530},[2075],{"type":33,"value":2076},"\"https://\u003CDOMAIN-NAME>/\u003Cgroup>/\u003Crepo>.git\"\n",{"type":23,"tag":61,"props":2078,"children":2080},{"class":2079,"line":1502},[63,127],[2081],{"type":23,"tag":61,"props":2082,"children":2083},{"style":74},[2084],{"type":33,"value":2085},"    }\n",{"type":23,"tag":61,"props":2087,"children":2089},{"class":63,"line":2088},40,[2090],{"type":23,"tag":61,"props":2091,"children":2092},{"style":74},[2093],{"type":33,"value":2094},"  ],\n",{"type":23,"tag":61,"props":2096,"children":2098},{"class":63,"line":2097},41,[2099,2104],{"type":23,"tag":61,"props":2100,"children":2101},{"style":1520},[2102],{"type":33,"value":2103},"  \"autoload\"",{"type":23,"tag":61,"props":2105,"children":2106},{"style":74},[2107],{"type":33,"value":1593},{"type":23,"tag":61,"props":2109,"children":2111},{"class":63,"line":2110},42,[2112,2117],{"type":23,"tag":61,"props":2113,"children":2114},{"style":1520},[2115],{"type":33,"value":2116},"    \"psr-4\"",{"type":23,"tag":61,"props":2118,"children":2119},{"style":74},[2120],{"type":33,"value":1593},{"type":23,"tag":61,"props":2122,"children":2124},{"class":63,"line":2123},43,[2125,2130,2136,2141,2145],{"type":23,"tag":61,"props":2126,"children":2127},{"style":1520},[2128],{"type":33,"value":2129},"      \"App",{"type":23,"tag":61,"props":2131,"children":2133},{"style":2132},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#AE81FF;--shiki-sepia-font-style:italic",[2134],{"type":33,"value":2135},"\\\\",{"type":23,"tag":61,"props":2137,"children":2138},{"style":1520},[2139],{"type":33,"value":2140},"\"",{"type":23,"tag":61,"props":2142,"children":2143},{"style":74},[2144],{"type":33,"value":104},{"type":23,"tag":61,"props":2146,"children":2147},{"style":1530},[2148],{"type":33,"value":2149},"\"src/\"\n",{"type":23,"tag":61,"props":2151,"children":2153},{"class":63,"line":2152},44,[2154],{"type":23,"tag":61,"props":2155,"children":2156},{"style":74},[2157],{"type":33,"value":2085},{"type":23,"tag":61,"props":2159,"children":2161},{"class":63,"line":2160},45,[2162],{"type":23,"tag":61,"props":2163,"children":2164},{"style":74},[2165],{"type":33,"value":1742},{"type":23,"tag":61,"props":2167,"children":2169},{"class":63,"line":2168},46,[2170,2175,2179,2184],{"type":23,"tag":61,"props":2171,"children":2172},{"style":1520},[2173],{"type":33,"value":2174},"  \"prefer-stable\"",{"type":23,"tag":61,"props":2176,"children":2177},{"style":74},[2178],{"type":33,"value":104},{"type":23,"tag":61,"props":2180,"children":2181},{"style":1832},[2182],{"type":33,"value":2183},"true",{"type":23,"tag":61,"props":2185,"children":2186},{"style":74},[2187],{"type":33,"value":1538},{"type":23,"tag":61,"props":2189,"children":2191},{"class":63,"line":2190},47,[2192,2197],{"type":23,"tag":61,"props":2193,"children":2194},{"style":1520},[2195],{"type":33,"value":2196},"  \"config\"",{"type":23,"tag":61,"props":2198,"children":2199},{"style":74},[2200],{"type":33,"value":1593},{"type":23,"tag":61,"props":2202,"children":2204},{"class":63,"line":2203},48,[2205,2210],{"type":23,"tag":61,"props":2206,"children":2207},{"style":1520},[2208],{"type":33,"value":2209},"    \"allow-plugins\"",{"type":23,"tag":61,"props":2211,"children":2212},{"style":74},[2213],{"type":33,"value":1593},{"type":23,"tag":61,"props":2215,"children":2217},{"class":63,"line":2216},49,[2218,2223,2227,2231],{"type":23,"tag":61,"props":2219,"children":2220},{"style":1520},[2221],{"type":33,"value":2222},"      \"symfony/flex\"",{"type":23,"tag":61,"props":2224,"children":2225},{"style":74},[2226],{"type":33,"value":104},{"type":23,"tag":61,"props":2228,"children":2229},{"style":1832},[2230],{"type":33,"value":2183},{"type":23,"tag":61,"props":2232,"children":2233},{"style":74},[2234],{"type":33,"value":1538},{"type":23,"tag":61,"props":2236,"children":2238},{"class":63,"line":2237},50,[2239,2244,2248],{"type":23,"tag":61,"props":2240,"children":2241},{"style":1520},[2242],{"type":33,"value":2243},"      \"symfony/runtime\"",{"type":23,"tag":61,"props":2245,"children":2246},{"style":74},[2247],{"type":33,"value":104},{"type":23,"tag":61,"props":2249,"children":2250},{"style":1832},[2251],{"type":33,"value":1835},{"type":23,"tag":61,"props":2253,"children":2255},{"class":63,"line":2254},51,[2256],{"type":23,"tag":61,"props":2257,"children":2258},{"style":74},[2259],{"type":33,"value":1851},{"type":23,"tag":61,"props":2261,"children":2263},{"class":63,"line":2262},52,[2264,2269,2273,2277],{"type":23,"tag":61,"props":2265,"children":2266},{"style":1520},[2267],{"type":33,"value":2268},"    \"optimize-autoloader\"",{"type":23,"tag":61,"props":2270,"children":2271},{"style":74},[2272],{"type":33,"value":104},{"type":23,"tag":61,"props":2274,"children":2275},{"style":1832},[2276],{"type":33,"value":2183},{"type":23,"tag":61,"props":2278,"children":2279},{"style":74},[2280],{"type":33,"value":1538},{"type":23,"tag":61,"props":2282,"children":2284},{"class":63,"line":2283},53,[2285,2290,2294],{"type":23,"tag":61,"props":2286,"children":2287},{"style":1520},[2288],{"type":33,"value":2289},"    \"sort-packages\"",{"type":23,"tag":61,"props":2291,"children":2292},{"style":74},[2293],{"type":33,"value":104},{"type":23,"tag":61,"props":2295,"children":2296},{"style":1832},[2297],{"type":33,"value":1835},{"type":23,"tag":61,"props":2299,"children":2301},{"class":63,"line":2300},54,[2302],{"type":23,"tag":61,"props":2303,"children":2304},{"style":74},[2305],{"type":33,"value":1742},{"type":23,"tag":61,"props":2307,"children":2309},{"class":63,"line":2308},55,[2310,2315],{"type":23,"tag":61,"props":2311,"children":2312},{"style":1520},[2313],{"type":33,"value":2314},"  \"scripts\"",{"type":23,"tag":61,"props":2316,"children":2317},{"style":74},[2318],{"type":33,"value":1593},{"type":23,"tag":61,"props":2320,"children":2322},{"class":63,"line":2321},56,[2323,2328],{"type":23,"tag":61,"props":2324,"children":2325},{"style":1520},[2326],{"type":33,"value":2327},"    \"auto-scripts\"",{"type":23,"tag":61,"props":2329,"children":2330},{"style":74},[2331],{"type":33,"value":1593},{"type":23,"tag":61,"props":2333,"children":2335},{"class":63,"line":2334},57,[2336,2341,2345],{"type":23,"tag":61,"props":2337,"children":2338},{"style":1520},[2339],{"type":33,"value":2340},"      \"assets:install\"",{"type":23,"tag":61,"props":2342,"children":2343},{"style":74},[2344],{"type":33,"value":104},{"type":23,"tag":61,"props":2346,"children":2347},{"style":1530},[2348],{"type":33,"value":2349},"\"symfony-cmd\"\n",{"type":23,"tag":61,"props":2351,"children":2353},{"class":63,"line":2352},58,[2354],{"type":23,"tag":61,"props":2355,"children":2356},{"style":74},[2357],{"type":33,"value":1851},{"type":23,"tag":61,"props":2359,"children":2361},{"class":63,"line":2360},59,[2362,2367],{"type":23,"tag":61,"props":2363,"children":2364},{"style":1520},[2365],{"type":33,"value":2366},"    \"post-install-cmd\"",{"type":23,"tag":61,"props":2368,"children":2369},{"style":74},[2370],{"type":33,"value":1755},{"type":23,"tag":61,"props":2372,"children":2374},{"class":63,"line":2373},60,[2375],{"type":23,"tag":61,"props":2376,"children":2377},{"style":1530},[2378],{"type":33,"value":2379},"      \"@auto-scripts\"\n",{"type":23,"tag":61,"props":2381,"children":2383},{"class":63,"line":2382},61,[2384],{"type":23,"tag":61,"props":2385,"children":2386},{"style":74},[2387],{"type":33,"value":2388},"    ],\n",{"type":23,"tag":61,"props":2390,"children":2392},{"class":63,"line":2391},62,[2393,2398],{"type":23,"tag":61,"props":2394,"children":2395},{"style":1520},[2396],{"type":33,"value":2397},"    \"post-update-cmd\"",{"type":23,"tag":61,"props":2399,"children":2400},{"style":74},[2401],{"type":33,"value":1755},{"type":23,"tag":61,"props":2403,"children":2405},{"class":63,"line":2404},63,[2406],{"type":23,"tag":61,"props":2407,"children":2408},{"style":1530},[2409],{"type":33,"value":2379},{"type":23,"tag":61,"props":2411,"children":2413},{"class":63,"line":2412},64,[2414],{"type":23,"tag":61,"props":2415,"children":2416},{"style":74},[2417],{"type":33,"value":2418},"    ]\n",{"type":23,"tag":61,"props":2420,"children":2422},{"class":63,"line":2421},65,[2423],{"type":23,"tag":61,"props":2424,"children":2425},{"style":74},[2426],{"type":33,"value":1742},{"type":23,"tag":61,"props":2428,"children":2430},{"class":63,"line":2429},66,[2431,2436],{"type":23,"tag":61,"props":2432,"children":2433},{"style":1520},[2434],{"type":33,"value":2435},"  \"extra\"",{"type":23,"tag":61,"props":2437,"children":2438},{"style":74},[2439],{"type":33,"value":1593},{"type":23,"tag":61,"props":2441,"children":2443},{"class":63,"line":2442},67,[2444,2449],{"type":23,"tag":61,"props":2445,"children":2446},{"style":1520},[2447],{"type":33,"value":2448},"    \"symfony\"",{"type":23,"tag":61,"props":2450,"children":2451},{"style":74},[2452],{"type":33,"value":1593},{"type":23,"tag":61,"props":2454,"children":2456},{"class":63,"line":2455},68,[2457,2462,2466,2470],{"type":23,"tag":61,"props":2458,"children":2459},{"style":1520},[2460],{"type":33,"value":2461},"      \"allow-contrib\"",{"type":23,"tag":61,"props":2463,"children":2464},{"style":74},[2465],{"type":33,"value":104},{"type":23,"tag":61,"props":2467,"children":2468},{"style":1832},[2469],{"type":33,"value":2183},{"type":23,"tag":61,"props":2471,"children":2472},{"style":74},[2473],{"type":33,"value":1538},{"type":23,"tag":61,"props":2475,"children":2477},{"class":63,"line":2476},69,[2478,2483],{"type":23,"tag":61,"props":2479,"children":2480},{"style":1520},[2481],{"type":33,"value":2482},"      \"endpoint\"",{"type":23,"tag":61,"props":2484,"children":2485},{"style":74},[2486],{"type":33,"value":1755},{"type":23,"tag":61,"props":2488,"children":2490},{"class":63,"line":2489},70,[2491,2496],{"type":23,"tag":61,"props":2492,"children":2493},{"style":1530},[2494],{"type":33,"value":2495},"        \"https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json\"",{"type":23,"tag":61,"props":2497,"children":2498},{"style":74},[2499],{"type":33,"value":1538},{"type":23,"tag":61,"props":2501,"children":2503},{"class":63,"line":2502},71,[2504],{"type":23,"tag":61,"props":2505,"children":2506},{"style":1530},[2507],{"type":33,"value":2508},"        \"flex://defaults\"\n",{"type":23,"tag":61,"props":2510,"children":2512},{"class":63,"line":2511},72,[2513],{"type":23,"tag":61,"props":2514,"children":2515},{"style":74},[2516],{"type":33,"value":2517},"      ]\n",{"type":23,"tag":61,"props":2519,"children":2521},{"class":63,"line":2520},73,[2522],{"type":23,"tag":61,"props":2523,"children":2524},{"style":74},[2525],{"type":33,"value":2085},{"type":23,"tag":61,"props":2527,"children":2529},{"class":63,"line":2528},74,[2530],{"type":23,"tag":61,"props":2531,"children":2532},{"style":74},[2533],{"type":33,"value":2534},"  }\n",{"type":23,"tag":61,"props":2536,"children":2538},{"class":63,"line":2537},75,[2539],{"type":23,"tag":61,"props":2540,"children":2541},{"style":74},[2542],{"type":33,"value":2543},"}\n",{"type":23,"tag":24,"props":2545,"children":2546},{},[2547],{"type":33,"value":2548},"and require it with",{"type":23,"tag":43,"props":2550,"children":2554},{"className":2551,"code":2552,"language":2553,"meta":7,"style":7},"language-shell shiki shiki-themes github-dark github-dark monokai","composer req acme/sample-plugin\n","shell",[2555],{"type":23,"tag":57,"props":2556,"children":2557},{"__ignoreMap":7},[2558],{"type":23,"tag":61,"props":2559,"children":2560},{"class":63,"line":64},[2561,2566,2571],{"type":23,"tag":61,"props":2562,"children":2564},{"style":2563},"--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E",[2565],{"type":33,"value":1447},{"type":23,"tag":61,"props":2567,"children":2568},{"style":107},[2569],{"type":33,"value":2570}," req",{"type":23,"tag":61,"props":2572,"children":2573},{"style":107},[2574],{"type":33,"value":2575}," acme/sample-plugin\n",{"type":23,"tag":2577,"props":2578,"children":2580},"v-alert",{"type":2579},"error",[2581],{"type":23,"tag":24,"props":2582,"children":2583},{},[2584],{"type":33,"value":2585},"Could not find a version of package acme/sample-plugin matching your minimum-stability (stable).\nRequire it with an explicit version constraint allowing its desired stability.",{"type":23,"tag":1056,"props":2587,"children":2588},{},[],{"type":23,"tag":24,"props":2590,"children":2591},{},[2592,2594,2600],{"type":33,"value":2593},"Yes... this is the downside. We need to use ",{"type":23,"tag":57,"props":2595,"children":2597},{"className":2596},[],[2598],{"type":33,"value":2599},"dev-master",{"type":33,"value":2601}," as a version",{"type":23,"tag":43,"props":2603,"children":2605},{"className":2551,"code":2604,"language":2553,"meta":7,"style":7},"composer req acme/sample-plugin:dev-master\n",[2606],{"type":23,"tag":57,"props":2607,"children":2608},{"__ignoreMap":7},[2609],{"type":23,"tag":61,"props":2610,"children":2611},{"class":63,"line":64},[2612,2616,2620],{"type":23,"tag":61,"props":2613,"children":2614},{"style":2563},[2615],{"type":33,"value":1447},{"type":23,"tag":61,"props":2617,"children":2618},{"style":107},[2619],{"type":33,"value":2570},{"type":23,"tag":61,"props":2621,"children":2622},{"style":107},[2623],{"type":33,"value":2624}," acme/sample-plugin:dev-master\n",{"type":23,"tag":43,"props":2626,"children":2630},{"className":2627,"code":2628,"language":2629,"meta":7,"style":7},"language-output shiki shiki-themes github-dark github-dark monokai","./composer.json has been updated\nRunning composer update acme/sample-plugin\nLoading composer repositories with package information                                                                \nUpdating dependencies                                 \nLock file operations: 1 install, 0 updates, 0 removals\n  - Locking acme/sample-plugin (dev-master 294414d)\nWriting lock file\nInstalling dependencies from lock file (including require-dev)\nPackage operations: 1 install, 0 updates, 0 removals\n  - Syncing acme/sample-plugin (dev-master 294414d) into cache\n  - Installing acme/sample-plugin (dev-master 294414d): Cloning 294414deb2 from cache\nGenerating optimized autoload files\n\nRun composer recipes at any time to see the status of your Symfony recipes.\n\nExecuting script assets:install [OK]\n","output",[2631],{"type":23,"tag":57,"props":2632,"children":2633},{"__ignoreMap":7},[2634,2642,2650,2658,2666,2674,2682,2690,2698,2706,2714,2722,2730,2737,2745,2752],{"type":23,"tag":61,"props":2635,"children":2636},{"class":63,"line":64},[2637],{"type":23,"tag":61,"props":2638,"children":2639},{},[2640],{"type":33,"value":2641},"./composer.json has been updated\n",{"type":23,"tag":61,"props":2643,"children":2644},{"class":63,"line":80},[2645],{"type":23,"tag":61,"props":2646,"children":2647},{},[2648],{"type":33,"value":2649},"Running composer update acme/sample-plugin\n",{"type":23,"tag":61,"props":2651,"children":2652},{"class":63,"line":93},[2653],{"type":23,"tag":61,"props":2654,"children":2655},{},[2656],{"type":33,"value":2657},"Loading composer repositories with package information                                                                \n",{"type":23,"tag":61,"props":2659,"children":2660},{"class":63,"line":113},[2661],{"type":23,"tag":61,"props":2662,"children":2663},{},[2664],{"type":33,"value":2665},"Updating dependencies                                 \n",{"type":23,"tag":61,"props":2667,"children":2668},{"class":63,"line":48},[2669],{"type":23,"tag":61,"props":2670,"children":2671},{},[2672],{"type":33,"value":2673},"Lock file operations: 1 install, 0 updates, 0 removals\n",{"type":23,"tag":61,"props":2675,"children":2676},{"class":63,"line":49},[2677],{"type":23,"tag":61,"props":2678,"children":2679},{},[2680],{"type":33,"value":2681},"  - Locking acme/sample-plugin (dev-master 294414d)\n",{"type":23,"tag":61,"props":2683,"children":2684},{"class":63,"line":50},[2685],{"type":23,"tag":61,"props":2686,"children":2687},{},[2688],{"type":33,"value":2689},"Writing lock file\n",{"type":23,"tag":61,"props":2691,"children":2692},{"class":63,"line":51},[2693],{"type":23,"tag":61,"props":2694,"children":2695},{},[2696],{"type":33,"value":2697},"Installing dependencies from lock file (including require-dev)\n",{"type":23,"tag":61,"props":2699,"children":2700},{"class":63,"line":52},[2701],{"type":23,"tag":61,"props":2702,"children":2703},{},[2704],{"type":33,"value":2705},"Package operations: 1 install, 0 updates, 0 removals\n",{"type":23,"tag":61,"props":2707,"children":2708},{"class":63,"line":715},[2709],{"type":23,"tag":61,"props":2710,"children":2711},{},[2712],{"type":33,"value":2713},"  - Syncing acme/sample-plugin (dev-master 294414d) into cache\n",{"type":23,"tag":61,"props":2715,"children":2716},{"class":63,"line":728},[2717],{"type":23,"tag":61,"props":2718,"children":2719},{},[2720],{"type":33,"value":2721},"  - Installing acme/sample-plugin (dev-master 294414d): Cloning 294414deb2 from cache\n",{"type":23,"tag":61,"props":2723,"children":2724},{"class":63,"line":741},[2725],{"type":23,"tag":61,"props":2726,"children":2727},{},[2728],{"type":33,"value":2729},"Generating optimized autoload files\n",{"type":23,"tag":61,"props":2731,"children":2732},{"class":63,"line":754},[2733],{"type":23,"tag":61,"props":2734,"children":2735},{"emptyLinePlaceholder":784},[2736],{"type":33,"value":787},{"type":23,"tag":61,"props":2738,"children":2739},{"class":63,"line":767},[2740],{"type":23,"tag":61,"props":2741,"children":2742},{},[2743],{"type":33,"value":2744},"Run composer recipes at any time to see the status of your Symfony recipes.\n",{"type":23,"tag":61,"props":2746,"children":2747},{"class":63,"line":780},[2748],{"type":23,"tag":61,"props":2749,"children":2750},{"emptyLinePlaceholder":784},[2751],{"type":33,"value":787},{"type":23,"tag":61,"props":2753,"children":2754},{"class":63,"line":790},[2755],{"type":23,"tag":61,"props":2756,"children":2757},{},[2758],{"type":33,"value":2759},"Executing script assets:install [OK]\n",{"type":23,"tag":24,"props":2761,"children":2762},{},[2763,2765,2770],{"type":33,"value":2764},"Composer will use ",{"type":23,"tag":57,"props":2766,"children":2768},{"className":2767},[],[2769],{"type":33,"value":296},{"type":33,"value":2771}," to clone our repo and use the default branch and the commit hash to track the release.",{"type":23,"tag":24,"props":2773,"children":2774},{},[2775],{"type":33,"value":2776},"This works, but we can do better.",{"type":23,"tag":990,"props":2778,"children":2780},{"id":2779},"git-tags",[2781],{"type":33,"value":2782},"Git tags",{"type":23,"tag":24,"props":2784,"children":2785},{},[2786,2788,2794],{"type":33,"value":2787},"Let's tag our plugin with ",{"type":23,"tag":57,"props":2789,"children":2791},{"className":2790},[],[2792],{"type":33,"value":2793},"v1.0.0",{"type":33,"value":306},{"type":23,"tag":24,"props":2796,"children":2797},{},[2798,2800,2806,2808,2814],{"type":33,"value":2799},"Make sure to set the ",{"type":23,"tag":57,"props":2801,"children":2803},{"className":2802},[],[2804],{"type":33,"value":2805},"version",{"type":33,"value":2807}," in ",{"type":23,"tag":57,"props":2809,"children":2811},{"className":2810},[],[2812],{"type":33,"value":2813},"composer.json",{"type":33,"value":306},{"type":23,"tag":43,"props":2816,"children":2820},{"className":1495,"code":2817,"filename":2818,"highlights":2819,"language":1353,"meta":7,"style":7},"{\n    \"name\": \"acme/sample-plugin\",\n    \"description\": \"acme/sample-plugin\",\n    \"type\": \"shopware-platform-plugin\",\n    \"version\": \"1.0.0\",\n    \"license\": \"MIT\",\n    \"require\": {\n        \"shopware/core\": \"~6.6.0\"\n    },\n    \"extra\": {\n        \"shopware-plugin-class\": \"Acme\\\\SamplePlugin\",\n        \"label\": {\n            \"de-DE\": \"Skeleton plugin\",\n            \"en-GB\": \"Skeleton plugin\"\n        }\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Acme\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Acme\\\\Tests\\\\\": \"tests/\"\n        }\n    }\n}\n\n","\u003Cplugin-root>/composer.json",[48],[2821],{"type":23,"tag":57,"props":2822,"children":2823},{"__ignoreMap":7},[2824,2831,2852,2872,2893,2915,2935,2947,2964,2971,2983,3013,3025,3046,3063,3071,3078,3090,3102,3126,3133,3140,3152,3163,3196,3203,3210],{"type":23,"tag":61,"props":2825,"children":2826},{"class":63,"line":64},[2827],{"type":23,"tag":61,"props":2828,"children":2829},{"style":74},[2830],{"type":33,"value":1514},{"type":23,"tag":61,"props":2832,"children":2833},{"class":63,"line":80},[2834,2839,2843,2848],{"type":23,"tag":61,"props":2835,"children":2836},{"style":1520},[2837],{"type":33,"value":2838},"    \"name\"",{"type":23,"tag":61,"props":2840,"children":2841},{"style":74},[2842],{"type":33,"value":104},{"type":23,"tag":61,"props":2844,"children":2845},{"style":1530},[2846],{"type":33,"value":2847},"\"acme/sample-plugin\"",{"type":23,"tag":61,"props":2849,"children":2850},{"style":74},[2851],{"type":33,"value":1538},{"type":23,"tag":61,"props":2853,"children":2854},{"class":63,"line":93},[2855,2860,2864,2868],{"type":23,"tag":61,"props":2856,"children":2857},{"style":1520},[2858],{"type":33,"value":2859},"    \"description\"",{"type":23,"tag":61,"props":2861,"children":2862},{"style":74},[2863],{"type":33,"value":104},{"type":23,"tag":61,"props":2865,"children":2866},{"style":1530},[2867],{"type":33,"value":2847},{"type":23,"tag":61,"props":2869,"children":2870},{"style":74},[2871],{"type":33,"value":1538},{"type":23,"tag":61,"props":2873,"children":2874},{"class":63,"line":113},[2875,2880,2884,2889],{"type":23,"tag":61,"props":2876,"children":2877},{"style":1520},[2878],{"type":33,"value":2879},"    \"type\"",{"type":23,"tag":61,"props":2881,"children":2882},{"style":74},[2883],{"type":33,"value":104},{"type":23,"tag":61,"props":2885,"children":2886},{"style":1530},[2887],{"type":33,"value":2888},"\"shopware-platform-plugin\"",{"type":23,"tag":61,"props":2890,"children":2891},{"style":74},[2892],{"type":33,"value":1538},{"type":23,"tag":61,"props":2894,"children":2896},{"class":2895,"line":48},[63,127],[2897,2902,2906,2911],{"type":23,"tag":61,"props":2898,"children":2899},{"style":1520},[2900],{"type":33,"value":2901},"    \"version\"",{"type":23,"tag":61,"props":2903,"children":2904},{"style":74},[2905],{"type":33,"value":104},{"type":23,"tag":61,"props":2907,"children":2908},{"style":1530},[2909],{"type":33,"value":2910},"\"1.0.0\"",{"type":23,"tag":61,"props":2912,"children":2913},{"style":74},[2914],{"type":33,"value":1538},{"type":23,"tag":61,"props":2916,"children":2917},{"class":63,"line":49},[2918,2923,2927,2931],{"type":23,"tag":61,"props":2919,"children":2920},{"style":1520},[2921],{"type":33,"value":2922},"    \"license\"",{"type":23,"tag":61,"props":2924,"children":2925},{"style":74},[2926],{"type":33,"value":104},{"type":23,"tag":61,"props":2928,"children":2929},{"style":1530},[2930],{"type":33,"value":1555},{"type":23,"tag":61,"props":2932,"children":2933},{"style":74},[2934],{"type":33,"value":1538},{"type":23,"tag":61,"props":2936,"children":2937},{"class":63,"line":50},[2938,2943],{"type":23,"tag":61,"props":2939,"children":2940},{"style":1520},[2941],{"type":33,"value":2942},"    \"require\"",{"type":23,"tag":61,"props":2944,"children":2945},{"style":74},[2946],{"type":33,"value":1593},{"type":23,"tag":61,"props":2948,"children":2949},{"class":63,"line":51},[2950,2955,2959],{"type":23,"tag":61,"props":2951,"children":2952},{"style":1520},[2953],{"type":33,"value":2954},"        \"shopware/core\"",{"type":23,"tag":61,"props":2956,"children":2957},{"style":74},[2958],{"type":33,"value":104},{"type":23,"tag":61,"props":2960,"children":2961},{"style":1530},[2962],{"type":33,"value":2963},"\"~6.6.0\"\n",{"type":23,"tag":61,"props":2965,"children":2966},{"class":63,"line":52},[2967],{"type":23,"tag":61,"props":2968,"children":2969},{"style":74},[2970],{"type":33,"value":1851},{"type":23,"tag":61,"props":2972,"children":2973},{"class":63,"line":715},[2974,2979],{"type":23,"tag":61,"props":2975,"children":2976},{"style":1520},[2977],{"type":33,"value":2978},"    \"extra\"",{"type":23,"tag":61,"props":2980,"children":2981},{"style":74},[2982],{"type":33,"value":1593},{"type":23,"tag":61,"props":2984,"children":2985},{"class":63,"line":728},[2986,2991,2995,3000,3004,3009],{"type":23,"tag":61,"props":2987,"children":2988},{"style":1520},[2989],{"type":33,"value":2990},"        \"shopware-plugin-class\"",{"type":23,"tag":61,"props":2992,"children":2993},{"style":74},[2994],{"type":33,"value":104},{"type":23,"tag":61,"props":2996,"children":2997},{"style":1530},[2998],{"type":33,"value":2999},"\"Acme",{"type":23,"tag":61,"props":3001,"children":3002},{"style":1832},[3003],{"type":33,"value":2135},{"type":23,"tag":61,"props":3005,"children":3006},{"style":1530},[3007],{"type":33,"value":3008},"SamplePlugin\"",{"type":23,"tag":61,"props":3010,"children":3011},{"style":74},[3012],{"type":33,"value":1538},{"type":23,"tag":61,"props":3014,"children":3015},{"class":63,"line":741},[3016,3021],{"type":23,"tag":61,"props":3017,"children":3018},{"style":1520},[3019],{"type":33,"value":3020},"        \"label\"",{"type":23,"tag":61,"props":3022,"children":3023},{"style":74},[3024],{"type":33,"value":1593},{"type":23,"tag":61,"props":3026,"children":3027},{"class":63,"line":754},[3028,3033,3037,3042],{"type":23,"tag":61,"props":3029,"children":3030},{"style":1520},[3031],{"type":33,"value":3032},"            \"de-DE\"",{"type":23,"tag":61,"props":3034,"children":3035},{"style":74},[3036],{"type":33,"value":104},{"type":23,"tag":61,"props":3038,"children":3039},{"style":1530},[3040],{"type":33,"value":3041},"\"Skeleton plugin\"",{"type":23,"tag":61,"props":3043,"children":3044},{"style":74},[3045],{"type":33,"value":1538},{"type":23,"tag":61,"props":3047,"children":3048},{"class":63,"line":767},[3049,3054,3058],{"type":23,"tag":61,"props":3050,"children":3051},{"style":1520},[3052],{"type":33,"value":3053},"            \"en-GB\"",{"type":23,"tag":61,"props":3055,"children":3056},{"style":74},[3057],{"type":33,"value":104},{"type":23,"tag":61,"props":3059,"children":3060},{"style":1530},[3061],{"type":33,"value":3062},"\"Skeleton plugin\"\n",{"type":23,"tag":61,"props":3064,"children":3065},{"class":63,"line":780},[3066],{"type":23,"tag":61,"props":3067,"children":3068},{"style":74},[3069],{"type":33,"value":3070},"        }\n",{"type":23,"tag":61,"props":3072,"children":3073},{"class":63,"line":790},[3074],{"type":23,"tag":61,"props":3075,"children":3076},{"style":74},[3077],{"type":33,"value":1851},{"type":23,"tag":61,"props":3079,"children":3080},{"class":63,"line":803},[3081,3086],{"type":23,"tag":61,"props":3082,"children":3083},{"style":1520},[3084],{"type":33,"value":3085},"    \"autoload\"",{"type":23,"tag":61,"props":3087,"children":3088},{"style":74},[3089],{"type":33,"value":1593},{"type":23,"tag":61,"props":3091,"children":3092},{"class":63,"line":816},[3093,3098],{"type":23,"tag":61,"props":3094,"children":3095},{"style":1520},[3096],{"type":33,"value":3097},"        \"psr-4\"",{"type":23,"tag":61,"props":3099,"children":3100},{"style":74},[3101],{"type":33,"value":1593},{"type":23,"tag":61,"props":3103,"children":3104},{"class":63,"line":825},[3105,3110,3114,3118,3122],{"type":23,"tag":61,"props":3106,"children":3107},{"style":1520},[3108],{"type":33,"value":3109},"            \"Acme",{"type":23,"tag":61,"props":3111,"children":3112},{"style":2132},[3113],{"type":33,"value":2135},{"type":23,"tag":61,"props":3115,"children":3116},{"style":1520},[3117],{"type":33,"value":2140},{"type":23,"tag":61,"props":3119,"children":3120},{"style":74},[3121],{"type":33,"value":104},{"type":23,"tag":61,"props":3123,"children":3124},{"style":1530},[3125],{"type":33,"value":2149},{"type":23,"tag":61,"props":3127,"children":3128},{"class":63,"line":838},[3129],{"type":23,"tag":61,"props":3130,"children":3131},{"style":74},[3132],{"type":33,"value":3070},{"type":23,"tag":61,"props":3134,"children":3135},{"class":63,"line":851},[3136],{"type":23,"tag":61,"props":3137,"children":3138},{"style":74},[3139],{"type":33,"value":1851},{"type":23,"tag":61,"props":3141,"children":3142},{"class":63,"line":864},[3143,3148],{"type":23,"tag":61,"props":3144,"children":3145},{"style":1520},[3146],{"type":33,"value":3147},"    \"autoload-dev\"",{"type":23,"tag":61,"props":3149,"children":3150},{"style":74},[3151],{"type":33,"value":1593},{"type":23,"tag":61,"props":3153,"children":3154},{"class":63,"line":872},[3155,3159],{"type":23,"tag":61,"props":3156,"children":3157},{"style":1520},[3158],{"type":33,"value":3097},{"type":23,"tag":61,"props":3160,"children":3161},{"style":74},[3162],{"type":33,"value":1593},{"type":23,"tag":61,"props":3164,"children":3165},{"class":63,"line":885},[3166,3170,3174,3179,3183,3187,3191],{"type":23,"tag":61,"props":3167,"children":3168},{"style":1520},[3169],{"type":33,"value":3109},{"type":23,"tag":61,"props":3171,"children":3172},{"style":2132},[3173],{"type":33,"value":2135},{"type":23,"tag":61,"props":3175,"children":3176},{"style":1520},[3177],{"type":33,"value":3178},"Tests",{"type":23,"tag":61,"props":3180,"children":3181},{"style":2132},[3182],{"type":33,"value":2135},{"type":23,"tag":61,"props":3184,"children":3185},{"style":1520},[3186],{"type":33,"value":2140},{"type":23,"tag":61,"props":3188,"children":3189},{"style":74},[3190],{"type":33,"value":104},{"type":23,"tag":61,"props":3192,"children":3193},{"style":1530},[3194],{"type":33,"value":3195},"\"tests/\"\n",{"type":23,"tag":61,"props":3197,"children":3198},{"class":63,"line":898},[3199],{"type":23,"tag":61,"props":3200,"children":3201},{"style":74},[3202],{"type":33,"value":3070},{"type":23,"tag":61,"props":3204,"children":3205},{"class":63,"line":911},[3206],{"type":23,"tag":61,"props":3207,"children":3208},{"style":74},[3209],{"type":33,"value":2085},{"type":23,"tag":61,"props":3211,"children":3212},{"class":63,"line":924},[3213],{"type":23,"tag":61,"props":3214,"children":3215},{"style":74},[3216],{"type":33,"value":2543},{"type":23,"tag":43,"props":3218,"children":3220},{"className":2551,"code":3219,"language":2553,"meta":7,"style":7},"git tag v1.0.0\ngit push --tags\n",[3221],{"type":23,"tag":57,"props":3222,"children":3223},{"__ignoreMap":7},[3224,3241],{"type":23,"tag":61,"props":3225,"children":3226},{"class":63,"line":64},[3227,3231,3236],{"type":23,"tag":61,"props":3228,"children":3229},{"style":2563},[3230],{"type":33,"value":296},{"type":23,"tag":61,"props":3232,"children":3233},{"style":107},[3234],{"type":33,"value":3235}," tag",{"type":23,"tag":61,"props":3237,"children":3238},{"style":107},[3239],{"type":33,"value":3240}," v1.0.0\n",{"type":23,"tag":61,"props":3242,"children":3243},{"class":63,"line":80},[3244,3248,3253],{"type":23,"tag":61,"props":3245,"children":3246},{"style":2563},[3247],{"type":33,"value":296},{"type":23,"tag":61,"props":3249,"children":3250},{"style":107},[3251],{"type":33,"value":3252}," push",{"type":23,"tag":61,"props":3254,"children":3255},{"style":1832},[3256],{"type":33,"value":3257}," --tags\n",{"type":23,"tag":24,"props":3259,"children":3260},{},[3261],{"type":33,"value":3262},"Now this will work:",{"type":23,"tag":43,"props":3264,"children":3265},{"className":2551,"code":2552,"language":2553,"meta":7,"style":7},[3266],{"type":23,"tag":57,"props":3267,"children":3268},{"__ignoreMap":7},[3269],{"type":23,"tag":61,"props":3270,"children":3271},{"class":63,"line":64},[3272,3276,3280],{"type":23,"tag":61,"props":3273,"children":3274},{"style":2563},[3275],{"type":33,"value":1447},{"type":23,"tag":61,"props":3277,"children":3278},{"style":107},[3279],{"type":33,"value":2570},{"type":23,"tag":61,"props":3281,"children":3282},{"style":107},[3283],{"type":33,"value":2575},{"type":23,"tag":43,"props":3285,"children":3289},{"className":3286,"code":3287,"language":3288,"meta":7,"style":7},"language-terminaloutput shiki shiki-themes github-dark github-dark monokai","./composer.json has been updated                                                                                                            \nRunning composer update acme/sample-plugin\nLoading composer repositories with package information\nUpdating dependencies\nLock file operations: 1 install, 0 updates, 0 removals\n  - Locking acme/sample-plugin (1.0.0)\nWriting lock file\nInstalling dependencies from lock file (including require-dev)\nPackage operations: 1 install, 0 updates, 0 removals\n  - Syncing acme/sample-plugin (1.0.0) into cache\n  - Installing acme/sample-plugin (1.0.0): Cloning 294414deb2 from cache\nGenerating optimized autoload files\n\nRun composer recipes at any time to see the status of your Symfony recipes.\n\nExecuting script assets:install [OK]\n\nUsing version ^1.0 for acme/sample-plugin\n","terminaloutput",[3290],{"type":23,"tag":57,"props":3291,"children":3292},{"__ignoreMap":7},[3293,3301,3308,3316,3324,3331,3339,3346,3353,3360,3368,3376,3383,3390,3397,3404,3411,3418],{"type":23,"tag":61,"props":3294,"children":3295},{"class":63,"line":64},[3296],{"type":23,"tag":61,"props":3297,"children":3298},{},[3299],{"type":33,"value":3300},"./composer.json has been updated                                                                                                            \n",{"type":23,"tag":61,"props":3302,"children":3303},{"class":63,"line":80},[3304],{"type":23,"tag":61,"props":3305,"children":3306},{},[3307],{"type":33,"value":2649},{"type":23,"tag":61,"props":3309,"children":3310},{"class":63,"line":93},[3311],{"type":23,"tag":61,"props":3312,"children":3313},{},[3314],{"type":33,"value":3315},"Loading composer repositories with package information\n",{"type":23,"tag":61,"props":3317,"children":3318},{"class":63,"line":113},[3319],{"type":23,"tag":61,"props":3320,"children":3321},{},[3322],{"type":33,"value":3323},"Updating dependencies\n",{"type":23,"tag":61,"props":3325,"children":3326},{"class":63,"line":48},[3327],{"type":23,"tag":61,"props":3328,"children":3329},{},[3330],{"type":33,"value":2673},{"type":23,"tag":61,"props":3332,"children":3333},{"class":63,"line":49},[3334],{"type":23,"tag":61,"props":3335,"children":3336},{},[3337],{"type":33,"value":3338},"  - Locking acme/sample-plugin (1.0.0)\n",{"type":23,"tag":61,"props":3340,"children":3341},{"class":63,"line":50},[3342],{"type":23,"tag":61,"props":3343,"children":3344},{},[3345],{"type":33,"value":2689},{"type":23,"tag":61,"props":3347,"children":3348},{"class":63,"line":51},[3349],{"type":23,"tag":61,"props":3350,"children":3351},{},[3352],{"type":33,"value":2697},{"type":23,"tag":61,"props":3354,"children":3355},{"class":63,"line":52},[3356],{"type":23,"tag":61,"props":3357,"children":3358},{},[3359],{"type":33,"value":2705},{"type":23,"tag":61,"props":3361,"children":3362},{"class":63,"line":715},[3363],{"type":23,"tag":61,"props":3364,"children":3365},{},[3366],{"type":33,"value":3367},"  - Syncing acme/sample-plugin (1.0.0) into cache\n",{"type":23,"tag":61,"props":3369,"children":3370},{"class":63,"line":728},[3371],{"type":23,"tag":61,"props":3372,"children":3373},{},[3374],{"type":33,"value":3375},"  - Installing acme/sample-plugin (1.0.0): Cloning 294414deb2 from cache\n",{"type":23,"tag":61,"props":3377,"children":3378},{"class":63,"line":741},[3379],{"type":23,"tag":61,"props":3380,"children":3381},{},[3382],{"type":33,"value":2729},{"type":23,"tag":61,"props":3384,"children":3385},{"class":63,"line":754},[3386],{"type":23,"tag":61,"props":3387,"children":3388},{"emptyLinePlaceholder":784},[3389],{"type":33,"value":787},{"type":23,"tag":61,"props":3391,"children":3392},{"class":63,"line":767},[3393],{"type":23,"tag":61,"props":3394,"children":3395},{},[3396],{"type":33,"value":2744},{"type":23,"tag":61,"props":3398,"children":3399},{"class":63,"line":780},[3400],{"type":23,"tag":61,"props":3401,"children":3402},{"emptyLinePlaceholder":784},[3403],{"type":33,"value":787},{"type":23,"tag":61,"props":3405,"children":3406},{"class":63,"line":790},[3407],{"type":23,"tag":61,"props":3408,"children":3409},{},[3410],{"type":33,"value":2759},{"type":23,"tag":61,"props":3412,"children":3413},{"class":63,"line":803},[3414],{"type":23,"tag":61,"props":3415,"children":3416},{"emptyLinePlaceholder":784},[3417],{"type":33,"value":787},{"type":23,"tag":61,"props":3419,"children":3420},{"class":63,"line":816},[3421],{"type":23,"tag":61,"props":3422,"children":3423},{},[3424],{"type":33,"value":3425},"Using version ^1.0 for acme/sample-plugin\n",{"type":23,"tag":24,"props":3427,"children":3428},{},[3429,3431,3436],{"type":33,"value":3430},"This is better, but we are still using ",{"type":23,"tag":57,"props":3432,"children":3434},{"className":3433},[],[3435],{"type":33,"value":296},{"type":33,"value":3437}," to fetch the plugin. We can do better.",{"type":23,"tag":990,"props":3439,"children":3441},{"id":3440},"gitlab-package-registry",[3442],{"type":33,"value":3443},"GitLab Package registry",{"type":23,"tag":24,"props":3445,"children":3446},{},[3447,3449,3454],{"type":33,"value":3448},"Here is where the GitLab part starts. For more details refer to the ",{"type":23,"tag":28,"props":3450,"children":3452},{"href":3451},"https://docs.gitlab.com/18.3/user/packages/composer_repository/",[3453],{"type":33,"value":1411},{"type":33,"value":306},{"type":23,"tag":24,"props":3456,"children":3457},{},[3458],{"type":33,"value":3459},"At this point, it doesn't matter if our project in public or not, because we will need to authenticate with the package registry anyway.",{"type":23,"tag":24,"props":3461,"children":3462},{},[3463,3465,3470],{"type":33,"value":3464},"Let's release our ",{"type":23,"tag":57,"props":3466,"children":3468},{"className":3467},[],[3469],{"type":33,"value":2793},{"type":33,"value":3471}," tag as a composer package.",{"type":23,"tag":43,"props":3473,"children":3475},{"className":2551,"code":3474,"language":2553,"meta":7,"style":7},"curl --fail-with-body --data tag=v1.0.0 \"https://__token__:\u003Cpersonal-access-token>@\u003CDOMAIN-NAME>/api/v4/projects/\u003Cproject_id>/packages/composer\"\n",[3476],{"type":23,"tag":57,"props":3477,"children":3478},{"__ignoreMap":7},[3479],{"type":23,"tag":61,"props":3480,"children":3481},{"class":63,"line":64},[3482,3487,3492,3497,3502],{"type":23,"tag":61,"props":3483,"children":3484},{"style":2563},[3485],{"type":33,"value":3486},"curl",{"type":23,"tag":61,"props":3488,"children":3489},{"style":1832},[3490],{"type":33,"value":3491}," --fail-with-body",{"type":23,"tag":61,"props":3493,"children":3494},{"style":1832},[3495],{"type":33,"value":3496}," --data",{"type":23,"tag":61,"props":3498,"children":3499},{"style":107},[3500],{"type":33,"value":3501}," tag=v1.0.0",{"type":23,"tag":61,"props":3503,"children":3504},{"style":107},[3505],{"type":33,"value":3506}," \"https://__token__:\u003Cpersonal-access-token>@\u003CDOMAIN-NAME>/api/v4/projects/\u003Cproject_id>/packages/composer\"\n",{"type":23,"tag":24,"props":3508,"children":3509},{},[3510],{"type":33,"value":3511},"Now we need to update the repository information:",{"type":23,"tag":43,"props":3513,"children":3516},{"className":1495,"code":3514,"filename":1497,"highlights":3515,"language":1353,"meta":7,"style":7},"{\n  \"name\": \"shopware/production\",\n  \"license\": \"MIT\",\n  \"type\": \"project\",\n  \"require\": {\n    \"composer-runtime-api\": \"^2.0\",\n    \"acme/sample-plugin\": \"^1.0\",\n    \"shopware/administration\": \"*\",\n    \"shopware/core\": \"6.6.10.2\",\n    \"shopware/elasticsearch\": \"*\",\n    \"shopware/storefront\": \"*\",\n    \"symfony/flex\": \"~2\"\n  },\n  \"repositories\": [\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/plugins/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/plugins/*/packages/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/static-plugins/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"composer\",\n      \"url\": \"https://\u003CDOMAIN-NAME>/api/v4/api/v4/group/\u003Cgroup_id>/-/packages/composer/packages.json\"\n    }\n  ],\n  \"autoload\": {\n    \"psr-4\": {\n      \"App\\\\\": \"src/\"\n    }\n  },\n  \"prefer-stable\": true,\n  \"config\": {\n    \"allow-plugins\": {\n      \"symfony/flex\": true,\n      \"symfony/runtime\": true\n    },\n    \"optimize-autoloader\": true,\n    \"sort-packages\": true\n  },\n  \"scripts\": {\n    \"auto-scripts\": {\n      \"assets:install\": \"symfony-cmd\"\n    },\n    \"post-install-cmd\": [\n      \"@auto-scripts\"\n    ],\n    \"post-update-cmd\": [\n      \"@auto-scripts\"\n    ]\n  },\n  \"extra\": {\n    \"symfony\": {\n      \"allow-contrib\": true,\n      \"endpoint\": [\n        \"https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json\",\n        \"flex://defaults\"\n      ]\n    }\n  }\n}\n",[1499,1500,1501,1502],[3517],{"type":23,"tag":57,"props":3518,"children":3519},{"__ignoreMap":7},[3520,3527,3546,3565,3584,3595,3614,3633,3652,3671,3690,3709,3724,3731,3742,3749,3768,3787,3798,3813,3820,3827,3834,3853,3872,3883,3898,3905,3912,3919,3938,3957,3968,3983,3990,3997,4005,4026,4043,4051,4058,4069,4080,4103,4110,4117,4136,4147,4158,4177,4192,4199,4218,4233,4240,4251,4262,4277,4284,4295,4302,4309,4320,4327,4334,4341,4352,4363,4382,4393,4404,4411,4418,4425,4432],{"type":23,"tag":61,"props":3521,"children":3522},{"class":63,"line":64},[3523],{"type":23,"tag":61,"props":3524,"children":3525},{"style":74},[3526],{"type":33,"value":1514},{"type":23,"tag":61,"props":3528,"children":3529},{"class":63,"line":80},[3530,3534,3538,3542],{"type":23,"tag":61,"props":3531,"children":3532},{"style":1520},[3533],{"type":33,"value":1523},{"type":23,"tag":61,"props":3535,"children":3536},{"style":74},[3537],{"type":33,"value":104},{"type":23,"tag":61,"props":3539,"children":3540},{"style":1530},[3541],{"type":33,"value":1533},{"type":23,"tag":61,"props":3543,"children":3544},{"style":74},[3545],{"type":33,"value":1538},{"type":23,"tag":61,"props":3547,"children":3548},{"class":63,"line":93},[3549,3553,3557,3561],{"type":23,"tag":61,"props":3550,"children":3551},{"style":1520},[3552],{"type":33,"value":1546},{"type":23,"tag":61,"props":3554,"children":3555},{"style":74},[3556],{"type":33,"value":104},{"type":23,"tag":61,"props":3558,"children":3559},{"style":1530},[3560],{"type":33,"value":1555},{"type":23,"tag":61,"props":3562,"children":3563},{"style":74},[3564],{"type":33,"value":1538},{"type":23,"tag":61,"props":3566,"children":3567},{"class":63,"line":113},[3568,3572,3576,3580],{"type":23,"tag":61,"props":3569,"children":3570},{"style":1520},[3571],{"type":33,"value":1567},{"type":23,"tag":61,"props":3573,"children":3574},{"style":74},[3575],{"type":33,"value":104},{"type":23,"tag":61,"props":3577,"children":3578},{"style":1530},[3579],{"type":33,"value":1576},{"type":23,"tag":61,"props":3581,"children":3582},{"style":74},[3583],{"type":33,"value":1538},{"type":23,"tag":61,"props":3585,"children":3586},{"class":63,"line":48},[3587,3591],{"type":23,"tag":61,"props":3588,"children":3589},{"style":1520},[3590],{"type":33,"value":1588},{"type":23,"tag":61,"props":3592,"children":3593},{"style":74},[3594],{"type":33,"value":1593},{"type":23,"tag":61,"props":3596,"children":3597},{"class":63,"line":49},[3598,3602,3606,3610],{"type":23,"tag":61,"props":3599,"children":3600},{"style":1520},[3601],{"type":33,"value":1601},{"type":23,"tag":61,"props":3603,"children":3604},{"style":74},[3605],{"type":33,"value":104},{"type":23,"tag":61,"props":3607,"children":3608},{"style":1530},[3609],{"type":33,"value":1610},{"type":23,"tag":61,"props":3611,"children":3612},{"style":74},[3613],{"type":33,"value":1538},{"type":23,"tag":61,"props":3615,"children":3616},{"class":63,"line":50},[3617,3621,3625,3629],{"type":23,"tag":61,"props":3618,"children":3619},{"style":1520},[3620],{"type":33,"value":1622},{"type":23,"tag":61,"props":3622,"children":3623},{"style":74},[3624],{"type":33,"value":104},{"type":23,"tag":61,"props":3626,"children":3627},{"style":1530},[3628],{"type":33,"value":1631},{"type":23,"tag":61,"props":3630,"children":3631},{"style":74},[3632],{"type":33,"value":1538},{"type":23,"tag":61,"props":3634,"children":3635},{"class":63,"line":51},[3636,3640,3644,3648],{"type":23,"tag":61,"props":3637,"children":3638},{"style":1520},[3639],{"type":33,"value":1643},{"type":23,"tag":61,"props":3641,"children":3642},{"style":74},[3643],{"type":33,"value":104},{"type":23,"tag":61,"props":3645,"children":3646},{"style":1530},[3647],{"type":33,"value":1652},{"type":23,"tag":61,"props":3649,"children":3650},{"style":74},[3651],{"type":33,"value":1538},{"type":23,"tag":61,"props":3653,"children":3654},{"class":63,"line":52},[3655,3659,3663,3667],{"type":23,"tag":61,"props":3656,"children":3657},{"style":1520},[3658],{"type":33,"value":1664},{"type":23,"tag":61,"props":3660,"children":3661},{"style":74},[3662],{"type":33,"value":104},{"type":23,"tag":61,"props":3664,"children":3665},{"style":1530},[3666],{"type":33,"value":1673},{"type":23,"tag":61,"props":3668,"children":3669},{"style":74},[3670],{"type":33,"value":1538},{"type":23,"tag":61,"props":3672,"children":3673},{"class":63,"line":715},[3674,3678,3682,3686],{"type":23,"tag":61,"props":3675,"children":3676},{"style":1520},[3677],{"type":33,"value":1685},{"type":23,"tag":61,"props":3679,"children":3680},{"style":74},[3681],{"type":33,"value":104},{"type":23,"tag":61,"props":3683,"children":3684},{"style":1530},[3685],{"type":33,"value":1652},{"type":23,"tag":61,"props":3687,"children":3688},{"style":74},[3689],{"type":33,"value":1538},{"type":23,"tag":61,"props":3691,"children":3692},{"class":63,"line":728},[3693,3697,3701,3705],{"type":23,"tag":61,"props":3694,"children":3695},{"style":1520},[3696],{"type":33,"value":1705},{"type":23,"tag":61,"props":3698,"children":3699},{"style":74},[3700],{"type":33,"value":104},{"type":23,"tag":61,"props":3702,"children":3703},{"style":1530},[3704],{"type":33,"value":1652},{"type":23,"tag":61,"props":3706,"children":3707},{"style":74},[3708],{"type":33,"value":1538},{"type":23,"tag":61,"props":3710,"children":3711},{"class":63,"line":741},[3712,3716,3720],{"type":23,"tag":61,"props":3713,"children":3714},{"style":1520},[3715],{"type":33,"value":1725},{"type":23,"tag":61,"props":3717,"children":3718},{"style":74},[3719],{"type":33,"value":104},{"type":23,"tag":61,"props":3721,"children":3722},{"style":1530},[3723],{"type":33,"value":1734},{"type":23,"tag":61,"props":3725,"children":3726},{"class":63,"line":754},[3727],{"type":23,"tag":61,"props":3728,"children":3729},{"style":74},[3730],{"type":33,"value":1742},{"type":23,"tag":61,"props":3732,"children":3733},{"class":63,"line":767},[3734,3738],{"type":23,"tag":61,"props":3735,"children":3736},{"style":1520},[3737],{"type":33,"value":1750},{"type":23,"tag":61,"props":3739,"children":3740},{"style":74},[3741],{"type":33,"value":1755},{"type":23,"tag":61,"props":3743,"children":3744},{"class":63,"line":780},[3745],{"type":23,"tag":61,"props":3746,"children":3747},{"style":74},[3748],{"type":33,"value":1763},{"type":23,"tag":61,"props":3750,"children":3751},{"class":63,"line":790},[3752,3756,3760,3764],{"type":23,"tag":61,"props":3753,"children":3754},{"style":1520},[3755],{"type":33,"value":1771},{"type":23,"tag":61,"props":3757,"children":3758},{"style":74},[3759],{"type":33,"value":104},{"type":23,"tag":61,"props":3761,"children":3762},{"style":1530},[3763],{"type":33,"value":1780},{"type":23,"tag":61,"props":3765,"children":3766},{"style":74},[3767],{"type":33,"value":1538},{"type":23,"tag":61,"props":3769,"children":3770},{"class":63,"line":803},[3771,3775,3779,3783],{"type":23,"tag":61,"props":3772,"children":3773},{"style":1520},[3774],{"type":33,"value":1792},{"type":23,"tag":61,"props":3776,"children":3777},{"style":74},[3778],{"type":33,"value":104},{"type":23,"tag":61,"props":3780,"children":3781},{"style":1530},[3782],{"type":33,"value":1801},{"type":23,"tag":61,"props":3784,"children":3785},{"style":74},[3786],{"type":33,"value":1538},{"type":23,"tag":61,"props":3788,"children":3789},{"class":63,"line":816},[3790,3794],{"type":23,"tag":61,"props":3791,"children":3792},{"style":1520},[3793],{"type":33,"value":1813},{"type":23,"tag":61,"props":3795,"children":3796},{"style":74},[3797],{"type":33,"value":1593},{"type":23,"tag":61,"props":3799,"children":3800},{"class":63,"line":825},[3801,3805,3809],{"type":23,"tag":61,"props":3802,"children":3803},{"style":1520},[3804],{"type":33,"value":1825},{"type":23,"tag":61,"props":3806,"children":3807},{"style":74},[3808],{"type":33,"value":104},{"type":23,"tag":61,"props":3810,"children":3811},{"style":1832},[3812],{"type":33,"value":1835},{"type":23,"tag":61,"props":3814,"children":3815},{"class":63,"line":838},[3816],{"type":23,"tag":61,"props":3817,"children":3818},{"style":74},[3819],{"type":33,"value":1843},{"type":23,"tag":61,"props":3821,"children":3822},{"class":63,"line":851},[3823],{"type":23,"tag":61,"props":3824,"children":3825},{"style":74},[3826],{"type":33,"value":1851},{"type":23,"tag":61,"props":3828,"children":3829},{"class":63,"line":864},[3830],{"type":23,"tag":61,"props":3831,"children":3832},{"style":74},[3833],{"type":33,"value":1763},{"type":23,"tag":61,"props":3835,"children":3836},{"class":63,"line":872},[3837,3841,3845,3849],{"type":23,"tag":61,"props":3838,"children":3839},{"style":1520},[3840],{"type":33,"value":1771},{"type":23,"tag":61,"props":3842,"children":3843},{"style":74},[3844],{"type":33,"value":104},{"type":23,"tag":61,"props":3846,"children":3847},{"style":1530},[3848],{"type":33,"value":1780},{"type":23,"tag":61,"props":3850,"children":3851},{"style":74},[3852],{"type":33,"value":1538},{"type":23,"tag":61,"props":3854,"children":3855},{"class":63,"line":885},[3856,3860,3864,3868],{"type":23,"tag":61,"props":3857,"children":3858},{"style":1520},[3859],{"type":33,"value":1792},{"type":23,"tag":61,"props":3861,"children":3862},{"style":74},[3863],{"type":33,"value":104},{"type":23,"tag":61,"props":3865,"children":3866},{"style":1530},[3867],{"type":33,"value":1893},{"type":23,"tag":61,"props":3869,"children":3870},{"style":74},[3871],{"type":33,"value":1538},{"type":23,"tag":61,"props":3873,"children":3874},{"class":63,"line":898},[3875,3879],{"type":23,"tag":61,"props":3876,"children":3877},{"style":1520},[3878],{"type":33,"value":1813},{"type":23,"tag":61,"props":3880,"children":3881},{"style":74},[3882],{"type":33,"value":1593},{"type":23,"tag":61,"props":3884,"children":3885},{"class":63,"line":911},[3886,3890,3894],{"type":23,"tag":61,"props":3887,"children":3888},{"style":1520},[3889],{"type":33,"value":1825},{"type":23,"tag":61,"props":3891,"children":3892},{"style":74},[3893],{"type":33,"value":104},{"type":23,"tag":61,"props":3895,"children":3896},{"style":1832},[3897],{"type":33,"value":1835},{"type":23,"tag":61,"props":3899,"children":3900},{"class":63,"line":924},[3901],{"type":23,"tag":61,"props":3902,"children":3903},{"style":74},[3904],{"type":33,"value":1843},{"type":23,"tag":61,"props":3906,"children":3907},{"class":63,"line":937},[3908],{"type":23,"tag":61,"props":3909,"children":3910},{"style":74},[3911],{"type":33,"value":1851},{"type":23,"tag":61,"props":3913,"children":3914},{"class":63,"line":1940},[3915],{"type":23,"tag":61,"props":3916,"children":3917},{"style":74},[3918],{"type":33,"value":1763},{"type":23,"tag":61,"props":3920,"children":3921},{"class":63,"line":1948},[3922,3926,3930,3934],{"type":23,"tag":61,"props":3923,"children":3924},{"style":1520},[3925],{"type":33,"value":1771},{"type":23,"tag":61,"props":3927,"children":3928},{"style":74},[3929],{"type":33,"value":104},{"type":23,"tag":61,"props":3931,"children":3932},{"style":1530},[3933],{"type":33,"value":1780},{"type":23,"tag":61,"props":3935,"children":3936},{"style":74},[3937],{"type":33,"value":1538},{"type":23,"tag":61,"props":3939,"children":3940},{"class":63,"line":1968},[3941,3945,3949,3953],{"type":23,"tag":61,"props":3942,"children":3943},{"style":1520},[3944],{"type":33,"value":1792},{"type":23,"tag":61,"props":3946,"children":3947},{"style":74},[3948],{"type":33,"value":104},{"type":23,"tag":61,"props":3950,"children":3951},{"style":1530},[3952],{"type":33,"value":1982},{"type":23,"tag":61,"props":3954,"children":3955},{"style":74},[3956],{"type":33,"value":1538},{"type":23,"tag":61,"props":3958,"children":3959},{"class":63,"line":1989},[3960,3964],{"type":23,"tag":61,"props":3961,"children":3962},{"style":1520},[3963],{"type":33,"value":1813},{"type":23,"tag":61,"props":3965,"children":3966},{"style":74},[3967],{"type":33,"value":1593},{"type":23,"tag":61,"props":3969,"children":3970},{"class":63,"line":2001},[3971,3975,3979],{"type":23,"tag":61,"props":3972,"children":3973},{"style":1520},[3974],{"type":33,"value":1825},{"type":23,"tag":61,"props":3976,"children":3977},{"style":74},[3978],{"type":33,"value":104},{"type":23,"tag":61,"props":3980,"children":3981},{"style":1832},[3982],{"type":33,"value":1835},{"type":23,"tag":61,"props":3984,"children":3985},{"class":63,"line":2017},[3986],{"type":23,"tag":61,"props":3987,"children":3988},{"style":74},[3989],{"type":33,"value":1843},{"type":23,"tag":61,"props":3991,"children":3992},{"class":63,"line":2025},[3993],{"type":23,"tag":61,"props":3994,"children":3995},{"style":74},[3996],{"type":33,"value":1851},{"type":23,"tag":61,"props":3998,"children":4000},{"class":3999,"line":1499},[63,127],[4001],{"type":23,"tag":61,"props":4002,"children":4003},{"style":74},[4004],{"type":33,"value":1763},{"type":23,"tag":61,"props":4006,"children":4008},{"class":4007,"line":1500},[63,127],[4009,4013,4017,4022],{"type":23,"tag":61,"props":4010,"children":4011},{"style":1520},[4012],{"type":33,"value":1771},{"type":23,"tag":61,"props":4014,"children":4015},{"style":74},[4016],{"type":33,"value":104},{"type":23,"tag":61,"props":4018,"children":4019},{"style":1530},[4020],{"type":33,"value":4021},"\"composer\"",{"type":23,"tag":61,"props":4023,"children":4024},{"style":74},[4025],{"type":33,"value":1538},{"type":23,"tag":61,"props":4027,"children":4029},{"class":4028,"line":1501},[63,127],[4030,4034,4038],{"type":23,"tag":61,"props":4031,"children":4032},{"style":1520},[4033],{"type":33,"value":1792},{"type":23,"tag":61,"props":4035,"children":4036},{"style":74},[4037],{"type":33,"value":104},{"type":23,"tag":61,"props":4039,"children":4040},{"style":1530},[4041],{"type":33,"value":4042},"\"https://\u003CDOMAIN-NAME>/api/v4/api/v4/group/\u003Cgroup_id>/-/packages/composer/packages.json\"\n",{"type":23,"tag":61,"props":4044,"children":4046},{"class":4045,"line":1502},[63,127],[4047],{"type":23,"tag":61,"props":4048,"children":4049},{"style":74},[4050],{"type":33,"value":2085},{"type":23,"tag":61,"props":4052,"children":4053},{"class":63,"line":2088},[4054],{"type":23,"tag":61,"props":4055,"children":4056},{"style":74},[4057],{"type":33,"value":2094},{"type":23,"tag":61,"props":4059,"children":4060},{"class":63,"line":2097},[4061,4065],{"type":23,"tag":61,"props":4062,"children":4063},{"style":1520},[4064],{"type":33,"value":2103},{"type":23,"tag":61,"props":4066,"children":4067},{"style":74},[4068],{"type":33,"value":1593},{"type":23,"tag":61,"props":4070,"children":4071},{"class":63,"line":2110},[4072,4076],{"type":23,"tag":61,"props":4073,"children":4074},{"style":1520},[4075],{"type":33,"value":2116},{"type":23,"tag":61,"props":4077,"children":4078},{"style":74},[4079],{"type":33,"value":1593},{"type":23,"tag":61,"props":4081,"children":4082},{"class":63,"line":2123},[4083,4087,4091,4095,4099],{"type":23,"tag":61,"props":4084,"children":4085},{"style":1520},[4086],{"type":33,"value":2129},{"type":23,"tag":61,"props":4088,"children":4089},{"style":2132},[4090],{"type":33,"value":2135},{"type":23,"tag":61,"props":4092,"children":4093},{"style":1520},[4094],{"type":33,"value":2140},{"type":23,"tag":61,"props":4096,"children":4097},{"style":74},[4098],{"type":33,"value":104},{"type":23,"tag":61,"props":4100,"children":4101},{"style":1530},[4102],{"type":33,"value":2149},{"type":23,"tag":61,"props":4104,"children":4105},{"class":63,"line":2152},[4106],{"type":23,"tag":61,"props":4107,"children":4108},{"style":74},[4109],{"type":33,"value":2085},{"type":23,"tag":61,"props":4111,"children":4112},{"class":63,"line":2160},[4113],{"type":23,"tag":61,"props":4114,"children":4115},{"style":74},[4116],{"type":33,"value":1742},{"type":23,"tag":61,"props":4118,"children":4119},{"class":63,"line":2168},[4120,4124,4128,4132],{"type":23,"tag":61,"props":4121,"children":4122},{"style":1520},[4123],{"type":33,"value":2174},{"type":23,"tag":61,"props":4125,"children":4126},{"style":74},[4127],{"type":33,"value":104},{"type":23,"tag":61,"props":4129,"children":4130},{"style":1832},[4131],{"type":33,"value":2183},{"type":23,"tag":61,"props":4133,"children":4134},{"style":74},[4135],{"type":33,"value":1538},{"type":23,"tag":61,"props":4137,"children":4138},{"class":63,"line":2190},[4139,4143],{"type":23,"tag":61,"props":4140,"children":4141},{"style":1520},[4142],{"type":33,"value":2196},{"type":23,"tag":61,"props":4144,"children":4145},{"style":74},[4146],{"type":33,"value":1593},{"type":23,"tag":61,"props":4148,"children":4149},{"class":63,"line":2203},[4150,4154],{"type":23,"tag":61,"props":4151,"children":4152},{"style":1520},[4153],{"type":33,"value":2209},{"type":23,"tag":61,"props":4155,"children":4156},{"style":74},[4157],{"type":33,"value":1593},{"type":23,"tag":61,"props":4159,"children":4160},{"class":63,"line":2216},[4161,4165,4169,4173],{"type":23,"tag":61,"props":4162,"children":4163},{"style":1520},[4164],{"type":33,"value":2222},{"type":23,"tag":61,"props":4166,"children":4167},{"style":74},[4168],{"type":33,"value":104},{"type":23,"tag":61,"props":4170,"children":4171},{"style":1832},[4172],{"type":33,"value":2183},{"type":23,"tag":61,"props":4174,"children":4175},{"style":74},[4176],{"type":33,"value":1538},{"type":23,"tag":61,"props":4178,"children":4179},{"class":63,"line":2237},[4180,4184,4188],{"type":23,"tag":61,"props":4181,"children":4182},{"style":1520},[4183],{"type":33,"value":2243},{"type":23,"tag":61,"props":4185,"children":4186},{"style":74},[4187],{"type":33,"value":104},{"type":23,"tag":61,"props":4189,"children":4190},{"style":1832},[4191],{"type":33,"value":1835},{"type":23,"tag":61,"props":4193,"children":4194},{"class":63,"line":2254},[4195],{"type":23,"tag":61,"props":4196,"children":4197},{"style":74},[4198],{"type":33,"value":1851},{"type":23,"tag":61,"props":4200,"children":4201},{"class":63,"line":2262},[4202,4206,4210,4214],{"type":23,"tag":61,"props":4203,"children":4204},{"style":1520},[4205],{"type":33,"value":2268},{"type":23,"tag":61,"props":4207,"children":4208},{"style":74},[4209],{"type":33,"value":104},{"type":23,"tag":61,"props":4211,"children":4212},{"style":1832},[4213],{"type":33,"value":2183},{"type":23,"tag":61,"props":4215,"children":4216},{"style":74},[4217],{"type":33,"value":1538},{"type":23,"tag":61,"props":4219,"children":4220},{"class":63,"line":2283},[4221,4225,4229],{"type":23,"tag":61,"props":4222,"children":4223},{"style":1520},[4224],{"type":33,"value":2289},{"type":23,"tag":61,"props":4226,"children":4227},{"style":74},[4228],{"type":33,"value":104},{"type":23,"tag":61,"props":4230,"children":4231},{"style":1832},[4232],{"type":33,"value":1835},{"type":23,"tag":61,"props":4234,"children":4235},{"class":63,"line":2300},[4236],{"type":23,"tag":61,"props":4237,"children":4238},{"style":74},[4239],{"type":33,"value":1742},{"type":23,"tag":61,"props":4241,"children":4242},{"class":63,"line":2308},[4243,4247],{"type":23,"tag":61,"props":4244,"children":4245},{"style":1520},[4246],{"type":33,"value":2314},{"type":23,"tag":61,"props":4248,"children":4249},{"style":74},[4250],{"type":33,"value":1593},{"type":23,"tag":61,"props":4252,"children":4253},{"class":63,"line":2321},[4254,4258],{"type":23,"tag":61,"props":4255,"children":4256},{"style":1520},[4257],{"type":33,"value":2327},{"type":23,"tag":61,"props":4259,"children":4260},{"style":74},[4261],{"type":33,"value":1593},{"type":23,"tag":61,"props":4263,"children":4264},{"class":63,"line":2334},[4265,4269,4273],{"type":23,"tag":61,"props":4266,"children":4267},{"style":1520},[4268],{"type":33,"value":2340},{"type":23,"tag":61,"props":4270,"children":4271},{"style":74},[4272],{"type":33,"value":104},{"type":23,"tag":61,"props":4274,"children":4275},{"style":1530},[4276],{"type":33,"value":2349},{"type":23,"tag":61,"props":4278,"children":4279},{"class":63,"line":2352},[4280],{"type":23,"tag":61,"props":4281,"children":4282},{"style":74},[4283],{"type":33,"value":1851},{"type":23,"tag":61,"props":4285,"children":4286},{"class":63,"line":2360},[4287,4291],{"type":23,"tag":61,"props":4288,"children":4289},{"style":1520},[4290],{"type":33,"value":2366},{"type":23,"tag":61,"props":4292,"children":4293},{"style":74},[4294],{"type":33,"value":1755},{"type":23,"tag":61,"props":4296,"children":4297},{"class":63,"line":2373},[4298],{"type":23,"tag":61,"props":4299,"children":4300},{"style":1530},[4301],{"type":33,"value":2379},{"type":23,"tag":61,"props":4303,"children":4304},{"class":63,"line":2382},[4305],{"type":23,"tag":61,"props":4306,"children":4307},{"style":74},[4308],{"type":33,"value":2388},{"type":23,"tag":61,"props":4310,"children":4311},{"class":63,"line":2391},[4312,4316],{"type":23,"tag":61,"props":4313,"children":4314},{"style":1520},[4315],{"type":33,"value":2397},{"type":23,"tag":61,"props":4317,"children":4318},{"style":74},[4319],{"type":33,"value":1755},{"type":23,"tag":61,"props":4321,"children":4322},{"class":63,"line":2404},[4323],{"type":23,"tag":61,"props":4324,"children":4325},{"style":1530},[4326],{"type":33,"value":2379},{"type":23,"tag":61,"props":4328,"children":4329},{"class":63,"line":2412},[4330],{"type":23,"tag":61,"props":4331,"children":4332},{"style":74},[4333],{"type":33,"value":2418},{"type":23,"tag":61,"props":4335,"children":4336},{"class":63,"line":2421},[4337],{"type":23,"tag":61,"props":4338,"children":4339},{"style":74},[4340],{"type":33,"value":1742},{"type":23,"tag":61,"props":4342,"children":4343},{"class":63,"line":2429},[4344,4348],{"type":23,"tag":61,"props":4345,"children":4346},{"style":1520},[4347],{"type":33,"value":2435},{"type":23,"tag":61,"props":4349,"children":4350},{"style":74},[4351],{"type":33,"value":1593},{"type":23,"tag":61,"props":4353,"children":4354},{"class":63,"line":2442},[4355,4359],{"type":23,"tag":61,"props":4356,"children":4357},{"style":1520},[4358],{"type":33,"value":2448},{"type":23,"tag":61,"props":4360,"children":4361},{"style":74},[4362],{"type":33,"value":1593},{"type":23,"tag":61,"props":4364,"children":4365},{"class":63,"line":2455},[4366,4370,4374,4378],{"type":23,"tag":61,"props":4367,"children":4368},{"style":1520},[4369],{"type":33,"value":2461},{"type":23,"tag":61,"props":4371,"children":4372},{"style":74},[4373],{"type":33,"value":104},{"type":23,"tag":61,"props":4375,"children":4376},{"style":1832},[4377],{"type":33,"value":2183},{"type":23,"tag":61,"props":4379,"children":4380},{"style":74},[4381],{"type":33,"value":1538},{"type":23,"tag":61,"props":4383,"children":4384},{"class":63,"line":2476},[4385,4389],{"type":23,"tag":61,"props":4386,"children":4387},{"style":1520},[4388],{"type":33,"value":2482},{"type":23,"tag":61,"props":4390,"children":4391},{"style":74},[4392],{"type":33,"value":1755},{"type":23,"tag":61,"props":4394,"children":4395},{"class":63,"line":2489},[4396,4400],{"type":23,"tag":61,"props":4397,"children":4398},{"style":1530},[4399],{"type":33,"value":2495},{"type":23,"tag":61,"props":4401,"children":4402},{"style":74},[4403],{"type":33,"value":1538},{"type":23,"tag":61,"props":4405,"children":4406},{"class":63,"line":2502},[4407],{"type":23,"tag":61,"props":4408,"children":4409},{"style":1530},[4410],{"type":33,"value":2508},{"type":23,"tag":61,"props":4412,"children":4413},{"class":63,"line":2511},[4414],{"type":23,"tag":61,"props":4415,"children":4416},{"style":74},[4417],{"type":33,"value":2517},{"type":23,"tag":61,"props":4419,"children":4420},{"class":63,"line":2520},[4421],{"type":23,"tag":61,"props":4422,"children":4423},{"style":74},[4424],{"type":33,"value":2085},{"type":23,"tag":61,"props":4426,"children":4427},{"class":63,"line":2528},[4428],{"type":23,"tag":61,"props":4429,"children":4430},{"style":74},[4431],{"type":33,"value":2534},{"type":23,"tag":61,"props":4433,"children":4434},{"class":63,"line":2537},[4435],{"type":23,"tag":61,"props":4436,"children":4437},{"style":74},[4438],{"type":33,"value":2543},{"type":23,"tag":24,"props":4440,"children":4441},{},[4442],{"type":33,"value":4443},"or by using the CLI:",{"type":23,"tag":43,"props":4445,"children":4447},{"className":2551,"code":4446,"language":2553,"meta":7,"style":7},"composer config repositories.\u003Cgroup_id> composer https://\u003CDOMAIN-NAME>/api/v4/group/\u003Cgroup_id>/-/packages/composer/packages.json\n",[4448],{"type":23,"tag":57,"props":4449,"children":4450},{"__ignoreMap":7},[4451],{"type":23,"tag":61,"props":4452,"children":4453},{"class":63,"line":64},[4454,4458,4463,4468,4474,4479,4484,4489,4494,4499,4503,4508,4513,4517,4522,4526,4530,4534,4538],{"type":23,"tag":61,"props":4455,"children":4456},{"style":2563},[4457],{"type":33,"value":1447},{"type":23,"tag":61,"props":4459,"children":4460},{"style":107},[4461],{"type":33,"value":4462}," config",{"type":23,"tag":61,"props":4464,"children":4465},{"style":107},[4466],{"type":33,"value":4467}," repositories.",{"type":23,"tag":61,"props":4469,"children":4471},{"style":4470},"--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-sepia:#F92672",[4472],{"type":33,"value":4473},"\u003C",{"type":23,"tag":61,"props":4475,"children":4476},{"style":107},[4477],{"type":33,"value":4478},"group_i",{"type":23,"tag":61,"props":4480,"children":4481},{"style":74},[4482],{"type":33,"value":4483},"d",{"type":23,"tag":61,"props":4485,"children":4486},{"style":4470},[4487],{"type":33,"value":4488},">",{"type":23,"tag":61,"props":4490,"children":4491},{"style":107},[4492],{"type":33,"value":4493}," composer",{"type":23,"tag":61,"props":4495,"children":4496},{"style":107},[4497],{"type":33,"value":4498}," https://",{"type":23,"tag":61,"props":4500,"children":4501},{"style":4470},[4502],{"type":33,"value":4473},{"type":23,"tag":61,"props":4504,"children":4505},{"style":107},[4506],{"type":33,"value":4507},"DOMAIN-NAM",{"type":23,"tag":61,"props":4509,"children":4510},{"style":74},[4511],{"type":33,"value":4512},"E",{"type":23,"tag":61,"props":4514,"children":4515},{"style":4470},[4516],{"type":33,"value":4488},{"type":23,"tag":61,"props":4518,"children":4519},{"style":107},[4520],{"type":33,"value":4521},"/api/v4/group/",{"type":23,"tag":61,"props":4523,"children":4524},{"style":4470},[4525],{"type":33,"value":4473},{"type":23,"tag":61,"props":4527,"children":4528},{"style":107},[4529],{"type":33,"value":4478},{"type":23,"tag":61,"props":4531,"children":4532},{"style":74},[4533],{"type":33,"value":4483},{"type":23,"tag":61,"props":4535,"children":4536},{"style":4470},[4537],{"type":33,"value":4488},{"type":23,"tag":61,"props":4539,"children":4540},{"style":107},[4541],{"type":33,"value":4542},"/-/packages/composer/packages.json\n",{"type":23,"tag":24,"props":4544,"children":4545},{},[4546],{"type":33,"value":4547},"And setup GitLab credentials:",{"type":23,"tag":43,"props":4549,"children":4551},{"className":2551,"code":4550,"language":2553,"meta":7,"style":7},"composer config gitlab-token.\u003CDOMAIN-NAME> \u003Cpersonal_access_token>\n",[4552],{"type":23,"tag":57,"props":4553,"children":4554},{"__ignoreMap":7},[4555],{"type":23,"tag":61,"props":4556,"children":4557},{"class":63,"line":64},[4558,4562,4566,4571,4575,4579,4583,4587,4592,4597,4602],{"type":23,"tag":61,"props":4559,"children":4560},{"style":2563},[4561],{"type":33,"value":1447},{"type":23,"tag":61,"props":4563,"children":4564},{"style":107},[4565],{"type":33,"value":4462},{"type":23,"tag":61,"props":4567,"children":4568},{"style":107},[4569],{"type":33,"value":4570}," gitlab-token.",{"type":23,"tag":61,"props":4572,"children":4573},{"style":4470},[4574],{"type":33,"value":4473},{"type":23,"tag":61,"props":4576,"children":4577},{"style":107},[4578],{"type":33,"value":4507},{"type":23,"tag":61,"props":4580,"children":4581},{"style":74},[4582],{"type":33,"value":4512},{"type":23,"tag":61,"props":4584,"children":4585},{"style":4470},[4586],{"type":33,"value":4488},{"type":23,"tag":61,"props":4588,"children":4589},{"style":4470},[4590],{"type":33,"value":4591}," \u003C",{"type":23,"tag":61,"props":4593,"children":4594},{"style":107},[4595],{"type":33,"value":4596},"personal_access_toke",{"type":23,"tag":61,"props":4598,"children":4599},{"style":74},[4600],{"type":33,"value":4601},"n",{"type":23,"tag":61,"props":4603,"children":4604},{"style":4470},[4605],{"type":33,"value":4606},">\n",{"type":23,"tag":24,"props":4608,"children":4609},{},[4610,4612,4617],{"type":33,"value":4611},"You can read more about this process in the ",{"type":23,"tag":28,"props":4613,"children":4615},{"href":4614},"https://docs.gitlab.com/user/packages/composer_repository/#install-a-composer-package",[4616],{"type":33,"value":1411},{"type":33,"value":306},{"type":23,"tag":24,"props":4619,"children":4620},{},[4621],{"type":33,"value":4622},"Now we require our package us usual:",{"type":23,"tag":43,"props":4624,"children":4625},{"className":2551,"code":2552,"language":2553,"meta":7,"style":7},[4626],{"type":23,"tag":57,"props":4627,"children":4628},{"__ignoreMap":7},[4629],{"type":23,"tag":61,"props":4630,"children":4631},{"class":63,"line":64},[4632,4636,4640],{"type":23,"tag":61,"props":4633,"children":4634},{"style":2563},[4635],{"type":33,"value":1447},{"type":23,"tag":61,"props":4637,"children":4638},{"style":107},[4639],{"type":33,"value":2570},{"type":23,"tag":61,"props":4641,"children":4642},{"style":107},[4643],{"type":33,"value":2575},{"type":23,"tag":43,"props":4645,"children":4647},{"className":3286,"code":4646,"language":3288,"meta":7,"style":7},"./composer.json has been updated\nRunning composer update acme/sample-plugin\nLoading composer repositories with package information\nUpdating dependencies\nLock file operations: 1 install, 0 updates, 0 removals\n  - Locking acme/sample-plugin (1.0.0)\nWriting lock file\nInstalling dependencies from lock file (including require-dev)\nPackage operations: 1 install, 0 updates, 0 removals\n  - Downloading acme/sample-plugin (1.0.0)\n  - Installing acme/sample-plugin (1.0.0): Extracting archive\nGenerating optimized autoload files\n\nRun composer recipes at any time to see the status of your Symfony recipes.\n\nExecuting script assets:install [OK]\n\nUsing version ^1.0 for acme/sample-plugin\n",[4648],{"type":23,"tag":57,"props":4649,"children":4650},{"__ignoreMap":7},[4651,4658,4665,4672,4679,4686,4693,4700,4707,4714,4722,4730,4737,4744,4751,4758,4765,4772],{"type":23,"tag":61,"props":4652,"children":4653},{"class":63,"line":64},[4654],{"type":23,"tag":61,"props":4655,"children":4656},{},[4657],{"type":33,"value":2641},{"type":23,"tag":61,"props":4659,"children":4660},{"class":63,"line":80},[4661],{"type":23,"tag":61,"props":4662,"children":4663},{},[4664],{"type":33,"value":2649},{"type":23,"tag":61,"props":4666,"children":4667},{"class":63,"line":93},[4668],{"type":23,"tag":61,"props":4669,"children":4670},{},[4671],{"type":33,"value":3315},{"type":23,"tag":61,"props":4673,"children":4674},{"class":63,"line":113},[4675],{"type":23,"tag":61,"props":4676,"children":4677},{},[4678],{"type":33,"value":3323},{"type":23,"tag":61,"props":4680,"children":4681},{"class":63,"line":48},[4682],{"type":23,"tag":61,"props":4683,"children":4684},{},[4685],{"type":33,"value":2673},{"type":23,"tag":61,"props":4687,"children":4688},{"class":63,"line":49},[4689],{"type":23,"tag":61,"props":4690,"children":4691},{},[4692],{"type":33,"value":3338},{"type":23,"tag":61,"props":4694,"children":4695},{"class":63,"line":50},[4696],{"type":23,"tag":61,"props":4697,"children":4698},{},[4699],{"type":33,"value":2689},{"type":23,"tag":61,"props":4701,"children":4702},{"class":63,"line":51},[4703],{"type":23,"tag":61,"props":4704,"children":4705},{},[4706],{"type":33,"value":2697},{"type":23,"tag":61,"props":4708,"children":4709},{"class":63,"line":52},[4710],{"type":23,"tag":61,"props":4711,"children":4712},{},[4713],{"type":33,"value":2705},{"type":23,"tag":61,"props":4715,"children":4716},{"class":63,"line":715},[4717],{"type":23,"tag":61,"props":4718,"children":4719},{},[4720],{"type":33,"value":4721},"  - Downloading acme/sample-plugin (1.0.0)\n",{"type":23,"tag":61,"props":4723,"children":4724},{"class":63,"line":728},[4725],{"type":23,"tag":61,"props":4726,"children":4727},{},[4728],{"type":33,"value":4729},"  - Installing acme/sample-plugin (1.0.0): Extracting archive\n",{"type":23,"tag":61,"props":4731,"children":4732},{"class":63,"line":741},[4733],{"type":23,"tag":61,"props":4734,"children":4735},{},[4736],{"type":33,"value":2729},{"type":23,"tag":61,"props":4738,"children":4739},{"class":63,"line":754},[4740],{"type":23,"tag":61,"props":4741,"children":4742},{"emptyLinePlaceholder":784},[4743],{"type":33,"value":787},{"type":23,"tag":61,"props":4745,"children":4746},{"class":63,"line":767},[4747],{"type":23,"tag":61,"props":4748,"children":4749},{},[4750],{"type":33,"value":2744},{"type":23,"tag":61,"props":4752,"children":4753},{"class":63,"line":780},[4754],{"type":23,"tag":61,"props":4755,"children":4756},{"emptyLinePlaceholder":784},[4757],{"type":33,"value":787},{"type":23,"tag":61,"props":4759,"children":4760},{"class":63,"line":790},[4761],{"type":23,"tag":61,"props":4762,"children":4763},{},[4764],{"type":33,"value":2759},{"type":23,"tag":61,"props":4766,"children":4767},{"class":63,"line":803},[4768],{"type":23,"tag":61,"props":4769,"children":4770},{"emptyLinePlaceholder":784},[4771],{"type":33,"value":787},{"type":23,"tag":61,"props":4773,"children":4774},{"class":63,"line":816},[4775],{"type":23,"tag":61,"props":4776,"children":4777},{},[4778],{"type":33,"value":3425},{"type":23,"tag":24,"props":4780,"children":4781},{},[4782],{"type":23,"tag":61,"props":4783,"children":4786},{"className":4784},[4785],"text-h2",[4787],{"type":33,"value":4788},"Awesome. Direct package download!",{"type":23,"tag":990,"props":4790,"children":4792},{"id":4791},"why-bother",[4793],{"type":33,"value":4794},"Why bother?",{"type":23,"tag":24,"props":4796,"children":4797},{},[4798,4800,4805,4807,4813],{"type":33,"value":4799},"This is an excellent question. The main reason is package caching. When running in a ",{"type":23,"tag":57,"props":4801,"children":4803},{"className":4802},[],[4804],{"type":33,"value":1320},{"type":33,"value":4806}," environment or ",{"type":23,"tag":57,"props":4808,"children":4810},{"className":4809},[],[4811],{"type":33,"value":4812},"docker build",{"type":33,"value":4814},",\ncaching packages can give you a massive performance boost.",{"type":23,"tag":1056,"props":4816,"children":4817},{},[],{"type":23,"tag":574,"props":4819,"children":4820},{},[],{"type":23,"tag":272,"props":4822,"children":4824},{"id":4823},"release-pipeline",[4825],{"type":33,"value":4826},"Release pipeline",{"type":23,"tag":990,"props":4828,"children":4830},{"id":4829},"with-manual-tagging",[4831],{"type":33,"value":4832},"With manual tagging",{"type":23,"tag":24,"props":4834,"children":4835},{},[4836],{"type":33,"value":4837},"This is a simple pipeline when you need to manually create and push a git tag.",{"type":23,"tag":24,"props":4839,"children":4840},{},[4841,4843,4848,4849],{"type":33,"value":4842},"Make sure to always update the ",{"type":23,"tag":57,"props":4844,"children":4846},{"className":4845},[],[4847],{"type":33,"value":2805},{"type":33,"value":2807},{"type":23,"tag":57,"props":4850,"children":4852},{"className":4851},[],[4853],{"type":33,"value":2813},{"type":23,"tag":43,"props":4855,"children":4857},{"className":2551,"code":4856,"language":2553,"meta":7,"style":7},"git tag \u003Cversion>\ngit push --tags\n",[4858],{"type":23,"tag":57,"props":4859,"children":4860},{"__ignoreMap":7},[4861,4889],{"type":23,"tag":61,"props":4862,"children":4863},{"class":63,"line":64},[4864,4868,4872,4876,4881,4885],{"type":23,"tag":61,"props":4865,"children":4866},{"style":2563},[4867],{"type":33,"value":296},{"type":23,"tag":61,"props":4869,"children":4870},{"style":107},[4871],{"type":33,"value":3235},{"type":23,"tag":61,"props":4873,"children":4874},{"style":4470},[4875],{"type":33,"value":4591},{"type":23,"tag":61,"props":4877,"children":4878},{"style":107},[4879],{"type":33,"value":4880},"versio",{"type":23,"tag":61,"props":4882,"children":4883},{"style":74},[4884],{"type":33,"value":4601},{"type":23,"tag":61,"props":4886,"children":4887},{"style":4470},[4888],{"type":33,"value":4606},{"type":23,"tag":61,"props":4890,"children":4891},{"class":63,"line":80},[4892,4896,4900],{"type":23,"tag":61,"props":4893,"children":4894},{"style":2563},[4895],{"type":33,"value":296},{"type":23,"tag":61,"props":4897,"children":4898},{"style":107},[4899],{"type":33,"value":3252},{"type":23,"tag":61,"props":4901,"children":4902},{"style":1832},[4903],{"type":33,"value":3257},{"type":23,"tag":43,"props":4905,"children":4908},{"className":54,"code":4906,"filename":4907,"language":53,"meta":7,"style":7},"stages:\n  - release\n\ndeploy:\n  image: alpine/curl\n  stage: release\n  script:\n    - 'curl --fail-with-body --header \"Job-Token: $CI_JOB_TOKEN\" --data tag=$CI_COMMIT_TAG \"${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/composer\"'\n  environment: production\n  rules:\n    if: $CI_COMMIT_TAG\n",".gitlab-ci.yml",[4909],{"type":23,"tag":57,"props":4910,"children":4911},{"__ignoreMap":7},[4912,4924,4937,4944,4956,4973,4989,5001,5014,5031,5043],{"type":23,"tag":61,"props":4913,"children":4914},{"class":63,"line":64},[4915,4920],{"type":23,"tag":61,"props":4916,"children":4917},{"style":68},[4918],{"type":33,"value":4919},"stages",{"type":23,"tag":61,"props":4921,"children":4922},{"style":74},[4923],{"type":33,"value":77},{"type":23,"tag":61,"props":4925,"children":4926},{"class":63,"line":80},[4927,4932],{"type":23,"tag":61,"props":4928,"children":4929},{"style":74},[4930],{"type":33,"value":4931},"  - ",{"type":23,"tag":61,"props":4933,"children":4934},{"style":107},[4935],{"type":33,"value":4936},"release\n",{"type":23,"tag":61,"props":4938,"children":4939},{"class":63,"line":93},[4940],{"type":23,"tag":61,"props":4941,"children":4942},{"emptyLinePlaceholder":784},[4943],{"type":33,"value":787},{"type":23,"tag":61,"props":4945,"children":4946},{"class":63,"line":113},[4947,4952],{"type":23,"tag":61,"props":4948,"children":4949},{"style":68},[4950],{"type":33,"value":4951},"deploy",{"type":23,"tag":61,"props":4953,"children":4954},{"style":74},[4955],{"type":33,"value":77},{"type":23,"tag":61,"props":4957,"children":4958},{"class":63,"line":48},[4959,4964,4968],{"type":23,"tag":61,"props":4960,"children":4961},{"style":68},[4962],{"type":33,"value":4963},"  image",{"type":23,"tag":61,"props":4965,"children":4966},{"style":74},[4967],{"type":33,"value":104},{"type":23,"tag":61,"props":4969,"children":4970},{"style":107},[4971],{"type":33,"value":4972},"alpine/curl\n",{"type":23,"tag":61,"props":4974,"children":4975},{"class":63,"line":49},[4976,4981,4985],{"type":23,"tag":61,"props":4977,"children":4978},{"style":68},[4979],{"type":33,"value":4980},"  stage",{"type":23,"tag":61,"props":4982,"children":4983},{"style":74},[4984],{"type":33,"value":104},{"type":23,"tag":61,"props":4986,"children":4987},{"style":107},[4988],{"type":33,"value":4936},{"type":23,"tag":61,"props":4990,"children":4991},{"class":63,"line":50},[4992,4997],{"type":23,"tag":61,"props":4993,"children":4994},{"style":68},[4995],{"type":33,"value":4996},"  script",{"type":23,"tag":61,"props":4998,"children":4999},{"style":74},[5000],{"type":33,"value":77},{"type":23,"tag":61,"props":5002,"children":5003},{"class":63,"line":51},[5004,5009],{"type":23,"tag":61,"props":5005,"children":5006},{"style":74},[5007],{"type":33,"value":5008},"    - ",{"type":23,"tag":61,"props":5010,"children":5011},{"style":107},[5012],{"type":33,"value":5013},"'curl --fail-with-body --header \"Job-Token: $CI_JOB_TOKEN\" --data tag=$CI_COMMIT_TAG \"${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/composer\"'\n",{"type":23,"tag":61,"props":5015,"children":5016},{"class":63,"line":52},[5017,5022,5026],{"type":23,"tag":61,"props":5018,"children":5019},{"style":68},[5020],{"type":33,"value":5021},"  environment",{"type":23,"tag":61,"props":5023,"children":5024},{"style":74},[5025],{"type":33,"value":104},{"type":23,"tag":61,"props":5027,"children":5028},{"style":107},[5029],{"type":33,"value":5030},"production\n",{"type":23,"tag":61,"props":5032,"children":5033},{"class":63,"line":715},[5034,5039],{"type":23,"tag":61,"props":5035,"children":5036},{"style":68},[5037],{"type":33,"value":5038},"  rules",{"type":23,"tag":61,"props":5040,"children":5041},{"style":74},[5042],{"type":33,"value":77},{"type":23,"tag":61,"props":5044,"children":5045},{"class":63,"line":728},[5046,5051,5055],{"type":23,"tag":61,"props":5047,"children":5048},{"style":68},[5049],{"type":33,"value":5050},"    if",{"type":23,"tag":61,"props":5052,"children":5053},{"style":74},[5054],{"type":33,"value":104},{"type":23,"tag":61,"props":5056,"children":5057},{"style":107},[5058],{"type":33,"value":5059},"$CI_COMMIT_TAG\n",{"type":23,"tag":990,"props":5061,"children":5063},{"id":5062},"with-semantic-release",[5064],{"type":33,"value":5065},"With semantic-release",{"type":23,"tag":24,"props":5067,"children":5068},{},[5069],{"type":33,"value":5070},"It would be a lot easier if we could just push our changes and don't care about versioning and tagging.",{"type":23,"tag":24,"props":5072,"children":5073},{},[5074,5080],{"type":23,"tag":28,"props":5075,"children":5077},{"href":5076},"https://github.com/semantic-release/semantic-release",[5078],{"type":33,"value":5079},"semantic-release",{"type":33,"value":5081}," automates the whole package release workflow.",{"type":23,"tag":24,"props":5083,"children":5084},{},[5085,5087,5093],{"type":33,"value":5086},"Please follow the ",{"type":23,"tag":28,"props":5088,"children":5090},{"href":5089},"https://github.com/semantic-release/gitlab?tab=readme-ov-file#gitlab-authentication",[5091],{"type":33,"value":5092},"GitLab authentication instruction",{"type":33,"value":5094}," before you continue to read.",{"type":23,"tag":43,"props":5096,"children":5099},{"className":54,"code":5097,"filename":5098,"language":53,"meta":7,"style":7},"stages:\n  - release\n\nrelease:\n  stage: release\n  image:\n    name: ghcr.io/voxpupuli/semantic-release:25.0.0-latest\n    entrypoint: [\"\"]\n  interruptible: true\n  script:\n    - /container-entrypoint.sh\n  rules:\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: never\n    - if: $CI_COMMIT_BRANCH\n\n","\u003Cplugin-root>/.gitlab-ci.yml",[5100],{"type":23,"tag":57,"props":5101,"children":5102},{"__ignoreMap":7},[5103,5114,5125,5132,5144,5159,5170,5187,5210,5226,5237,5249,5260,5281,5298],{"type":23,"tag":61,"props":5104,"children":5105},{"class":63,"line":64},[5106,5110],{"type":23,"tag":61,"props":5107,"children":5108},{"style":68},[5109],{"type":33,"value":4919},{"type":23,"tag":61,"props":5111,"children":5112},{"style":74},[5113],{"type":33,"value":77},{"type":23,"tag":61,"props":5115,"children":5116},{"class":63,"line":80},[5117,5121],{"type":23,"tag":61,"props":5118,"children":5119},{"style":74},[5120],{"type":33,"value":4931},{"type":23,"tag":61,"props":5122,"children":5123},{"style":107},[5124],{"type":33,"value":4936},{"type":23,"tag":61,"props":5126,"children":5127},{"class":63,"line":93},[5128],{"type":23,"tag":61,"props":5129,"children":5130},{"emptyLinePlaceholder":784},[5131],{"type":33,"value":787},{"type":23,"tag":61,"props":5133,"children":5134},{"class":63,"line":113},[5135,5140],{"type":23,"tag":61,"props":5136,"children":5137},{"style":68},[5138],{"type":33,"value":5139},"release",{"type":23,"tag":61,"props":5141,"children":5142},{"style":74},[5143],{"type":33,"value":77},{"type":23,"tag":61,"props":5145,"children":5146},{"class":63,"line":48},[5147,5151,5155],{"type":23,"tag":61,"props":5148,"children":5149},{"style":68},[5150],{"type":33,"value":4980},{"type":23,"tag":61,"props":5152,"children":5153},{"style":74},[5154],{"type":33,"value":104},{"type":23,"tag":61,"props":5156,"children":5157},{"style":107},[5158],{"type":33,"value":4936},{"type":23,"tag":61,"props":5160,"children":5161},{"class":63,"line":49},[5162,5166],{"type":23,"tag":61,"props":5163,"children":5164},{"style":68},[5165],{"type":33,"value":4963},{"type":23,"tag":61,"props":5167,"children":5168},{"style":74},[5169],{"type":33,"value":77},{"type":23,"tag":61,"props":5171,"children":5172},{"class":63,"line":50},[5173,5178,5182],{"type":23,"tag":61,"props":5174,"children":5175},{"style":68},[5176],{"type":33,"value":5177},"    name",{"type":23,"tag":61,"props":5179,"children":5180},{"style":74},[5181],{"type":33,"value":104},{"type":23,"tag":61,"props":5183,"children":5184},{"style":107},[5185],{"type":33,"value":5186},"ghcr.io/voxpupuli/semantic-release:25.0.0-latest\n",{"type":23,"tag":61,"props":5188,"children":5189},{"class":63,"line":51},[5190,5195,5200,5205],{"type":23,"tag":61,"props":5191,"children":5192},{"style":68},[5193],{"type":33,"value":5194},"    entrypoint",{"type":23,"tag":61,"props":5196,"children":5197},{"style":74},[5198],{"type":33,"value":5199},": [",{"type":23,"tag":61,"props":5201,"children":5202},{"style":107},[5203],{"type":33,"value":5204},"\"\"",{"type":23,"tag":61,"props":5206,"children":5207},{"style":74},[5208],{"type":33,"value":5209},"]\n",{"type":23,"tag":61,"props":5211,"children":5212},{"class":63,"line":52},[5213,5218,5222],{"type":23,"tag":61,"props":5214,"children":5215},{"style":68},[5216],{"type":33,"value":5217},"  interruptible",{"type":23,"tag":61,"props":5219,"children":5220},{"style":74},[5221],{"type":33,"value":104},{"type":23,"tag":61,"props":5223,"children":5224},{"style":1832},[5225],{"type":33,"value":1835},{"type":23,"tag":61,"props":5227,"children":5228},{"class":63,"line":715},[5229,5233],{"type":23,"tag":61,"props":5230,"children":5231},{"style":68},[5232],{"type":33,"value":4996},{"type":23,"tag":61,"props":5234,"children":5235},{"style":74},[5236],{"type":33,"value":77},{"type":23,"tag":61,"props":5238,"children":5239},{"class":63,"line":728},[5240,5244],{"type":23,"tag":61,"props":5241,"children":5242},{"style":74},[5243],{"type":33,"value":5008},{"type":23,"tag":61,"props":5245,"children":5246},{"style":107},[5247],{"type":33,"value":5248},"/container-entrypoint.sh\n",{"type":23,"tag":61,"props":5250,"children":5251},{"class":63,"line":741},[5252,5256],{"type":23,"tag":61,"props":5253,"children":5254},{"style":68},[5255],{"type":33,"value":5038},{"type":23,"tag":61,"props":5257,"children":5258},{"style":74},[5259],{"type":33,"value":77},{"type":23,"tag":61,"props":5261,"children":5262},{"class":63,"line":754},[5263,5267,5272,5276],{"type":23,"tag":61,"props":5264,"children":5265},{"style":74},[5266],{"type":33,"value":5008},{"type":23,"tag":61,"props":5268,"children":5269},{"style":68},[5270],{"type":33,"value":5271},"if",{"type":23,"tag":61,"props":5273,"children":5274},{"style":74},[5275],{"type":33,"value":104},{"type":23,"tag":61,"props":5277,"children":5278},{"style":107},[5279],{"type":33,"value":5280},"$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n",{"type":23,"tag":61,"props":5282,"children":5283},{"class":63,"line":767},[5284,5289,5293],{"type":23,"tag":61,"props":5285,"children":5286},{"style":68},[5287],{"type":33,"value":5288},"      when",{"type":23,"tag":61,"props":5290,"children":5291},{"style":74},[5292],{"type":33,"value":104},{"type":23,"tag":61,"props":5294,"children":5295},{"style":107},[5296],{"type":33,"value":5297},"never\n",{"type":23,"tag":61,"props":5299,"children":5300},{"class":63,"line":780},[5301,5305,5309,5313],{"type":23,"tag":61,"props":5302,"children":5303},{"style":74},[5304],{"type":33,"value":5008},{"type":23,"tag":61,"props":5306,"children":5307},{"style":68},[5308],{"type":33,"value":5271},{"type":23,"tag":61,"props":5310,"children":5311},{"style":74},[5312],{"type":33,"value":104},{"type":23,"tag":61,"props":5314,"children":5315},{"style":107},[5316],{"type":33,"value":5317},"$CI_COMMIT_BRANCH\n",{"type":23,"tag":43,"props":5319,"children":5322},{"className":1495,"code":5320,"filename":5321,"language":1353,"meta":7,"style":7},"{\n  \"plugins\": [\n    \"@semantic-release/commit-analyzer\",\n    [\n      \"semantic-release-replace-plugin\",\n      {\n        \"replacements\": [\n          {\n            \"files\": [\"composer.json\"],\n            \"from\": \"version\\\": \\\".*\\\"\",\n            \"to\": \"version\\\": \\\"${nextRelease.version}\\\"\"\n          }\n        ]\n      }\n    ],\n    [\n      \"@semantic-release/git\",\n      {\n        \"assets\": [\"composer.json\"],\n        \"message\": \"chore(release): ${nextRelease.version} [skip ci]\\n\\n${nextRelease.notes}\"\n      }\n    ],\n    [\n      \"@semantic-release/exec\",\n      {\n        \"publishCmd\": \"curl --fail-with-body --header \\\"Job-Token: ${process.env.CI_JOB_TOKEN}\\\" --data tag=${nextRelease.gitTag} ${process.env.CI_API_V4_URL}/projects/${process.env.CI_PROJECT_ID}/packages/composer\"\n      }\n    ]\n  ]\n}\n","\u003Cplugin-root>/.releaserc.json",[5323],{"type":23,"tag":57,"props":5324,"children":5325},{"__ignoreMap":7},[5326,5333,5345,5357,5365,5377,5385,5397,5405,5427,5474,5516,5524,5532,5539,5546,5553,5565,5572,5592,5619,5626,5633,5640,5652,5659,5694,5701,5708,5716],{"type":23,"tag":61,"props":5327,"children":5328},{"class":63,"line":64},[5329],{"type":23,"tag":61,"props":5330,"children":5331},{"style":74},[5332],{"type":33,"value":1514},{"type":23,"tag":61,"props":5334,"children":5335},{"class":63,"line":80},[5336,5341],{"type":23,"tag":61,"props":5337,"children":5338},{"style":1520},[5339],{"type":33,"value":5340},"  \"plugins\"",{"type":23,"tag":61,"props":5342,"children":5343},{"style":74},[5344],{"type":33,"value":1755},{"type":23,"tag":61,"props":5346,"children":5347},{"class":63,"line":93},[5348,5353],{"type":23,"tag":61,"props":5349,"children":5350},{"style":1530},[5351],{"type":33,"value":5352},"    \"@semantic-release/commit-analyzer\"",{"type":23,"tag":61,"props":5354,"children":5355},{"style":74},[5356],{"type":33,"value":1538},{"type":23,"tag":61,"props":5358,"children":5359},{"class":63,"line":113},[5360],{"type":23,"tag":61,"props":5361,"children":5362},{"style":74},[5363],{"type":33,"value":5364},"    [\n",{"type":23,"tag":61,"props":5366,"children":5367},{"class":63,"line":48},[5368,5373],{"type":23,"tag":61,"props":5369,"children":5370},{"style":1530},[5371],{"type":33,"value":5372},"      \"semantic-release-replace-plugin\"",{"type":23,"tag":61,"props":5374,"children":5375},{"style":74},[5376],{"type":33,"value":1538},{"type":23,"tag":61,"props":5378,"children":5379},{"class":63,"line":49},[5380],{"type":23,"tag":61,"props":5381,"children":5382},{"style":74},[5383],{"type":33,"value":5384},"      {\n",{"type":23,"tag":61,"props":5386,"children":5387},{"class":63,"line":50},[5388,5393],{"type":23,"tag":61,"props":5389,"children":5390},{"style":1520},[5391],{"type":33,"value":5392},"        \"replacements\"",{"type":23,"tag":61,"props":5394,"children":5395},{"style":74},[5396],{"type":33,"value":1755},{"type":23,"tag":61,"props":5398,"children":5399},{"class":63,"line":51},[5400],{"type":23,"tag":61,"props":5401,"children":5402},{"style":74},[5403],{"type":33,"value":5404},"          {\n",{"type":23,"tag":61,"props":5406,"children":5407},{"class":63,"line":52},[5408,5413,5417,5422],{"type":23,"tag":61,"props":5409,"children":5410},{"style":1520},[5411],{"type":33,"value":5412},"            \"files\"",{"type":23,"tag":61,"props":5414,"children":5415},{"style":74},[5416],{"type":33,"value":5199},{"type":23,"tag":61,"props":5418,"children":5419},{"style":1530},[5420],{"type":33,"value":5421},"\"composer.json\"",{"type":23,"tag":61,"props":5423,"children":5424},{"style":74},[5425],{"type":33,"value":5426},"],\n",{"type":23,"tag":61,"props":5428,"children":5429},{"class":63,"line":715},[5430,5435,5439,5444,5449,5453,5457,5462,5466,5470],{"type":23,"tag":61,"props":5431,"children":5432},{"style":1520},[5433],{"type":33,"value":5434},"            \"from\"",{"type":23,"tag":61,"props":5436,"children":5437},{"style":74},[5438],{"type":33,"value":104},{"type":23,"tag":61,"props":5440,"children":5441},{"style":1530},[5442],{"type":33,"value":5443},"\"version",{"type":23,"tag":61,"props":5445,"children":5446},{"style":1832},[5447],{"type":33,"value":5448},"\\\"",{"type":23,"tag":61,"props":5450,"children":5451},{"style":1530},[5452],{"type":33,"value":104},{"type":23,"tag":61,"props":5454,"children":5455},{"style":1832},[5456],{"type":33,"value":5448},{"type":23,"tag":61,"props":5458,"children":5459},{"style":1530},[5460],{"type":33,"value":5461},".*",{"type":23,"tag":61,"props":5463,"children":5464},{"style":1832},[5465],{"type":33,"value":5448},{"type":23,"tag":61,"props":5467,"children":5468},{"style":1530},[5469],{"type":33,"value":2140},{"type":23,"tag":61,"props":5471,"children":5472},{"style":74},[5473],{"type":33,"value":1538},{"type":23,"tag":61,"props":5475,"children":5476},{"class":63,"line":728},[5477,5482,5486,5490,5494,5498,5502,5507,5511],{"type":23,"tag":61,"props":5478,"children":5479},{"style":1520},[5480],{"type":33,"value":5481},"            \"to\"",{"type":23,"tag":61,"props":5483,"children":5484},{"style":74},[5485],{"type":33,"value":104},{"type":23,"tag":61,"props":5487,"children":5488},{"style":1530},[5489],{"type":33,"value":5443},{"type":23,"tag":61,"props":5491,"children":5492},{"style":1832},[5493],{"type":33,"value":5448},{"type":23,"tag":61,"props":5495,"children":5496},{"style":1530},[5497],{"type":33,"value":104},{"type":23,"tag":61,"props":5499,"children":5500},{"style":1832},[5501],{"type":33,"value":5448},{"type":23,"tag":61,"props":5503,"children":5504},{"style":1530},[5505],{"type":33,"value":5506},"${nextRelease.version}",{"type":23,"tag":61,"props":5508,"children":5509},{"style":1832},[5510],{"type":33,"value":5448},{"type":23,"tag":61,"props":5512,"children":5513},{"style":1530},[5514],{"type":33,"value":5515},"\"\n",{"type":23,"tag":61,"props":5517,"children":5518},{"class":63,"line":741},[5519],{"type":23,"tag":61,"props":5520,"children":5521},{"style":74},[5522],{"type":33,"value":5523},"          }\n",{"type":23,"tag":61,"props":5525,"children":5526},{"class":63,"line":754},[5527],{"type":23,"tag":61,"props":5528,"children":5529},{"style":74},[5530],{"type":33,"value":5531},"        ]\n",{"type":23,"tag":61,"props":5533,"children":5534},{"class":63,"line":767},[5535],{"type":23,"tag":61,"props":5536,"children":5537},{"style":74},[5538],{"type":33,"value":1843},{"type":23,"tag":61,"props":5540,"children":5541},{"class":63,"line":780},[5542],{"type":23,"tag":61,"props":5543,"children":5544},{"style":74},[5545],{"type":33,"value":2388},{"type":23,"tag":61,"props":5547,"children":5548},{"class":63,"line":790},[5549],{"type":23,"tag":61,"props":5550,"children":5551},{"style":74},[5552],{"type":33,"value":5364},{"type":23,"tag":61,"props":5554,"children":5555},{"class":63,"line":803},[5556,5561],{"type":23,"tag":61,"props":5557,"children":5558},{"style":1530},[5559],{"type":33,"value":5560},"      \"@semantic-release/git\"",{"type":23,"tag":61,"props":5562,"children":5563},{"style":74},[5564],{"type":33,"value":1538},{"type":23,"tag":61,"props":5566,"children":5567},{"class":63,"line":816},[5568],{"type":23,"tag":61,"props":5569,"children":5570},{"style":74},[5571],{"type":33,"value":5384},{"type":23,"tag":61,"props":5573,"children":5574},{"class":63,"line":825},[5575,5580,5584,5588],{"type":23,"tag":61,"props":5576,"children":5577},{"style":1520},[5578],{"type":33,"value":5579},"        \"assets\"",{"type":23,"tag":61,"props":5581,"children":5582},{"style":74},[5583],{"type":33,"value":5199},{"type":23,"tag":61,"props":5585,"children":5586},{"style":1530},[5587],{"type":33,"value":5421},{"type":23,"tag":61,"props":5589,"children":5590},{"style":74},[5591],{"type":33,"value":5426},{"type":23,"tag":61,"props":5593,"children":5594},{"class":63,"line":838},[5595,5600,5604,5609,5614],{"type":23,"tag":61,"props":5596,"children":5597},{"style":1520},[5598],{"type":33,"value":5599},"        \"message\"",{"type":23,"tag":61,"props":5601,"children":5602},{"style":74},[5603],{"type":33,"value":104},{"type":23,"tag":61,"props":5605,"children":5606},{"style":1530},[5607],{"type":33,"value":5608},"\"chore(release): ${nextRelease.version} [skip ci]",{"type":23,"tag":61,"props":5610,"children":5611},{"style":1832},[5612],{"type":33,"value":5613},"\\n\\n",{"type":23,"tag":61,"props":5615,"children":5616},{"style":1530},[5617],{"type":33,"value":5618},"${nextRelease.notes}\"\n",{"type":23,"tag":61,"props":5620,"children":5621},{"class":63,"line":851},[5622],{"type":23,"tag":61,"props":5623,"children":5624},{"style":74},[5625],{"type":33,"value":1843},{"type":23,"tag":61,"props":5627,"children":5628},{"class":63,"line":864},[5629],{"type":23,"tag":61,"props":5630,"children":5631},{"style":74},[5632],{"type":33,"value":2388},{"type":23,"tag":61,"props":5634,"children":5635},{"class":63,"line":872},[5636],{"type":23,"tag":61,"props":5637,"children":5638},{"style":74},[5639],{"type":33,"value":5364},{"type":23,"tag":61,"props":5641,"children":5642},{"class":63,"line":885},[5643,5648],{"type":23,"tag":61,"props":5644,"children":5645},{"style":1530},[5646],{"type":33,"value":5647},"      \"@semantic-release/exec\"",{"type":23,"tag":61,"props":5649,"children":5650},{"style":74},[5651],{"type":33,"value":1538},{"type":23,"tag":61,"props":5653,"children":5654},{"class":63,"line":898},[5655],{"type":23,"tag":61,"props":5656,"children":5657},{"style":74},[5658],{"type":33,"value":5384},{"type":23,"tag":61,"props":5660,"children":5661},{"class":63,"line":911},[5662,5667,5671,5676,5680,5685,5689],{"type":23,"tag":61,"props":5663,"children":5664},{"style":1520},[5665],{"type":33,"value":5666},"        \"publishCmd\"",{"type":23,"tag":61,"props":5668,"children":5669},{"style":74},[5670],{"type":33,"value":104},{"type":23,"tag":61,"props":5672,"children":5673},{"style":1530},[5674],{"type":33,"value":5675},"\"curl --fail-with-body --header ",{"type":23,"tag":61,"props":5677,"children":5678},{"style":1832},[5679],{"type":33,"value":5448},{"type":23,"tag":61,"props":5681,"children":5682},{"style":1530},[5683],{"type":33,"value":5684},"Job-Token: ${process.env.CI_JOB_TOKEN}",{"type":23,"tag":61,"props":5686,"children":5687},{"style":1832},[5688],{"type":33,"value":5448},{"type":23,"tag":61,"props":5690,"children":5691},{"style":1530},[5692],{"type":33,"value":5693}," --data tag=${nextRelease.gitTag} ${process.env.CI_API_V4_URL}/projects/${process.env.CI_PROJECT_ID}/packages/composer\"\n",{"type":23,"tag":61,"props":5695,"children":5696},{"class":63,"line":924},[5697],{"type":23,"tag":61,"props":5698,"children":5699},{"style":74},[5700],{"type":33,"value":1843},{"type":23,"tag":61,"props":5702,"children":5703},{"class":63,"line":937},[5704],{"type":23,"tag":61,"props":5705,"children":5706},{"style":74},[5707],{"type":33,"value":2418},{"type":23,"tag":61,"props":5709,"children":5710},{"class":63,"line":1940},[5711],{"type":23,"tag":61,"props":5712,"children":5713},{"style":74},[5714],{"type":33,"value":5715},"  ]\n",{"type":23,"tag":61,"props":5717,"children":5718},{"class":63,"line":1948},[5719],{"type":23,"tag":61,"props":5720,"children":5721},{"style":74},[5722],{"type":33,"value":2543},{"type":23,"tag":24,"props":5724,"children":5725},{},[5726],{"type":33,"value":5727},"This will:",{"type":23,"tag":350,"props":5729,"children":5730},{},[5731,5736,5746,5758,5763],{"type":23,"tag":201,"props":5732,"children":5733},{},[5734],{"type":33,"value":5735},"Analise the commits from the last release to decide if a new version should be released",{"type":23,"tag":201,"props":5737,"children":5738},{},[5739,5741],{"type":33,"value":5740},"Update the version in ",{"type":23,"tag":57,"props":5742,"children":5744},{"className":5743},[],[5745],{"type":33,"value":2813},{"type":23,"tag":201,"props":5747,"children":5748},{},[5749,5751,5756],{"type":33,"value":5750},"Commit the ",{"type":23,"tag":57,"props":5752,"children":5754},{"className":5753},[],[5755],{"type":33,"value":2813},{"type":33,"value":5757}," back into the repo",{"type":23,"tag":201,"props":5759,"children":5760},{},[5761],{"type":33,"value":5762},"Create a tag",{"type":23,"tag":201,"props":5764,"children":5765},{},[5766],{"type":33,"value":5767},"Release a composer package from this tag",{"type":23,"tag":1219,"props":5769,"children":5770},{},[5771],{"type":33,"value":1223},{"title":7,"searchDepth":80,"depth":80,"links":5773},[5774,5780],{"id":1466,"depth":80,"text":1469,"children":5775},[5776,5777,5778,5779],{"id":1477,"depth":93,"text":1480},{"id":2779,"depth":93,"text":2782},{"id":3440,"depth":93,"text":3443},{"id":4791,"depth":93,"text":4794},{"id":4823,"depth":80,"text":4826,"children":5781},[5782,5783],{"id":4829,"depth":93,"text":4832},{"id":5062,"depth":93,"text":5065},{"_path":1259,"_dir":1260,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":5785,"primaryTeam":1263,"firstName":1264,"lastName":1265,"prefixTitle":7,"suffixTitle":1266,"education":5786,"role":5788,"workingSince":1277,"inTheCompanySince":1278,"techSkills":5789,"skills":5803,"projects":5813,"contactDetails":5818,"_image":1350,"image":1351,"_id":1352,"_type":1353,"title":1354,"_source":1260,"_file":1355,"_stem":1356,"_extension":1353},[1262,1263],[5787],[1269,1270,1271],[1273,1274,1275,1276],[5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802],{"name":1281,"level":1282,"icon":1283},{"name":1285,"level":1282},{"name":1287,"level":1282,"icon":1288},{"name":1290,"level":1282,"icon":1291},{"name":1293,"level":1282,"icon":1294},{"name":1296,"level":1282},{"name":1298,"level":1282,"icon":1299},{"name":1301,"level":1282,"icon":1302},{"name":1304,"level":1305,"icon":1306},{"name":1308,"level":1305,"icon":1309},{"name":1311,"level":1305},{"name":1313,"level":1305,"icon":1314},{"name":1316,"level":1305,"icon":1317},[5804,5805,5806,5807,5808,5809,5810,5811,5812],{"name":1320,"level":1282},{"name":1322,"level":1282},{"name":1263,"level":1282},{"name":1325,"level":1282},{"name":1327,"level":1282},{"name":1329,"level":1305},{"name":1331,"level":1305},{"name":1333,"level":1305},{"name":1335,"level":1305},[5814,5816,5817],{"project":1338,"position":5815},[1340,1341],{"project":1343,"position":1341},{"project":1345,"position":1341},{"eMail":1347,"phone":1348,"visibility":1349},1782284059814]