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