[{"data":1,"prerenderedAt":9342},["ShallowReactive",2],{"portfolio-en-bitburger":3,"related-refs-shopware_e-commerce-bitburger-en":128,"related-blog-shopware_e-commerce--en":156,"content-query-lDWCmQfCc3":234,"content-query-pY5GjeCLfZ":4685,"content-query-DexhC6jnXN":5769,"content-query-AVfm838iln":8051,"content-query-Dmf1CQj4Id":8586,"content-query-ViehLtZIqO":8657,"content-query-KtO3wftRle":9164,"content-query-1PFeYVQSzn":9261},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"subtitle":9,"heroImage":10,"areaOfApplication":9,"industry":11,"technologies":12,"period":15,"teamDescription":18,"budget":19,"tags":20,"body":23,"_type":122,"_id":123,"_source":124,"_file":125,"_stem":126,"_extension":127},"/en/portfolio/bitburger","portfolio",false,"","Bitburger","B2B-Shop","/images/portfolio/example.png","Beverages and Gastronomy",[13,14],"vuejs","threejs",{"from":16,"to":17},"2023-12","2024-01","1 UI/UX designer, 1 frontend developer","five-figure",[21,22],"shopware","e-commerce",{"type":24,"children":25,"toc":118},"root",[26,63],{"type":27,"tag":28,"props":29,"children":32},"element","section-component",{"className":30},[31],"no-pattern",[33,57],{"type":27,"tag":34,"props":35,"children":44},"v-card",{"className":36,"style":43},[37,38,39,40,41,42],"description__card","text-justify","px-4","px-md-18","py-4","py-md-14","background-color: rgba(var(--v-theme-primary), 0.1)",[45,52],{"type":27,"tag":46,"props":47,"children":48},"p",{},[49],{"type":50,"value":51},"text","Bitburger, a leading German brewery, has made a name for itself over the years as one of the most popular beer brands\nboth in Germany and internationally.",{"type":27,"tag":46,"props":53,"children":54},{},[55],{"type":50,"value":56},"As part of this project, we developed the B2B shop \"DasGastroPortal\" for the sale of Bitburger Brewery advertising\nmaterials. The integration of single sign-on is a special feature. Single sign-on is an authentication method that\nallows users to log in once to gain access to the entire system. This contributes to both increased efficiency and an\nimproved user experience.",{"type":27,"tag":58,"props":59,"children":62},"v-divider",{"className":60},[61],"hw-my",[],{"type":27,"tag":28,"props":64,"children":65},{},[66,79,114],{"type":27,"tag":67,"props":68,"children":76},"h2",{"className":69,"id":75},[70,71,72,73,74],"justify-center","mt-12","mb-4","mb-md-8","pt-0","unsere-leistungen",[77],{"type":50,"value":78}," Unsere Leistungen ",{"type":27,"tag":34,"props":80,"children":86},{"className":81},[82,83,39,40,41,42,84,85],"background","transparent-4","mb-8","mb-md-12",[87,94,99,103,109],{"type":27,"tag":88,"props":89,"children":91},"h3",{"id":90},"ui-design",[92],{"type":50,"value":93},"UI Design",{"type":27,"tag":46,"props":95,"children":96},{},[97],{"type":50,"value":98},"Design development of an interface with 3D visualization",{"type":27,"tag":100,"props":101,"children":102},"br",{},[],{"type":27,"tag":88,"props":104,"children":106},{"id":105},"frontend-development",[107],{"type":50,"value":108},"Frontend development",{"type":27,"tag":46,"props":110,"children":111},{},[112],{"type":50,"value":113},"Implementation of the design as a Nuxt/Vue project",{"type":27,"tag":58,"props":115,"children":117},{"className":116},[61],[],{"title":7,"searchDepth":119,"depth":119,"links":120},2,[121],{"id":75,"depth":119,"text":78},"markdown","common:en:portfolio:900.bitburger:index.md","common","en/portfolio/900.bitburger/index.md","en/portfolio/900.bitburger/index","md",[129,144],{"_path":130,"_dir":131,"_draft":6,"_partial":132,"_locale":7,"name":133,"slug":131,"text":134,"hoverText":135,"image":136,"customer":137,"tags":138,"_id":139,"_type":140,"title":141,"_source":124,"_file":142,"_stem":143,"_extension":140},"/en/portfolio/purize/_teaser","purize",true,"Purize Filters","E-Commerce for high-quality activated carbon filters","We support PURIZE® Filters with a complete e-commerce service including fulfillment solution and connection to shipping service providers. Our expertise in online retail enables the manufacturer of high-quality activated carbon filters \"Made in Germany\" to process their orders smoothly.","/images/portfolio/barcode-machine-verdandijpg.jpg","PURIZE® Filters",[21,22],"common:en:portfolio:9000.purize:_teaser.yaml","yaml","Teaser","en/portfolio/9000.purize/_teaser.yaml","en/portfolio/9000.purize/_teaser",{"_path":145,"_dir":146,"_draft":6,"_partial":132,"_locale":7,"name":147,"slug":146,"text":148,"hoverText":149,"image":150,"customer":147,"tags":151,"_id":153,"_type":140,"title":141,"_source":124,"_file":154,"_stem":155,"_extension":140},"/en/portfolio/werner-consulting/_teaser","werner-consulting","Werner Consulting","Custom software for a trustworthy business","Tailor-made software solutions as desktop applications and development of plugins for software frameworks for complex consulting solutions, e-commerce platforms, and inventory management systems.","/images/portfolio/werner_consulting/consulting_portfolio.jpg",[152,22],"backend","common:en:portfolio:9030.werner-consulting:_teaser.yaml","en/portfolio/9030.werner-consulting/_teaser.yaml","en/portfolio/9030.werner-consulting/_teaser",[157,176,186,196,207,221],{"_path":158,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":160,"description":161,"author":162,"image":163,"releaseDate":164,"blogCategories":165,"articleTags":168,"tags":171,"_type":122,"_id":173,"_source":124,"_file":174,"_stem":175,"_extension":127},"/en/blog/shopware-plugin-gitlab-pipeline-release","blog","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","robert-juzak","/images/dev-ops-dark.svg","2026-02-26",[166,167],"What moves us","DevOps",[167,169,170],"Open Source","Shopware",[21,172],"devops","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":177,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":178,"description":179,"author":162,"image":163,"releaseDate":164,"blogCategories":180,"articleTags":181,"tags":182,"_type":122,"_id":183,"_source":124,"_file":184,"_stem":185,"_extension":127},"/en/blog/shopware-plugin-gitlab-pipeline-build","Test, build and release a Shopware 6 Plugin with GitLab CI - Part 2: build","Part 2 - Build - of using GitLab for testing, building and releasing a Shopware 6 Plugin",[166,167],[167,169,170],[21,172],"common:en:blog:19.shopware-plugin-gitlab-pipeline-build.md","en/blog/19.shopware-plugin-gitlab-pipeline-build.md","en/blog/19.shopware-plugin-gitlab-pipeline-build",{"_path":187,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":188,"description":189,"author":162,"image":163,"releaseDate":164,"blogCategories":190,"articleTags":191,"tags":192,"_type":122,"_id":193,"_source":124,"_file":194,"_stem":195,"_extension":127},"/en/blog/shopware-plugin-gitlab-pipeline-test","Test, build and release a Shopware 6 Plugin with GitLab CI - Part 3: test","Part 3 - Test - of using GitLab for testing, building and releasing a Shopware 6 Plugin",[166,167],[167,169,170],[21,172],"common:en:blog:20.shopware-plugin-gitlab-pipeline-test.md","en/blog/20.shopware-plugin-gitlab-pipeline-test.md","en/blog/20.shopware-plugin-gitlab-pipeline-test",{"_path":197,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":198,"description":199,"author":162,"image":163,"releaseDate":200,"blogCategories":201,"articleTags":202,"tags":203,"_type":122,"_id":204,"_source":124,"_file":205,"_stem":206,"_extension":127},"/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",[166,167],[167,169],[21,172],"common:en:blog:16.shopware-renovate-bot.md","en/blog/16.shopware-renovate-bot.md","en/blog/16.shopware-renovate-bot",{"_path":208,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":209,"description":210,"author":211,"image":212,"releaseDate":213,"blogCategories":214,"articleTags":215,"tags":217,"_type":122,"_id":218,"_source":124,"_file":219,"_stem":220,"_extension":127},"/en/blog/amazon-mws-sp-api-wrapper","Amazon MWS to SP API Wrapper","We have released a wrapper that converts Amazon MWS to SP API, offering developers with outdated systems a simple solution. This open-source project provides a practical alternative to redevelopment and supports the continuation of existing applications.","bernd-helm","/blog/thumbnails/AWS.svg","2024-02-21",[166,167],[216,169],"Amazon",[22,152],"common:en:blog:11.amazon-mws-sp-api-wrapper.md","en/blog/11.amazon-mws-sp-api-wrapper.md","en/blog/11.amazon-mws-sp-api-wrapper",{"_path":222,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":223,"description":224,"author":211,"image":225,"releaseDate":226,"blogCategories":227,"articleTags":228,"tags":230,"_type":122,"_id":231,"_source":124,"_file":232,"_stem":233,"_extension":127},"/en/blog/shopware-5-parallel-thumbnail-generation","Shopware 5 – High-Speed Parallel Thumbnail Generation","How to tune the integrated SW5 mechanism to work more then 22 times faster! Shopware 5 - parallel thumbnail generation after moving a Shopware 5 system to another server. We had a customer with 400k images and 1600k thumbnails that needed to move from an old HDD based server to a new SSD …","/images/shopware.svg","2021-04-29",[170,167],[229],"VPN",[21],"common:en:blog:9.shopware-5-parallel-thumbnail-generation.md","en/blog/9.shopware-5-parallel-thumbnail-generation.md","en/blog/9.shopware-5-parallel-thumbnail-generation",{"_path":158,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":160,"description":161,"author":162,"image":163,"releaseDate":164,"blogCategories":235,"articleTags":236,"tags":237,"body":238,"_type":122,"_id":173,"_source":124,"_file":174,"_stem":175,"_extension":127},[166,167],[167,169,170],[21,172],{"type":24,"children":239,"toc":4673},[240,248,253,267,272,277,316,321,327,332,338,350,1435,1440,1468,1478,1481,1494,1517,1653,1666,1671,1677,1689,1709,2111,2152,2157,2178,2320,2332,2338,2349,2354,2366,2401,2406,3333,3338,3437,3442,3501,3512,3517,3538,3673,3683,3689,3710,3713,3717,3723,3729,3734,3750,3800,3959,3965,3970,3981,3994,4217,4622,4627,4667],{"type":27,"tag":241,"props":242,"children":247},"img",{"alt":7,"aspect-ratio":243,"height":244,"object-fit":245,"src":246},"1.78",300,"fill","/blog/shopware-plugin-release.png",[],{"type":27,"tag":46,"props":249,"children":250},{},[251],{"type":50,"value":252},"There are many ways to install Shopware 6 plugins. You can download them directly in the admin panel or install them with composer.",{"type":27,"tag":46,"props":254,"children":255},{},[256,258,265],{"type":50,"value":257},"There is a detailed comparison in the ",{"type":27,"tag":259,"props":260,"children":262},"a",{"href":261},"https://developer.shopware.com/docs/guides/plugins/plugins/",[263],{"type":50,"value":264},"official documentation",{"type":50,"value":266},".",{"type":27,"tag":46,"props":268,"children":269},{},[270],{"type":50,"value":271},"As a developer and maintainer of themes, customizations, third part API's, etc., I'm focused on Static Plugins.",{"type":27,"tag":46,"props":273,"children":274},{},[275],{"type":50,"value":276},"The workflow is simple:",{"type":27,"tag":278,"props":279,"children":280},"ol",{},[281,294,305],{"type":27,"tag":282,"props":283,"children":284},"li",{},[285,287],{"type":50,"value":286},"Create a plugin with ",{"type":27,"tag":288,"props":289,"children":291},"code",{"className":290},[],[292],{"type":50,"value":293},"bin/console plugin:create --static",{"type":27,"tag":282,"props":295,"children":296},{},[297,299],{"type":50,"value":298},"Require it with ",{"type":27,"tag":259,"props":300,"children":302},{"href":301},"https://developer.shopware.com/docs/guides/plugins/plugins/#static-plugins",[303],{"type":50,"value":304},"composer",{"type":27,"tag":282,"props":306,"children":307},{},[308,310],{"type":50,"value":309},"Build the project with ",{"type":27,"tag":259,"props":311,"children":313},{"href":312},"https://developer.shopware.com/docs/products/cli/project-commands/build.html#example-docker-image",[314],{"type":50,"value":315},"shopware-cli",{"type":27,"tag":46,"props":317,"children":318},{},[319],{"type":50,"value":320},"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":27,"tag":67,"props":322,"children":324},{"id":323},"extracting-the-plugin",[325],{"type":50,"value":326},"Extracting the plugin",{"type":27,"tag":46,"props":328,"children":329},{},[330],{"type":50,"value":331},"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":27,"tag":88,"props":333,"children":335},{"id":334},"download-with-git",[336],{"type":50,"value":337},"Download with git",{"type":27,"tag":46,"props":339,"children":340},{},[341,343,348],{"type":50,"value":342},"We just need to tell ",{"type":27,"tag":288,"props":344,"children":346},{"className":345},[],[347],{"type":50,"value":304},{"type":50,"value":349}," where to find our plugin",{"type":27,"tag":351,"props":352,"children":362},"pre",{"className":353,"code":354,"filename":355,"highlights":356,"language":361,"meta":7,"style":7},"language-json shiki shiki-themes github-dark github-dark monokai","{\n  \"name\": \"shopware/production\",\n  \"license\": \"MIT\",\n  \"type\": \"project\",\n  \"require\": {\n    \"composer-runtime-api\": \"^2.0\",\n    \"acme/sample-plugin\": \"^1.0\",\n    \"shopware/administration\": \"*\",\n    \"shopware/core\": \"6.6.10.2\",\n    \"shopware/elasticsearch\": \"*\",\n    \"shopware/storefront\": \"*\",\n    \"symfony/flex\": \"~2\"\n  },\n  \"repositories\": [\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/plugins/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/plugins/*/packages/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"path\",\n      \"url\": \"custom/static-plugins/*\",\n      \"options\": {\n        \"symlink\": true\n      }\n    },\n    {\n      \"type\": \"git\",\n      \"url\": \"https://\u003CDOMAIN-NAME>/\u003Cgroup>/\u003Crepo>.git\"\n    }\n  ],\n  \"autoload\": {\n    \"psr-4\": {\n      \"App\\\\\": \"src/\"\n    }\n  },\n  \"prefer-stable\": true,\n  \"config\": {\n    \"allow-plugins\": {\n      \"symfony/flex\": true,\n      \"symfony/runtime\": true\n    },\n    \"optimize-autoloader\": true,\n    \"sort-packages\": true\n  },\n  \"scripts\": {\n    \"auto-scripts\": {\n      \"assets:install\": \"symfony-cmd\"\n    },\n    \"post-install-cmd\": [\n      \"@auto-scripts\"\n    ],\n    \"post-update-cmd\": [\n      \"@auto-scripts\"\n    ]\n  },\n  \"extra\": {\n    \"symfony\": {\n      \"allow-contrib\": true,\n      \"endpoint\": [\n        \"https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json\",\n        \"flex://defaults\"\n      ]\n    }\n  }\n}\n","\u003Cproject-root>/composer.json",[357,358,359,360],36,37,38,39,"json",[363],{"type":27,"tag":288,"props":364,"children":365},{"__ignoreMap":7},[366,378,403,425,447,461,483,505,527,549,570,591,609,618,632,641,663,685,698,717,726,735,743,763,784,796,812,820,828,836,856,877,889,905,913,921,930,951,968,977,986,999,1012,1041,1049,1057,1079,1092,1105,1126,1143,1151,1172,1189,1197,1210,1223,1241,1249,1262,1271,1280,1293,1301,1310,1318,1331,1344,1365,1378,1391,1400,1409,1417,1426],{"type":27,"tag":367,"props":368,"children":371},"span",{"class":369,"line":370},"line",1,[372],{"type":27,"tag":367,"props":373,"children":375},{"style":374},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[376],{"type":50,"value":377},"{\n",{"type":27,"tag":367,"props":379,"children":380},{"class":369,"line":119},[381,387,392,398],{"type":27,"tag":367,"props":382,"children":384},{"style":383},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic",[385],{"type":50,"value":386},"  \"name\"",{"type":27,"tag":367,"props":388,"children":389},{"style":374},[390],{"type":50,"value":391},": ",{"type":27,"tag":367,"props":393,"children":395},{"style":394},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2",[396],{"type":50,"value":397},"\"shopware/production\"",{"type":27,"tag":367,"props":399,"children":400},{"style":374},[401],{"type":50,"value":402},",\n",{"type":27,"tag":367,"props":404,"children":406},{"class":369,"line":405},3,[407,412,416,421],{"type":27,"tag":367,"props":408,"children":409},{"style":383},[410],{"type":50,"value":411},"  \"license\"",{"type":27,"tag":367,"props":413,"children":414},{"style":374},[415],{"type":50,"value":391},{"type":27,"tag":367,"props":417,"children":418},{"style":394},[419],{"type":50,"value":420},"\"MIT\"",{"type":27,"tag":367,"props":422,"children":423},{"style":374},[424],{"type":50,"value":402},{"type":27,"tag":367,"props":426,"children":428},{"class":369,"line":427},4,[429,434,438,443],{"type":27,"tag":367,"props":430,"children":431},{"style":383},[432],{"type":50,"value":433},"  \"type\"",{"type":27,"tag":367,"props":435,"children":436},{"style":374},[437],{"type":50,"value":391},{"type":27,"tag":367,"props":439,"children":440},{"style":394},[441],{"type":50,"value":442},"\"project\"",{"type":27,"tag":367,"props":444,"children":445},{"style":374},[446],{"type":50,"value":402},{"type":27,"tag":367,"props":448,"children":450},{"class":369,"line":449},5,[451,456],{"type":27,"tag":367,"props":452,"children":453},{"style":383},[454],{"type":50,"value":455},"  \"require\"",{"type":27,"tag":367,"props":457,"children":458},{"style":374},[459],{"type":50,"value":460},": {\n",{"type":27,"tag":367,"props":462,"children":464},{"class":369,"line":463},6,[465,470,474,479],{"type":27,"tag":367,"props":466,"children":467},{"style":383},[468],{"type":50,"value":469},"    \"composer-runtime-api\"",{"type":27,"tag":367,"props":471,"children":472},{"style":374},[473],{"type":50,"value":391},{"type":27,"tag":367,"props":475,"children":476},{"style":394},[477],{"type":50,"value":478},"\"^2.0\"",{"type":27,"tag":367,"props":480,"children":481},{"style":374},[482],{"type":50,"value":402},{"type":27,"tag":367,"props":484,"children":486},{"class":369,"line":485},7,[487,492,496,501],{"type":27,"tag":367,"props":488,"children":489},{"style":383},[490],{"type":50,"value":491},"    \"acme/sample-plugin\"",{"type":27,"tag":367,"props":493,"children":494},{"style":374},[495],{"type":50,"value":391},{"type":27,"tag":367,"props":497,"children":498},{"style":394},[499],{"type":50,"value":500},"\"^1.0\"",{"type":27,"tag":367,"props":502,"children":503},{"style":374},[504],{"type":50,"value":402},{"type":27,"tag":367,"props":506,"children":508},{"class":369,"line":507},8,[509,514,518,523],{"type":27,"tag":367,"props":510,"children":511},{"style":383},[512],{"type":50,"value":513},"    \"shopware/administration\"",{"type":27,"tag":367,"props":515,"children":516},{"style":374},[517],{"type":50,"value":391},{"type":27,"tag":367,"props":519,"children":520},{"style":394},[521],{"type":50,"value":522},"\"*\"",{"type":27,"tag":367,"props":524,"children":525},{"style":374},[526],{"type":50,"value":402},{"type":27,"tag":367,"props":528,"children":530},{"class":369,"line":529},9,[531,536,540,545],{"type":27,"tag":367,"props":532,"children":533},{"style":383},[534],{"type":50,"value":535},"    \"shopware/core\"",{"type":27,"tag":367,"props":537,"children":538},{"style":374},[539],{"type":50,"value":391},{"type":27,"tag":367,"props":541,"children":542},{"style":394},[543],{"type":50,"value":544},"\"6.6.10.2\"",{"type":27,"tag":367,"props":546,"children":547},{"style":374},[548],{"type":50,"value":402},{"type":27,"tag":367,"props":550,"children":552},{"class":369,"line":551},10,[553,558,562,566],{"type":27,"tag":367,"props":554,"children":555},{"style":383},[556],{"type":50,"value":557},"    \"shopware/elasticsearch\"",{"type":27,"tag":367,"props":559,"children":560},{"style":374},[561],{"type":50,"value":391},{"type":27,"tag":367,"props":563,"children":564},{"style":394},[565],{"type":50,"value":522},{"type":27,"tag":367,"props":567,"children":568},{"style":374},[569],{"type":50,"value":402},{"type":27,"tag":367,"props":571,"children":573},{"class":369,"line":572},11,[574,579,583,587],{"type":27,"tag":367,"props":575,"children":576},{"style":383},[577],{"type":50,"value":578},"    \"shopware/storefront\"",{"type":27,"tag":367,"props":580,"children":581},{"style":374},[582],{"type":50,"value":391},{"type":27,"tag":367,"props":584,"children":585},{"style":394},[586],{"type":50,"value":522},{"type":27,"tag":367,"props":588,"children":589},{"style":374},[590],{"type":50,"value":402},{"type":27,"tag":367,"props":592,"children":594},{"class":369,"line":593},12,[595,600,604],{"type":27,"tag":367,"props":596,"children":597},{"style":383},[598],{"type":50,"value":599},"    \"symfony/flex\"",{"type":27,"tag":367,"props":601,"children":602},{"style":374},[603],{"type":50,"value":391},{"type":27,"tag":367,"props":605,"children":606},{"style":394},[607],{"type":50,"value":608},"\"~2\"\n",{"type":27,"tag":367,"props":610,"children":612},{"class":369,"line":611},13,[613],{"type":27,"tag":367,"props":614,"children":615},{"style":374},[616],{"type":50,"value":617},"  },\n",{"type":27,"tag":367,"props":619,"children":621},{"class":369,"line":620},14,[622,627],{"type":27,"tag":367,"props":623,"children":624},{"style":383},[625],{"type":50,"value":626},"  \"repositories\"",{"type":27,"tag":367,"props":628,"children":629},{"style":374},[630],{"type":50,"value":631},": [\n",{"type":27,"tag":367,"props":633,"children":635},{"class":369,"line":634},15,[636],{"type":27,"tag":367,"props":637,"children":638},{"style":374},[639],{"type":50,"value":640},"    {\n",{"type":27,"tag":367,"props":642,"children":644},{"class":369,"line":643},16,[645,650,654,659],{"type":27,"tag":367,"props":646,"children":647},{"style":383},[648],{"type":50,"value":649},"      \"type\"",{"type":27,"tag":367,"props":651,"children":652},{"style":374},[653],{"type":50,"value":391},{"type":27,"tag":367,"props":655,"children":656},{"style":394},[657],{"type":50,"value":658},"\"path\"",{"type":27,"tag":367,"props":660,"children":661},{"style":374},[662],{"type":50,"value":402},{"type":27,"tag":367,"props":664,"children":666},{"class":369,"line":665},17,[667,672,676,681],{"type":27,"tag":367,"props":668,"children":669},{"style":383},[670],{"type":50,"value":671},"      \"url\"",{"type":27,"tag":367,"props":673,"children":674},{"style":374},[675],{"type":50,"value":391},{"type":27,"tag":367,"props":677,"children":678},{"style":394},[679],{"type":50,"value":680},"\"custom/plugins/*\"",{"type":27,"tag":367,"props":682,"children":683},{"style":374},[684],{"type":50,"value":402},{"type":27,"tag":367,"props":686,"children":688},{"class":369,"line":687},18,[689,694],{"type":27,"tag":367,"props":690,"children":691},{"style":383},[692],{"type":50,"value":693},"      \"options\"",{"type":27,"tag":367,"props":695,"children":696},{"style":374},[697],{"type":50,"value":460},{"type":27,"tag":367,"props":699,"children":701},{"class":369,"line":700},19,[702,707,711],{"type":27,"tag":367,"props":703,"children":704},{"style":383},[705],{"type":50,"value":706},"        \"symlink\"",{"type":27,"tag":367,"props":708,"children":709},{"style":374},[710],{"type":50,"value":391},{"type":27,"tag":367,"props":712,"children":714},{"style":713},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[715],{"type":50,"value":716},"true\n",{"type":27,"tag":367,"props":718,"children":720},{"class":369,"line":719},20,[721],{"type":27,"tag":367,"props":722,"children":723},{"style":374},[724],{"type":50,"value":725},"      }\n",{"type":27,"tag":367,"props":727,"children":729},{"class":369,"line":728},21,[730],{"type":27,"tag":367,"props":731,"children":732},{"style":374},[733],{"type":50,"value":734},"    },\n",{"type":27,"tag":367,"props":736,"children":738},{"class":369,"line":737},22,[739],{"type":27,"tag":367,"props":740,"children":741},{"style":374},[742],{"type":50,"value":640},{"type":27,"tag":367,"props":744,"children":746},{"class":369,"line":745},23,[747,751,755,759],{"type":27,"tag":367,"props":748,"children":749},{"style":383},[750],{"type":50,"value":649},{"type":27,"tag":367,"props":752,"children":753},{"style":374},[754],{"type":50,"value":391},{"type":27,"tag":367,"props":756,"children":757},{"style":394},[758],{"type":50,"value":658},{"type":27,"tag":367,"props":760,"children":761},{"style":374},[762],{"type":50,"value":402},{"type":27,"tag":367,"props":764,"children":766},{"class":369,"line":765},24,[767,771,775,780],{"type":27,"tag":367,"props":768,"children":769},{"style":383},[770],{"type":50,"value":671},{"type":27,"tag":367,"props":772,"children":773},{"style":374},[774],{"type":50,"value":391},{"type":27,"tag":367,"props":776,"children":777},{"style":394},[778],{"type":50,"value":779},"\"custom/plugins/*/packages/*\"",{"type":27,"tag":367,"props":781,"children":782},{"style":374},[783],{"type":50,"value":402},{"type":27,"tag":367,"props":785,"children":787},{"class":369,"line":786},25,[788,792],{"type":27,"tag":367,"props":789,"children":790},{"style":383},[791],{"type":50,"value":693},{"type":27,"tag":367,"props":793,"children":794},{"style":374},[795],{"type":50,"value":460},{"type":27,"tag":367,"props":797,"children":799},{"class":369,"line":798},26,[800,804,808],{"type":27,"tag":367,"props":801,"children":802},{"style":383},[803],{"type":50,"value":706},{"type":27,"tag":367,"props":805,"children":806},{"style":374},[807],{"type":50,"value":391},{"type":27,"tag":367,"props":809,"children":810},{"style":713},[811],{"type":50,"value":716},{"type":27,"tag":367,"props":813,"children":815},{"class":369,"line":814},27,[816],{"type":27,"tag":367,"props":817,"children":818},{"style":374},[819],{"type":50,"value":725},{"type":27,"tag":367,"props":821,"children":823},{"class":369,"line":822},28,[824],{"type":27,"tag":367,"props":825,"children":826},{"style":374},[827],{"type":50,"value":734},{"type":27,"tag":367,"props":829,"children":831},{"class":369,"line":830},29,[832],{"type":27,"tag":367,"props":833,"children":834},{"style":374},[835],{"type":50,"value":640},{"type":27,"tag":367,"props":837,"children":839},{"class":369,"line":838},30,[840,844,848,852],{"type":27,"tag":367,"props":841,"children":842},{"style":383},[843],{"type":50,"value":649},{"type":27,"tag":367,"props":845,"children":846},{"style":374},[847],{"type":50,"value":391},{"type":27,"tag":367,"props":849,"children":850},{"style":394},[851],{"type":50,"value":658},{"type":27,"tag":367,"props":853,"children":854},{"style":374},[855],{"type":50,"value":402},{"type":27,"tag":367,"props":857,"children":859},{"class":369,"line":858},31,[860,864,868,873],{"type":27,"tag":367,"props":861,"children":862},{"style":383},[863],{"type":50,"value":671},{"type":27,"tag":367,"props":865,"children":866},{"style":374},[867],{"type":50,"value":391},{"type":27,"tag":367,"props":869,"children":870},{"style":394},[871],{"type":50,"value":872},"\"custom/static-plugins/*\"",{"type":27,"tag":367,"props":874,"children":875},{"style":374},[876],{"type":50,"value":402},{"type":27,"tag":367,"props":878,"children":880},{"class":369,"line":879},32,[881,885],{"type":27,"tag":367,"props":882,"children":883},{"style":383},[884],{"type":50,"value":693},{"type":27,"tag":367,"props":886,"children":887},{"style":374},[888],{"type":50,"value":460},{"type":27,"tag":367,"props":890,"children":892},{"class":369,"line":891},33,[893,897,901],{"type":27,"tag":367,"props":894,"children":895},{"style":383},[896],{"type":50,"value":706},{"type":27,"tag":367,"props":898,"children":899},{"style":374},[900],{"type":50,"value":391},{"type":27,"tag":367,"props":902,"children":903},{"style":713},[904],{"type":50,"value":716},{"type":27,"tag":367,"props":906,"children":908},{"class":369,"line":907},34,[909],{"type":27,"tag":367,"props":910,"children":911},{"style":374},[912],{"type":50,"value":725},{"type":27,"tag":367,"props":914,"children":916},{"class":369,"line":915},35,[917],{"type":27,"tag":367,"props":918,"children":919},{"style":374},[920],{"type":50,"value":734},{"type":27,"tag":367,"props":922,"children":925},{"class":923,"line":357},[369,924],"highlight",[926],{"type":27,"tag":367,"props":927,"children":928},{"style":374},[929],{"type":50,"value":640},{"type":27,"tag":367,"props":931,"children":933},{"class":932,"line":358},[369,924],[934,938,942,947],{"type":27,"tag":367,"props":935,"children":936},{"style":383},[937],{"type":50,"value":649},{"type":27,"tag":367,"props":939,"children":940},{"style":374},[941],{"type":50,"value":391},{"type":27,"tag":367,"props":943,"children":944},{"style":394},[945],{"type":50,"value":946},"\"git\"",{"type":27,"tag":367,"props":948,"children":949},{"style":374},[950],{"type":50,"value":402},{"type":27,"tag":367,"props":952,"children":954},{"class":953,"line":359},[369,924],[955,959,963],{"type":27,"tag":367,"props":956,"children":957},{"style":383},[958],{"type":50,"value":671},{"type":27,"tag":367,"props":960,"children":961},{"style":374},[962],{"type":50,"value":391},{"type":27,"tag":367,"props":964,"children":965},{"style":394},[966],{"type":50,"value":967},"\"https://\u003CDOMAIN-NAME>/\u003Cgroup>/\u003Crepo>.git\"\n",{"type":27,"tag":367,"props":969,"children":971},{"class":970,"line":360},[369,924],[972],{"type":27,"tag":367,"props":973,"children":974},{"style":374},[975],{"type":50,"value":976},"    }\n",{"type":27,"tag":367,"props":978,"children":980},{"class":369,"line":979},40,[981],{"type":27,"tag":367,"props":982,"children":983},{"style":374},[984],{"type":50,"value":985},"  ],\n",{"type":27,"tag":367,"props":987,"children":989},{"class":369,"line":988},41,[990,995],{"type":27,"tag":367,"props":991,"children":992},{"style":383},[993],{"type":50,"value":994},"  \"autoload\"",{"type":27,"tag":367,"props":996,"children":997},{"style":374},[998],{"type":50,"value":460},{"type":27,"tag":367,"props":1000,"children":1002},{"class":369,"line":1001},42,[1003,1008],{"type":27,"tag":367,"props":1004,"children":1005},{"style":383},[1006],{"type":50,"value":1007},"    \"psr-4\"",{"type":27,"tag":367,"props":1009,"children":1010},{"style":374},[1011],{"type":50,"value":460},{"type":27,"tag":367,"props":1013,"children":1015},{"class":369,"line":1014},43,[1016,1021,1027,1032,1036],{"type":27,"tag":367,"props":1017,"children":1018},{"style":383},[1019],{"type":50,"value":1020},"      \"App",{"type":27,"tag":367,"props":1022,"children":1024},{"style":1023},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#AE81FF;--shiki-sepia-font-style:italic",[1025],{"type":50,"value":1026},"\\\\",{"type":27,"tag":367,"props":1028,"children":1029},{"style":383},[1030],{"type":50,"value":1031},"\"",{"type":27,"tag":367,"props":1033,"children":1034},{"style":374},[1035],{"type":50,"value":391},{"type":27,"tag":367,"props":1037,"children":1038},{"style":394},[1039],{"type":50,"value":1040},"\"src/\"\n",{"type":27,"tag":367,"props":1042,"children":1044},{"class":369,"line":1043},44,[1045],{"type":27,"tag":367,"props":1046,"children":1047},{"style":374},[1048],{"type":50,"value":976},{"type":27,"tag":367,"props":1050,"children":1052},{"class":369,"line":1051},45,[1053],{"type":27,"tag":367,"props":1054,"children":1055},{"style":374},[1056],{"type":50,"value":617},{"type":27,"tag":367,"props":1058,"children":1060},{"class":369,"line":1059},46,[1061,1066,1070,1075],{"type":27,"tag":367,"props":1062,"children":1063},{"style":383},[1064],{"type":50,"value":1065},"  \"prefer-stable\"",{"type":27,"tag":367,"props":1067,"children":1068},{"style":374},[1069],{"type":50,"value":391},{"type":27,"tag":367,"props":1071,"children":1072},{"style":713},[1073],{"type":50,"value":1074},"true",{"type":27,"tag":367,"props":1076,"children":1077},{"style":374},[1078],{"type":50,"value":402},{"type":27,"tag":367,"props":1080,"children":1082},{"class":369,"line":1081},47,[1083,1088],{"type":27,"tag":367,"props":1084,"children":1085},{"style":383},[1086],{"type":50,"value":1087},"  \"config\"",{"type":27,"tag":367,"props":1089,"children":1090},{"style":374},[1091],{"type":50,"value":460},{"type":27,"tag":367,"props":1093,"children":1095},{"class":369,"line":1094},48,[1096,1101],{"type":27,"tag":367,"props":1097,"children":1098},{"style":383},[1099],{"type":50,"value":1100},"    \"allow-plugins\"",{"type":27,"tag":367,"props":1102,"children":1103},{"style":374},[1104],{"type":50,"value":460},{"type":27,"tag":367,"props":1106,"children":1108},{"class":369,"line":1107},49,[1109,1114,1118,1122],{"type":27,"tag":367,"props":1110,"children":1111},{"style":383},[1112],{"type":50,"value":1113},"      \"symfony/flex\"",{"type":27,"tag":367,"props":1115,"children":1116},{"style":374},[1117],{"type":50,"value":391},{"type":27,"tag":367,"props":1119,"children":1120},{"style":713},[1121],{"type":50,"value":1074},{"type":27,"tag":367,"props":1123,"children":1124},{"style":374},[1125],{"type":50,"value":402},{"type":27,"tag":367,"props":1127,"children":1129},{"class":369,"line":1128},50,[1130,1135,1139],{"type":27,"tag":367,"props":1131,"children":1132},{"style":383},[1133],{"type":50,"value":1134},"      \"symfony/runtime\"",{"type":27,"tag":367,"props":1136,"children":1137},{"style":374},[1138],{"type":50,"value":391},{"type":27,"tag":367,"props":1140,"children":1141},{"style":713},[1142],{"type":50,"value":716},{"type":27,"tag":367,"props":1144,"children":1146},{"class":369,"line":1145},51,[1147],{"type":27,"tag":367,"props":1148,"children":1149},{"style":374},[1150],{"type":50,"value":734},{"type":27,"tag":367,"props":1152,"children":1154},{"class":369,"line":1153},52,[1155,1160,1164,1168],{"type":27,"tag":367,"props":1156,"children":1157},{"style":383},[1158],{"type":50,"value":1159},"    \"optimize-autoloader\"",{"type":27,"tag":367,"props":1161,"children":1162},{"style":374},[1163],{"type":50,"value":391},{"type":27,"tag":367,"props":1165,"children":1166},{"style":713},[1167],{"type":50,"value":1074},{"type":27,"tag":367,"props":1169,"children":1170},{"style":374},[1171],{"type":50,"value":402},{"type":27,"tag":367,"props":1173,"children":1175},{"class":369,"line":1174},53,[1176,1181,1185],{"type":27,"tag":367,"props":1177,"children":1178},{"style":383},[1179],{"type":50,"value":1180},"    \"sort-packages\"",{"type":27,"tag":367,"props":1182,"children":1183},{"style":374},[1184],{"type":50,"value":391},{"type":27,"tag":367,"props":1186,"children":1187},{"style":713},[1188],{"type":50,"value":716},{"type":27,"tag":367,"props":1190,"children":1192},{"class":369,"line":1191},54,[1193],{"type":27,"tag":367,"props":1194,"children":1195},{"style":374},[1196],{"type":50,"value":617},{"type":27,"tag":367,"props":1198,"children":1200},{"class":369,"line":1199},55,[1201,1206],{"type":27,"tag":367,"props":1202,"children":1203},{"style":383},[1204],{"type":50,"value":1205},"  \"scripts\"",{"type":27,"tag":367,"props":1207,"children":1208},{"style":374},[1209],{"type":50,"value":460},{"type":27,"tag":367,"props":1211,"children":1213},{"class":369,"line":1212},56,[1214,1219],{"type":27,"tag":367,"props":1215,"children":1216},{"style":383},[1217],{"type":50,"value":1218},"    \"auto-scripts\"",{"type":27,"tag":367,"props":1220,"children":1221},{"style":374},[1222],{"type":50,"value":460},{"type":27,"tag":367,"props":1224,"children":1226},{"class":369,"line":1225},57,[1227,1232,1236],{"type":27,"tag":367,"props":1228,"children":1229},{"style":383},[1230],{"type":50,"value":1231},"      \"assets:install\"",{"type":27,"tag":367,"props":1233,"children":1234},{"style":374},[1235],{"type":50,"value":391},{"type":27,"tag":367,"props":1237,"children":1238},{"style":394},[1239],{"type":50,"value":1240},"\"symfony-cmd\"\n",{"type":27,"tag":367,"props":1242,"children":1244},{"class":369,"line":1243},58,[1245],{"type":27,"tag":367,"props":1246,"children":1247},{"style":374},[1248],{"type":50,"value":734},{"type":27,"tag":367,"props":1250,"children":1252},{"class":369,"line":1251},59,[1253,1258],{"type":27,"tag":367,"props":1254,"children":1255},{"style":383},[1256],{"type":50,"value":1257},"    \"post-install-cmd\"",{"type":27,"tag":367,"props":1259,"children":1260},{"style":374},[1261],{"type":50,"value":631},{"type":27,"tag":367,"props":1263,"children":1265},{"class":369,"line":1264},60,[1266],{"type":27,"tag":367,"props":1267,"children":1268},{"style":394},[1269],{"type":50,"value":1270},"      \"@auto-scripts\"\n",{"type":27,"tag":367,"props":1272,"children":1274},{"class":369,"line":1273},61,[1275],{"type":27,"tag":367,"props":1276,"children":1277},{"style":374},[1278],{"type":50,"value":1279},"    ],\n",{"type":27,"tag":367,"props":1281,"children":1283},{"class":369,"line":1282},62,[1284,1289],{"type":27,"tag":367,"props":1285,"children":1286},{"style":383},[1287],{"type":50,"value":1288},"    \"post-update-cmd\"",{"type":27,"tag":367,"props":1290,"children":1291},{"style":374},[1292],{"type":50,"value":631},{"type":27,"tag":367,"props":1294,"children":1296},{"class":369,"line":1295},63,[1297],{"type":27,"tag":367,"props":1298,"children":1299},{"style":394},[1300],{"type":50,"value":1270},{"type":27,"tag":367,"props":1302,"children":1304},{"class":369,"line":1303},64,[1305],{"type":27,"tag":367,"props":1306,"children":1307},{"style":374},[1308],{"type":50,"value":1309},"    ]\n",{"type":27,"tag":367,"props":1311,"children":1313},{"class":369,"line":1312},65,[1314],{"type":27,"tag":367,"props":1315,"children":1316},{"style":374},[1317],{"type":50,"value":617},{"type":27,"tag":367,"props":1319,"children":1321},{"class":369,"line":1320},66,[1322,1327],{"type":27,"tag":367,"props":1323,"children":1324},{"style":383},[1325],{"type":50,"value":1326},"  \"extra\"",{"type":27,"tag":367,"props":1328,"children":1329},{"style":374},[1330],{"type":50,"value":460},{"type":27,"tag":367,"props":1332,"children":1334},{"class":369,"line":1333},67,[1335,1340],{"type":27,"tag":367,"props":1336,"children":1337},{"style":383},[1338],{"type":50,"value":1339},"    \"symfony\"",{"type":27,"tag":367,"props":1341,"children":1342},{"style":374},[1343],{"type":50,"value":460},{"type":27,"tag":367,"props":1345,"children":1347},{"class":369,"line":1346},68,[1348,1353,1357,1361],{"type":27,"tag":367,"props":1349,"children":1350},{"style":383},[1351],{"type":50,"value":1352},"      \"allow-contrib\"",{"type":27,"tag":367,"props":1354,"children":1355},{"style":374},[1356],{"type":50,"value":391},{"type":27,"tag":367,"props":1358,"children":1359},{"style":713},[1360],{"type":50,"value":1074},{"type":27,"tag":367,"props":1362,"children":1363},{"style":374},[1364],{"type":50,"value":402},{"type":27,"tag":367,"props":1366,"children":1368},{"class":369,"line":1367},69,[1369,1374],{"type":27,"tag":367,"props":1370,"children":1371},{"style":383},[1372],{"type":50,"value":1373},"      \"endpoint\"",{"type":27,"tag":367,"props":1375,"children":1376},{"style":374},[1377],{"type":50,"value":631},{"type":27,"tag":367,"props":1379,"children":1381},{"class":369,"line":1380},70,[1382,1387],{"type":27,"tag":367,"props":1383,"children":1384},{"style":394},[1385],{"type":50,"value":1386},"        \"https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json\"",{"type":27,"tag":367,"props":1388,"children":1389},{"style":374},[1390],{"type":50,"value":402},{"type":27,"tag":367,"props":1392,"children":1394},{"class":369,"line":1393},71,[1395],{"type":27,"tag":367,"props":1396,"children":1397},{"style":394},[1398],{"type":50,"value":1399},"        \"flex://defaults\"\n",{"type":27,"tag":367,"props":1401,"children":1403},{"class":369,"line":1402},72,[1404],{"type":27,"tag":367,"props":1405,"children":1406},{"style":374},[1407],{"type":50,"value":1408},"      ]\n",{"type":27,"tag":367,"props":1410,"children":1412},{"class":369,"line":1411},73,[1413],{"type":27,"tag":367,"props":1414,"children":1415},{"style":374},[1416],{"type":50,"value":976},{"type":27,"tag":367,"props":1418,"children":1420},{"class":369,"line":1419},74,[1421],{"type":27,"tag":367,"props":1422,"children":1423},{"style":374},[1424],{"type":50,"value":1425},"  }\n",{"type":27,"tag":367,"props":1427,"children":1429},{"class":369,"line":1428},75,[1430],{"type":27,"tag":367,"props":1431,"children":1432},{"style":374},[1433],{"type":50,"value":1434},"}\n",{"type":27,"tag":46,"props":1436,"children":1437},{},[1438],{"type":50,"value":1439},"and require it with",{"type":27,"tag":351,"props":1441,"children":1445},{"className":1442,"code":1443,"language":1444,"meta":7,"style":7},"language-shell shiki shiki-themes github-dark github-dark monokai","composer req acme/sample-plugin\n","shell",[1446],{"type":27,"tag":288,"props":1447,"children":1448},{"__ignoreMap":7},[1449],{"type":27,"tag":367,"props":1450,"children":1451},{"class":369,"line":370},[1452,1457,1463],{"type":27,"tag":367,"props":1453,"children":1455},{"style":1454},"--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E",[1456],{"type":50,"value":304},{"type":27,"tag":367,"props":1458,"children":1460},{"style":1459},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[1461],{"type":50,"value":1462}," req",{"type":27,"tag":367,"props":1464,"children":1465},{"style":1459},[1466],{"type":50,"value":1467}," acme/sample-plugin\n",{"type":27,"tag":1469,"props":1470,"children":1472},"v-alert",{"type":1471},"error",[1473],{"type":27,"tag":46,"props":1474,"children":1475},{},[1476],{"type":50,"value":1477},"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":27,"tag":100,"props":1479,"children":1480},{},[],{"type":27,"tag":46,"props":1482,"children":1483},{},[1484,1486,1492],{"type":50,"value":1485},"Yes... this is the downside. We need to use ",{"type":27,"tag":288,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":50,"value":1491},"dev-master",{"type":50,"value":1493}," as a version",{"type":27,"tag":351,"props":1495,"children":1497},{"className":1442,"code":1496,"language":1444,"meta":7,"style":7},"composer req acme/sample-plugin:dev-master\n",[1498],{"type":27,"tag":288,"props":1499,"children":1500},{"__ignoreMap":7},[1501],{"type":27,"tag":367,"props":1502,"children":1503},{"class":369,"line":370},[1504,1508,1512],{"type":27,"tag":367,"props":1505,"children":1506},{"style":1454},[1507],{"type":50,"value":304},{"type":27,"tag":367,"props":1509,"children":1510},{"style":1459},[1511],{"type":50,"value":1462},{"type":27,"tag":367,"props":1513,"children":1514},{"style":1459},[1515],{"type":50,"value":1516}," acme/sample-plugin:dev-master\n",{"type":27,"tag":351,"props":1518,"children":1522},{"className":1519,"code":1520,"language":1521,"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",[1523],{"type":27,"tag":288,"props":1524,"children":1525},{"__ignoreMap":7},[1526,1534,1542,1550,1558,1566,1574,1582,1590,1598,1606,1614,1622,1630,1638,1645],{"type":27,"tag":367,"props":1527,"children":1528},{"class":369,"line":370},[1529],{"type":27,"tag":367,"props":1530,"children":1531},{},[1532],{"type":50,"value":1533},"./composer.json has been updated\n",{"type":27,"tag":367,"props":1535,"children":1536},{"class":369,"line":119},[1537],{"type":27,"tag":367,"props":1538,"children":1539},{},[1540],{"type":50,"value":1541},"Running composer update acme/sample-plugin\n",{"type":27,"tag":367,"props":1543,"children":1544},{"class":369,"line":405},[1545],{"type":27,"tag":367,"props":1546,"children":1547},{},[1548],{"type":50,"value":1549},"Loading composer repositories with package information                                                                \n",{"type":27,"tag":367,"props":1551,"children":1552},{"class":369,"line":427},[1553],{"type":27,"tag":367,"props":1554,"children":1555},{},[1556],{"type":50,"value":1557},"Updating dependencies                                 \n",{"type":27,"tag":367,"props":1559,"children":1560},{"class":369,"line":449},[1561],{"type":27,"tag":367,"props":1562,"children":1563},{},[1564],{"type":50,"value":1565},"Lock file operations: 1 install, 0 updates, 0 removals\n",{"type":27,"tag":367,"props":1567,"children":1568},{"class":369,"line":463},[1569],{"type":27,"tag":367,"props":1570,"children":1571},{},[1572],{"type":50,"value":1573},"  - Locking acme/sample-plugin (dev-master 294414d)\n",{"type":27,"tag":367,"props":1575,"children":1576},{"class":369,"line":485},[1577],{"type":27,"tag":367,"props":1578,"children":1579},{},[1580],{"type":50,"value":1581},"Writing lock file\n",{"type":27,"tag":367,"props":1583,"children":1584},{"class":369,"line":507},[1585],{"type":27,"tag":367,"props":1586,"children":1587},{},[1588],{"type":50,"value":1589},"Installing dependencies from lock file (including require-dev)\n",{"type":27,"tag":367,"props":1591,"children":1592},{"class":369,"line":529},[1593],{"type":27,"tag":367,"props":1594,"children":1595},{},[1596],{"type":50,"value":1597},"Package operations: 1 install, 0 updates, 0 removals\n",{"type":27,"tag":367,"props":1599,"children":1600},{"class":369,"line":551},[1601],{"type":27,"tag":367,"props":1602,"children":1603},{},[1604],{"type":50,"value":1605},"  - Syncing acme/sample-plugin (dev-master 294414d) into cache\n",{"type":27,"tag":367,"props":1607,"children":1608},{"class":369,"line":572},[1609],{"type":27,"tag":367,"props":1610,"children":1611},{},[1612],{"type":50,"value":1613},"  - Installing acme/sample-plugin (dev-master 294414d): Cloning 294414deb2 from cache\n",{"type":27,"tag":367,"props":1615,"children":1616},{"class":369,"line":593},[1617],{"type":27,"tag":367,"props":1618,"children":1619},{},[1620],{"type":50,"value":1621},"Generating optimized autoload files\n",{"type":27,"tag":367,"props":1623,"children":1624},{"class":369,"line":611},[1625],{"type":27,"tag":367,"props":1626,"children":1627},{"emptyLinePlaceholder":132},[1628],{"type":50,"value":1629},"\n",{"type":27,"tag":367,"props":1631,"children":1632},{"class":369,"line":620},[1633],{"type":27,"tag":367,"props":1634,"children":1635},{},[1636],{"type":50,"value":1637},"Run composer recipes at any time to see the status of your Symfony recipes.\n",{"type":27,"tag":367,"props":1639,"children":1640},{"class":369,"line":634},[1641],{"type":27,"tag":367,"props":1642,"children":1643},{"emptyLinePlaceholder":132},[1644],{"type":50,"value":1629},{"type":27,"tag":367,"props":1646,"children":1647},{"class":369,"line":643},[1648],{"type":27,"tag":367,"props":1649,"children":1650},{},[1651],{"type":50,"value":1652},"Executing script assets:install [OK]\n",{"type":27,"tag":46,"props":1654,"children":1655},{},[1656,1658,1664],{"type":50,"value":1657},"Composer will use ",{"type":27,"tag":288,"props":1659,"children":1661},{"className":1660},[],[1662],{"type":50,"value":1663},"git",{"type":50,"value":1665}," to clone our repo and use the default branch and the commit hash to track the release.",{"type":27,"tag":46,"props":1667,"children":1668},{},[1669],{"type":50,"value":1670},"This works, but we can do better.",{"type":27,"tag":88,"props":1672,"children":1674},{"id":1673},"git-tags",[1675],{"type":50,"value":1676},"Git tags",{"type":27,"tag":46,"props":1678,"children":1679},{},[1680,1682,1688],{"type":50,"value":1681},"Let's tag our plugin with ",{"type":27,"tag":288,"props":1683,"children":1685},{"className":1684},[],[1686],{"type":50,"value":1687},"v1.0.0",{"type":50,"value":266},{"type":27,"tag":46,"props":1690,"children":1691},{},[1692,1694,1700,1702,1708],{"type":50,"value":1693},"Make sure to set the ",{"type":27,"tag":288,"props":1695,"children":1697},{"className":1696},[],[1698],{"type":50,"value":1699},"version",{"type":50,"value":1701}," in ",{"type":27,"tag":288,"props":1703,"children":1705},{"className":1704},[],[1706],{"type":50,"value":1707},"composer.json",{"type":50,"value":266},{"type":27,"tag":351,"props":1710,"children":1714},{"className":353,"code":1711,"filename":1712,"highlights":1713,"language":361,"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",[449],[1715],{"type":27,"tag":288,"props":1716,"children":1717},{"__ignoreMap":7},[1718,1725,1746,1766,1787,1809,1829,1841,1858,1865,1877,1907,1919,1940,1957,1965,1972,1984,1996,2020,2027,2034,2046,2057,2090,2097,2104],{"type":27,"tag":367,"props":1719,"children":1720},{"class":369,"line":370},[1721],{"type":27,"tag":367,"props":1722,"children":1723},{"style":374},[1724],{"type":50,"value":377},{"type":27,"tag":367,"props":1726,"children":1727},{"class":369,"line":119},[1728,1733,1737,1742],{"type":27,"tag":367,"props":1729,"children":1730},{"style":383},[1731],{"type":50,"value":1732},"    \"name\"",{"type":27,"tag":367,"props":1734,"children":1735},{"style":374},[1736],{"type":50,"value":391},{"type":27,"tag":367,"props":1738,"children":1739},{"style":394},[1740],{"type":50,"value":1741},"\"acme/sample-plugin\"",{"type":27,"tag":367,"props":1743,"children":1744},{"style":374},[1745],{"type":50,"value":402},{"type":27,"tag":367,"props":1747,"children":1748},{"class":369,"line":405},[1749,1754,1758,1762],{"type":27,"tag":367,"props":1750,"children":1751},{"style":383},[1752],{"type":50,"value":1753},"    \"description\"",{"type":27,"tag":367,"props":1755,"children":1756},{"style":374},[1757],{"type":50,"value":391},{"type":27,"tag":367,"props":1759,"children":1760},{"style":394},[1761],{"type":50,"value":1741},{"type":27,"tag":367,"props":1763,"children":1764},{"style":374},[1765],{"type":50,"value":402},{"type":27,"tag":367,"props":1767,"children":1768},{"class":369,"line":427},[1769,1774,1778,1783],{"type":27,"tag":367,"props":1770,"children":1771},{"style":383},[1772],{"type":50,"value":1773},"    \"type\"",{"type":27,"tag":367,"props":1775,"children":1776},{"style":374},[1777],{"type":50,"value":391},{"type":27,"tag":367,"props":1779,"children":1780},{"style":394},[1781],{"type":50,"value":1782},"\"shopware-platform-plugin\"",{"type":27,"tag":367,"props":1784,"children":1785},{"style":374},[1786],{"type":50,"value":402},{"type":27,"tag":367,"props":1788,"children":1790},{"class":1789,"line":449},[369,924],[1791,1796,1800,1805],{"type":27,"tag":367,"props":1792,"children":1793},{"style":383},[1794],{"type":50,"value":1795},"    \"version\"",{"type":27,"tag":367,"props":1797,"children":1798},{"style":374},[1799],{"type":50,"value":391},{"type":27,"tag":367,"props":1801,"children":1802},{"style":394},[1803],{"type":50,"value":1804},"\"1.0.0\"",{"type":27,"tag":367,"props":1806,"children":1807},{"style":374},[1808],{"type":50,"value":402},{"type":27,"tag":367,"props":1810,"children":1811},{"class":369,"line":463},[1812,1817,1821,1825],{"type":27,"tag":367,"props":1813,"children":1814},{"style":383},[1815],{"type":50,"value":1816},"    \"license\"",{"type":27,"tag":367,"props":1818,"children":1819},{"style":374},[1820],{"type":50,"value":391},{"type":27,"tag":367,"props":1822,"children":1823},{"style":394},[1824],{"type":50,"value":420},{"type":27,"tag":367,"props":1826,"children":1827},{"style":374},[1828],{"type":50,"value":402},{"type":27,"tag":367,"props":1830,"children":1831},{"class":369,"line":485},[1832,1837],{"type":27,"tag":367,"props":1833,"children":1834},{"style":383},[1835],{"type":50,"value":1836},"    \"require\"",{"type":27,"tag":367,"props":1838,"children":1839},{"style":374},[1840],{"type":50,"value":460},{"type":27,"tag":367,"props":1842,"children":1843},{"class":369,"line":507},[1844,1849,1853],{"type":27,"tag":367,"props":1845,"children":1846},{"style":383},[1847],{"type":50,"value":1848},"        \"shopware/core\"",{"type":27,"tag":367,"props":1850,"children":1851},{"style":374},[1852],{"type":50,"value":391},{"type":27,"tag":367,"props":1854,"children":1855},{"style":394},[1856],{"type":50,"value":1857},"\"~6.6.0\"\n",{"type":27,"tag":367,"props":1859,"children":1860},{"class":369,"line":529},[1861],{"type":27,"tag":367,"props":1862,"children":1863},{"style":374},[1864],{"type":50,"value":734},{"type":27,"tag":367,"props":1866,"children":1867},{"class":369,"line":551},[1868,1873],{"type":27,"tag":367,"props":1869,"children":1870},{"style":383},[1871],{"type":50,"value":1872},"    \"extra\"",{"type":27,"tag":367,"props":1874,"children":1875},{"style":374},[1876],{"type":50,"value":460},{"type":27,"tag":367,"props":1878,"children":1879},{"class":369,"line":572},[1880,1885,1889,1894,1898,1903],{"type":27,"tag":367,"props":1881,"children":1882},{"style":383},[1883],{"type":50,"value":1884},"        \"shopware-plugin-class\"",{"type":27,"tag":367,"props":1886,"children":1887},{"style":374},[1888],{"type":50,"value":391},{"type":27,"tag":367,"props":1890,"children":1891},{"style":394},[1892],{"type":50,"value":1893},"\"Acme",{"type":27,"tag":367,"props":1895,"children":1896},{"style":713},[1897],{"type":50,"value":1026},{"type":27,"tag":367,"props":1899,"children":1900},{"style":394},[1901],{"type":50,"value":1902},"SamplePlugin\"",{"type":27,"tag":367,"props":1904,"children":1905},{"style":374},[1906],{"type":50,"value":402},{"type":27,"tag":367,"props":1908,"children":1909},{"class":369,"line":593},[1910,1915],{"type":27,"tag":367,"props":1911,"children":1912},{"style":383},[1913],{"type":50,"value":1914},"        \"label\"",{"type":27,"tag":367,"props":1916,"children":1917},{"style":374},[1918],{"type":50,"value":460},{"type":27,"tag":367,"props":1920,"children":1921},{"class":369,"line":611},[1922,1927,1931,1936],{"type":27,"tag":367,"props":1923,"children":1924},{"style":383},[1925],{"type":50,"value":1926},"            \"de-DE\"",{"type":27,"tag":367,"props":1928,"children":1929},{"style":374},[1930],{"type":50,"value":391},{"type":27,"tag":367,"props":1932,"children":1933},{"style":394},[1934],{"type":50,"value":1935},"\"Skeleton plugin\"",{"type":27,"tag":367,"props":1937,"children":1938},{"style":374},[1939],{"type":50,"value":402},{"type":27,"tag":367,"props":1941,"children":1942},{"class":369,"line":620},[1943,1948,1952],{"type":27,"tag":367,"props":1944,"children":1945},{"style":383},[1946],{"type":50,"value":1947},"            \"en-GB\"",{"type":27,"tag":367,"props":1949,"children":1950},{"style":374},[1951],{"type":50,"value":391},{"type":27,"tag":367,"props":1953,"children":1954},{"style":394},[1955],{"type":50,"value":1956},"\"Skeleton plugin\"\n",{"type":27,"tag":367,"props":1958,"children":1959},{"class":369,"line":634},[1960],{"type":27,"tag":367,"props":1961,"children":1962},{"style":374},[1963],{"type":50,"value":1964},"        }\n",{"type":27,"tag":367,"props":1966,"children":1967},{"class":369,"line":643},[1968],{"type":27,"tag":367,"props":1969,"children":1970},{"style":374},[1971],{"type":50,"value":734},{"type":27,"tag":367,"props":1973,"children":1974},{"class":369,"line":665},[1975,1980],{"type":27,"tag":367,"props":1976,"children":1977},{"style":383},[1978],{"type":50,"value":1979},"    \"autoload\"",{"type":27,"tag":367,"props":1981,"children":1982},{"style":374},[1983],{"type":50,"value":460},{"type":27,"tag":367,"props":1985,"children":1986},{"class":369,"line":687},[1987,1992],{"type":27,"tag":367,"props":1988,"children":1989},{"style":383},[1990],{"type":50,"value":1991},"        \"psr-4\"",{"type":27,"tag":367,"props":1993,"children":1994},{"style":374},[1995],{"type":50,"value":460},{"type":27,"tag":367,"props":1997,"children":1998},{"class":369,"line":700},[1999,2004,2008,2012,2016],{"type":27,"tag":367,"props":2000,"children":2001},{"style":383},[2002],{"type":50,"value":2003},"            \"Acme",{"type":27,"tag":367,"props":2005,"children":2006},{"style":1023},[2007],{"type":50,"value":1026},{"type":27,"tag":367,"props":2009,"children":2010},{"style":383},[2011],{"type":50,"value":1031},{"type":27,"tag":367,"props":2013,"children":2014},{"style":374},[2015],{"type":50,"value":391},{"type":27,"tag":367,"props":2017,"children":2018},{"style":394},[2019],{"type":50,"value":1040},{"type":27,"tag":367,"props":2021,"children":2022},{"class":369,"line":719},[2023],{"type":27,"tag":367,"props":2024,"children":2025},{"style":374},[2026],{"type":50,"value":1964},{"type":27,"tag":367,"props":2028,"children":2029},{"class":369,"line":728},[2030],{"type":27,"tag":367,"props":2031,"children":2032},{"style":374},[2033],{"type":50,"value":734},{"type":27,"tag":367,"props":2035,"children":2036},{"class":369,"line":737},[2037,2042],{"type":27,"tag":367,"props":2038,"children":2039},{"style":383},[2040],{"type":50,"value":2041},"    \"autoload-dev\"",{"type":27,"tag":367,"props":2043,"children":2044},{"style":374},[2045],{"type":50,"value":460},{"type":27,"tag":367,"props":2047,"children":2048},{"class":369,"line":745},[2049,2053],{"type":27,"tag":367,"props":2050,"children":2051},{"style":383},[2052],{"type":50,"value":1991},{"type":27,"tag":367,"props":2054,"children":2055},{"style":374},[2056],{"type":50,"value":460},{"type":27,"tag":367,"props":2058,"children":2059},{"class":369,"line":765},[2060,2064,2068,2073,2077,2081,2085],{"type":27,"tag":367,"props":2061,"children":2062},{"style":383},[2063],{"type":50,"value":2003},{"type":27,"tag":367,"props":2065,"children":2066},{"style":1023},[2067],{"type":50,"value":1026},{"type":27,"tag":367,"props":2069,"children":2070},{"style":383},[2071],{"type":50,"value":2072},"Tests",{"type":27,"tag":367,"props":2074,"children":2075},{"style":1023},[2076],{"type":50,"value":1026},{"type":27,"tag":367,"props":2078,"children":2079},{"style":383},[2080],{"type":50,"value":1031},{"type":27,"tag":367,"props":2082,"children":2083},{"style":374},[2084],{"type":50,"value":391},{"type":27,"tag":367,"props":2086,"children":2087},{"style":394},[2088],{"type":50,"value":2089},"\"tests/\"\n",{"type":27,"tag":367,"props":2091,"children":2092},{"class":369,"line":786},[2093],{"type":27,"tag":367,"props":2094,"children":2095},{"style":374},[2096],{"type":50,"value":1964},{"type":27,"tag":367,"props":2098,"children":2099},{"class":369,"line":798},[2100],{"type":27,"tag":367,"props":2101,"children":2102},{"style":374},[2103],{"type":50,"value":976},{"type":27,"tag":367,"props":2105,"children":2106},{"class":369,"line":814},[2107],{"type":27,"tag":367,"props":2108,"children":2109},{"style":374},[2110],{"type":50,"value":1434},{"type":27,"tag":351,"props":2112,"children":2114},{"className":1442,"code":2113,"language":1444,"meta":7,"style":7},"git tag v1.0.0\ngit push --tags\n",[2115],{"type":27,"tag":288,"props":2116,"children":2117},{"__ignoreMap":7},[2118,2135],{"type":27,"tag":367,"props":2119,"children":2120},{"class":369,"line":370},[2121,2125,2130],{"type":27,"tag":367,"props":2122,"children":2123},{"style":1454},[2124],{"type":50,"value":1663},{"type":27,"tag":367,"props":2126,"children":2127},{"style":1459},[2128],{"type":50,"value":2129}," tag",{"type":27,"tag":367,"props":2131,"children":2132},{"style":1459},[2133],{"type":50,"value":2134}," v1.0.0\n",{"type":27,"tag":367,"props":2136,"children":2137},{"class":369,"line":119},[2138,2142,2147],{"type":27,"tag":367,"props":2139,"children":2140},{"style":1454},[2141],{"type":50,"value":1663},{"type":27,"tag":367,"props":2143,"children":2144},{"style":1459},[2145],{"type":50,"value":2146}," push",{"type":27,"tag":367,"props":2148,"children":2149},{"style":713},[2150],{"type":50,"value":2151}," --tags\n",{"type":27,"tag":46,"props":2153,"children":2154},{},[2155],{"type":50,"value":2156},"Now this will work:",{"type":27,"tag":351,"props":2158,"children":2159},{"className":1442,"code":1443,"language":1444,"meta":7,"style":7},[2160],{"type":27,"tag":288,"props":2161,"children":2162},{"__ignoreMap":7},[2163],{"type":27,"tag":367,"props":2164,"children":2165},{"class":369,"line":370},[2166,2170,2174],{"type":27,"tag":367,"props":2167,"children":2168},{"style":1454},[2169],{"type":50,"value":304},{"type":27,"tag":367,"props":2171,"children":2172},{"style":1459},[2173],{"type":50,"value":1462},{"type":27,"tag":367,"props":2175,"children":2176},{"style":1459},[2177],{"type":50,"value":1467},{"type":27,"tag":351,"props":2179,"children":2183},{"className":2180,"code":2181,"language":2182,"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",[2184],{"type":27,"tag":288,"props":2185,"children":2186},{"__ignoreMap":7},[2187,2195,2202,2210,2218,2225,2233,2240,2247,2254,2262,2270,2277,2284,2291,2298,2305,2312],{"type":27,"tag":367,"props":2188,"children":2189},{"class":369,"line":370},[2190],{"type":27,"tag":367,"props":2191,"children":2192},{},[2193],{"type":50,"value":2194},"./composer.json has been updated                                                                                                            \n",{"type":27,"tag":367,"props":2196,"children":2197},{"class":369,"line":119},[2198],{"type":27,"tag":367,"props":2199,"children":2200},{},[2201],{"type":50,"value":1541},{"type":27,"tag":367,"props":2203,"children":2204},{"class":369,"line":405},[2205],{"type":27,"tag":367,"props":2206,"children":2207},{},[2208],{"type":50,"value":2209},"Loading composer repositories with package information\n",{"type":27,"tag":367,"props":2211,"children":2212},{"class":369,"line":427},[2213],{"type":27,"tag":367,"props":2214,"children":2215},{},[2216],{"type":50,"value":2217},"Updating dependencies\n",{"type":27,"tag":367,"props":2219,"children":2220},{"class":369,"line":449},[2221],{"type":27,"tag":367,"props":2222,"children":2223},{},[2224],{"type":50,"value":1565},{"type":27,"tag":367,"props":2226,"children":2227},{"class":369,"line":463},[2228],{"type":27,"tag":367,"props":2229,"children":2230},{},[2231],{"type":50,"value":2232},"  - Locking acme/sample-plugin (1.0.0)\n",{"type":27,"tag":367,"props":2234,"children":2235},{"class":369,"line":485},[2236],{"type":27,"tag":367,"props":2237,"children":2238},{},[2239],{"type":50,"value":1581},{"type":27,"tag":367,"props":2241,"children":2242},{"class":369,"line":507},[2243],{"type":27,"tag":367,"props":2244,"children":2245},{},[2246],{"type":50,"value":1589},{"type":27,"tag":367,"props":2248,"children":2249},{"class":369,"line":529},[2250],{"type":27,"tag":367,"props":2251,"children":2252},{},[2253],{"type":50,"value":1597},{"type":27,"tag":367,"props":2255,"children":2256},{"class":369,"line":551},[2257],{"type":27,"tag":367,"props":2258,"children":2259},{},[2260],{"type":50,"value":2261},"  - Syncing acme/sample-plugin (1.0.0) into cache\n",{"type":27,"tag":367,"props":2263,"children":2264},{"class":369,"line":572},[2265],{"type":27,"tag":367,"props":2266,"children":2267},{},[2268],{"type":50,"value":2269},"  - Installing acme/sample-plugin (1.0.0): Cloning 294414deb2 from cache\n",{"type":27,"tag":367,"props":2271,"children":2272},{"class":369,"line":593},[2273],{"type":27,"tag":367,"props":2274,"children":2275},{},[2276],{"type":50,"value":1621},{"type":27,"tag":367,"props":2278,"children":2279},{"class":369,"line":611},[2280],{"type":27,"tag":367,"props":2281,"children":2282},{"emptyLinePlaceholder":132},[2283],{"type":50,"value":1629},{"type":27,"tag":367,"props":2285,"children":2286},{"class":369,"line":620},[2287],{"type":27,"tag":367,"props":2288,"children":2289},{},[2290],{"type":50,"value":1637},{"type":27,"tag":367,"props":2292,"children":2293},{"class":369,"line":634},[2294],{"type":27,"tag":367,"props":2295,"children":2296},{"emptyLinePlaceholder":132},[2297],{"type":50,"value":1629},{"type":27,"tag":367,"props":2299,"children":2300},{"class":369,"line":643},[2301],{"type":27,"tag":367,"props":2302,"children":2303},{},[2304],{"type":50,"value":1652},{"type":27,"tag":367,"props":2306,"children":2307},{"class":369,"line":665},[2308],{"type":27,"tag":367,"props":2309,"children":2310},{"emptyLinePlaceholder":132},[2311],{"type":50,"value":1629},{"type":27,"tag":367,"props":2313,"children":2314},{"class":369,"line":687},[2315],{"type":27,"tag":367,"props":2316,"children":2317},{},[2318],{"type":50,"value":2319},"Using version ^1.0 for acme/sample-plugin\n",{"type":27,"tag":46,"props":2321,"children":2322},{},[2323,2325,2330],{"type":50,"value":2324},"This is better, but we are still using ",{"type":27,"tag":288,"props":2326,"children":2328},{"className":2327},[],[2329],{"type":50,"value":1663},{"type":50,"value":2331}," to fetch the plugin. We can do better.",{"type":27,"tag":88,"props":2333,"children":2335},{"id":2334},"gitlab-package-registry",[2336],{"type":50,"value":2337},"GitLab Package registry",{"type":27,"tag":46,"props":2339,"children":2340},{},[2341,2343,2348],{"type":50,"value":2342},"Here is where the GitLab part starts. For more details refer to the ",{"type":27,"tag":259,"props":2344,"children":2346},{"href":2345},"https://docs.gitlab.com/18.3/user/packages/composer_repository/",[2347],{"type":50,"value":264},{"type":50,"value":266},{"type":27,"tag":46,"props":2350,"children":2351},{},[2352],{"type":50,"value":2353},"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":27,"tag":46,"props":2355,"children":2356},{},[2357,2359,2364],{"type":50,"value":2358},"Let's release our ",{"type":27,"tag":288,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":50,"value":1687},{"type":50,"value":2365}," tag as a composer package.",{"type":27,"tag":351,"props":2367,"children":2369},{"className":1442,"code":2368,"language":1444,"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",[2370],{"type":27,"tag":288,"props":2371,"children":2372},{"__ignoreMap":7},[2373],{"type":27,"tag":367,"props":2374,"children":2375},{"class":369,"line":370},[2376,2381,2386,2391,2396],{"type":27,"tag":367,"props":2377,"children":2378},{"style":1454},[2379],{"type":50,"value":2380},"curl",{"type":27,"tag":367,"props":2382,"children":2383},{"style":713},[2384],{"type":50,"value":2385}," --fail-with-body",{"type":27,"tag":367,"props":2387,"children":2388},{"style":713},[2389],{"type":50,"value":2390}," --data",{"type":27,"tag":367,"props":2392,"children":2393},{"style":1459},[2394],{"type":50,"value":2395}," tag=v1.0.0",{"type":27,"tag":367,"props":2397,"children":2398},{"style":1459},[2399],{"type":50,"value":2400}," \"https://__token__:\u003Cpersonal-access-token>@\u003CDOMAIN-NAME>/api/v4/projects/\u003Cproject_id>/packages/composer\"\n",{"type":27,"tag":46,"props":2402,"children":2403},{},[2404],{"type":50,"value":2405},"Now we need to update the repository information:",{"type":27,"tag":351,"props":2407,"children":2410},{"className":353,"code":2408,"filename":355,"highlights":2409,"language":361,"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",[357,358,359,360],[2411],{"type":27,"tag":288,"props":2412,"children":2413},{"__ignoreMap":7},[2414,2421,2440,2459,2478,2489,2508,2527,2546,2565,2584,2603,2618,2625,2636,2643,2662,2681,2692,2707,2714,2721,2728,2747,2766,2777,2792,2799,2806,2813,2832,2851,2862,2877,2884,2891,2899,2920,2937,2945,2952,2963,2974,2997,3004,3011,3030,3041,3052,3071,3086,3093,3112,3127,3134,3145,3156,3171,3178,3189,3196,3203,3214,3221,3228,3235,3246,3257,3276,3287,3298,3305,3312,3319,3326],{"type":27,"tag":367,"props":2415,"children":2416},{"class":369,"line":370},[2417],{"type":27,"tag":367,"props":2418,"children":2419},{"style":374},[2420],{"type":50,"value":377},{"type":27,"tag":367,"props":2422,"children":2423},{"class":369,"line":119},[2424,2428,2432,2436],{"type":27,"tag":367,"props":2425,"children":2426},{"style":383},[2427],{"type":50,"value":386},{"type":27,"tag":367,"props":2429,"children":2430},{"style":374},[2431],{"type":50,"value":391},{"type":27,"tag":367,"props":2433,"children":2434},{"style":394},[2435],{"type":50,"value":397},{"type":27,"tag":367,"props":2437,"children":2438},{"style":374},[2439],{"type":50,"value":402},{"type":27,"tag":367,"props":2441,"children":2442},{"class":369,"line":405},[2443,2447,2451,2455],{"type":27,"tag":367,"props":2444,"children":2445},{"style":383},[2446],{"type":50,"value":411},{"type":27,"tag":367,"props":2448,"children":2449},{"style":374},[2450],{"type":50,"value":391},{"type":27,"tag":367,"props":2452,"children":2453},{"style":394},[2454],{"type":50,"value":420},{"type":27,"tag":367,"props":2456,"children":2457},{"style":374},[2458],{"type":50,"value":402},{"type":27,"tag":367,"props":2460,"children":2461},{"class":369,"line":427},[2462,2466,2470,2474],{"type":27,"tag":367,"props":2463,"children":2464},{"style":383},[2465],{"type":50,"value":433},{"type":27,"tag":367,"props":2467,"children":2468},{"style":374},[2469],{"type":50,"value":391},{"type":27,"tag":367,"props":2471,"children":2472},{"style":394},[2473],{"type":50,"value":442},{"type":27,"tag":367,"props":2475,"children":2476},{"style":374},[2477],{"type":50,"value":402},{"type":27,"tag":367,"props":2479,"children":2480},{"class":369,"line":449},[2481,2485],{"type":27,"tag":367,"props":2482,"children":2483},{"style":383},[2484],{"type":50,"value":455},{"type":27,"tag":367,"props":2486,"children":2487},{"style":374},[2488],{"type":50,"value":460},{"type":27,"tag":367,"props":2490,"children":2491},{"class":369,"line":463},[2492,2496,2500,2504],{"type":27,"tag":367,"props":2493,"children":2494},{"style":383},[2495],{"type":50,"value":469},{"type":27,"tag":367,"props":2497,"children":2498},{"style":374},[2499],{"type":50,"value":391},{"type":27,"tag":367,"props":2501,"children":2502},{"style":394},[2503],{"type":50,"value":478},{"type":27,"tag":367,"props":2505,"children":2506},{"style":374},[2507],{"type":50,"value":402},{"type":27,"tag":367,"props":2509,"children":2510},{"class":369,"line":485},[2511,2515,2519,2523],{"type":27,"tag":367,"props":2512,"children":2513},{"style":383},[2514],{"type":50,"value":491},{"type":27,"tag":367,"props":2516,"children":2517},{"style":374},[2518],{"type":50,"value":391},{"type":27,"tag":367,"props":2520,"children":2521},{"style":394},[2522],{"type":50,"value":500},{"type":27,"tag":367,"props":2524,"children":2525},{"style":374},[2526],{"type":50,"value":402},{"type":27,"tag":367,"props":2528,"children":2529},{"class":369,"line":507},[2530,2534,2538,2542],{"type":27,"tag":367,"props":2531,"children":2532},{"style":383},[2533],{"type":50,"value":513},{"type":27,"tag":367,"props":2535,"children":2536},{"style":374},[2537],{"type":50,"value":391},{"type":27,"tag":367,"props":2539,"children":2540},{"style":394},[2541],{"type":50,"value":522},{"type":27,"tag":367,"props":2543,"children":2544},{"style":374},[2545],{"type":50,"value":402},{"type":27,"tag":367,"props":2547,"children":2548},{"class":369,"line":529},[2549,2553,2557,2561],{"type":27,"tag":367,"props":2550,"children":2551},{"style":383},[2552],{"type":50,"value":535},{"type":27,"tag":367,"props":2554,"children":2555},{"style":374},[2556],{"type":50,"value":391},{"type":27,"tag":367,"props":2558,"children":2559},{"style":394},[2560],{"type":50,"value":544},{"type":27,"tag":367,"props":2562,"children":2563},{"style":374},[2564],{"type":50,"value":402},{"type":27,"tag":367,"props":2566,"children":2567},{"class":369,"line":551},[2568,2572,2576,2580],{"type":27,"tag":367,"props":2569,"children":2570},{"style":383},[2571],{"type":50,"value":557},{"type":27,"tag":367,"props":2573,"children":2574},{"style":374},[2575],{"type":50,"value":391},{"type":27,"tag":367,"props":2577,"children":2578},{"style":394},[2579],{"type":50,"value":522},{"type":27,"tag":367,"props":2581,"children":2582},{"style":374},[2583],{"type":50,"value":402},{"type":27,"tag":367,"props":2585,"children":2586},{"class":369,"line":572},[2587,2591,2595,2599],{"type":27,"tag":367,"props":2588,"children":2589},{"style":383},[2590],{"type":50,"value":578},{"type":27,"tag":367,"props":2592,"children":2593},{"style":374},[2594],{"type":50,"value":391},{"type":27,"tag":367,"props":2596,"children":2597},{"style":394},[2598],{"type":50,"value":522},{"type":27,"tag":367,"props":2600,"children":2601},{"style":374},[2602],{"type":50,"value":402},{"type":27,"tag":367,"props":2604,"children":2605},{"class":369,"line":593},[2606,2610,2614],{"type":27,"tag":367,"props":2607,"children":2608},{"style":383},[2609],{"type":50,"value":599},{"type":27,"tag":367,"props":2611,"children":2612},{"style":374},[2613],{"type":50,"value":391},{"type":27,"tag":367,"props":2615,"children":2616},{"style":394},[2617],{"type":50,"value":608},{"type":27,"tag":367,"props":2619,"children":2620},{"class":369,"line":611},[2621],{"type":27,"tag":367,"props":2622,"children":2623},{"style":374},[2624],{"type":50,"value":617},{"type":27,"tag":367,"props":2626,"children":2627},{"class":369,"line":620},[2628,2632],{"type":27,"tag":367,"props":2629,"children":2630},{"style":383},[2631],{"type":50,"value":626},{"type":27,"tag":367,"props":2633,"children":2634},{"style":374},[2635],{"type":50,"value":631},{"type":27,"tag":367,"props":2637,"children":2638},{"class":369,"line":634},[2639],{"type":27,"tag":367,"props":2640,"children":2641},{"style":374},[2642],{"type":50,"value":640},{"type":27,"tag":367,"props":2644,"children":2645},{"class":369,"line":643},[2646,2650,2654,2658],{"type":27,"tag":367,"props":2647,"children":2648},{"style":383},[2649],{"type":50,"value":649},{"type":27,"tag":367,"props":2651,"children":2652},{"style":374},[2653],{"type":50,"value":391},{"type":27,"tag":367,"props":2655,"children":2656},{"style":394},[2657],{"type":50,"value":658},{"type":27,"tag":367,"props":2659,"children":2660},{"style":374},[2661],{"type":50,"value":402},{"type":27,"tag":367,"props":2663,"children":2664},{"class":369,"line":665},[2665,2669,2673,2677],{"type":27,"tag":367,"props":2666,"children":2667},{"style":383},[2668],{"type":50,"value":671},{"type":27,"tag":367,"props":2670,"children":2671},{"style":374},[2672],{"type":50,"value":391},{"type":27,"tag":367,"props":2674,"children":2675},{"style":394},[2676],{"type":50,"value":680},{"type":27,"tag":367,"props":2678,"children":2679},{"style":374},[2680],{"type":50,"value":402},{"type":27,"tag":367,"props":2682,"children":2683},{"class":369,"line":687},[2684,2688],{"type":27,"tag":367,"props":2685,"children":2686},{"style":383},[2687],{"type":50,"value":693},{"type":27,"tag":367,"props":2689,"children":2690},{"style":374},[2691],{"type":50,"value":460},{"type":27,"tag":367,"props":2693,"children":2694},{"class":369,"line":700},[2695,2699,2703],{"type":27,"tag":367,"props":2696,"children":2697},{"style":383},[2698],{"type":50,"value":706},{"type":27,"tag":367,"props":2700,"children":2701},{"style":374},[2702],{"type":50,"value":391},{"type":27,"tag":367,"props":2704,"children":2705},{"style":713},[2706],{"type":50,"value":716},{"type":27,"tag":367,"props":2708,"children":2709},{"class":369,"line":719},[2710],{"type":27,"tag":367,"props":2711,"children":2712},{"style":374},[2713],{"type":50,"value":725},{"type":27,"tag":367,"props":2715,"children":2716},{"class":369,"line":728},[2717],{"type":27,"tag":367,"props":2718,"children":2719},{"style":374},[2720],{"type":50,"value":734},{"type":27,"tag":367,"props":2722,"children":2723},{"class":369,"line":737},[2724],{"type":27,"tag":367,"props":2725,"children":2726},{"style":374},[2727],{"type":50,"value":640},{"type":27,"tag":367,"props":2729,"children":2730},{"class":369,"line":745},[2731,2735,2739,2743],{"type":27,"tag":367,"props":2732,"children":2733},{"style":383},[2734],{"type":50,"value":649},{"type":27,"tag":367,"props":2736,"children":2737},{"style":374},[2738],{"type":50,"value":391},{"type":27,"tag":367,"props":2740,"children":2741},{"style":394},[2742],{"type":50,"value":658},{"type":27,"tag":367,"props":2744,"children":2745},{"style":374},[2746],{"type":50,"value":402},{"type":27,"tag":367,"props":2748,"children":2749},{"class":369,"line":765},[2750,2754,2758,2762],{"type":27,"tag":367,"props":2751,"children":2752},{"style":383},[2753],{"type":50,"value":671},{"type":27,"tag":367,"props":2755,"children":2756},{"style":374},[2757],{"type":50,"value":391},{"type":27,"tag":367,"props":2759,"children":2760},{"style":394},[2761],{"type":50,"value":779},{"type":27,"tag":367,"props":2763,"children":2764},{"style":374},[2765],{"type":50,"value":402},{"type":27,"tag":367,"props":2767,"children":2768},{"class":369,"line":786},[2769,2773],{"type":27,"tag":367,"props":2770,"children":2771},{"style":383},[2772],{"type":50,"value":693},{"type":27,"tag":367,"props":2774,"children":2775},{"style":374},[2776],{"type":50,"value":460},{"type":27,"tag":367,"props":2778,"children":2779},{"class":369,"line":798},[2780,2784,2788],{"type":27,"tag":367,"props":2781,"children":2782},{"style":383},[2783],{"type":50,"value":706},{"type":27,"tag":367,"props":2785,"children":2786},{"style":374},[2787],{"type":50,"value":391},{"type":27,"tag":367,"props":2789,"children":2790},{"style":713},[2791],{"type":50,"value":716},{"type":27,"tag":367,"props":2793,"children":2794},{"class":369,"line":814},[2795],{"type":27,"tag":367,"props":2796,"children":2797},{"style":374},[2798],{"type":50,"value":725},{"type":27,"tag":367,"props":2800,"children":2801},{"class":369,"line":822},[2802],{"type":27,"tag":367,"props":2803,"children":2804},{"style":374},[2805],{"type":50,"value":734},{"type":27,"tag":367,"props":2807,"children":2808},{"class":369,"line":830},[2809],{"type":27,"tag":367,"props":2810,"children":2811},{"style":374},[2812],{"type":50,"value":640},{"type":27,"tag":367,"props":2814,"children":2815},{"class":369,"line":838},[2816,2820,2824,2828],{"type":27,"tag":367,"props":2817,"children":2818},{"style":383},[2819],{"type":50,"value":649},{"type":27,"tag":367,"props":2821,"children":2822},{"style":374},[2823],{"type":50,"value":391},{"type":27,"tag":367,"props":2825,"children":2826},{"style":394},[2827],{"type":50,"value":658},{"type":27,"tag":367,"props":2829,"children":2830},{"style":374},[2831],{"type":50,"value":402},{"type":27,"tag":367,"props":2833,"children":2834},{"class":369,"line":858},[2835,2839,2843,2847],{"type":27,"tag":367,"props":2836,"children":2837},{"style":383},[2838],{"type":50,"value":671},{"type":27,"tag":367,"props":2840,"children":2841},{"style":374},[2842],{"type":50,"value":391},{"type":27,"tag":367,"props":2844,"children":2845},{"style":394},[2846],{"type":50,"value":872},{"type":27,"tag":367,"props":2848,"children":2849},{"style":374},[2850],{"type":50,"value":402},{"type":27,"tag":367,"props":2852,"children":2853},{"class":369,"line":879},[2854,2858],{"type":27,"tag":367,"props":2855,"children":2856},{"style":383},[2857],{"type":50,"value":693},{"type":27,"tag":367,"props":2859,"children":2860},{"style":374},[2861],{"type":50,"value":460},{"type":27,"tag":367,"props":2863,"children":2864},{"class":369,"line":891},[2865,2869,2873],{"type":27,"tag":367,"props":2866,"children":2867},{"style":383},[2868],{"type":50,"value":706},{"type":27,"tag":367,"props":2870,"children":2871},{"style":374},[2872],{"type":50,"value":391},{"type":27,"tag":367,"props":2874,"children":2875},{"style":713},[2876],{"type":50,"value":716},{"type":27,"tag":367,"props":2878,"children":2879},{"class":369,"line":907},[2880],{"type":27,"tag":367,"props":2881,"children":2882},{"style":374},[2883],{"type":50,"value":725},{"type":27,"tag":367,"props":2885,"children":2886},{"class":369,"line":915},[2887],{"type":27,"tag":367,"props":2888,"children":2889},{"style":374},[2890],{"type":50,"value":734},{"type":27,"tag":367,"props":2892,"children":2894},{"class":2893,"line":357},[369,924],[2895],{"type":27,"tag":367,"props":2896,"children":2897},{"style":374},[2898],{"type":50,"value":640},{"type":27,"tag":367,"props":2900,"children":2902},{"class":2901,"line":358},[369,924],[2903,2907,2911,2916],{"type":27,"tag":367,"props":2904,"children":2905},{"style":383},[2906],{"type":50,"value":649},{"type":27,"tag":367,"props":2908,"children":2909},{"style":374},[2910],{"type":50,"value":391},{"type":27,"tag":367,"props":2912,"children":2913},{"style":394},[2914],{"type":50,"value":2915},"\"composer\"",{"type":27,"tag":367,"props":2917,"children":2918},{"style":374},[2919],{"type":50,"value":402},{"type":27,"tag":367,"props":2921,"children":2923},{"class":2922,"line":359},[369,924],[2924,2928,2932],{"type":27,"tag":367,"props":2925,"children":2926},{"style":383},[2927],{"type":50,"value":671},{"type":27,"tag":367,"props":2929,"children":2930},{"style":374},[2931],{"type":50,"value":391},{"type":27,"tag":367,"props":2933,"children":2934},{"style":394},[2935],{"type":50,"value":2936},"\"https://\u003CDOMAIN-NAME>/api/v4/api/v4/group/\u003Cgroup_id>/-/packages/composer/packages.json\"\n",{"type":27,"tag":367,"props":2938,"children":2940},{"class":2939,"line":360},[369,924],[2941],{"type":27,"tag":367,"props":2942,"children":2943},{"style":374},[2944],{"type":50,"value":976},{"type":27,"tag":367,"props":2946,"children":2947},{"class":369,"line":979},[2948],{"type":27,"tag":367,"props":2949,"children":2950},{"style":374},[2951],{"type":50,"value":985},{"type":27,"tag":367,"props":2953,"children":2954},{"class":369,"line":988},[2955,2959],{"type":27,"tag":367,"props":2956,"children":2957},{"style":383},[2958],{"type":50,"value":994},{"type":27,"tag":367,"props":2960,"children":2961},{"style":374},[2962],{"type":50,"value":460},{"type":27,"tag":367,"props":2964,"children":2965},{"class":369,"line":1001},[2966,2970],{"type":27,"tag":367,"props":2967,"children":2968},{"style":383},[2969],{"type":50,"value":1007},{"type":27,"tag":367,"props":2971,"children":2972},{"style":374},[2973],{"type":50,"value":460},{"type":27,"tag":367,"props":2975,"children":2976},{"class":369,"line":1014},[2977,2981,2985,2989,2993],{"type":27,"tag":367,"props":2978,"children":2979},{"style":383},[2980],{"type":50,"value":1020},{"type":27,"tag":367,"props":2982,"children":2983},{"style":1023},[2984],{"type":50,"value":1026},{"type":27,"tag":367,"props":2986,"children":2987},{"style":383},[2988],{"type":50,"value":1031},{"type":27,"tag":367,"props":2990,"children":2991},{"style":374},[2992],{"type":50,"value":391},{"type":27,"tag":367,"props":2994,"children":2995},{"style":394},[2996],{"type":50,"value":1040},{"type":27,"tag":367,"props":2998,"children":2999},{"class":369,"line":1043},[3000],{"type":27,"tag":367,"props":3001,"children":3002},{"style":374},[3003],{"type":50,"value":976},{"type":27,"tag":367,"props":3005,"children":3006},{"class":369,"line":1051},[3007],{"type":27,"tag":367,"props":3008,"children":3009},{"style":374},[3010],{"type":50,"value":617},{"type":27,"tag":367,"props":3012,"children":3013},{"class":369,"line":1059},[3014,3018,3022,3026],{"type":27,"tag":367,"props":3015,"children":3016},{"style":383},[3017],{"type":50,"value":1065},{"type":27,"tag":367,"props":3019,"children":3020},{"style":374},[3021],{"type":50,"value":391},{"type":27,"tag":367,"props":3023,"children":3024},{"style":713},[3025],{"type":50,"value":1074},{"type":27,"tag":367,"props":3027,"children":3028},{"style":374},[3029],{"type":50,"value":402},{"type":27,"tag":367,"props":3031,"children":3032},{"class":369,"line":1081},[3033,3037],{"type":27,"tag":367,"props":3034,"children":3035},{"style":383},[3036],{"type":50,"value":1087},{"type":27,"tag":367,"props":3038,"children":3039},{"style":374},[3040],{"type":50,"value":460},{"type":27,"tag":367,"props":3042,"children":3043},{"class":369,"line":1094},[3044,3048],{"type":27,"tag":367,"props":3045,"children":3046},{"style":383},[3047],{"type":50,"value":1100},{"type":27,"tag":367,"props":3049,"children":3050},{"style":374},[3051],{"type":50,"value":460},{"type":27,"tag":367,"props":3053,"children":3054},{"class":369,"line":1107},[3055,3059,3063,3067],{"type":27,"tag":367,"props":3056,"children":3057},{"style":383},[3058],{"type":50,"value":1113},{"type":27,"tag":367,"props":3060,"children":3061},{"style":374},[3062],{"type":50,"value":391},{"type":27,"tag":367,"props":3064,"children":3065},{"style":713},[3066],{"type":50,"value":1074},{"type":27,"tag":367,"props":3068,"children":3069},{"style":374},[3070],{"type":50,"value":402},{"type":27,"tag":367,"props":3072,"children":3073},{"class":369,"line":1128},[3074,3078,3082],{"type":27,"tag":367,"props":3075,"children":3076},{"style":383},[3077],{"type":50,"value":1134},{"type":27,"tag":367,"props":3079,"children":3080},{"style":374},[3081],{"type":50,"value":391},{"type":27,"tag":367,"props":3083,"children":3084},{"style":713},[3085],{"type":50,"value":716},{"type":27,"tag":367,"props":3087,"children":3088},{"class":369,"line":1145},[3089],{"type":27,"tag":367,"props":3090,"children":3091},{"style":374},[3092],{"type":50,"value":734},{"type":27,"tag":367,"props":3094,"children":3095},{"class":369,"line":1153},[3096,3100,3104,3108],{"type":27,"tag":367,"props":3097,"children":3098},{"style":383},[3099],{"type":50,"value":1159},{"type":27,"tag":367,"props":3101,"children":3102},{"style":374},[3103],{"type":50,"value":391},{"type":27,"tag":367,"props":3105,"children":3106},{"style":713},[3107],{"type":50,"value":1074},{"type":27,"tag":367,"props":3109,"children":3110},{"style":374},[3111],{"type":50,"value":402},{"type":27,"tag":367,"props":3113,"children":3114},{"class":369,"line":1174},[3115,3119,3123],{"type":27,"tag":367,"props":3116,"children":3117},{"style":383},[3118],{"type":50,"value":1180},{"type":27,"tag":367,"props":3120,"children":3121},{"style":374},[3122],{"type":50,"value":391},{"type":27,"tag":367,"props":3124,"children":3125},{"style":713},[3126],{"type":50,"value":716},{"type":27,"tag":367,"props":3128,"children":3129},{"class":369,"line":1191},[3130],{"type":27,"tag":367,"props":3131,"children":3132},{"style":374},[3133],{"type":50,"value":617},{"type":27,"tag":367,"props":3135,"children":3136},{"class":369,"line":1199},[3137,3141],{"type":27,"tag":367,"props":3138,"children":3139},{"style":383},[3140],{"type":50,"value":1205},{"type":27,"tag":367,"props":3142,"children":3143},{"style":374},[3144],{"type":50,"value":460},{"type":27,"tag":367,"props":3146,"children":3147},{"class":369,"line":1212},[3148,3152],{"type":27,"tag":367,"props":3149,"children":3150},{"style":383},[3151],{"type":50,"value":1218},{"type":27,"tag":367,"props":3153,"children":3154},{"style":374},[3155],{"type":50,"value":460},{"type":27,"tag":367,"props":3157,"children":3158},{"class":369,"line":1225},[3159,3163,3167],{"type":27,"tag":367,"props":3160,"children":3161},{"style":383},[3162],{"type":50,"value":1231},{"type":27,"tag":367,"props":3164,"children":3165},{"style":374},[3166],{"type":50,"value":391},{"type":27,"tag":367,"props":3168,"children":3169},{"style":394},[3170],{"type":50,"value":1240},{"type":27,"tag":367,"props":3172,"children":3173},{"class":369,"line":1243},[3174],{"type":27,"tag":367,"props":3175,"children":3176},{"style":374},[3177],{"type":50,"value":734},{"type":27,"tag":367,"props":3179,"children":3180},{"class":369,"line":1251},[3181,3185],{"type":27,"tag":367,"props":3182,"children":3183},{"style":383},[3184],{"type":50,"value":1257},{"type":27,"tag":367,"props":3186,"children":3187},{"style":374},[3188],{"type":50,"value":631},{"type":27,"tag":367,"props":3190,"children":3191},{"class":369,"line":1264},[3192],{"type":27,"tag":367,"props":3193,"children":3194},{"style":394},[3195],{"type":50,"value":1270},{"type":27,"tag":367,"props":3197,"children":3198},{"class":369,"line":1273},[3199],{"type":27,"tag":367,"props":3200,"children":3201},{"style":374},[3202],{"type":50,"value":1279},{"type":27,"tag":367,"props":3204,"children":3205},{"class":369,"line":1282},[3206,3210],{"type":27,"tag":367,"props":3207,"children":3208},{"style":383},[3209],{"type":50,"value":1288},{"type":27,"tag":367,"props":3211,"children":3212},{"style":374},[3213],{"type":50,"value":631},{"type":27,"tag":367,"props":3215,"children":3216},{"class":369,"line":1295},[3217],{"type":27,"tag":367,"props":3218,"children":3219},{"style":394},[3220],{"type":50,"value":1270},{"type":27,"tag":367,"props":3222,"children":3223},{"class":369,"line":1303},[3224],{"type":27,"tag":367,"props":3225,"children":3226},{"style":374},[3227],{"type":50,"value":1309},{"type":27,"tag":367,"props":3229,"children":3230},{"class":369,"line":1312},[3231],{"type":27,"tag":367,"props":3232,"children":3233},{"style":374},[3234],{"type":50,"value":617},{"type":27,"tag":367,"props":3236,"children":3237},{"class":369,"line":1320},[3238,3242],{"type":27,"tag":367,"props":3239,"children":3240},{"style":383},[3241],{"type":50,"value":1326},{"type":27,"tag":367,"props":3243,"children":3244},{"style":374},[3245],{"type":50,"value":460},{"type":27,"tag":367,"props":3247,"children":3248},{"class":369,"line":1333},[3249,3253],{"type":27,"tag":367,"props":3250,"children":3251},{"style":383},[3252],{"type":50,"value":1339},{"type":27,"tag":367,"props":3254,"children":3255},{"style":374},[3256],{"type":50,"value":460},{"type":27,"tag":367,"props":3258,"children":3259},{"class":369,"line":1346},[3260,3264,3268,3272],{"type":27,"tag":367,"props":3261,"children":3262},{"style":383},[3263],{"type":50,"value":1352},{"type":27,"tag":367,"props":3265,"children":3266},{"style":374},[3267],{"type":50,"value":391},{"type":27,"tag":367,"props":3269,"children":3270},{"style":713},[3271],{"type":50,"value":1074},{"type":27,"tag":367,"props":3273,"children":3274},{"style":374},[3275],{"type":50,"value":402},{"type":27,"tag":367,"props":3277,"children":3278},{"class":369,"line":1367},[3279,3283],{"type":27,"tag":367,"props":3280,"children":3281},{"style":383},[3282],{"type":50,"value":1373},{"type":27,"tag":367,"props":3284,"children":3285},{"style":374},[3286],{"type":50,"value":631},{"type":27,"tag":367,"props":3288,"children":3289},{"class":369,"line":1380},[3290,3294],{"type":27,"tag":367,"props":3291,"children":3292},{"style":394},[3293],{"type":50,"value":1386},{"type":27,"tag":367,"props":3295,"children":3296},{"style":374},[3297],{"type":50,"value":402},{"type":27,"tag":367,"props":3299,"children":3300},{"class":369,"line":1393},[3301],{"type":27,"tag":367,"props":3302,"children":3303},{"style":394},[3304],{"type":50,"value":1399},{"type":27,"tag":367,"props":3306,"children":3307},{"class":369,"line":1402},[3308],{"type":27,"tag":367,"props":3309,"children":3310},{"style":374},[3311],{"type":50,"value":1408},{"type":27,"tag":367,"props":3313,"children":3314},{"class":369,"line":1411},[3315],{"type":27,"tag":367,"props":3316,"children":3317},{"style":374},[3318],{"type":50,"value":976},{"type":27,"tag":367,"props":3320,"children":3321},{"class":369,"line":1419},[3322],{"type":27,"tag":367,"props":3323,"children":3324},{"style":374},[3325],{"type":50,"value":1425},{"type":27,"tag":367,"props":3327,"children":3328},{"class":369,"line":1428},[3329],{"type":27,"tag":367,"props":3330,"children":3331},{"style":374},[3332],{"type":50,"value":1434},{"type":27,"tag":46,"props":3334,"children":3335},{},[3336],{"type":50,"value":3337},"or by using the CLI:",{"type":27,"tag":351,"props":3339,"children":3341},{"className":1442,"code":3340,"language":1444,"meta":7,"style":7},"composer config repositories.\u003Cgroup_id> composer https://\u003CDOMAIN-NAME>/api/v4/group/\u003Cgroup_id>/-/packages/composer/packages.json\n",[3342],{"type":27,"tag":288,"props":3343,"children":3344},{"__ignoreMap":7},[3345],{"type":27,"tag":367,"props":3346,"children":3347},{"class":369,"line":370},[3348,3352,3357,3362,3368,3373,3378,3383,3388,3393,3397,3402,3407,3411,3416,3420,3424,3428,3432],{"type":27,"tag":367,"props":3349,"children":3350},{"style":1454},[3351],{"type":50,"value":304},{"type":27,"tag":367,"props":3353,"children":3354},{"style":1459},[3355],{"type":50,"value":3356}," config",{"type":27,"tag":367,"props":3358,"children":3359},{"style":1459},[3360],{"type":50,"value":3361}," repositories.",{"type":27,"tag":367,"props":3363,"children":3365},{"style":3364},"--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-sepia:#F92672",[3366],{"type":50,"value":3367},"\u003C",{"type":27,"tag":367,"props":3369,"children":3370},{"style":1459},[3371],{"type":50,"value":3372},"group_i",{"type":27,"tag":367,"props":3374,"children":3375},{"style":374},[3376],{"type":50,"value":3377},"d",{"type":27,"tag":367,"props":3379,"children":3380},{"style":3364},[3381],{"type":50,"value":3382},">",{"type":27,"tag":367,"props":3384,"children":3385},{"style":1459},[3386],{"type":50,"value":3387}," composer",{"type":27,"tag":367,"props":3389,"children":3390},{"style":1459},[3391],{"type":50,"value":3392}," https://",{"type":27,"tag":367,"props":3394,"children":3395},{"style":3364},[3396],{"type":50,"value":3367},{"type":27,"tag":367,"props":3398,"children":3399},{"style":1459},[3400],{"type":50,"value":3401},"DOMAIN-NAM",{"type":27,"tag":367,"props":3403,"children":3404},{"style":374},[3405],{"type":50,"value":3406},"E",{"type":27,"tag":367,"props":3408,"children":3409},{"style":3364},[3410],{"type":50,"value":3382},{"type":27,"tag":367,"props":3412,"children":3413},{"style":1459},[3414],{"type":50,"value":3415},"/api/v4/group/",{"type":27,"tag":367,"props":3417,"children":3418},{"style":3364},[3419],{"type":50,"value":3367},{"type":27,"tag":367,"props":3421,"children":3422},{"style":1459},[3423],{"type":50,"value":3372},{"type":27,"tag":367,"props":3425,"children":3426},{"style":374},[3427],{"type":50,"value":3377},{"type":27,"tag":367,"props":3429,"children":3430},{"style":3364},[3431],{"type":50,"value":3382},{"type":27,"tag":367,"props":3433,"children":3434},{"style":1459},[3435],{"type":50,"value":3436},"/-/packages/composer/packages.json\n",{"type":27,"tag":46,"props":3438,"children":3439},{},[3440],{"type":50,"value":3441},"And setup GitLab credentials:",{"type":27,"tag":351,"props":3443,"children":3445},{"className":1442,"code":3444,"language":1444,"meta":7,"style":7},"composer config gitlab-token.\u003CDOMAIN-NAME> \u003Cpersonal_access_token>\n",[3446],{"type":27,"tag":288,"props":3447,"children":3448},{"__ignoreMap":7},[3449],{"type":27,"tag":367,"props":3450,"children":3451},{"class":369,"line":370},[3452,3456,3460,3465,3469,3473,3477,3481,3486,3491,3496],{"type":27,"tag":367,"props":3453,"children":3454},{"style":1454},[3455],{"type":50,"value":304},{"type":27,"tag":367,"props":3457,"children":3458},{"style":1459},[3459],{"type":50,"value":3356},{"type":27,"tag":367,"props":3461,"children":3462},{"style":1459},[3463],{"type":50,"value":3464}," gitlab-token.",{"type":27,"tag":367,"props":3466,"children":3467},{"style":3364},[3468],{"type":50,"value":3367},{"type":27,"tag":367,"props":3470,"children":3471},{"style":1459},[3472],{"type":50,"value":3401},{"type":27,"tag":367,"props":3474,"children":3475},{"style":374},[3476],{"type":50,"value":3406},{"type":27,"tag":367,"props":3478,"children":3479},{"style":3364},[3480],{"type":50,"value":3382},{"type":27,"tag":367,"props":3482,"children":3483},{"style":3364},[3484],{"type":50,"value":3485}," \u003C",{"type":27,"tag":367,"props":3487,"children":3488},{"style":1459},[3489],{"type":50,"value":3490},"personal_access_toke",{"type":27,"tag":367,"props":3492,"children":3493},{"style":374},[3494],{"type":50,"value":3495},"n",{"type":27,"tag":367,"props":3497,"children":3498},{"style":3364},[3499],{"type":50,"value":3500},">\n",{"type":27,"tag":46,"props":3502,"children":3503},{},[3504,3506,3511],{"type":50,"value":3505},"You can read more about this process in the ",{"type":27,"tag":259,"props":3507,"children":3509},{"href":3508},"https://docs.gitlab.com/user/packages/composer_repository/#install-a-composer-package",[3510],{"type":50,"value":264},{"type":50,"value":266},{"type":27,"tag":46,"props":3513,"children":3514},{},[3515],{"type":50,"value":3516},"Now we require our package us usual:",{"type":27,"tag":351,"props":3518,"children":3519},{"className":1442,"code":1443,"language":1444,"meta":7,"style":7},[3520],{"type":27,"tag":288,"props":3521,"children":3522},{"__ignoreMap":7},[3523],{"type":27,"tag":367,"props":3524,"children":3525},{"class":369,"line":370},[3526,3530,3534],{"type":27,"tag":367,"props":3527,"children":3528},{"style":1454},[3529],{"type":50,"value":304},{"type":27,"tag":367,"props":3531,"children":3532},{"style":1459},[3533],{"type":50,"value":1462},{"type":27,"tag":367,"props":3535,"children":3536},{"style":1459},[3537],{"type":50,"value":1467},{"type":27,"tag":351,"props":3539,"children":3541},{"className":2180,"code":3540,"language":2182,"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",[3542],{"type":27,"tag":288,"props":3543,"children":3544},{"__ignoreMap":7},[3545,3552,3559,3566,3573,3580,3587,3594,3601,3608,3616,3624,3631,3638,3645,3652,3659,3666],{"type":27,"tag":367,"props":3546,"children":3547},{"class":369,"line":370},[3548],{"type":27,"tag":367,"props":3549,"children":3550},{},[3551],{"type":50,"value":1533},{"type":27,"tag":367,"props":3553,"children":3554},{"class":369,"line":119},[3555],{"type":27,"tag":367,"props":3556,"children":3557},{},[3558],{"type":50,"value":1541},{"type":27,"tag":367,"props":3560,"children":3561},{"class":369,"line":405},[3562],{"type":27,"tag":367,"props":3563,"children":3564},{},[3565],{"type":50,"value":2209},{"type":27,"tag":367,"props":3567,"children":3568},{"class":369,"line":427},[3569],{"type":27,"tag":367,"props":3570,"children":3571},{},[3572],{"type":50,"value":2217},{"type":27,"tag":367,"props":3574,"children":3575},{"class":369,"line":449},[3576],{"type":27,"tag":367,"props":3577,"children":3578},{},[3579],{"type":50,"value":1565},{"type":27,"tag":367,"props":3581,"children":3582},{"class":369,"line":463},[3583],{"type":27,"tag":367,"props":3584,"children":3585},{},[3586],{"type":50,"value":2232},{"type":27,"tag":367,"props":3588,"children":3589},{"class":369,"line":485},[3590],{"type":27,"tag":367,"props":3591,"children":3592},{},[3593],{"type":50,"value":1581},{"type":27,"tag":367,"props":3595,"children":3596},{"class":369,"line":507},[3597],{"type":27,"tag":367,"props":3598,"children":3599},{},[3600],{"type":50,"value":1589},{"type":27,"tag":367,"props":3602,"children":3603},{"class":369,"line":529},[3604],{"type":27,"tag":367,"props":3605,"children":3606},{},[3607],{"type":50,"value":1597},{"type":27,"tag":367,"props":3609,"children":3610},{"class":369,"line":551},[3611],{"type":27,"tag":367,"props":3612,"children":3613},{},[3614],{"type":50,"value":3615},"  - Downloading acme/sample-plugin (1.0.0)\n",{"type":27,"tag":367,"props":3617,"children":3618},{"class":369,"line":572},[3619],{"type":27,"tag":367,"props":3620,"children":3621},{},[3622],{"type":50,"value":3623},"  - Installing acme/sample-plugin (1.0.0): Extracting archive\n",{"type":27,"tag":367,"props":3625,"children":3626},{"class":369,"line":593},[3627],{"type":27,"tag":367,"props":3628,"children":3629},{},[3630],{"type":50,"value":1621},{"type":27,"tag":367,"props":3632,"children":3633},{"class":369,"line":611},[3634],{"type":27,"tag":367,"props":3635,"children":3636},{"emptyLinePlaceholder":132},[3637],{"type":50,"value":1629},{"type":27,"tag":367,"props":3639,"children":3640},{"class":369,"line":620},[3641],{"type":27,"tag":367,"props":3642,"children":3643},{},[3644],{"type":50,"value":1637},{"type":27,"tag":367,"props":3646,"children":3647},{"class":369,"line":634},[3648],{"type":27,"tag":367,"props":3649,"children":3650},{"emptyLinePlaceholder":132},[3651],{"type":50,"value":1629},{"type":27,"tag":367,"props":3653,"children":3654},{"class":369,"line":643},[3655],{"type":27,"tag":367,"props":3656,"children":3657},{},[3658],{"type":50,"value":1652},{"type":27,"tag":367,"props":3660,"children":3661},{"class":369,"line":665},[3662],{"type":27,"tag":367,"props":3663,"children":3664},{"emptyLinePlaceholder":132},[3665],{"type":50,"value":1629},{"type":27,"tag":367,"props":3667,"children":3668},{"class":369,"line":687},[3669],{"type":27,"tag":367,"props":3670,"children":3671},{},[3672],{"type":50,"value":2319},{"type":27,"tag":46,"props":3674,"children":3675},{},[3676],{"type":27,"tag":367,"props":3677,"children":3680},{"className":3678},[3679],"text-h2",[3681],{"type":50,"value":3682},"Awesome. Direct package download!",{"type":27,"tag":88,"props":3684,"children":3686},{"id":3685},"why-bother",[3687],{"type":50,"value":3688},"Why bother?",{"type":27,"tag":46,"props":3690,"children":3691},{},[3692,3694,3700,3702,3708],{"type":50,"value":3693},"This is an excellent question. The main reason is package caching. When running in a ",{"type":27,"tag":288,"props":3695,"children":3697},{"className":3696},[],[3698],{"type":50,"value":3699},"CI/CD",{"type":50,"value":3701}," environment or ",{"type":27,"tag":288,"props":3703,"children":3705},{"className":3704},[],[3706],{"type":50,"value":3707},"docker build",{"type":50,"value":3709},",\ncaching packages can give you a massive performance boost.",{"type":27,"tag":100,"props":3711,"children":3712},{},[],{"type":27,"tag":3714,"props":3715,"children":3716},"hr",{},[],{"type":27,"tag":67,"props":3718,"children":3720},{"id":3719},"release-pipeline",[3721],{"type":50,"value":3722},"Release pipeline",{"type":27,"tag":88,"props":3724,"children":3726},{"id":3725},"with-manual-tagging",[3727],{"type":50,"value":3728},"With manual tagging",{"type":27,"tag":46,"props":3730,"children":3731},{},[3732],{"type":50,"value":3733},"This is a simple pipeline when you need to manually create and push a git tag.",{"type":27,"tag":46,"props":3735,"children":3736},{},[3737,3739,3744,3745],{"type":50,"value":3738},"Make sure to always update the ",{"type":27,"tag":288,"props":3740,"children":3742},{"className":3741},[],[3743],{"type":50,"value":1699},{"type":50,"value":1701},{"type":27,"tag":288,"props":3746,"children":3748},{"className":3747},[],[3749],{"type":50,"value":1707},{"type":27,"tag":351,"props":3751,"children":3753},{"className":1442,"code":3752,"language":1444,"meta":7,"style":7},"git tag \u003Cversion>\ngit push --tags\n",[3754],{"type":27,"tag":288,"props":3755,"children":3756},{"__ignoreMap":7},[3757,3785],{"type":27,"tag":367,"props":3758,"children":3759},{"class":369,"line":370},[3760,3764,3768,3772,3777,3781],{"type":27,"tag":367,"props":3761,"children":3762},{"style":1454},[3763],{"type":50,"value":1663},{"type":27,"tag":367,"props":3765,"children":3766},{"style":1459},[3767],{"type":50,"value":2129},{"type":27,"tag":367,"props":3769,"children":3770},{"style":3364},[3771],{"type":50,"value":3485},{"type":27,"tag":367,"props":3773,"children":3774},{"style":1459},[3775],{"type":50,"value":3776},"versio",{"type":27,"tag":367,"props":3778,"children":3779},{"style":374},[3780],{"type":50,"value":3495},{"type":27,"tag":367,"props":3782,"children":3783},{"style":3364},[3784],{"type":50,"value":3500},{"type":27,"tag":367,"props":3786,"children":3787},{"class":369,"line":119},[3788,3792,3796],{"type":27,"tag":367,"props":3789,"children":3790},{"style":1454},[3791],{"type":50,"value":1663},{"type":27,"tag":367,"props":3793,"children":3794},{"style":1459},[3795],{"type":50,"value":2146},{"type":27,"tag":367,"props":3797,"children":3798},{"style":713},[3799],{"type":50,"value":2151},{"type":27,"tag":351,"props":3801,"children":3805},{"className":3802,"code":3803,"filename":3804,"language":140,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark github-dark monokai","stages:\n  - release\n\ndeploy:\n  image: alpine/curl\n  stage: release\n  script:\n    - 'curl --fail-with-body --header \"Job-Token: $CI_JOB_TOKEN\" --data tag=$CI_COMMIT_TAG \"${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/composer\"'\n  environment: production\n  rules:\n    if: $CI_COMMIT_TAG\n",".gitlab-ci.yml",[3806],{"type":27,"tag":288,"props":3807,"children":3808},{"__ignoreMap":7},[3809,3823,3836,3843,3855,3872,3888,3900,3913,3930,3942],{"type":27,"tag":367,"props":3810,"children":3811},{"class":369,"line":370},[3812,3818],{"type":27,"tag":367,"props":3813,"children":3815},{"style":3814},"--shiki-default:#85E89D;--shiki-dark:#85E89D;--shiki-sepia:#F92672",[3816],{"type":50,"value":3817},"stages",{"type":27,"tag":367,"props":3819,"children":3820},{"style":374},[3821],{"type":50,"value":3822},":\n",{"type":27,"tag":367,"props":3824,"children":3825},{"class":369,"line":119},[3826,3831],{"type":27,"tag":367,"props":3827,"children":3828},{"style":374},[3829],{"type":50,"value":3830},"  - ",{"type":27,"tag":367,"props":3832,"children":3833},{"style":1459},[3834],{"type":50,"value":3835},"release\n",{"type":27,"tag":367,"props":3837,"children":3838},{"class":369,"line":405},[3839],{"type":27,"tag":367,"props":3840,"children":3841},{"emptyLinePlaceholder":132},[3842],{"type":50,"value":1629},{"type":27,"tag":367,"props":3844,"children":3845},{"class":369,"line":427},[3846,3851],{"type":27,"tag":367,"props":3847,"children":3848},{"style":3814},[3849],{"type":50,"value":3850},"deploy",{"type":27,"tag":367,"props":3852,"children":3853},{"style":374},[3854],{"type":50,"value":3822},{"type":27,"tag":367,"props":3856,"children":3857},{"class":369,"line":449},[3858,3863,3867],{"type":27,"tag":367,"props":3859,"children":3860},{"style":3814},[3861],{"type":50,"value":3862},"  image",{"type":27,"tag":367,"props":3864,"children":3865},{"style":374},[3866],{"type":50,"value":391},{"type":27,"tag":367,"props":3868,"children":3869},{"style":1459},[3870],{"type":50,"value":3871},"alpine/curl\n",{"type":27,"tag":367,"props":3873,"children":3874},{"class":369,"line":463},[3875,3880,3884],{"type":27,"tag":367,"props":3876,"children":3877},{"style":3814},[3878],{"type":50,"value":3879},"  stage",{"type":27,"tag":367,"props":3881,"children":3882},{"style":374},[3883],{"type":50,"value":391},{"type":27,"tag":367,"props":3885,"children":3886},{"style":1459},[3887],{"type":50,"value":3835},{"type":27,"tag":367,"props":3889,"children":3890},{"class":369,"line":485},[3891,3896],{"type":27,"tag":367,"props":3892,"children":3893},{"style":3814},[3894],{"type":50,"value":3895},"  script",{"type":27,"tag":367,"props":3897,"children":3898},{"style":374},[3899],{"type":50,"value":3822},{"type":27,"tag":367,"props":3901,"children":3902},{"class":369,"line":507},[3903,3908],{"type":27,"tag":367,"props":3904,"children":3905},{"style":374},[3906],{"type":50,"value":3907},"    - ",{"type":27,"tag":367,"props":3909,"children":3910},{"style":1459},[3911],{"type":50,"value":3912},"'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":27,"tag":367,"props":3914,"children":3915},{"class":369,"line":529},[3916,3921,3925],{"type":27,"tag":367,"props":3917,"children":3918},{"style":3814},[3919],{"type":50,"value":3920},"  environment",{"type":27,"tag":367,"props":3922,"children":3923},{"style":374},[3924],{"type":50,"value":391},{"type":27,"tag":367,"props":3926,"children":3927},{"style":1459},[3928],{"type":50,"value":3929},"production\n",{"type":27,"tag":367,"props":3931,"children":3932},{"class":369,"line":551},[3933,3938],{"type":27,"tag":367,"props":3934,"children":3935},{"style":3814},[3936],{"type":50,"value":3937},"  rules",{"type":27,"tag":367,"props":3939,"children":3940},{"style":374},[3941],{"type":50,"value":3822},{"type":27,"tag":367,"props":3943,"children":3944},{"class":369,"line":572},[3945,3950,3954],{"type":27,"tag":367,"props":3946,"children":3947},{"style":3814},[3948],{"type":50,"value":3949},"    if",{"type":27,"tag":367,"props":3951,"children":3952},{"style":374},[3953],{"type":50,"value":391},{"type":27,"tag":367,"props":3955,"children":3956},{"style":1459},[3957],{"type":50,"value":3958},"$CI_COMMIT_TAG\n",{"type":27,"tag":88,"props":3960,"children":3962},{"id":3961},"with-semantic-release",[3963],{"type":50,"value":3964},"With semantic-release",{"type":27,"tag":46,"props":3966,"children":3967},{},[3968],{"type":50,"value":3969},"It would be a lot easier if we could just push our changes and don't care about versioning and tagging.",{"type":27,"tag":46,"props":3971,"children":3972},{},[3973,3979],{"type":27,"tag":259,"props":3974,"children":3976},{"href":3975},"https://github.com/semantic-release/semantic-release",[3977],{"type":50,"value":3978},"semantic-release",{"type":50,"value":3980}," automates the whole package release workflow.",{"type":27,"tag":46,"props":3982,"children":3983},{},[3984,3986,3992],{"type":50,"value":3985},"Please follow the ",{"type":27,"tag":259,"props":3987,"children":3989},{"href":3988},"https://github.com/semantic-release/gitlab?tab=readme-ov-file#gitlab-authentication",[3990],{"type":50,"value":3991},"GitLab authentication instruction",{"type":50,"value":3993}," before you continue to read.",{"type":27,"tag":351,"props":3995,"children":3998},{"className":3802,"code":3996,"filename":3997,"language":140,"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",[3999],{"type":27,"tag":288,"props":4000,"children":4001},{"__ignoreMap":7},[4002,4013,4024,4031,4043,4058,4069,4086,4109,4125,4136,4148,4159,4180,4197],{"type":27,"tag":367,"props":4003,"children":4004},{"class":369,"line":370},[4005,4009],{"type":27,"tag":367,"props":4006,"children":4007},{"style":3814},[4008],{"type":50,"value":3817},{"type":27,"tag":367,"props":4010,"children":4011},{"style":374},[4012],{"type":50,"value":3822},{"type":27,"tag":367,"props":4014,"children":4015},{"class":369,"line":119},[4016,4020],{"type":27,"tag":367,"props":4017,"children":4018},{"style":374},[4019],{"type":50,"value":3830},{"type":27,"tag":367,"props":4021,"children":4022},{"style":1459},[4023],{"type":50,"value":3835},{"type":27,"tag":367,"props":4025,"children":4026},{"class":369,"line":405},[4027],{"type":27,"tag":367,"props":4028,"children":4029},{"emptyLinePlaceholder":132},[4030],{"type":50,"value":1629},{"type":27,"tag":367,"props":4032,"children":4033},{"class":369,"line":427},[4034,4039],{"type":27,"tag":367,"props":4035,"children":4036},{"style":3814},[4037],{"type":50,"value":4038},"release",{"type":27,"tag":367,"props":4040,"children":4041},{"style":374},[4042],{"type":50,"value":3822},{"type":27,"tag":367,"props":4044,"children":4045},{"class":369,"line":449},[4046,4050,4054],{"type":27,"tag":367,"props":4047,"children":4048},{"style":3814},[4049],{"type":50,"value":3879},{"type":27,"tag":367,"props":4051,"children":4052},{"style":374},[4053],{"type":50,"value":391},{"type":27,"tag":367,"props":4055,"children":4056},{"style":1459},[4057],{"type":50,"value":3835},{"type":27,"tag":367,"props":4059,"children":4060},{"class":369,"line":463},[4061,4065],{"type":27,"tag":367,"props":4062,"children":4063},{"style":3814},[4064],{"type":50,"value":3862},{"type":27,"tag":367,"props":4066,"children":4067},{"style":374},[4068],{"type":50,"value":3822},{"type":27,"tag":367,"props":4070,"children":4071},{"class":369,"line":485},[4072,4077,4081],{"type":27,"tag":367,"props":4073,"children":4074},{"style":3814},[4075],{"type":50,"value":4076},"    name",{"type":27,"tag":367,"props":4078,"children":4079},{"style":374},[4080],{"type":50,"value":391},{"type":27,"tag":367,"props":4082,"children":4083},{"style":1459},[4084],{"type":50,"value":4085},"ghcr.io/voxpupuli/semantic-release:25.0.0-latest\n",{"type":27,"tag":367,"props":4087,"children":4088},{"class":369,"line":507},[4089,4094,4099,4104],{"type":27,"tag":367,"props":4090,"children":4091},{"style":3814},[4092],{"type":50,"value":4093},"    entrypoint",{"type":27,"tag":367,"props":4095,"children":4096},{"style":374},[4097],{"type":50,"value":4098},": [",{"type":27,"tag":367,"props":4100,"children":4101},{"style":1459},[4102],{"type":50,"value":4103},"\"\"",{"type":27,"tag":367,"props":4105,"children":4106},{"style":374},[4107],{"type":50,"value":4108},"]\n",{"type":27,"tag":367,"props":4110,"children":4111},{"class":369,"line":529},[4112,4117,4121],{"type":27,"tag":367,"props":4113,"children":4114},{"style":3814},[4115],{"type":50,"value":4116},"  interruptible",{"type":27,"tag":367,"props":4118,"children":4119},{"style":374},[4120],{"type":50,"value":391},{"type":27,"tag":367,"props":4122,"children":4123},{"style":713},[4124],{"type":50,"value":716},{"type":27,"tag":367,"props":4126,"children":4127},{"class":369,"line":551},[4128,4132],{"type":27,"tag":367,"props":4129,"children":4130},{"style":3814},[4131],{"type":50,"value":3895},{"type":27,"tag":367,"props":4133,"children":4134},{"style":374},[4135],{"type":50,"value":3822},{"type":27,"tag":367,"props":4137,"children":4138},{"class":369,"line":572},[4139,4143],{"type":27,"tag":367,"props":4140,"children":4141},{"style":374},[4142],{"type":50,"value":3907},{"type":27,"tag":367,"props":4144,"children":4145},{"style":1459},[4146],{"type":50,"value":4147},"/container-entrypoint.sh\n",{"type":27,"tag":367,"props":4149,"children":4150},{"class":369,"line":593},[4151,4155],{"type":27,"tag":367,"props":4152,"children":4153},{"style":3814},[4154],{"type":50,"value":3937},{"type":27,"tag":367,"props":4156,"children":4157},{"style":374},[4158],{"type":50,"value":3822},{"type":27,"tag":367,"props":4160,"children":4161},{"class":369,"line":611},[4162,4166,4171,4175],{"type":27,"tag":367,"props":4163,"children":4164},{"style":374},[4165],{"type":50,"value":3907},{"type":27,"tag":367,"props":4167,"children":4168},{"style":3814},[4169],{"type":50,"value":4170},"if",{"type":27,"tag":367,"props":4172,"children":4173},{"style":374},[4174],{"type":50,"value":391},{"type":27,"tag":367,"props":4176,"children":4177},{"style":1459},[4178],{"type":50,"value":4179},"$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n",{"type":27,"tag":367,"props":4181,"children":4182},{"class":369,"line":620},[4183,4188,4192],{"type":27,"tag":367,"props":4184,"children":4185},{"style":3814},[4186],{"type":50,"value":4187},"      when",{"type":27,"tag":367,"props":4189,"children":4190},{"style":374},[4191],{"type":50,"value":391},{"type":27,"tag":367,"props":4193,"children":4194},{"style":1459},[4195],{"type":50,"value":4196},"never\n",{"type":27,"tag":367,"props":4198,"children":4199},{"class":369,"line":634},[4200,4204,4208,4212],{"type":27,"tag":367,"props":4201,"children":4202},{"style":374},[4203],{"type":50,"value":3907},{"type":27,"tag":367,"props":4205,"children":4206},{"style":3814},[4207],{"type":50,"value":4170},{"type":27,"tag":367,"props":4209,"children":4210},{"style":374},[4211],{"type":50,"value":391},{"type":27,"tag":367,"props":4213,"children":4214},{"style":1459},[4215],{"type":50,"value":4216},"$CI_COMMIT_BRANCH\n",{"type":27,"tag":351,"props":4218,"children":4221},{"className":353,"code":4219,"filename":4220,"language":361,"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",[4222],{"type":27,"tag":288,"props":4223,"children":4224},{"__ignoreMap":7},[4225,4232,4244,4256,4264,4276,4284,4296,4304,4326,4373,4415,4423,4431,4438,4445,4452,4464,4471,4491,4518,4525,4532,4539,4551,4558,4593,4600,4607,4615],{"type":27,"tag":367,"props":4226,"children":4227},{"class":369,"line":370},[4228],{"type":27,"tag":367,"props":4229,"children":4230},{"style":374},[4231],{"type":50,"value":377},{"type":27,"tag":367,"props":4233,"children":4234},{"class":369,"line":119},[4235,4240],{"type":27,"tag":367,"props":4236,"children":4237},{"style":383},[4238],{"type":50,"value":4239},"  \"plugins\"",{"type":27,"tag":367,"props":4241,"children":4242},{"style":374},[4243],{"type":50,"value":631},{"type":27,"tag":367,"props":4245,"children":4246},{"class":369,"line":405},[4247,4252],{"type":27,"tag":367,"props":4248,"children":4249},{"style":394},[4250],{"type":50,"value":4251},"    \"@semantic-release/commit-analyzer\"",{"type":27,"tag":367,"props":4253,"children":4254},{"style":374},[4255],{"type":50,"value":402},{"type":27,"tag":367,"props":4257,"children":4258},{"class":369,"line":427},[4259],{"type":27,"tag":367,"props":4260,"children":4261},{"style":374},[4262],{"type":50,"value":4263},"    [\n",{"type":27,"tag":367,"props":4265,"children":4266},{"class":369,"line":449},[4267,4272],{"type":27,"tag":367,"props":4268,"children":4269},{"style":394},[4270],{"type":50,"value":4271},"      \"semantic-release-replace-plugin\"",{"type":27,"tag":367,"props":4273,"children":4274},{"style":374},[4275],{"type":50,"value":402},{"type":27,"tag":367,"props":4277,"children":4278},{"class":369,"line":463},[4279],{"type":27,"tag":367,"props":4280,"children":4281},{"style":374},[4282],{"type":50,"value":4283},"      {\n",{"type":27,"tag":367,"props":4285,"children":4286},{"class":369,"line":485},[4287,4292],{"type":27,"tag":367,"props":4288,"children":4289},{"style":383},[4290],{"type":50,"value":4291},"        \"replacements\"",{"type":27,"tag":367,"props":4293,"children":4294},{"style":374},[4295],{"type":50,"value":631},{"type":27,"tag":367,"props":4297,"children":4298},{"class":369,"line":507},[4299],{"type":27,"tag":367,"props":4300,"children":4301},{"style":374},[4302],{"type":50,"value":4303},"          {\n",{"type":27,"tag":367,"props":4305,"children":4306},{"class":369,"line":529},[4307,4312,4316,4321],{"type":27,"tag":367,"props":4308,"children":4309},{"style":383},[4310],{"type":50,"value":4311},"            \"files\"",{"type":27,"tag":367,"props":4313,"children":4314},{"style":374},[4315],{"type":50,"value":4098},{"type":27,"tag":367,"props":4317,"children":4318},{"style":394},[4319],{"type":50,"value":4320},"\"composer.json\"",{"type":27,"tag":367,"props":4322,"children":4323},{"style":374},[4324],{"type":50,"value":4325},"],\n",{"type":27,"tag":367,"props":4327,"children":4328},{"class":369,"line":551},[4329,4334,4338,4343,4348,4352,4356,4361,4365,4369],{"type":27,"tag":367,"props":4330,"children":4331},{"style":383},[4332],{"type":50,"value":4333},"            \"from\"",{"type":27,"tag":367,"props":4335,"children":4336},{"style":374},[4337],{"type":50,"value":391},{"type":27,"tag":367,"props":4339,"children":4340},{"style":394},[4341],{"type":50,"value":4342},"\"version",{"type":27,"tag":367,"props":4344,"children":4345},{"style":713},[4346],{"type":50,"value":4347},"\\\"",{"type":27,"tag":367,"props":4349,"children":4350},{"style":394},[4351],{"type":50,"value":391},{"type":27,"tag":367,"props":4353,"children":4354},{"style":713},[4355],{"type":50,"value":4347},{"type":27,"tag":367,"props":4357,"children":4358},{"style":394},[4359],{"type":50,"value":4360},".*",{"type":27,"tag":367,"props":4362,"children":4363},{"style":713},[4364],{"type":50,"value":4347},{"type":27,"tag":367,"props":4366,"children":4367},{"style":394},[4368],{"type":50,"value":1031},{"type":27,"tag":367,"props":4370,"children":4371},{"style":374},[4372],{"type":50,"value":402},{"type":27,"tag":367,"props":4374,"children":4375},{"class":369,"line":572},[4376,4381,4385,4389,4393,4397,4401,4406,4410],{"type":27,"tag":367,"props":4377,"children":4378},{"style":383},[4379],{"type":50,"value":4380},"            \"to\"",{"type":27,"tag":367,"props":4382,"children":4383},{"style":374},[4384],{"type":50,"value":391},{"type":27,"tag":367,"props":4386,"children":4387},{"style":394},[4388],{"type":50,"value":4342},{"type":27,"tag":367,"props":4390,"children":4391},{"style":713},[4392],{"type":50,"value":4347},{"type":27,"tag":367,"props":4394,"children":4395},{"style":394},[4396],{"type":50,"value":391},{"type":27,"tag":367,"props":4398,"children":4399},{"style":713},[4400],{"type":50,"value":4347},{"type":27,"tag":367,"props":4402,"children":4403},{"style":394},[4404],{"type":50,"value":4405},"${nextRelease.version}",{"type":27,"tag":367,"props":4407,"children":4408},{"style":713},[4409],{"type":50,"value":4347},{"type":27,"tag":367,"props":4411,"children":4412},{"style":394},[4413],{"type":50,"value":4414},"\"\n",{"type":27,"tag":367,"props":4416,"children":4417},{"class":369,"line":593},[4418],{"type":27,"tag":367,"props":4419,"children":4420},{"style":374},[4421],{"type":50,"value":4422},"          }\n",{"type":27,"tag":367,"props":4424,"children":4425},{"class":369,"line":611},[4426],{"type":27,"tag":367,"props":4427,"children":4428},{"style":374},[4429],{"type":50,"value":4430},"        ]\n",{"type":27,"tag":367,"props":4432,"children":4433},{"class":369,"line":620},[4434],{"type":27,"tag":367,"props":4435,"children":4436},{"style":374},[4437],{"type":50,"value":725},{"type":27,"tag":367,"props":4439,"children":4440},{"class":369,"line":634},[4441],{"type":27,"tag":367,"props":4442,"children":4443},{"style":374},[4444],{"type":50,"value":1279},{"type":27,"tag":367,"props":4446,"children":4447},{"class":369,"line":643},[4448],{"type":27,"tag":367,"props":4449,"children":4450},{"style":374},[4451],{"type":50,"value":4263},{"type":27,"tag":367,"props":4453,"children":4454},{"class":369,"line":665},[4455,4460],{"type":27,"tag":367,"props":4456,"children":4457},{"style":394},[4458],{"type":50,"value":4459},"      \"@semantic-release/git\"",{"type":27,"tag":367,"props":4461,"children":4462},{"style":374},[4463],{"type":50,"value":402},{"type":27,"tag":367,"props":4465,"children":4466},{"class":369,"line":687},[4467],{"type":27,"tag":367,"props":4468,"children":4469},{"style":374},[4470],{"type":50,"value":4283},{"type":27,"tag":367,"props":4472,"children":4473},{"class":369,"line":700},[4474,4479,4483,4487],{"type":27,"tag":367,"props":4475,"children":4476},{"style":383},[4477],{"type":50,"value":4478},"        \"assets\"",{"type":27,"tag":367,"props":4480,"children":4481},{"style":374},[4482],{"type":50,"value":4098},{"type":27,"tag":367,"props":4484,"children":4485},{"style":394},[4486],{"type":50,"value":4320},{"type":27,"tag":367,"props":4488,"children":4489},{"style":374},[4490],{"type":50,"value":4325},{"type":27,"tag":367,"props":4492,"children":4493},{"class":369,"line":719},[4494,4499,4503,4508,4513],{"type":27,"tag":367,"props":4495,"children":4496},{"style":383},[4497],{"type":50,"value":4498},"        \"message\"",{"type":27,"tag":367,"props":4500,"children":4501},{"style":374},[4502],{"type":50,"value":391},{"type":27,"tag":367,"props":4504,"children":4505},{"style":394},[4506],{"type":50,"value":4507},"\"chore(release): ${nextRelease.version} [skip ci]",{"type":27,"tag":367,"props":4509,"children":4510},{"style":713},[4511],{"type":50,"value":4512},"\\n\\n",{"type":27,"tag":367,"props":4514,"children":4515},{"style":394},[4516],{"type":50,"value":4517},"${nextRelease.notes}\"\n",{"type":27,"tag":367,"props":4519,"children":4520},{"class":369,"line":728},[4521],{"type":27,"tag":367,"props":4522,"children":4523},{"style":374},[4524],{"type":50,"value":725},{"type":27,"tag":367,"props":4526,"children":4527},{"class":369,"line":737},[4528],{"type":27,"tag":367,"props":4529,"children":4530},{"style":374},[4531],{"type":50,"value":1279},{"type":27,"tag":367,"props":4533,"children":4534},{"class":369,"line":745},[4535],{"type":27,"tag":367,"props":4536,"children":4537},{"style":374},[4538],{"type":50,"value":4263},{"type":27,"tag":367,"props":4540,"children":4541},{"class":369,"line":765},[4542,4547],{"type":27,"tag":367,"props":4543,"children":4544},{"style":394},[4545],{"type":50,"value":4546},"      \"@semantic-release/exec\"",{"type":27,"tag":367,"props":4548,"children":4549},{"style":374},[4550],{"type":50,"value":402},{"type":27,"tag":367,"props":4552,"children":4553},{"class":369,"line":786},[4554],{"type":27,"tag":367,"props":4555,"children":4556},{"style":374},[4557],{"type":50,"value":4283},{"type":27,"tag":367,"props":4559,"children":4560},{"class":369,"line":798},[4561,4566,4570,4575,4579,4584,4588],{"type":27,"tag":367,"props":4562,"children":4563},{"style":383},[4564],{"type":50,"value":4565},"        \"publishCmd\"",{"type":27,"tag":367,"props":4567,"children":4568},{"style":374},[4569],{"type":50,"value":391},{"type":27,"tag":367,"props":4571,"children":4572},{"style":394},[4573],{"type":50,"value":4574},"\"curl --fail-with-body --header ",{"type":27,"tag":367,"props":4576,"children":4577},{"style":713},[4578],{"type":50,"value":4347},{"type":27,"tag":367,"props":4580,"children":4581},{"style":394},[4582],{"type":50,"value":4583},"Job-Token: ${process.env.CI_JOB_TOKEN}",{"type":27,"tag":367,"props":4585,"children":4586},{"style":713},[4587],{"type":50,"value":4347},{"type":27,"tag":367,"props":4589,"children":4590},{"style":394},[4591],{"type":50,"value":4592}," --data tag=${nextRelease.gitTag} ${process.env.CI_API_V4_URL}/projects/${process.env.CI_PROJECT_ID}/packages/composer\"\n",{"type":27,"tag":367,"props":4594,"children":4595},{"class":369,"line":814},[4596],{"type":27,"tag":367,"props":4597,"children":4598},{"style":374},[4599],{"type":50,"value":725},{"type":27,"tag":367,"props":4601,"children":4602},{"class":369,"line":822},[4603],{"type":27,"tag":367,"props":4604,"children":4605},{"style":374},[4606],{"type":50,"value":1309},{"type":27,"tag":367,"props":4608,"children":4609},{"class":369,"line":830},[4610],{"type":27,"tag":367,"props":4611,"children":4612},{"style":374},[4613],{"type":50,"value":4614},"  ]\n",{"type":27,"tag":367,"props":4616,"children":4617},{"class":369,"line":838},[4618],{"type":27,"tag":367,"props":4619,"children":4620},{"style":374},[4621],{"type":50,"value":1434},{"type":27,"tag":46,"props":4623,"children":4624},{},[4625],{"type":50,"value":4626},"This will:",{"type":27,"tag":278,"props":4628,"children":4629},{},[4630,4635,4645,4657,4662],{"type":27,"tag":282,"props":4631,"children":4632},{},[4633],{"type":50,"value":4634},"Analise the commits from the last release to decide if a new version should be released",{"type":27,"tag":282,"props":4636,"children":4637},{},[4638,4640],{"type":50,"value":4639},"Update the version in ",{"type":27,"tag":288,"props":4641,"children":4643},{"className":4642},[],[4644],{"type":50,"value":1707},{"type":27,"tag":282,"props":4646,"children":4647},{},[4648,4650,4655],{"type":50,"value":4649},"Commit the ",{"type":27,"tag":288,"props":4651,"children":4653},{"className":4652},[],[4654],{"type":50,"value":1707},{"type":50,"value":4656}," back into the repo",{"type":27,"tag":282,"props":4658,"children":4659},{},[4660],{"type":50,"value":4661},"Create a tag",{"type":27,"tag":282,"props":4663,"children":4664},{},[4665],{"type":50,"value":4666},"Release a composer package from this tag",{"type":27,"tag":4668,"props":4669,"children":4670},"style",{},[4671],{"type":50,"value":4672},"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":119,"depth":119,"links":4674},[4675,4681],{"id":323,"depth":119,"text":326,"children":4676},[4677,4678,4679,4680],{"id":334,"depth":405,"text":337},{"id":1673,"depth":405,"text":1676},{"id":2334,"depth":405,"text":2337},{"id":3685,"depth":405,"text":3688},{"id":3719,"depth":119,"text":3722,"children":4682},[4683,4684],{"id":3725,"depth":405,"text":3728},{"id":3961,"depth":405,"text":3964},{"_path":177,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":178,"description":179,"author":162,"image":163,"releaseDate":164,"blogCategories":4686,"articleTags":4687,"tags":4688,"body":4689,"_type":122,"_id":183,"_source":124,"_file":184,"_stem":185,"_extension":127},[166,167],[167,169,170],[21,172],{"type":24,"children":4690,"toc":5765},[4691,4695,4707,4719,4725,4730,4759,4764,4769,4788,4800,4805,4826,4832,4852,5171,5182,5187,5730,5739,5743,5761],{"type":27,"tag":241,"props":4692,"children":4694},{"alt":7,"aspect-ratio":243,"height":244,"object-fit":245,"src":4693},"/blog/shopware-plugin-build+release.png",[],{"type":27,"tag":46,"props":4696,"children":4697},{},[4698,4700,4705],{"type":50,"value":4699},"In my ",{"type":27,"tag":259,"props":4701,"children":4702},{"href":158},[4703],{"type":50,"value":4704},"previous post",{"type":50,"value":4706}," I described how to distribute a Shopware 6 plugin over GitLab Package registry.",{"type":27,"tag":46,"props":4708,"children":4709},{},[4710,4712,4717],{"type":50,"value":4711},"When building our project using ",{"type":27,"tag":259,"props":4713,"children":4715},{"href":4714},"https://developer.shopware.com/docs/products/cli/extension-commands/build.html#building-an-extension",[4716],{"type":50,"value":315},{"type":50,"value":4718},",\nthe tool will look over all plugins and check if they need to be built and do so if needed. This is an unnecessary step.",{"type":27,"tag":67,"props":4720,"children":4722},{"id":4721},"building-manually",[4723],{"type":50,"value":4724},"Building manually",{"type":27,"tag":46,"props":4726,"children":4727},{},[4728],{"type":50,"value":4729},"Building a plugin is as simple as running:",{"type":27,"tag":351,"props":4731,"children":4733},{"className":1442,"code":4732,"language":1444,"meta":7,"style":7},"shopware-cli extension build .\n",[4734],{"type":27,"tag":288,"props":4735,"children":4736},{"__ignoreMap":7},[4737],{"type":27,"tag":367,"props":4738,"children":4739},{"class":369,"line":370},[4740,4744,4749,4754],{"type":27,"tag":367,"props":4741,"children":4742},{"style":1454},[4743],{"type":50,"value":315},{"type":27,"tag":367,"props":4745,"children":4746},{"style":1459},[4747],{"type":50,"value":4748}," extension",{"type":27,"tag":367,"props":4750,"children":4751},{"style":1459},[4752],{"type":50,"value":4753}," build",{"type":27,"tag":367,"props":4755,"children":4756},{"style":1459},[4757],{"type":50,"value":4758}," .\n",{"type":27,"tag":46,"props":4760,"children":4761},{},[4762],{"type":50,"value":4763},"In the plugin root directory.",{"type":27,"tag":46,"props":4765,"children":4766},{},[4767],{"type":50,"value":4768},"There are some tweaks you can make, like:",{"type":27,"tag":4770,"props":4771,"children":4772},"ul",{},[4773,4778,4783],{"type":27,"tag":282,"props":4774,"children":4775},{},[4776],{"type":50,"value":4777},"constrain a shopware version",{"type":27,"tag":282,"props":4779,"children":4780},{},[4781],{"type":50,"value":4782},"specify extra bundles",{"type":27,"tag":282,"props":4784,"children":4785},{},[4786],{"type":50,"value":4787},"use esbuild",{"type":27,"tag":46,"props":4789,"children":4790},{},[4791,4793,4798],{"type":50,"value":4792},"Please refer to the ",{"type":27,"tag":259,"props":4794,"children":4796},{"href":4795},"https://developer.shopware.com/docs/products/cli/extension-commands/build.html",[4797],{"type":50,"value":264},{"type":50,"value":4799}," for detailed configuration.",{"type":27,"tag":46,"props":4801,"children":4802},{},[4803],{"type":50,"value":4804},"The build process will create the following directories containing the compiled files:",{"type":27,"tag":4770,"props":4806,"children":4807},{},[4808,4817],{"type":27,"tag":282,"props":4809,"children":4810},{},[4811],{"type":27,"tag":288,"props":4812,"children":4814},{"className":4813},[],[4815],{"type":50,"value":4816},"src/Resources/app/storefront/dist/",{"type":27,"tag":282,"props":4818,"children":4819},{},[4820],{"type":27,"tag":288,"props":4821,"children":4823},{"className":4822},[],[4824],{"type":50,"value":4825},"src/Resources/public/static/",{"type":27,"tag":67,"props":4827,"children":4829},{"id":4828},"build-pipeline",[4830],{"type":50,"value":4831},"Build pipeline",{"type":27,"tag":46,"props":4833,"children":4834},{},[4835,4837,4842,4844,4850],{"type":50,"value":4836},"We use the official ",{"type":27,"tag":288,"props":4838,"children":4840},{"className":4839},[],[4841],{"type":50,"value":315},{"type":50,"value":4843}," docker image. To speed up the process, we take advantage of the ",{"type":27,"tag":288,"props":4845,"children":4847},{"className":4846},[],[4848],{"type":50,"value":4849},"CI",{"type":50,"value":4851}," caching system.",{"type":27,"tag":351,"props":4853,"children":4856},{"className":3802,"code":4854,"filename":3997,"highlights":4855,"language":140,"meta":7,"style":7},"stages:\n  - build\n\nbuild:\n  image:\n    name: ghcr.io/shopware/shopware-cli:latest-php-8.2\n    entrypoint: [\"\"]\n  stage: build\n  variables:\n    COMPOSER_CACHE_DIR: ${CI_PROJECT_DIR}/.composer\n    npm_config_cache: ${CI_PROJECT_DIR}/.npm\n  script:\n    - shopware-cli extension build .\n  cache:\n    - key: $CI_JOB_NAME\n      paths:\n        - $COMPOSER_CACHE_DIR\n        - $npm_config_cache\n  rules:\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: never\n    - if: $CI_COMMIT_BRANCH\n",[463,620,634,643,665,687],[4857],{"type":27,"tag":288,"props":4858,"children":4859},{"__ignoreMap":7},[4860,4871,4883,4890,4902,4913,4930,4949,4964,4976,4993,5010,5021,5032,5045,5067,5080,5094,5107,5118,5137,5152],{"type":27,"tag":367,"props":4861,"children":4862},{"class":369,"line":370},[4863,4867],{"type":27,"tag":367,"props":4864,"children":4865},{"style":3814},[4866],{"type":50,"value":3817},{"type":27,"tag":367,"props":4868,"children":4869},{"style":374},[4870],{"type":50,"value":3822},{"type":27,"tag":367,"props":4872,"children":4873},{"class":369,"line":119},[4874,4878],{"type":27,"tag":367,"props":4875,"children":4876},{"style":374},[4877],{"type":50,"value":3830},{"type":27,"tag":367,"props":4879,"children":4880},{"style":1459},[4881],{"type":50,"value":4882},"build\n",{"type":27,"tag":367,"props":4884,"children":4885},{"class":369,"line":405},[4886],{"type":27,"tag":367,"props":4887,"children":4888},{"emptyLinePlaceholder":132},[4889],{"type":50,"value":1629},{"type":27,"tag":367,"props":4891,"children":4892},{"class":369,"line":427},[4893,4898],{"type":27,"tag":367,"props":4894,"children":4895},{"style":3814},[4896],{"type":50,"value":4897},"build",{"type":27,"tag":367,"props":4899,"children":4900},{"style":374},[4901],{"type":50,"value":3822},{"type":27,"tag":367,"props":4903,"children":4904},{"class":369,"line":449},[4905,4909],{"type":27,"tag":367,"props":4906,"children":4907},{"style":3814},[4908],{"type":50,"value":3862},{"type":27,"tag":367,"props":4910,"children":4911},{"style":374},[4912],{"type":50,"value":3822},{"type":27,"tag":367,"props":4914,"children":4916},{"class":4915,"line":463},[369,924],[4917,4921,4925],{"type":27,"tag":367,"props":4918,"children":4919},{"style":3814},[4920],{"type":50,"value":4076},{"type":27,"tag":367,"props":4922,"children":4923},{"style":374},[4924],{"type":50,"value":391},{"type":27,"tag":367,"props":4926,"children":4927},{"style":1459},[4928],{"type":50,"value":4929},"ghcr.io/shopware/shopware-cli:latest-php-8.2\n",{"type":27,"tag":367,"props":4931,"children":4932},{"class":369,"line":485},[4933,4937,4941,4945],{"type":27,"tag":367,"props":4934,"children":4935},{"style":3814},[4936],{"type":50,"value":4093},{"type":27,"tag":367,"props":4938,"children":4939},{"style":374},[4940],{"type":50,"value":4098},{"type":27,"tag":367,"props":4942,"children":4943},{"style":1459},[4944],{"type":50,"value":4103},{"type":27,"tag":367,"props":4946,"children":4947},{"style":374},[4948],{"type":50,"value":4108},{"type":27,"tag":367,"props":4950,"children":4951},{"class":369,"line":507},[4952,4956,4960],{"type":27,"tag":367,"props":4953,"children":4954},{"style":3814},[4955],{"type":50,"value":3879},{"type":27,"tag":367,"props":4957,"children":4958},{"style":374},[4959],{"type":50,"value":391},{"type":27,"tag":367,"props":4961,"children":4962},{"style":1459},[4963],{"type":50,"value":4882},{"type":27,"tag":367,"props":4965,"children":4966},{"class":369,"line":529},[4967,4972],{"type":27,"tag":367,"props":4968,"children":4969},{"style":3814},[4970],{"type":50,"value":4971},"  variables",{"type":27,"tag":367,"props":4973,"children":4974},{"style":374},[4975],{"type":50,"value":3822},{"type":27,"tag":367,"props":4977,"children":4978},{"class":369,"line":551},[4979,4984,4988],{"type":27,"tag":367,"props":4980,"children":4981},{"style":3814},[4982],{"type":50,"value":4983},"    COMPOSER_CACHE_DIR",{"type":27,"tag":367,"props":4985,"children":4986},{"style":374},[4987],{"type":50,"value":391},{"type":27,"tag":367,"props":4989,"children":4990},{"style":1459},[4991],{"type":50,"value":4992},"${CI_PROJECT_DIR}/.composer\n",{"type":27,"tag":367,"props":4994,"children":4995},{"class":369,"line":572},[4996,5001,5005],{"type":27,"tag":367,"props":4997,"children":4998},{"style":3814},[4999],{"type":50,"value":5000},"    npm_config_cache",{"type":27,"tag":367,"props":5002,"children":5003},{"style":374},[5004],{"type":50,"value":391},{"type":27,"tag":367,"props":5006,"children":5007},{"style":1459},[5008],{"type":50,"value":5009},"${CI_PROJECT_DIR}/.npm\n",{"type":27,"tag":367,"props":5011,"children":5012},{"class":369,"line":593},[5013,5017],{"type":27,"tag":367,"props":5014,"children":5015},{"style":3814},[5016],{"type":50,"value":3895},{"type":27,"tag":367,"props":5018,"children":5019},{"style":374},[5020],{"type":50,"value":3822},{"type":27,"tag":367,"props":5022,"children":5023},{"class":369,"line":611},[5024,5028],{"type":27,"tag":367,"props":5025,"children":5026},{"style":374},[5027],{"type":50,"value":3907},{"type":27,"tag":367,"props":5029,"children":5030},{"style":1459},[5031],{"type":50,"value":4732},{"type":27,"tag":367,"props":5033,"children":5035},{"class":5034,"line":620},[369,924],[5036,5041],{"type":27,"tag":367,"props":5037,"children":5038},{"style":3814},[5039],{"type":50,"value":5040},"  cache",{"type":27,"tag":367,"props":5042,"children":5043},{"style":374},[5044],{"type":50,"value":3822},{"type":27,"tag":367,"props":5046,"children":5048},{"class":5047,"line":634},[369,924],[5049,5053,5058,5062],{"type":27,"tag":367,"props":5050,"children":5051},{"style":374},[5052],{"type":50,"value":3907},{"type":27,"tag":367,"props":5054,"children":5055},{"style":3814},[5056],{"type":50,"value":5057},"key",{"type":27,"tag":367,"props":5059,"children":5060},{"style":374},[5061],{"type":50,"value":391},{"type":27,"tag":367,"props":5063,"children":5064},{"style":1459},[5065],{"type":50,"value":5066},"$CI_JOB_NAME\n",{"type":27,"tag":367,"props":5068,"children":5070},{"class":5069,"line":643},[369,924],[5071,5076],{"type":27,"tag":367,"props":5072,"children":5073},{"style":3814},[5074],{"type":50,"value":5075},"      paths",{"type":27,"tag":367,"props":5077,"children":5078},{"style":374},[5079],{"type":50,"value":3822},{"type":27,"tag":367,"props":5081,"children":5083},{"class":5082,"line":665},[369,924],[5084,5089],{"type":27,"tag":367,"props":5085,"children":5086},{"style":374},[5087],{"type":50,"value":5088},"        - ",{"type":27,"tag":367,"props":5090,"children":5091},{"style":1459},[5092],{"type":50,"value":5093},"$COMPOSER_CACHE_DIR\n",{"type":27,"tag":367,"props":5095,"children":5097},{"class":5096,"line":687},[369,924],[5098,5102],{"type":27,"tag":367,"props":5099,"children":5100},{"style":374},[5101],{"type":50,"value":5088},{"type":27,"tag":367,"props":5103,"children":5104},{"style":1459},[5105],{"type":50,"value":5106},"$npm_config_cache\n",{"type":27,"tag":367,"props":5108,"children":5109},{"class":369,"line":700},[5110,5114],{"type":27,"tag":367,"props":5111,"children":5112},{"style":3814},[5113],{"type":50,"value":3937},{"type":27,"tag":367,"props":5115,"children":5116},{"style":374},[5117],{"type":50,"value":3822},{"type":27,"tag":367,"props":5119,"children":5120},{"class":369,"line":719},[5121,5125,5129,5133],{"type":27,"tag":367,"props":5122,"children":5123},{"style":374},[5124],{"type":50,"value":3907},{"type":27,"tag":367,"props":5126,"children":5127},{"style":3814},[5128],{"type":50,"value":4170},{"type":27,"tag":367,"props":5130,"children":5131},{"style":374},[5132],{"type":50,"value":391},{"type":27,"tag":367,"props":5134,"children":5135},{"style":1459},[5136],{"type":50,"value":4179},{"type":27,"tag":367,"props":5138,"children":5139},{"class":369,"line":728},[5140,5144,5148],{"type":27,"tag":367,"props":5141,"children":5142},{"style":3814},[5143],{"type":50,"value":4187},{"type":27,"tag":367,"props":5145,"children":5146},{"style":374},[5147],{"type":50,"value":391},{"type":27,"tag":367,"props":5149,"children":5150},{"style":1459},[5151],{"type":50,"value":4196},{"type":27,"tag":367,"props":5153,"children":5154},{"class":369,"line":737},[5155,5159,5163,5167],{"type":27,"tag":367,"props":5156,"children":5157},{"style":374},[5158],{"type":50,"value":3907},{"type":27,"tag":367,"props":5160,"children":5161},{"style":3814},[5162],{"type":50,"value":4170},{"type":27,"tag":367,"props":5164,"children":5165},{"style":374},[5166],{"type":50,"value":391},{"type":27,"tag":367,"props":5168,"children":5169},{"style":1459},[5170],{"type":50,"value":4216},{"type":27,"tag":46,"props":5172,"children":5173},{},[5174,5176,5181],{"type":50,"value":5175},"Let's combine it with our release pipeline from the ",{"type":27,"tag":259,"props":5177,"children":5179},{"href":5178},"/en/blog/shopware-plugin-gitlab-pipeline-release#with-semantic-release",[5180],{"type":50,"value":4704},{"type":50,"value":266},{"type":27,"tag":46,"props":5183,"children":5184},{},[5185],{"type":50,"value":5186},"It's important to pass the built artifacts over to the next job.",{"type":27,"tag":351,"props":5188,"children":5191},{"className":3802,"code":5189,"filename":3997,"highlights":5190,"language":140,"meta":7,"style":7},"stages:\n  - release\n  - build\n\nbuild:\n  image:\n    name: ghcr.io/shopware/shopware-cli:latest-php-8.2\n    entrypoint: [\"\"]\n  stage: build\n  variables:\n    COMPOSER_CACHE_DIR: ${CI_PROJECT_DIR}/.composer\n    npm_config_cache: ${CI_PROJECT_DIR}/.npm\n  script:\n    - shopware-cli extension build .\n  cache:\n    - key: $CI_JOB_NAME\n      paths:\n        - $COMPOSER_CACHE_DIR\n        - $npm_config_cache\n  artifacts:\n    paths:\n      - src/Resources/public\n      - src/Storefront/Resources/public\n  rules:\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: never\n    - if: $CI_COMMIT_BRANCH\n\nrelease:\n  stage: release\n  image:\n    name: ghcr.io/voxpupuli/semantic-release:latest\n    entrypoint: [\"\"]\n  interruptible: true\n  script:\n    - /docker-entrypoint.sh\n  rules:\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: never\n    - if: $CI_COMMIT_BRANCH\n",[719,728,737,745],[5192],{"type":27,"tag":288,"props":5193,"children":5194},{"__ignoreMap":7},[5195,5206,5217,5228,5235,5246,5257,5272,5291,5306,5317,5332,5347,5358,5369,5380,5399,5410,5421,5432,5445,5458,5472,5485,5496,5515,5530,5549,5556,5567,5582,5593,5609,5628,5643,5654,5666,5677,5696,5711],{"type":27,"tag":367,"props":5196,"children":5197},{"class":369,"line":370},[5198,5202],{"type":27,"tag":367,"props":5199,"children":5200},{"style":3814},[5201],{"type":50,"value":3817},{"type":27,"tag":367,"props":5203,"children":5204},{"style":374},[5205],{"type":50,"value":3822},{"type":27,"tag":367,"props":5207,"children":5208},{"class":369,"line":119},[5209,5213],{"type":27,"tag":367,"props":5210,"children":5211},{"style":374},[5212],{"type":50,"value":3830},{"type":27,"tag":367,"props":5214,"children":5215},{"style":1459},[5216],{"type":50,"value":3835},{"type":27,"tag":367,"props":5218,"children":5219},{"class":369,"line":405},[5220,5224],{"type":27,"tag":367,"props":5221,"children":5222},{"style":374},[5223],{"type":50,"value":3830},{"type":27,"tag":367,"props":5225,"children":5226},{"style":1459},[5227],{"type":50,"value":4882},{"type":27,"tag":367,"props":5229,"children":5230},{"class":369,"line":427},[5231],{"type":27,"tag":367,"props":5232,"children":5233},{"emptyLinePlaceholder":132},[5234],{"type":50,"value":1629},{"type":27,"tag":367,"props":5236,"children":5237},{"class":369,"line":449},[5238,5242],{"type":27,"tag":367,"props":5239,"children":5240},{"style":3814},[5241],{"type":50,"value":4897},{"type":27,"tag":367,"props":5243,"children":5244},{"style":374},[5245],{"type":50,"value":3822},{"type":27,"tag":367,"props":5247,"children":5248},{"class":369,"line":463},[5249,5253],{"type":27,"tag":367,"props":5250,"children":5251},{"style":3814},[5252],{"type":50,"value":3862},{"type":27,"tag":367,"props":5254,"children":5255},{"style":374},[5256],{"type":50,"value":3822},{"type":27,"tag":367,"props":5258,"children":5259},{"class":369,"line":485},[5260,5264,5268],{"type":27,"tag":367,"props":5261,"children":5262},{"style":3814},[5263],{"type":50,"value":4076},{"type":27,"tag":367,"props":5265,"children":5266},{"style":374},[5267],{"type":50,"value":391},{"type":27,"tag":367,"props":5269,"children":5270},{"style":1459},[5271],{"type":50,"value":4929},{"type":27,"tag":367,"props":5273,"children":5274},{"class":369,"line":507},[5275,5279,5283,5287],{"type":27,"tag":367,"props":5276,"children":5277},{"style":3814},[5278],{"type":50,"value":4093},{"type":27,"tag":367,"props":5280,"children":5281},{"style":374},[5282],{"type":50,"value":4098},{"type":27,"tag":367,"props":5284,"children":5285},{"style":1459},[5286],{"type":50,"value":4103},{"type":27,"tag":367,"props":5288,"children":5289},{"style":374},[5290],{"type":50,"value":4108},{"type":27,"tag":367,"props":5292,"children":5293},{"class":369,"line":529},[5294,5298,5302],{"type":27,"tag":367,"props":5295,"children":5296},{"style":3814},[5297],{"type":50,"value":3879},{"type":27,"tag":367,"props":5299,"children":5300},{"style":374},[5301],{"type":50,"value":391},{"type":27,"tag":367,"props":5303,"children":5304},{"style":1459},[5305],{"type":50,"value":4882},{"type":27,"tag":367,"props":5307,"children":5308},{"class":369,"line":551},[5309,5313],{"type":27,"tag":367,"props":5310,"children":5311},{"style":3814},[5312],{"type":50,"value":4971},{"type":27,"tag":367,"props":5314,"children":5315},{"style":374},[5316],{"type":50,"value":3822},{"type":27,"tag":367,"props":5318,"children":5319},{"class":369,"line":572},[5320,5324,5328],{"type":27,"tag":367,"props":5321,"children":5322},{"style":3814},[5323],{"type":50,"value":4983},{"type":27,"tag":367,"props":5325,"children":5326},{"style":374},[5327],{"type":50,"value":391},{"type":27,"tag":367,"props":5329,"children":5330},{"style":1459},[5331],{"type":50,"value":4992},{"type":27,"tag":367,"props":5333,"children":5334},{"class":369,"line":593},[5335,5339,5343],{"type":27,"tag":367,"props":5336,"children":5337},{"style":3814},[5338],{"type":50,"value":5000},{"type":27,"tag":367,"props":5340,"children":5341},{"style":374},[5342],{"type":50,"value":391},{"type":27,"tag":367,"props":5344,"children":5345},{"style":1459},[5346],{"type":50,"value":5009},{"type":27,"tag":367,"props":5348,"children":5349},{"class":369,"line":611},[5350,5354],{"type":27,"tag":367,"props":5351,"children":5352},{"style":3814},[5353],{"type":50,"value":3895},{"type":27,"tag":367,"props":5355,"children":5356},{"style":374},[5357],{"type":50,"value":3822},{"type":27,"tag":367,"props":5359,"children":5360},{"class":369,"line":620},[5361,5365],{"type":27,"tag":367,"props":5362,"children":5363},{"style":374},[5364],{"type":50,"value":3907},{"type":27,"tag":367,"props":5366,"children":5367},{"style":1459},[5368],{"type":50,"value":4732},{"type":27,"tag":367,"props":5370,"children":5371},{"class":369,"line":634},[5372,5376],{"type":27,"tag":367,"props":5373,"children":5374},{"style":3814},[5375],{"type":50,"value":5040},{"type":27,"tag":367,"props":5377,"children":5378},{"style":374},[5379],{"type":50,"value":3822},{"type":27,"tag":367,"props":5381,"children":5382},{"class":369,"line":643},[5383,5387,5391,5395],{"type":27,"tag":367,"props":5384,"children":5385},{"style":374},[5386],{"type":50,"value":3907},{"type":27,"tag":367,"props":5388,"children":5389},{"style":3814},[5390],{"type":50,"value":5057},{"type":27,"tag":367,"props":5392,"children":5393},{"style":374},[5394],{"type":50,"value":391},{"type":27,"tag":367,"props":5396,"children":5397},{"style":1459},[5398],{"type":50,"value":5066},{"type":27,"tag":367,"props":5400,"children":5401},{"class":369,"line":665},[5402,5406],{"type":27,"tag":367,"props":5403,"children":5404},{"style":3814},[5405],{"type":50,"value":5075},{"type":27,"tag":367,"props":5407,"children":5408},{"style":374},[5409],{"type":50,"value":3822},{"type":27,"tag":367,"props":5411,"children":5412},{"class":369,"line":687},[5413,5417],{"type":27,"tag":367,"props":5414,"children":5415},{"style":374},[5416],{"type":50,"value":5088},{"type":27,"tag":367,"props":5418,"children":5419},{"style":1459},[5420],{"type":50,"value":5093},{"type":27,"tag":367,"props":5422,"children":5423},{"class":369,"line":700},[5424,5428],{"type":27,"tag":367,"props":5425,"children":5426},{"style":374},[5427],{"type":50,"value":5088},{"type":27,"tag":367,"props":5429,"children":5430},{"style":1459},[5431],{"type":50,"value":5106},{"type":27,"tag":367,"props":5433,"children":5435},{"class":5434,"line":719},[369,924],[5436,5441],{"type":27,"tag":367,"props":5437,"children":5438},{"style":3814},[5439],{"type":50,"value":5440},"  artifacts",{"type":27,"tag":367,"props":5442,"children":5443},{"style":374},[5444],{"type":50,"value":3822},{"type":27,"tag":367,"props":5446,"children":5448},{"class":5447,"line":728},[369,924],[5449,5454],{"type":27,"tag":367,"props":5450,"children":5451},{"style":3814},[5452],{"type":50,"value":5453},"    paths",{"type":27,"tag":367,"props":5455,"children":5456},{"style":374},[5457],{"type":50,"value":3822},{"type":27,"tag":367,"props":5459,"children":5461},{"class":5460,"line":737},[369,924],[5462,5467],{"type":27,"tag":367,"props":5463,"children":5464},{"style":374},[5465],{"type":50,"value":5466},"      - ",{"type":27,"tag":367,"props":5468,"children":5469},{"style":1459},[5470],{"type":50,"value":5471},"src/Resources/public\n",{"type":27,"tag":367,"props":5473,"children":5475},{"class":5474,"line":745},[369,924],[5476,5480],{"type":27,"tag":367,"props":5477,"children":5478},{"style":374},[5479],{"type":50,"value":5466},{"type":27,"tag":367,"props":5481,"children":5482},{"style":1459},[5483],{"type":50,"value":5484},"src/Storefront/Resources/public\n",{"type":27,"tag":367,"props":5486,"children":5487},{"class":369,"line":765},[5488,5492],{"type":27,"tag":367,"props":5489,"children":5490},{"style":3814},[5491],{"type":50,"value":3937},{"type":27,"tag":367,"props":5493,"children":5494},{"style":374},[5495],{"type":50,"value":3822},{"type":27,"tag":367,"props":5497,"children":5498},{"class":369,"line":786},[5499,5503,5507,5511],{"type":27,"tag":367,"props":5500,"children":5501},{"style":374},[5502],{"type":50,"value":3907},{"type":27,"tag":367,"props":5504,"children":5505},{"style":3814},[5506],{"type":50,"value":4170},{"type":27,"tag":367,"props":5508,"children":5509},{"style":374},[5510],{"type":50,"value":391},{"type":27,"tag":367,"props":5512,"children":5513},{"style":1459},[5514],{"type":50,"value":4179},{"type":27,"tag":367,"props":5516,"children":5517},{"class":369,"line":798},[5518,5522,5526],{"type":27,"tag":367,"props":5519,"children":5520},{"style":3814},[5521],{"type":50,"value":4187},{"type":27,"tag":367,"props":5523,"children":5524},{"style":374},[5525],{"type":50,"value":391},{"type":27,"tag":367,"props":5527,"children":5528},{"style":1459},[5529],{"type":50,"value":4196},{"type":27,"tag":367,"props":5531,"children":5532},{"class":369,"line":814},[5533,5537,5541,5545],{"type":27,"tag":367,"props":5534,"children":5535},{"style":374},[5536],{"type":50,"value":3907},{"type":27,"tag":367,"props":5538,"children":5539},{"style":3814},[5540],{"type":50,"value":4170},{"type":27,"tag":367,"props":5542,"children":5543},{"style":374},[5544],{"type":50,"value":391},{"type":27,"tag":367,"props":5546,"children":5547},{"style":1459},[5548],{"type":50,"value":4216},{"type":27,"tag":367,"props":5550,"children":5551},{"class":369,"line":822},[5552],{"type":27,"tag":367,"props":5553,"children":5554},{"emptyLinePlaceholder":132},[5555],{"type":50,"value":1629},{"type":27,"tag":367,"props":5557,"children":5558},{"class":369,"line":830},[5559,5563],{"type":27,"tag":367,"props":5560,"children":5561},{"style":3814},[5562],{"type":50,"value":4038},{"type":27,"tag":367,"props":5564,"children":5565},{"style":374},[5566],{"type":50,"value":3822},{"type":27,"tag":367,"props":5568,"children":5569},{"class":369,"line":838},[5570,5574,5578],{"type":27,"tag":367,"props":5571,"children":5572},{"style":3814},[5573],{"type":50,"value":3879},{"type":27,"tag":367,"props":5575,"children":5576},{"style":374},[5577],{"type":50,"value":391},{"type":27,"tag":367,"props":5579,"children":5580},{"style":1459},[5581],{"type":50,"value":3835},{"type":27,"tag":367,"props":5583,"children":5584},{"class":369,"line":858},[5585,5589],{"type":27,"tag":367,"props":5586,"children":5587},{"style":3814},[5588],{"type":50,"value":3862},{"type":27,"tag":367,"props":5590,"children":5591},{"style":374},[5592],{"type":50,"value":3822},{"type":27,"tag":367,"props":5594,"children":5595},{"class":369,"line":879},[5596,5600,5604],{"type":27,"tag":367,"props":5597,"children":5598},{"style":3814},[5599],{"type":50,"value":4076},{"type":27,"tag":367,"props":5601,"children":5602},{"style":374},[5603],{"type":50,"value":391},{"type":27,"tag":367,"props":5605,"children":5606},{"style":1459},[5607],{"type":50,"value":5608},"ghcr.io/voxpupuli/semantic-release:latest\n",{"type":27,"tag":367,"props":5610,"children":5611},{"class":369,"line":891},[5612,5616,5620,5624],{"type":27,"tag":367,"props":5613,"children":5614},{"style":3814},[5615],{"type":50,"value":4093},{"type":27,"tag":367,"props":5617,"children":5618},{"style":374},[5619],{"type":50,"value":4098},{"type":27,"tag":367,"props":5621,"children":5622},{"style":1459},[5623],{"type":50,"value":4103},{"type":27,"tag":367,"props":5625,"children":5626},{"style":374},[5627],{"type":50,"value":4108},{"type":27,"tag":367,"props":5629,"children":5630},{"class":369,"line":907},[5631,5635,5639],{"type":27,"tag":367,"props":5632,"children":5633},{"style":3814},[5634],{"type":50,"value":4116},{"type":27,"tag":367,"props":5636,"children":5637},{"style":374},[5638],{"type":50,"value":391},{"type":27,"tag":367,"props":5640,"children":5641},{"style":713},[5642],{"type":50,"value":716},{"type":27,"tag":367,"props":5644,"children":5645},{"class":369,"line":915},[5646,5650],{"type":27,"tag":367,"props":5647,"children":5648},{"style":3814},[5649],{"type":50,"value":3895},{"type":27,"tag":367,"props":5651,"children":5652},{"style":374},[5653],{"type":50,"value":3822},{"type":27,"tag":367,"props":5655,"children":5656},{"class":369,"line":357},[5657,5661],{"type":27,"tag":367,"props":5658,"children":5659},{"style":374},[5660],{"type":50,"value":3907},{"type":27,"tag":367,"props":5662,"children":5663},{"style":1459},[5664],{"type":50,"value":5665},"/docker-entrypoint.sh\n",{"type":27,"tag":367,"props":5667,"children":5668},{"class":369,"line":358},[5669,5673],{"type":27,"tag":367,"props":5670,"children":5671},{"style":3814},[5672],{"type":50,"value":3937},{"type":27,"tag":367,"props":5674,"children":5675},{"style":374},[5676],{"type":50,"value":3822},{"type":27,"tag":367,"props":5678,"children":5679},{"class":369,"line":359},[5680,5684,5688,5692],{"type":27,"tag":367,"props":5681,"children":5682},{"style":374},[5683],{"type":50,"value":3907},{"type":27,"tag":367,"props":5685,"children":5686},{"style":3814},[5687],{"type":50,"value":4170},{"type":27,"tag":367,"props":5689,"children":5690},{"style":374},[5691],{"type":50,"value":391},{"type":27,"tag":367,"props":5693,"children":5694},{"style":1459},[5695],{"type":50,"value":4179},{"type":27,"tag":367,"props":5697,"children":5698},{"class":369,"line":360},[5699,5703,5707],{"type":27,"tag":367,"props":5700,"children":5701},{"style":3814},[5702],{"type":50,"value":4187},{"type":27,"tag":367,"props":5704,"children":5705},{"style":374},[5706],{"type":50,"value":391},{"type":27,"tag":367,"props":5708,"children":5709},{"style":1459},[5710],{"type":50,"value":4196},{"type":27,"tag":367,"props":5712,"children":5713},{"class":369,"line":979},[5714,5718,5722,5726],{"type":27,"tag":367,"props":5715,"children":5716},{"style":374},[5717],{"type":50,"value":3907},{"type":27,"tag":367,"props":5719,"children":5720},{"style":3814},[5721],{"type":50,"value":4170},{"type":27,"tag":367,"props":5723,"children":5724},{"style":374},[5725],{"type":50,"value":391},{"type":27,"tag":367,"props":5727,"children":5728},{"style":1459},[5729],{"type":50,"value":4216},{"type":27,"tag":46,"props":5731,"children":5732},{},[5733],{"type":27,"tag":367,"props":5734,"children":5736},{"className":5735},[3679],[5737],{"type":50,"value":5738},"That's it!",{"type":27,"tag":46,"props":5740,"children":5741},{},[5742],{"type":50,"value":4626},{"type":27,"tag":278,"props":5744,"children":5745},{},[5746,5751,5756],{"type":27,"tag":282,"props":5747,"children":5748},{},[5749],{"type":50,"value":5750},"Build all the assets",{"type":27,"tag":282,"props":5752,"children":5753},{},[5754],{"type":50,"value":5755},"Pass them to the second job",{"type":27,"tag":282,"props":5757,"children":5758},{},[5759],{"type":50,"value":5760},"Run the release process as described previously",{"type":27,"tag":4668,"props":5762,"children":5763},{},[5764],{"type":50,"value":4672},{"title":7,"searchDepth":119,"depth":119,"links":5766},[5767,5768],{"id":4721,"depth":119,"text":4724},{"id":4828,"depth":119,"text":4831},{"_path":187,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":188,"description":189,"author":162,"image":163,"releaseDate":164,"blogCategories":5770,"articleTags":5771,"tags":5772,"body":5773,"_type":122,"_id":193,"_source":124,"_file":194,"_stem":195,"_extension":127},[166,167],[167,169,170],[21,172],{"type":24,"children":5774,"toc":8042},[5775,5779,5784,5835,5841,5853,5864,5906,5919,5927,5938,5944,5949,6219,6224,6229,6234,6239,6250,6255,6280,6286,6298,7068,7073,7101,7106,7112,7117,8038],{"type":27,"tag":241,"props":5776,"children":5778},{"alt":7,"aspect-ratio":243,"height":244,"object-fit":245,"src":5777},"/blog/shopware-plugin-test.png",[],{"type":27,"tag":46,"props":5780,"children":5781},{},[5782],{"type":50,"value":5783},"When it comes to testing a Shopware 6 plugin, there are two types of test that can be performed:",{"type":27,"tag":278,"props":5785,"children":5786},{},[5787,5823],{"type":27,"tag":282,"props":5788,"children":5789},{},[5790,5792,5798,5800],{"type":50,"value":5791},"Testing the code itself (",{"type":27,"tag":259,"props":5793,"children":5795},{"href":5794},"https://developer.shopware.com/docs/guides/plugins/plugins/testing/",[5796],{"type":50,"value":5797},"more in the official documentation",{"type":50,"value":5799},")\n",{"type":27,"tag":278,"props":5801,"children":5802},{},[5803,5808,5813,5818],{"type":27,"tag":282,"props":5804,"children":5805},{},[5806],{"type":50,"value":5807},"PHP unit test",{"type":27,"tag":282,"props":5809,"children":5810},{},[5811],{"type":50,"value":5812},"Jest unit tests in Shopware's storefront",{"type":27,"tag":282,"props":5814,"children":5815},{},[5816],{"type":50,"value":5817},"Jest unit tests in Shopware's administration",{"type":27,"tag":282,"props":5819,"children":5820},{},[5821],{"type":50,"value":5822},"End-to-End (E2E) Testing",{"type":27,"tag":282,"props":5824,"children":5825},{},[5826,5828,5833],{"type":50,"value":5827},"Ensuring high code quality (",{"type":27,"tag":259,"props":5829,"children":5831},{"href":5830},"https://developer.shopware.com/docs/products/cli/validation.html",[5832],{"type":50,"value":5797},{"type":50,"value":5834},")",{"type":27,"tag":67,"props":5836,"children":5838},{"id":5837},"code-quality",[5839],{"type":50,"value":5840},"Code quality",{"type":27,"tag":46,"props":5842,"children":5843},{},[5844,5846,5851],{"type":50,"value":5845},"Let's start with code quality because it's easier to run it outside a ",{"type":27,"tag":288,"props":5847,"children":5849},{"className":5848},[],[5850],{"type":50,"value":3699},{"type":50,"value":5852}," environment.",{"type":27,"tag":46,"props":5854,"children":5855},{},[5856,5858,5863],{"type":50,"value":5857},"We will again use the ",{"type":27,"tag":288,"props":5859,"children":5861},{"className":5860},[],[5862],{"type":50,"value":315},{"type":50,"value":266},{"type":27,"tag":351,"props":5865,"children":5867},{"code":5866,"language":1444,"meta":7,"className":1442,"style":7},"shopware-cli extension validate --full --reporter summary .\n",[5868],{"type":27,"tag":288,"props":5869,"children":5870},{"__ignoreMap":7},[5871],{"type":27,"tag":367,"props":5872,"children":5873},{"class":369,"line":370},[5874,5878,5882,5887,5892,5897,5902],{"type":27,"tag":367,"props":5875,"children":5876},{"style":1454},[5877],{"type":50,"value":315},{"type":27,"tag":367,"props":5879,"children":5880},{"style":1459},[5881],{"type":50,"value":4748},{"type":27,"tag":367,"props":5883,"children":5884},{"style":1459},[5885],{"type":50,"value":5886}," validate",{"type":27,"tag":367,"props":5888,"children":5889},{"style":713},[5890],{"type":50,"value":5891}," --full",{"type":27,"tag":367,"props":5893,"children":5894},{"style":713},[5895],{"type":50,"value":5896}," --reporter",{"type":27,"tag":367,"props":5898,"children":5899},{"style":1459},[5900],{"type":50,"value":5901}," summary",{"type":27,"tag":367,"props":5903,"children":5904},{"style":1459},[5905],{"type":50,"value":4758},{"type":27,"tag":46,"props":5907,"children":5908},{},[5909,5911,5917],{"type":50,"value":5910},"This will run all the tests described ",{"type":27,"tag":259,"props":5912,"children":5914},{"href":5913},"https://developer.shopware.com/docs/products/cli/validation.html#running-all-validation-tools",[5915],{"type":50,"value":5916},"here",{"type":50,"value":5918},"\nand hopefully produce an output like this:",{"type":27,"tag":351,"props":5920,"children":5922},{"code":5921},"✖ 0 problems (0 errors, 0 warnings)\n",[5923],{"type":27,"tag":288,"props":5924,"children":5925},{"__ignoreMap":7},[5926],{"type":50,"value":5921},{"type":27,"tag":46,"props":5928,"children":5929},{},[5930,5932,5937],{"type":50,"value":5931},"If there are any errors, refer to the Shopware documentation how to fix them and rerun only the failed tests like described ",{"type":27,"tag":259,"props":5933,"children":5935},{"href":5934},"https://developer.shopware.com/docs/products/cli/validation.html#running-specific-tools",[5936],{"type":50,"value":5916},{"type":50,"value":266},{"type":27,"tag":88,"props":5939,"children":5941},{"id":5940},"code-quality-pipeline",[5942],{"type":50,"value":5943},"Code quality pipeline",{"type":27,"tag":46,"props":5945,"children":5946},{},[5947],{"type":50,"value":5948},"Now we will run it in GitLab.",{"type":27,"tag":351,"props":5950,"children":5953},{"code":5951,"filename":3997,"highlights":5952,"language":140,"meta":7,"className":3802,"style":7},"stages:\n  - test\n\ncode-quality:\n   image:\n      name: ghcr.io/shopware/shopware-cli:latest-php-8.2\n      entrypoint: [\"\"]\n   stage: test\n   script:\n      - shopware-cli extension validate --full . | tee report.json\n   artifacts:\n      reports:\n         codequality: report.json\n   rules:\n      - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n      - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n        when: never\n      - if: $CI_COMMIT_BRANCH\n",[463,620,634,643,665,687],[5954],{"type":27,"tag":288,"props":5955,"children":5956},{"__ignoreMap":7},[5957,5968,5980,5987,5998,6010,6027,6047,6063,6075,6087,6099,6111,6128,6141,6162,6182,6199],{"type":27,"tag":367,"props":5958,"children":5959},{"class":369,"line":370},[5960,5964],{"type":27,"tag":367,"props":5961,"children":5962},{"style":3814},[5963],{"type":50,"value":3817},{"type":27,"tag":367,"props":5965,"children":5966},{"style":374},[5967],{"type":50,"value":3822},{"type":27,"tag":367,"props":5969,"children":5970},{"class":369,"line":119},[5971,5975],{"type":27,"tag":367,"props":5972,"children":5973},{"style":374},[5974],{"type":50,"value":3830},{"type":27,"tag":367,"props":5976,"children":5977},{"style":1459},[5978],{"type":50,"value":5979},"test\n",{"type":27,"tag":367,"props":5981,"children":5982},{"class":369,"line":405},[5983],{"type":27,"tag":367,"props":5984,"children":5985},{"emptyLinePlaceholder":132},[5986],{"type":50,"value":1629},{"type":27,"tag":367,"props":5988,"children":5989},{"class":369,"line":427},[5990,5994],{"type":27,"tag":367,"props":5991,"children":5992},{"style":3814},[5993],{"type":50,"value":5837},{"type":27,"tag":367,"props":5995,"children":5996},{"style":374},[5997],{"type":50,"value":3822},{"type":27,"tag":367,"props":5999,"children":6000},{"class":369,"line":449},[6001,6006],{"type":27,"tag":367,"props":6002,"children":6003},{"style":3814},[6004],{"type":50,"value":6005},"   image",{"type":27,"tag":367,"props":6007,"children":6008},{"style":374},[6009],{"type":50,"value":3822},{"type":27,"tag":367,"props":6011,"children":6013},{"class":6012,"line":463},[369,924],[6014,6019,6023],{"type":27,"tag":367,"props":6015,"children":6016},{"style":3814},[6017],{"type":50,"value":6018},"      name",{"type":27,"tag":367,"props":6020,"children":6021},{"style":374},[6022],{"type":50,"value":391},{"type":27,"tag":367,"props":6024,"children":6025},{"style":1459},[6026],{"type":50,"value":4929},{"type":27,"tag":367,"props":6028,"children":6029},{"class":369,"line":485},[6030,6035,6039,6043],{"type":27,"tag":367,"props":6031,"children":6032},{"style":3814},[6033],{"type":50,"value":6034},"      entrypoint",{"type":27,"tag":367,"props":6036,"children":6037},{"style":374},[6038],{"type":50,"value":4098},{"type":27,"tag":367,"props":6040,"children":6041},{"style":1459},[6042],{"type":50,"value":4103},{"type":27,"tag":367,"props":6044,"children":6045},{"style":374},[6046],{"type":50,"value":4108},{"type":27,"tag":367,"props":6048,"children":6049},{"class":369,"line":507},[6050,6055,6059],{"type":27,"tag":367,"props":6051,"children":6052},{"style":3814},[6053],{"type":50,"value":6054},"   stage",{"type":27,"tag":367,"props":6056,"children":6057},{"style":374},[6058],{"type":50,"value":391},{"type":27,"tag":367,"props":6060,"children":6061},{"style":1459},[6062],{"type":50,"value":5979},{"type":27,"tag":367,"props":6064,"children":6065},{"class":369,"line":529},[6066,6071],{"type":27,"tag":367,"props":6067,"children":6068},{"style":3814},[6069],{"type":50,"value":6070},"   script",{"type":27,"tag":367,"props":6072,"children":6073},{"style":374},[6074],{"type":50,"value":3822},{"type":27,"tag":367,"props":6076,"children":6077},{"class":369,"line":551},[6078,6082],{"type":27,"tag":367,"props":6079,"children":6080},{"style":374},[6081],{"type":50,"value":5466},{"type":27,"tag":367,"props":6083,"children":6084},{"style":1459},[6085],{"type":50,"value":6086},"shopware-cli extension validate --full . | tee report.json\n",{"type":27,"tag":367,"props":6088,"children":6089},{"class":369,"line":572},[6090,6095],{"type":27,"tag":367,"props":6091,"children":6092},{"style":3814},[6093],{"type":50,"value":6094},"   artifacts",{"type":27,"tag":367,"props":6096,"children":6097},{"style":374},[6098],{"type":50,"value":3822},{"type":27,"tag":367,"props":6100,"children":6101},{"class":369,"line":593},[6102,6107],{"type":27,"tag":367,"props":6103,"children":6104},{"style":3814},[6105],{"type":50,"value":6106},"      reports",{"type":27,"tag":367,"props":6108,"children":6109},{"style":374},[6110],{"type":50,"value":3822},{"type":27,"tag":367,"props":6112,"children":6113},{"class":369,"line":611},[6114,6119,6123],{"type":27,"tag":367,"props":6115,"children":6116},{"style":3814},[6117],{"type":50,"value":6118},"         codequality",{"type":27,"tag":367,"props":6120,"children":6121},{"style":374},[6122],{"type":50,"value":391},{"type":27,"tag":367,"props":6124,"children":6125},{"style":1459},[6126],{"type":50,"value":6127},"report.json\n",{"type":27,"tag":367,"props":6129,"children":6131},{"class":6130,"line":620},[369,924],[6132,6137],{"type":27,"tag":367,"props":6133,"children":6134},{"style":3814},[6135],{"type":50,"value":6136},"   rules",{"type":27,"tag":367,"props":6138,"children":6139},{"style":374},[6140],{"type":50,"value":3822},{"type":27,"tag":367,"props":6142,"children":6144},{"class":6143,"line":634},[369,924],[6145,6149,6153,6157],{"type":27,"tag":367,"props":6146,"children":6147},{"style":374},[6148],{"type":50,"value":5466},{"type":27,"tag":367,"props":6150,"children":6151},{"style":3814},[6152],{"type":50,"value":4170},{"type":27,"tag":367,"props":6154,"children":6155},{"style":374},[6156],{"type":50,"value":391},{"type":27,"tag":367,"props":6158,"children":6159},{"style":1459},[6160],{"type":50,"value":6161},"$CI_PIPELINE_SOURCE == \"merge_request_event\"\n",{"type":27,"tag":367,"props":6163,"children":6165},{"class":6164,"line":643},[369,924],[6166,6170,6174,6178],{"type":27,"tag":367,"props":6167,"children":6168},{"style":374},[6169],{"type":50,"value":5466},{"type":27,"tag":367,"props":6171,"children":6172},{"style":3814},[6173],{"type":50,"value":4170},{"type":27,"tag":367,"props":6175,"children":6176},{"style":374},[6177],{"type":50,"value":391},{"type":27,"tag":367,"props":6179,"children":6180},{"style":1459},[6181],{"type":50,"value":4179},{"type":27,"tag":367,"props":6183,"children":6185},{"class":6184,"line":665},[369,924],[6186,6191,6195],{"type":27,"tag":367,"props":6187,"children":6188},{"style":3814},[6189],{"type":50,"value":6190},"        when",{"type":27,"tag":367,"props":6192,"children":6193},{"style":374},[6194],{"type":50,"value":391},{"type":27,"tag":367,"props":6196,"children":6197},{"style":1459},[6198],{"type":50,"value":4196},{"type":27,"tag":367,"props":6200,"children":6202},{"class":6201,"line":687},[369,924],[6203,6207,6211,6215],{"type":27,"tag":367,"props":6204,"children":6205},{"style":374},[6206],{"type":50,"value":5466},{"type":27,"tag":367,"props":6208,"children":6209},{"style":3814},[6210],{"type":50,"value":4170},{"type":27,"tag":367,"props":6212,"children":6213},{"style":374},[6214],{"type":50,"value":391},{"type":27,"tag":367,"props":6216,"children":6217},{"style":1459},[6218],{"type":50,"value":4216},{"type":27,"tag":46,"props":6220,"children":6221},{},[6222],{"type":50,"value":6223},"This pipeline will run on the default branch and on merge request pipelines.",{"type":27,"tag":46,"props":6225,"children":6226},{},[6227],{"type":50,"value":6228},"Running on the default branch before build and release prevents from accidentally creating a low-quality release.",{"type":27,"tag":46,"props":6230,"children":6231},{},[6232],{"type":50,"value":6233},"A nice touch to the MR pipeline is the Code Quality report integration!",{"type":27,"tag":67,"props":6235,"children":6237},{"id":6236},"php-unit-test",[6238],{"type":50,"value":5807},{"type":27,"tag":46,"props":6240,"children":6241},{},[6242,6244],{"type":50,"value":6243},"First of all, we need to configure PHPUnit by following the ",{"type":27,"tag":259,"props":6245,"children":6247},{"href":6246},"https://developer.shopware.com/docs/guides/plugins/plugins/testing/php-unit.html",[6248],{"type":50,"value":6249},"official shopware documentation",{"type":27,"tag":46,"props":6251,"children":6252},{},[6253],{"type":50,"value":6254},"We won't focus here on this process. When everything is setup, we should be able to run our test like this in out Shopware project root:",{"type":27,"tag":351,"props":6256,"children":6258},{"code":6257,"language":1444,"meta":7,"className":1442,"style":7},"./vendor/bin/phpunit --configuration=\"custom/static-plugins/SwagBasicExample\"\n",[6259],{"type":27,"tag":288,"props":6260,"children":6261},{"__ignoreMap":7},[6262],{"type":27,"tag":367,"props":6263,"children":6264},{"class":369,"line":370},[6265,6270,6275],{"type":27,"tag":367,"props":6266,"children":6267},{"style":1454},[6268],{"type":50,"value":6269},"./vendor/bin/phpunit",{"type":27,"tag":367,"props":6271,"children":6272},{"style":713},[6273],{"type":50,"value":6274}," --configuration=",{"type":27,"tag":367,"props":6276,"children":6277},{"style":1459},[6278],{"type":50,"value":6279},"\"custom/static-plugins/SwagBasicExample\"\n",{"type":27,"tag":88,"props":6281,"children":6283},{"id":6282},"phpunit-pipeline",[6284],{"type":50,"value":6285},"PHPUnit pipeline",{"type":27,"tag":46,"props":6287,"children":6288},{},[6289,6291,6296],{"type":50,"value":6290},"Running PHPUnit for a plugin requires a full Shopware instance. Fortunately, ",{"type":27,"tag":288,"props":6292,"children":6294},{"className":6293},[],[6295],{"type":50,"value":315},{"type":50,"value":6297}," can help us to deal with it.",{"type":27,"tag":351,"props":6299,"children":6302},{"code":6300,"filename":3997,"highlights":6301,"language":140,"meta":7,"className":3802,"style":7},"stages:\n   - test\n\nphpunit:\n  stage: test\n  image:\n    name: ghcr.io/shopware/shopware-cli:latest-php-8.2\n    entrypoint: [\"\"]\n  services:\n    - name: mysql:8.3.0\n      alias: test_database\n      variables:\n        MYSQL_SKIP_TEST_DB: 'yes'\n        MYSQL_ALLOW_EMPTY_PASSWORD: yes\n  variables:\n    GIT_STRATEGY: none\n    SHOPWARE_ROOT: ${CI_PROJECT_DIR}/shopware\n    SHOPWARE_VERSION: 6.6.10.13\n    \n    APP_SECRET: def00000bb5acb32b54ff8ee130270586eec0e878f7337dc7a837acc31d3ff00f93a56b595448b4b29664847dd51991b3314ff65aeeeb761a133b0ec0e070433bff08e48\n    MESSENGER_TRANSPORT_DSN: sync://\n    DATABASE_URL: mysql://root@test_database/shopware\n    COMPOSER_CACHE_DIR: ${CI_PROJECT_DIR}/.composer\n\n    XDEBUG_MODE: coverage\n  before_script:\n    - apk add --no-cache php-8.2-xdebug\n    - shopware-cli project create shopware ${SHOPWARE_VERSION}\n    - cd $SHOPWARE_ROOT\n    - composer req --dev shopware/dev-tools phpunit/phpunit\n    - git clone \"https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git\" \"custom/plugins/${CI_PROJECT_NAME}\"\n    - cd custom/plugins/${CI_PROJECT_NAME}\n    - git checkout ${CI_COMMIT_SHA}\n    - cd ${SHOPWARE_ROOT}\n    - composer require $(composer -d custom/plugins/${CI_PROJECT_NAME} config name)\n    - cd custom/plugins/${CI_PROJECT_NAME}\n  script:\n    - ${SHOPWARE_ROOT}/vendor/bin/phpunit --coverage-text --coverage-cobertura=coverage.cobertura.xml\n\n  cache:\n    - key: $CI_JOB_NAME\n      paths:\n        - $COMPOSER_CACHE_DIR\n  coverage: /^\\s*Lines:\\s*\\d+.\\d+\\%/\n  artifacts:\n    reports:\n      coverage_report:\n        coverage_format: cobertura\n        path: coverage.cobertura.xml\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: never\n    - if: $CI_COMMIT_BRANCH\n",[529,551,572,593,611,620,643,719,728,737,745,814,822,830,838,858,879,891,907,915,357,359],[6303],{"type":27,"tag":288,"props":6304,"children":6305},{"__ignoreMap":7},[6306,6317,6329,6336,6348,6363,6374,6389,6408,6421,6443,6461,6474,6492,6510,6521,6539,6556,6573,6581,6599,6617,6635,6651,6658,6675,6687,6700,6713,6726,6739,6752,6765,6778,6791,6804,6816,6827,6840,6847,6858,6877,6888,6899,6916,6927,6939,6951,6968,6985,6996,7015,7034,7049],{"type":27,"tag":367,"props":6307,"children":6308},{"class":369,"line":370},[6309,6313],{"type":27,"tag":367,"props":6310,"children":6311},{"style":3814},[6312],{"type":50,"value":3817},{"type":27,"tag":367,"props":6314,"children":6315},{"style":374},[6316],{"type":50,"value":3822},{"type":27,"tag":367,"props":6318,"children":6319},{"class":369,"line":119},[6320,6325],{"type":27,"tag":367,"props":6321,"children":6322},{"style":374},[6323],{"type":50,"value":6324},"   - ",{"type":27,"tag":367,"props":6326,"children":6327},{"style":1459},[6328],{"type":50,"value":5979},{"type":27,"tag":367,"props":6330,"children":6331},{"class":369,"line":405},[6332],{"type":27,"tag":367,"props":6333,"children":6334},{"emptyLinePlaceholder":132},[6335],{"type":50,"value":1629},{"type":27,"tag":367,"props":6337,"children":6338},{"class":369,"line":427},[6339,6344],{"type":27,"tag":367,"props":6340,"children":6341},{"style":3814},[6342],{"type":50,"value":6343},"phpunit",{"type":27,"tag":367,"props":6345,"children":6346},{"style":374},[6347],{"type":50,"value":3822},{"type":27,"tag":367,"props":6349,"children":6350},{"class":369,"line":449},[6351,6355,6359],{"type":27,"tag":367,"props":6352,"children":6353},{"style":3814},[6354],{"type":50,"value":3879},{"type":27,"tag":367,"props":6356,"children":6357},{"style":374},[6358],{"type":50,"value":391},{"type":27,"tag":367,"props":6360,"children":6361},{"style":1459},[6362],{"type":50,"value":5979},{"type":27,"tag":367,"props":6364,"children":6365},{"class":369,"line":463},[6366,6370],{"type":27,"tag":367,"props":6367,"children":6368},{"style":3814},[6369],{"type":50,"value":3862},{"type":27,"tag":367,"props":6371,"children":6372},{"style":374},[6373],{"type":50,"value":3822},{"type":27,"tag":367,"props":6375,"children":6376},{"class":369,"line":485},[6377,6381,6385],{"type":27,"tag":367,"props":6378,"children":6379},{"style":3814},[6380],{"type":50,"value":4076},{"type":27,"tag":367,"props":6382,"children":6383},{"style":374},[6384],{"type":50,"value":391},{"type":27,"tag":367,"props":6386,"children":6387},{"style":1459},[6388],{"type":50,"value":4929},{"type":27,"tag":367,"props":6390,"children":6391},{"class":369,"line":507},[6392,6396,6400,6404],{"type":27,"tag":367,"props":6393,"children":6394},{"style":3814},[6395],{"type":50,"value":4093},{"type":27,"tag":367,"props":6397,"children":6398},{"style":374},[6399],{"type":50,"value":4098},{"type":27,"tag":367,"props":6401,"children":6402},{"style":1459},[6403],{"type":50,"value":4103},{"type":27,"tag":367,"props":6405,"children":6406},{"style":374},[6407],{"type":50,"value":4108},{"type":27,"tag":367,"props":6409,"children":6411},{"class":6410,"line":529},[369,924],[6412,6417],{"type":27,"tag":367,"props":6413,"children":6414},{"style":3814},[6415],{"type":50,"value":6416},"  services",{"type":27,"tag":367,"props":6418,"children":6419},{"style":374},[6420],{"type":50,"value":3822},{"type":27,"tag":367,"props":6422,"children":6424},{"class":6423,"line":551},[369,924],[6425,6429,6434,6438],{"type":27,"tag":367,"props":6426,"children":6427},{"style":374},[6428],{"type":50,"value":3907},{"type":27,"tag":367,"props":6430,"children":6431},{"style":3814},[6432],{"type":50,"value":6433},"name",{"type":27,"tag":367,"props":6435,"children":6436},{"style":374},[6437],{"type":50,"value":391},{"type":27,"tag":367,"props":6439,"children":6440},{"style":1459},[6441],{"type":50,"value":6442},"mysql:8.3.0\n",{"type":27,"tag":367,"props":6444,"children":6446},{"class":6445,"line":572},[369,924],[6447,6452,6456],{"type":27,"tag":367,"props":6448,"children":6449},{"style":3814},[6450],{"type":50,"value":6451},"      alias",{"type":27,"tag":367,"props":6453,"children":6454},{"style":374},[6455],{"type":50,"value":391},{"type":27,"tag":367,"props":6457,"children":6458},{"style":1459},[6459],{"type":50,"value":6460},"test_database\n",{"type":27,"tag":367,"props":6462,"children":6464},{"class":6463,"line":593},[369,924],[6465,6470],{"type":27,"tag":367,"props":6466,"children":6467},{"style":3814},[6468],{"type":50,"value":6469},"      variables",{"type":27,"tag":367,"props":6471,"children":6472},{"style":374},[6473],{"type":50,"value":3822},{"type":27,"tag":367,"props":6475,"children":6477},{"class":6476,"line":611},[369,924],[6478,6483,6487],{"type":27,"tag":367,"props":6479,"children":6480},{"style":3814},[6481],{"type":50,"value":6482},"        MYSQL_SKIP_TEST_DB",{"type":27,"tag":367,"props":6484,"children":6485},{"style":374},[6486],{"type":50,"value":391},{"type":27,"tag":367,"props":6488,"children":6489},{"style":1459},[6490],{"type":50,"value":6491},"'yes'\n",{"type":27,"tag":367,"props":6493,"children":6495},{"class":6494,"line":620},[369,924],[6496,6501,6505],{"type":27,"tag":367,"props":6497,"children":6498},{"style":3814},[6499],{"type":50,"value":6500},"        MYSQL_ALLOW_EMPTY_PASSWORD",{"type":27,"tag":367,"props":6502,"children":6503},{"style":374},[6504],{"type":50,"value":391},{"type":27,"tag":367,"props":6506,"children":6507},{"style":713},[6508],{"type":50,"value":6509},"yes\n",{"type":27,"tag":367,"props":6511,"children":6512},{"class":369,"line":634},[6513,6517],{"type":27,"tag":367,"props":6514,"children":6515},{"style":3814},[6516],{"type":50,"value":4971},{"type":27,"tag":367,"props":6518,"children":6519},{"style":374},[6520],{"type":50,"value":3822},{"type":27,"tag":367,"props":6522,"children":6524},{"class":6523,"line":643},[369,924],[6525,6530,6534],{"type":27,"tag":367,"props":6526,"children":6527},{"style":3814},[6528],{"type":50,"value":6529},"    GIT_STRATEGY",{"type":27,"tag":367,"props":6531,"children":6532},{"style":374},[6533],{"type":50,"value":391},{"type":27,"tag":367,"props":6535,"children":6536},{"style":1459},[6537],{"type":50,"value":6538},"none\n",{"type":27,"tag":367,"props":6540,"children":6541},{"class":369,"line":665},[6542,6547,6551],{"type":27,"tag":367,"props":6543,"children":6544},{"style":3814},[6545],{"type":50,"value":6546},"    SHOPWARE_ROOT",{"type":27,"tag":367,"props":6548,"children":6549},{"style":374},[6550],{"type":50,"value":391},{"type":27,"tag":367,"props":6552,"children":6553},{"style":1459},[6554],{"type":50,"value":6555},"${CI_PROJECT_DIR}/shopware\n",{"type":27,"tag":367,"props":6557,"children":6558},{"class":369,"line":687},[6559,6564,6568],{"type":27,"tag":367,"props":6560,"children":6561},{"style":3814},[6562],{"type":50,"value":6563},"    SHOPWARE_VERSION",{"type":27,"tag":367,"props":6565,"children":6566},{"style":374},[6567],{"type":50,"value":391},{"type":27,"tag":367,"props":6569,"children":6570},{"style":713},[6571],{"type":50,"value":6572},"6.6.10.13\n",{"type":27,"tag":367,"props":6574,"children":6575},{"class":369,"line":700},[6576],{"type":27,"tag":367,"props":6577,"children":6578},{"style":374},[6579],{"type":50,"value":6580},"    \n",{"type":27,"tag":367,"props":6582,"children":6584},{"class":6583,"line":719},[369,924],[6585,6590,6594],{"type":27,"tag":367,"props":6586,"children":6587},{"style":3814},[6588],{"type":50,"value":6589},"    APP_SECRET",{"type":27,"tag":367,"props":6591,"children":6592},{"style":374},[6593],{"type":50,"value":391},{"type":27,"tag":367,"props":6595,"children":6596},{"style":1459},[6597],{"type":50,"value":6598},"def00000bb5acb32b54ff8ee130270586eec0e878f7337dc7a837acc31d3ff00f93a56b595448b4b29664847dd51991b3314ff65aeeeb761a133b0ec0e070433bff08e48\n",{"type":27,"tag":367,"props":6600,"children":6602},{"class":6601,"line":728},[369,924],[6603,6608,6612],{"type":27,"tag":367,"props":6604,"children":6605},{"style":3814},[6606],{"type":50,"value":6607},"    MESSENGER_TRANSPORT_DSN",{"type":27,"tag":367,"props":6609,"children":6610},{"style":374},[6611],{"type":50,"value":391},{"type":27,"tag":367,"props":6613,"children":6614},{"style":1459},[6615],{"type":50,"value":6616},"sync://\n",{"type":27,"tag":367,"props":6618,"children":6620},{"class":6619,"line":737},[369,924],[6621,6626,6630],{"type":27,"tag":367,"props":6622,"children":6623},{"style":3814},[6624],{"type":50,"value":6625},"    DATABASE_URL",{"type":27,"tag":367,"props":6627,"children":6628},{"style":374},[6629],{"type":50,"value":391},{"type":27,"tag":367,"props":6631,"children":6632},{"style":1459},[6633],{"type":50,"value":6634},"mysql://root@test_database/shopware\n",{"type":27,"tag":367,"props":6636,"children":6638},{"class":6637,"line":745},[369,924],[6639,6643,6647],{"type":27,"tag":367,"props":6640,"children":6641},{"style":3814},[6642],{"type":50,"value":4983},{"type":27,"tag":367,"props":6644,"children":6645},{"style":374},[6646],{"type":50,"value":391},{"type":27,"tag":367,"props":6648,"children":6649},{"style":1459},[6650],{"type":50,"value":4992},{"type":27,"tag":367,"props":6652,"children":6653},{"class":369,"line":765},[6654],{"type":27,"tag":367,"props":6655,"children":6656},{"emptyLinePlaceholder":132},[6657],{"type":50,"value":1629},{"type":27,"tag":367,"props":6659,"children":6660},{"class":369,"line":786},[6661,6666,6670],{"type":27,"tag":367,"props":6662,"children":6663},{"style":3814},[6664],{"type":50,"value":6665},"    XDEBUG_MODE",{"type":27,"tag":367,"props":6667,"children":6668},{"style":374},[6669],{"type":50,"value":391},{"type":27,"tag":367,"props":6671,"children":6672},{"style":1459},[6673],{"type":50,"value":6674},"coverage\n",{"type":27,"tag":367,"props":6676,"children":6677},{"class":369,"line":798},[6678,6683],{"type":27,"tag":367,"props":6679,"children":6680},{"style":3814},[6681],{"type":50,"value":6682},"  before_script",{"type":27,"tag":367,"props":6684,"children":6685},{"style":374},[6686],{"type":50,"value":3822},{"type":27,"tag":367,"props":6688,"children":6690},{"class":6689,"line":814},[369,924],[6691,6695],{"type":27,"tag":367,"props":6692,"children":6693},{"style":374},[6694],{"type":50,"value":3907},{"type":27,"tag":367,"props":6696,"children":6697},{"style":1459},[6698],{"type":50,"value":6699},"apk add --no-cache php-8.2-xdebug\n",{"type":27,"tag":367,"props":6701,"children":6703},{"class":6702,"line":822},[369,924],[6704,6708],{"type":27,"tag":367,"props":6705,"children":6706},{"style":374},[6707],{"type":50,"value":3907},{"type":27,"tag":367,"props":6709,"children":6710},{"style":1459},[6711],{"type":50,"value":6712},"shopware-cli project create shopware ${SHOPWARE_VERSION}\n",{"type":27,"tag":367,"props":6714,"children":6716},{"class":6715,"line":830},[369,924],[6717,6721],{"type":27,"tag":367,"props":6718,"children":6719},{"style":374},[6720],{"type":50,"value":3907},{"type":27,"tag":367,"props":6722,"children":6723},{"style":1459},[6724],{"type":50,"value":6725},"cd $SHOPWARE_ROOT\n",{"type":27,"tag":367,"props":6727,"children":6729},{"class":6728,"line":838},[369,924],[6730,6734],{"type":27,"tag":367,"props":6731,"children":6732},{"style":374},[6733],{"type":50,"value":3907},{"type":27,"tag":367,"props":6735,"children":6736},{"style":1459},[6737],{"type":50,"value":6738},"composer req --dev shopware/dev-tools phpunit/phpunit\n",{"type":27,"tag":367,"props":6740,"children":6742},{"class":6741,"line":858},[369,924],[6743,6747],{"type":27,"tag":367,"props":6744,"children":6745},{"style":374},[6746],{"type":50,"value":3907},{"type":27,"tag":367,"props":6748,"children":6749},{"style":1459},[6750],{"type":50,"value":6751},"git clone \"https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git\" \"custom/plugins/${CI_PROJECT_NAME}\"\n",{"type":27,"tag":367,"props":6753,"children":6755},{"class":6754,"line":879},[369,924],[6756,6760],{"type":27,"tag":367,"props":6757,"children":6758},{"style":374},[6759],{"type":50,"value":3907},{"type":27,"tag":367,"props":6761,"children":6762},{"style":1459},[6763],{"type":50,"value":6764},"cd custom/plugins/${CI_PROJECT_NAME}\n",{"type":27,"tag":367,"props":6766,"children":6768},{"class":6767,"line":891},[369,924],[6769,6773],{"type":27,"tag":367,"props":6770,"children":6771},{"style":374},[6772],{"type":50,"value":3907},{"type":27,"tag":367,"props":6774,"children":6775},{"style":1459},[6776],{"type":50,"value":6777},"git checkout ${CI_COMMIT_SHA}\n",{"type":27,"tag":367,"props":6779,"children":6781},{"class":6780,"line":907},[369,924],[6782,6786],{"type":27,"tag":367,"props":6783,"children":6784},{"style":374},[6785],{"type":50,"value":3907},{"type":27,"tag":367,"props":6787,"children":6788},{"style":1459},[6789],{"type":50,"value":6790},"cd ${SHOPWARE_ROOT}\n",{"type":27,"tag":367,"props":6792,"children":6794},{"class":6793,"line":915},[369,924],[6795,6799],{"type":27,"tag":367,"props":6796,"children":6797},{"style":374},[6798],{"type":50,"value":3907},{"type":27,"tag":367,"props":6800,"children":6801},{"style":1459},[6802],{"type":50,"value":6803},"composer require $(composer -d custom/plugins/${CI_PROJECT_NAME} config name)\n",{"type":27,"tag":367,"props":6805,"children":6807},{"class":6806,"line":357},[369,924],[6808,6812],{"type":27,"tag":367,"props":6809,"children":6810},{"style":374},[6811],{"type":50,"value":3907},{"type":27,"tag":367,"props":6813,"children":6814},{"style":1459},[6815],{"type":50,"value":6764},{"type":27,"tag":367,"props":6817,"children":6818},{"class":369,"line":358},[6819,6823],{"type":27,"tag":367,"props":6820,"children":6821},{"style":3814},[6822],{"type":50,"value":3895},{"type":27,"tag":367,"props":6824,"children":6825},{"style":374},[6826],{"type":50,"value":3822},{"type":27,"tag":367,"props":6828,"children":6830},{"class":6829,"line":359},[369,924],[6831,6835],{"type":27,"tag":367,"props":6832,"children":6833},{"style":374},[6834],{"type":50,"value":3907},{"type":27,"tag":367,"props":6836,"children":6837},{"style":1459},[6838],{"type":50,"value":6839},"${SHOPWARE_ROOT}/vendor/bin/phpunit --coverage-text --coverage-cobertura=coverage.cobertura.xml\n",{"type":27,"tag":367,"props":6841,"children":6842},{"class":369,"line":360},[6843],{"type":27,"tag":367,"props":6844,"children":6845},{"emptyLinePlaceholder":132},[6846],{"type":50,"value":1629},{"type":27,"tag":367,"props":6848,"children":6849},{"class":369,"line":979},[6850,6854],{"type":27,"tag":367,"props":6851,"children":6852},{"style":3814},[6853],{"type":50,"value":5040},{"type":27,"tag":367,"props":6855,"children":6856},{"style":374},[6857],{"type":50,"value":3822},{"type":27,"tag":367,"props":6859,"children":6860},{"class":369,"line":988},[6861,6865,6869,6873],{"type":27,"tag":367,"props":6862,"children":6863},{"style":374},[6864],{"type":50,"value":3907},{"type":27,"tag":367,"props":6866,"children":6867},{"style":3814},[6868],{"type":50,"value":5057},{"type":27,"tag":367,"props":6870,"children":6871},{"style":374},[6872],{"type":50,"value":391},{"type":27,"tag":367,"props":6874,"children":6875},{"style":1459},[6876],{"type":50,"value":5066},{"type":27,"tag":367,"props":6878,"children":6879},{"class":369,"line":1001},[6880,6884],{"type":27,"tag":367,"props":6881,"children":6882},{"style":3814},[6883],{"type":50,"value":5075},{"type":27,"tag":367,"props":6885,"children":6886},{"style":374},[6887],{"type":50,"value":3822},{"type":27,"tag":367,"props":6889,"children":6890},{"class":369,"line":1014},[6891,6895],{"type":27,"tag":367,"props":6892,"children":6893},{"style":374},[6894],{"type":50,"value":5088},{"type":27,"tag":367,"props":6896,"children":6897},{"style":1459},[6898],{"type":50,"value":5093},{"type":27,"tag":367,"props":6900,"children":6901},{"class":369,"line":1043},[6902,6907,6911],{"type":27,"tag":367,"props":6903,"children":6904},{"style":3814},[6905],{"type":50,"value":6906},"  coverage",{"type":27,"tag":367,"props":6908,"children":6909},{"style":374},[6910],{"type":50,"value":391},{"type":27,"tag":367,"props":6912,"children":6913},{"style":1459},[6914],{"type":50,"value":6915},"/^\\s*Lines:\\s*\\d+.\\d+\\%/\n",{"type":27,"tag":367,"props":6917,"children":6918},{"class":369,"line":1051},[6919,6923],{"type":27,"tag":367,"props":6920,"children":6921},{"style":3814},[6922],{"type":50,"value":5440},{"type":27,"tag":367,"props":6924,"children":6925},{"style":374},[6926],{"type":50,"value":3822},{"type":27,"tag":367,"props":6928,"children":6929},{"class":369,"line":1059},[6930,6935],{"type":27,"tag":367,"props":6931,"children":6932},{"style":3814},[6933],{"type":50,"value":6934},"    reports",{"type":27,"tag":367,"props":6936,"children":6937},{"style":374},[6938],{"type":50,"value":3822},{"type":27,"tag":367,"props":6940,"children":6941},{"class":369,"line":1081},[6942,6947],{"type":27,"tag":367,"props":6943,"children":6944},{"style":3814},[6945],{"type":50,"value":6946},"      coverage_report",{"type":27,"tag":367,"props":6948,"children":6949},{"style":374},[6950],{"type":50,"value":3822},{"type":27,"tag":367,"props":6952,"children":6953},{"class":369,"line":1094},[6954,6959,6963],{"type":27,"tag":367,"props":6955,"children":6956},{"style":3814},[6957],{"type":50,"value":6958},"        coverage_format",{"type":27,"tag":367,"props":6960,"children":6961},{"style":374},[6962],{"type":50,"value":391},{"type":27,"tag":367,"props":6964,"children":6965},{"style":1459},[6966],{"type":50,"value":6967},"cobertura\n",{"type":27,"tag":367,"props":6969,"children":6970},{"class":369,"line":1107},[6971,6976,6980],{"type":27,"tag":367,"props":6972,"children":6973},{"style":3814},[6974],{"type":50,"value":6975},"        path",{"type":27,"tag":367,"props":6977,"children":6978},{"style":374},[6979],{"type":50,"value":391},{"type":27,"tag":367,"props":6981,"children":6982},{"style":1459},[6983],{"type":50,"value":6984},"coverage.cobertura.xml\n",{"type":27,"tag":367,"props":6986,"children":6987},{"class":369,"line":1128},[6988,6992],{"type":27,"tag":367,"props":6989,"children":6990},{"style":3814},[6991],{"type":50,"value":3937},{"type":27,"tag":367,"props":6993,"children":6994},{"style":374},[6995],{"type":50,"value":3822},{"type":27,"tag":367,"props":6997,"children":6998},{"class":369,"line":1145},[6999,7003,7007,7011],{"type":27,"tag":367,"props":7000,"children":7001},{"style":374},[7002],{"type":50,"value":3907},{"type":27,"tag":367,"props":7004,"children":7005},{"style":3814},[7006],{"type":50,"value":4170},{"type":27,"tag":367,"props":7008,"children":7009},{"style":374},[7010],{"type":50,"value":391},{"type":27,"tag":367,"props":7012,"children":7013},{"style":1459},[7014],{"type":50,"value":6161},{"type":27,"tag":367,"props":7016,"children":7017},{"class":369,"line":1153},[7018,7022,7026,7030],{"type":27,"tag":367,"props":7019,"children":7020},{"style":374},[7021],{"type":50,"value":3907},{"type":27,"tag":367,"props":7023,"children":7024},{"style":3814},[7025],{"type":50,"value":4170},{"type":27,"tag":367,"props":7027,"children":7028},{"style":374},[7029],{"type":50,"value":391},{"type":27,"tag":367,"props":7031,"children":7032},{"style":1459},[7033],{"type":50,"value":4179},{"type":27,"tag":367,"props":7035,"children":7036},{"class":369,"line":1174},[7037,7041,7045],{"type":27,"tag":367,"props":7038,"children":7039},{"style":3814},[7040],{"type":50,"value":4187},{"type":27,"tag":367,"props":7042,"children":7043},{"style":374},[7044],{"type":50,"value":391},{"type":27,"tag":367,"props":7046,"children":7047},{"style":1459},[7048],{"type":50,"value":4196},{"type":27,"tag":367,"props":7050,"children":7051},{"class":369,"line":1191},[7052,7056,7060,7064],{"type":27,"tag":367,"props":7053,"children":7054},{"style":374},[7055],{"type":50,"value":3907},{"type":27,"tag":367,"props":7057,"children":7058},{"style":3814},[7059],{"type":50,"value":4170},{"type":27,"tag":367,"props":7061,"children":7062},{"style":374},[7063],{"type":50,"value":391},{"type":27,"tag":367,"props":7065,"children":7066},{"style":1459},[7067],{"type":50,"value":4216},{"type":27,"tag":46,"props":7069,"children":7070},{},[7071],{"type":50,"value":7072},"Let's explain this a little",{"type":27,"tag":278,"props":7074,"children":7075},{},[7076,7081,7086,7091,7096],{"type":27,"tag":282,"props":7077,"children":7078},{},[7079],{"type":50,"value":7080},"We disable automatic repository cloning (16)",{"type":27,"tag":282,"props":7082,"children":7083},{},[7084],{"type":50,"value":7085},"We include a database service (9-14)",{"type":27,"tag":282,"props":7087,"children":7088},{},[7089],{"type":50,"value":7090},"We set some required Shopware env variables (20-23)",{"type":27,"tag":282,"props":7092,"children":7093},{},[7094],{"type":50,"value":7095},"Create an empty shopware project with phpunit and xdebug (27-36)",{"type":27,"tag":282,"props":7097,"children":7098},{},[7099],{"type":50,"value":7100},"Run PHPUnit with code coverage generation as text and in cobertura format (38)",{"type":27,"tag":46,"props":7102,"children":7103},{},[7104],{"type":50,"value":7105},"Like the Code quality pipeline, this takes full advantage of GitLab coverage reporting",{"type":27,"tag":67,"props":7107,"children":7109},{"id":7108},"putting-it-all-together",[7110],{"type":50,"value":7111},"Putting it all together",{"type":27,"tag":46,"props":7113,"children":7114},{},[7115],{"type":50,"value":7116},"For this part, we don't include the build and release part.",{"type":27,"tag":351,"props":7118,"children":7120},{"code":7119,"filename":3997,"language":140,"meta":7,"className":3802,"style":7},"stages:\n   - test\n\nphpunit:\n  stage: test\n  image:\n    name: ghcr.io/shopware/shopware-cli:latest-php-8.2\n    entrypoint: [\"\"]\n  services:\n    - name: mysql:8.3.0\n      alias: test_database\n      variables:\n        MYSQL_SKIP_TEST_DB: 'yes'\n        MYSQL_ALLOW_EMPTY_PASSWORD: yes\n  variables:\n    GIT_STRATEGY: none\n    SHOPWARE_ROOT: ${CI_PROJECT_DIR}/shopware\n    SHOPWARE_VERSION: 6.6.10.13\n    \n    APP_SECRET: def00000bb5acb32b54ff8ee130270586eec0e878f7337dc7a837acc31d3ff00f93a56b595448b4b29664847dd51991b3314ff65aeeeb761a133b0ec0e070433bff08e48\n    MESSENGER_TRANSPORT_DSN: sync://\n    DATABASE_URL: mysql://root@test_database/shopware\n    COMPOSER_CACHE_DIR: ${CI_PROJECT_DIR}/.composer\n\n    XDEBUG_MODE: coverage\n  before_script:\n    - apk add --no-cache php-8.2-xdebug\n    - shopware-cli project create shopware ${SHOPWARE_VERSION}\n    - cd $SHOPWARE_ROOT\n    - composer req --dev shopware/dev-tools phpunit/phpunit\n    - git clone \"https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git\" \"custom/plugins/${CI_PROJECT_NAME}\"\n    - cd custom/plugins/${CI_PROJECT_NAME}\n    - git checkout ${CI_COMMIT_SHA}\n    - cd ${SHOPWARE_ROOT}\n    - composer require $(composer -d custom/plugins/${CI_PROJECT_NAME} config name)\n    - cd custom/plugins/${CI_PROJECT_NAME}\n  script:\n    - ${SHOPWARE_ROOT}/vendor/bin/phpunit --coverage-text --coverage-cobertura=coverage.cobertura.xml\n\n  cache:\n    - key: $CI_JOB_NAME\n      paths:\n        - $COMPOSER_CACHE_DIR\n  coverage: /^\\s*Lines:\\s*\\d+.\\d+\\%/\n  artifacts:\n    reports:\n      coverage_report:\n        coverage_format: cobertura\n        path: coverage.cobertura.xml\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n      when: never\n    - if: $CI_COMMIT_BRANCH\n\ncode-quality:\n   image:\n      name: ghcr.io/shopware/shopware-cli:latest-php-8.2\n      entrypoint: [\"\"]\n   stage: test\n   script:\n      - shopware-cli extension validate --full . | tee report.json\n   artifacts:\n      reports:\n         codequality: report.json\n   rules:\n      - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n      - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n        when: never\n      - if: $CI_COMMIT_BRANCH\n",[7121],{"type":27,"tag":288,"props":7122,"children":7123},{"__ignoreMap":7},[7124,7135,7146,7153,7164,7179,7190,7205,7224,7235,7254,7269,7280,7295,7310,7321,7336,7351,7366,7373,7388,7403,7418,7433,7440,7455,7466,7477,7488,7499,7510,7521,7532,7543,7554,7565,7576,7587,7598,7605,7616,7635,7646,7657,7672,7683,7694,7705,7720,7735,7746,7765,7784,7799,7818,7825,7836,7847,7862,7881,7896,7907,7918,7929,7940,7955,7966,7985,8004,8019],{"type":27,"tag":367,"props":7125,"children":7126},{"class":369,"line":370},[7127,7131],{"type":27,"tag":367,"props":7128,"children":7129},{"style":3814},[7130],{"type":50,"value":3817},{"type":27,"tag":367,"props":7132,"children":7133},{"style":374},[7134],{"type":50,"value":3822},{"type":27,"tag":367,"props":7136,"children":7137},{"class":369,"line":119},[7138,7142],{"type":27,"tag":367,"props":7139,"children":7140},{"style":374},[7141],{"type":50,"value":6324},{"type":27,"tag":367,"props":7143,"children":7144},{"style":1459},[7145],{"type":50,"value":5979},{"type":27,"tag":367,"props":7147,"children":7148},{"class":369,"line":405},[7149],{"type":27,"tag":367,"props":7150,"children":7151},{"emptyLinePlaceholder":132},[7152],{"type":50,"value":1629},{"type":27,"tag":367,"props":7154,"children":7155},{"class":369,"line":427},[7156,7160],{"type":27,"tag":367,"props":7157,"children":7158},{"style":3814},[7159],{"type":50,"value":6343},{"type":27,"tag":367,"props":7161,"children":7162},{"style":374},[7163],{"type":50,"value":3822},{"type":27,"tag":367,"props":7165,"children":7166},{"class":369,"line":449},[7167,7171,7175],{"type":27,"tag":367,"props":7168,"children":7169},{"style":3814},[7170],{"type":50,"value":3879},{"type":27,"tag":367,"props":7172,"children":7173},{"style":374},[7174],{"type":50,"value":391},{"type":27,"tag":367,"props":7176,"children":7177},{"style":1459},[7178],{"type":50,"value":5979},{"type":27,"tag":367,"props":7180,"children":7181},{"class":369,"line":463},[7182,7186],{"type":27,"tag":367,"props":7183,"children":7184},{"style":3814},[7185],{"type":50,"value":3862},{"type":27,"tag":367,"props":7187,"children":7188},{"style":374},[7189],{"type":50,"value":3822},{"type":27,"tag":367,"props":7191,"children":7192},{"class":369,"line":485},[7193,7197,7201],{"type":27,"tag":367,"props":7194,"children":7195},{"style":3814},[7196],{"type":50,"value":4076},{"type":27,"tag":367,"props":7198,"children":7199},{"style":374},[7200],{"type":50,"value":391},{"type":27,"tag":367,"props":7202,"children":7203},{"style":1459},[7204],{"type":50,"value":4929},{"type":27,"tag":367,"props":7206,"children":7207},{"class":369,"line":507},[7208,7212,7216,7220],{"type":27,"tag":367,"props":7209,"children":7210},{"style":3814},[7211],{"type":50,"value":4093},{"type":27,"tag":367,"props":7213,"children":7214},{"style":374},[7215],{"type":50,"value":4098},{"type":27,"tag":367,"props":7217,"children":7218},{"style":1459},[7219],{"type":50,"value":4103},{"type":27,"tag":367,"props":7221,"children":7222},{"style":374},[7223],{"type":50,"value":4108},{"type":27,"tag":367,"props":7225,"children":7226},{"class":369,"line":529},[7227,7231],{"type":27,"tag":367,"props":7228,"children":7229},{"style":3814},[7230],{"type":50,"value":6416},{"type":27,"tag":367,"props":7232,"children":7233},{"style":374},[7234],{"type":50,"value":3822},{"type":27,"tag":367,"props":7236,"children":7237},{"class":369,"line":551},[7238,7242,7246,7250],{"type":27,"tag":367,"props":7239,"children":7240},{"style":374},[7241],{"type":50,"value":3907},{"type":27,"tag":367,"props":7243,"children":7244},{"style":3814},[7245],{"type":50,"value":6433},{"type":27,"tag":367,"props":7247,"children":7248},{"style":374},[7249],{"type":50,"value":391},{"type":27,"tag":367,"props":7251,"children":7252},{"style":1459},[7253],{"type":50,"value":6442},{"type":27,"tag":367,"props":7255,"children":7256},{"class":369,"line":572},[7257,7261,7265],{"type":27,"tag":367,"props":7258,"children":7259},{"style":3814},[7260],{"type":50,"value":6451},{"type":27,"tag":367,"props":7262,"children":7263},{"style":374},[7264],{"type":50,"value":391},{"type":27,"tag":367,"props":7266,"children":7267},{"style":1459},[7268],{"type":50,"value":6460},{"type":27,"tag":367,"props":7270,"children":7271},{"class":369,"line":593},[7272,7276],{"type":27,"tag":367,"props":7273,"children":7274},{"style":3814},[7275],{"type":50,"value":6469},{"type":27,"tag":367,"props":7277,"children":7278},{"style":374},[7279],{"type":50,"value":3822},{"type":27,"tag":367,"props":7281,"children":7282},{"class":369,"line":611},[7283,7287,7291],{"type":27,"tag":367,"props":7284,"children":7285},{"style":3814},[7286],{"type":50,"value":6482},{"type":27,"tag":367,"props":7288,"children":7289},{"style":374},[7290],{"type":50,"value":391},{"type":27,"tag":367,"props":7292,"children":7293},{"style":1459},[7294],{"type":50,"value":6491},{"type":27,"tag":367,"props":7296,"children":7297},{"class":369,"line":620},[7298,7302,7306],{"type":27,"tag":367,"props":7299,"children":7300},{"style":3814},[7301],{"type":50,"value":6500},{"type":27,"tag":367,"props":7303,"children":7304},{"style":374},[7305],{"type":50,"value":391},{"type":27,"tag":367,"props":7307,"children":7308},{"style":713},[7309],{"type":50,"value":6509},{"type":27,"tag":367,"props":7311,"children":7312},{"class":369,"line":634},[7313,7317],{"type":27,"tag":367,"props":7314,"children":7315},{"style":3814},[7316],{"type":50,"value":4971},{"type":27,"tag":367,"props":7318,"children":7319},{"style":374},[7320],{"type":50,"value":3822},{"type":27,"tag":367,"props":7322,"children":7323},{"class":369,"line":643},[7324,7328,7332],{"type":27,"tag":367,"props":7325,"children":7326},{"style":3814},[7327],{"type":50,"value":6529},{"type":27,"tag":367,"props":7329,"children":7330},{"style":374},[7331],{"type":50,"value":391},{"type":27,"tag":367,"props":7333,"children":7334},{"style":1459},[7335],{"type":50,"value":6538},{"type":27,"tag":367,"props":7337,"children":7338},{"class":369,"line":665},[7339,7343,7347],{"type":27,"tag":367,"props":7340,"children":7341},{"style":3814},[7342],{"type":50,"value":6546},{"type":27,"tag":367,"props":7344,"children":7345},{"style":374},[7346],{"type":50,"value":391},{"type":27,"tag":367,"props":7348,"children":7349},{"style":1459},[7350],{"type":50,"value":6555},{"type":27,"tag":367,"props":7352,"children":7353},{"class":369,"line":687},[7354,7358,7362],{"type":27,"tag":367,"props":7355,"children":7356},{"style":3814},[7357],{"type":50,"value":6563},{"type":27,"tag":367,"props":7359,"children":7360},{"style":374},[7361],{"type":50,"value":391},{"type":27,"tag":367,"props":7363,"children":7364},{"style":713},[7365],{"type":50,"value":6572},{"type":27,"tag":367,"props":7367,"children":7368},{"class":369,"line":700},[7369],{"type":27,"tag":367,"props":7370,"children":7371},{"style":374},[7372],{"type":50,"value":6580},{"type":27,"tag":367,"props":7374,"children":7375},{"class":369,"line":719},[7376,7380,7384],{"type":27,"tag":367,"props":7377,"children":7378},{"style":3814},[7379],{"type":50,"value":6589},{"type":27,"tag":367,"props":7381,"children":7382},{"style":374},[7383],{"type":50,"value":391},{"type":27,"tag":367,"props":7385,"children":7386},{"style":1459},[7387],{"type":50,"value":6598},{"type":27,"tag":367,"props":7389,"children":7390},{"class":369,"line":728},[7391,7395,7399],{"type":27,"tag":367,"props":7392,"children":7393},{"style":3814},[7394],{"type":50,"value":6607},{"type":27,"tag":367,"props":7396,"children":7397},{"style":374},[7398],{"type":50,"value":391},{"type":27,"tag":367,"props":7400,"children":7401},{"style":1459},[7402],{"type":50,"value":6616},{"type":27,"tag":367,"props":7404,"children":7405},{"class":369,"line":737},[7406,7410,7414],{"type":27,"tag":367,"props":7407,"children":7408},{"style":3814},[7409],{"type":50,"value":6625},{"type":27,"tag":367,"props":7411,"children":7412},{"style":374},[7413],{"type":50,"value":391},{"type":27,"tag":367,"props":7415,"children":7416},{"style":1459},[7417],{"type":50,"value":6634},{"type":27,"tag":367,"props":7419,"children":7420},{"class":369,"line":745},[7421,7425,7429],{"type":27,"tag":367,"props":7422,"children":7423},{"style":3814},[7424],{"type":50,"value":4983},{"type":27,"tag":367,"props":7426,"children":7427},{"style":374},[7428],{"type":50,"value":391},{"type":27,"tag":367,"props":7430,"children":7431},{"style":1459},[7432],{"type":50,"value":4992},{"type":27,"tag":367,"props":7434,"children":7435},{"class":369,"line":765},[7436],{"type":27,"tag":367,"props":7437,"children":7438},{"emptyLinePlaceholder":132},[7439],{"type":50,"value":1629},{"type":27,"tag":367,"props":7441,"children":7442},{"class":369,"line":786},[7443,7447,7451],{"type":27,"tag":367,"props":7444,"children":7445},{"style":3814},[7446],{"type":50,"value":6665},{"type":27,"tag":367,"props":7448,"children":7449},{"style":374},[7450],{"type":50,"value":391},{"type":27,"tag":367,"props":7452,"children":7453},{"style":1459},[7454],{"type":50,"value":6674},{"type":27,"tag":367,"props":7456,"children":7457},{"class":369,"line":798},[7458,7462],{"type":27,"tag":367,"props":7459,"children":7460},{"style":3814},[7461],{"type":50,"value":6682},{"type":27,"tag":367,"props":7463,"children":7464},{"style":374},[7465],{"type":50,"value":3822},{"type":27,"tag":367,"props":7467,"children":7468},{"class":369,"line":814},[7469,7473],{"type":27,"tag":367,"props":7470,"children":7471},{"style":374},[7472],{"type":50,"value":3907},{"type":27,"tag":367,"props":7474,"children":7475},{"style":1459},[7476],{"type":50,"value":6699},{"type":27,"tag":367,"props":7478,"children":7479},{"class":369,"line":822},[7480,7484],{"type":27,"tag":367,"props":7481,"children":7482},{"style":374},[7483],{"type":50,"value":3907},{"type":27,"tag":367,"props":7485,"children":7486},{"style":1459},[7487],{"type":50,"value":6712},{"type":27,"tag":367,"props":7489,"children":7490},{"class":369,"line":830},[7491,7495],{"type":27,"tag":367,"props":7492,"children":7493},{"style":374},[7494],{"type":50,"value":3907},{"type":27,"tag":367,"props":7496,"children":7497},{"style":1459},[7498],{"type":50,"value":6725},{"type":27,"tag":367,"props":7500,"children":7501},{"class":369,"line":838},[7502,7506],{"type":27,"tag":367,"props":7503,"children":7504},{"style":374},[7505],{"type":50,"value":3907},{"type":27,"tag":367,"props":7507,"children":7508},{"style":1459},[7509],{"type":50,"value":6738},{"type":27,"tag":367,"props":7511,"children":7512},{"class":369,"line":858},[7513,7517],{"type":27,"tag":367,"props":7514,"children":7515},{"style":374},[7516],{"type":50,"value":3907},{"type":27,"tag":367,"props":7518,"children":7519},{"style":1459},[7520],{"type":50,"value":6751},{"type":27,"tag":367,"props":7522,"children":7523},{"class":369,"line":879},[7524,7528],{"type":27,"tag":367,"props":7525,"children":7526},{"style":374},[7527],{"type":50,"value":3907},{"type":27,"tag":367,"props":7529,"children":7530},{"style":1459},[7531],{"type":50,"value":6764},{"type":27,"tag":367,"props":7533,"children":7534},{"class":369,"line":891},[7535,7539],{"type":27,"tag":367,"props":7536,"children":7537},{"style":374},[7538],{"type":50,"value":3907},{"type":27,"tag":367,"props":7540,"children":7541},{"style":1459},[7542],{"type":50,"value":6777},{"type":27,"tag":367,"props":7544,"children":7545},{"class":369,"line":907},[7546,7550],{"type":27,"tag":367,"props":7547,"children":7548},{"style":374},[7549],{"type":50,"value":3907},{"type":27,"tag":367,"props":7551,"children":7552},{"style":1459},[7553],{"type":50,"value":6790},{"type":27,"tag":367,"props":7555,"children":7556},{"class":369,"line":915},[7557,7561],{"type":27,"tag":367,"props":7558,"children":7559},{"style":374},[7560],{"type":50,"value":3907},{"type":27,"tag":367,"props":7562,"children":7563},{"style":1459},[7564],{"type":50,"value":6803},{"type":27,"tag":367,"props":7566,"children":7567},{"class":369,"line":357},[7568,7572],{"type":27,"tag":367,"props":7569,"children":7570},{"style":374},[7571],{"type":50,"value":3907},{"type":27,"tag":367,"props":7573,"children":7574},{"style":1459},[7575],{"type":50,"value":6764},{"type":27,"tag":367,"props":7577,"children":7578},{"class":369,"line":358},[7579,7583],{"type":27,"tag":367,"props":7580,"children":7581},{"style":3814},[7582],{"type":50,"value":3895},{"type":27,"tag":367,"props":7584,"children":7585},{"style":374},[7586],{"type":50,"value":3822},{"type":27,"tag":367,"props":7588,"children":7589},{"class":369,"line":359},[7590,7594],{"type":27,"tag":367,"props":7591,"children":7592},{"style":374},[7593],{"type":50,"value":3907},{"type":27,"tag":367,"props":7595,"children":7596},{"style":1459},[7597],{"type":50,"value":6839},{"type":27,"tag":367,"props":7599,"children":7600},{"class":369,"line":360},[7601],{"type":27,"tag":367,"props":7602,"children":7603},{"emptyLinePlaceholder":132},[7604],{"type":50,"value":1629},{"type":27,"tag":367,"props":7606,"children":7607},{"class":369,"line":979},[7608,7612],{"type":27,"tag":367,"props":7609,"children":7610},{"style":3814},[7611],{"type":50,"value":5040},{"type":27,"tag":367,"props":7613,"children":7614},{"style":374},[7615],{"type":50,"value":3822},{"type":27,"tag":367,"props":7617,"children":7618},{"class":369,"line":988},[7619,7623,7627,7631],{"type":27,"tag":367,"props":7620,"children":7621},{"style":374},[7622],{"type":50,"value":3907},{"type":27,"tag":367,"props":7624,"children":7625},{"style":3814},[7626],{"type":50,"value":5057},{"type":27,"tag":367,"props":7628,"children":7629},{"style":374},[7630],{"type":50,"value":391},{"type":27,"tag":367,"props":7632,"children":7633},{"style":1459},[7634],{"type":50,"value":5066},{"type":27,"tag":367,"props":7636,"children":7637},{"class":369,"line":1001},[7638,7642],{"type":27,"tag":367,"props":7639,"children":7640},{"style":3814},[7641],{"type":50,"value":5075},{"type":27,"tag":367,"props":7643,"children":7644},{"style":374},[7645],{"type":50,"value":3822},{"type":27,"tag":367,"props":7647,"children":7648},{"class":369,"line":1014},[7649,7653],{"type":27,"tag":367,"props":7650,"children":7651},{"style":374},[7652],{"type":50,"value":5088},{"type":27,"tag":367,"props":7654,"children":7655},{"style":1459},[7656],{"type":50,"value":5093},{"type":27,"tag":367,"props":7658,"children":7659},{"class":369,"line":1043},[7660,7664,7668],{"type":27,"tag":367,"props":7661,"children":7662},{"style":3814},[7663],{"type":50,"value":6906},{"type":27,"tag":367,"props":7665,"children":7666},{"style":374},[7667],{"type":50,"value":391},{"type":27,"tag":367,"props":7669,"children":7670},{"style":1459},[7671],{"type":50,"value":6915},{"type":27,"tag":367,"props":7673,"children":7674},{"class":369,"line":1051},[7675,7679],{"type":27,"tag":367,"props":7676,"children":7677},{"style":3814},[7678],{"type":50,"value":5440},{"type":27,"tag":367,"props":7680,"children":7681},{"style":374},[7682],{"type":50,"value":3822},{"type":27,"tag":367,"props":7684,"children":7685},{"class":369,"line":1059},[7686,7690],{"type":27,"tag":367,"props":7687,"children":7688},{"style":3814},[7689],{"type":50,"value":6934},{"type":27,"tag":367,"props":7691,"children":7692},{"style":374},[7693],{"type":50,"value":3822},{"type":27,"tag":367,"props":7695,"children":7696},{"class":369,"line":1081},[7697,7701],{"type":27,"tag":367,"props":7698,"children":7699},{"style":3814},[7700],{"type":50,"value":6946},{"type":27,"tag":367,"props":7702,"children":7703},{"style":374},[7704],{"type":50,"value":3822},{"type":27,"tag":367,"props":7706,"children":7707},{"class":369,"line":1094},[7708,7712,7716],{"type":27,"tag":367,"props":7709,"children":7710},{"style":3814},[7711],{"type":50,"value":6958},{"type":27,"tag":367,"props":7713,"children":7714},{"style":374},[7715],{"type":50,"value":391},{"type":27,"tag":367,"props":7717,"children":7718},{"style":1459},[7719],{"type":50,"value":6967},{"type":27,"tag":367,"props":7721,"children":7722},{"class":369,"line":1107},[7723,7727,7731],{"type":27,"tag":367,"props":7724,"children":7725},{"style":3814},[7726],{"type":50,"value":6975},{"type":27,"tag":367,"props":7728,"children":7729},{"style":374},[7730],{"type":50,"value":391},{"type":27,"tag":367,"props":7732,"children":7733},{"style":1459},[7734],{"type":50,"value":6984},{"type":27,"tag":367,"props":7736,"children":7737},{"class":369,"line":1128},[7738,7742],{"type":27,"tag":367,"props":7739,"children":7740},{"style":3814},[7741],{"type":50,"value":3937},{"type":27,"tag":367,"props":7743,"children":7744},{"style":374},[7745],{"type":50,"value":3822},{"type":27,"tag":367,"props":7747,"children":7748},{"class":369,"line":1145},[7749,7753,7757,7761],{"type":27,"tag":367,"props":7750,"children":7751},{"style":374},[7752],{"type":50,"value":3907},{"type":27,"tag":367,"props":7754,"children":7755},{"style":3814},[7756],{"type":50,"value":4170},{"type":27,"tag":367,"props":7758,"children":7759},{"style":374},[7760],{"type":50,"value":391},{"type":27,"tag":367,"props":7762,"children":7763},{"style":1459},[7764],{"type":50,"value":6161},{"type":27,"tag":367,"props":7766,"children":7767},{"class":369,"line":1153},[7768,7772,7776,7780],{"type":27,"tag":367,"props":7769,"children":7770},{"style":374},[7771],{"type":50,"value":3907},{"type":27,"tag":367,"props":7773,"children":7774},{"style":3814},[7775],{"type":50,"value":4170},{"type":27,"tag":367,"props":7777,"children":7778},{"style":374},[7779],{"type":50,"value":391},{"type":27,"tag":367,"props":7781,"children":7782},{"style":1459},[7783],{"type":50,"value":4179},{"type":27,"tag":367,"props":7785,"children":7786},{"class":369,"line":1174},[7787,7791,7795],{"type":27,"tag":367,"props":7788,"children":7789},{"style":3814},[7790],{"type":50,"value":4187},{"type":27,"tag":367,"props":7792,"children":7793},{"style":374},[7794],{"type":50,"value":391},{"type":27,"tag":367,"props":7796,"children":7797},{"style":1459},[7798],{"type":50,"value":4196},{"type":27,"tag":367,"props":7800,"children":7801},{"class":369,"line":1191},[7802,7806,7810,7814],{"type":27,"tag":367,"props":7803,"children":7804},{"style":374},[7805],{"type":50,"value":3907},{"type":27,"tag":367,"props":7807,"children":7808},{"style":3814},[7809],{"type":50,"value":4170},{"type":27,"tag":367,"props":7811,"children":7812},{"style":374},[7813],{"type":50,"value":391},{"type":27,"tag":367,"props":7815,"children":7816},{"style":1459},[7817],{"type":50,"value":4216},{"type":27,"tag":367,"props":7819,"children":7820},{"class":369,"line":1199},[7821],{"type":27,"tag":367,"props":7822,"children":7823},{"emptyLinePlaceholder":132},[7824],{"type":50,"value":1629},{"type":27,"tag":367,"props":7826,"children":7827},{"class":369,"line":1212},[7828,7832],{"type":27,"tag":367,"props":7829,"children":7830},{"style":3814},[7831],{"type":50,"value":5837},{"type":27,"tag":367,"props":7833,"children":7834},{"style":374},[7835],{"type":50,"value":3822},{"type":27,"tag":367,"props":7837,"children":7838},{"class":369,"line":1225},[7839,7843],{"type":27,"tag":367,"props":7840,"children":7841},{"style":3814},[7842],{"type":50,"value":6005},{"type":27,"tag":367,"props":7844,"children":7845},{"style":374},[7846],{"type":50,"value":3822},{"type":27,"tag":367,"props":7848,"children":7849},{"class":369,"line":1243},[7850,7854,7858],{"type":27,"tag":367,"props":7851,"children":7852},{"style":3814},[7853],{"type":50,"value":6018},{"type":27,"tag":367,"props":7855,"children":7856},{"style":374},[7857],{"type":50,"value":391},{"type":27,"tag":367,"props":7859,"children":7860},{"style":1459},[7861],{"type":50,"value":4929},{"type":27,"tag":367,"props":7863,"children":7864},{"class":369,"line":1251},[7865,7869,7873,7877],{"type":27,"tag":367,"props":7866,"children":7867},{"style":3814},[7868],{"type":50,"value":6034},{"type":27,"tag":367,"props":7870,"children":7871},{"style":374},[7872],{"type":50,"value":4098},{"type":27,"tag":367,"props":7874,"children":7875},{"style":1459},[7876],{"type":50,"value":4103},{"type":27,"tag":367,"props":7878,"children":7879},{"style":374},[7880],{"type":50,"value":4108},{"type":27,"tag":367,"props":7882,"children":7883},{"class":369,"line":1264},[7884,7888,7892],{"type":27,"tag":367,"props":7885,"children":7886},{"style":3814},[7887],{"type":50,"value":6054},{"type":27,"tag":367,"props":7889,"children":7890},{"style":374},[7891],{"type":50,"value":391},{"type":27,"tag":367,"props":7893,"children":7894},{"style":1459},[7895],{"type":50,"value":5979},{"type":27,"tag":367,"props":7897,"children":7898},{"class":369,"line":1273},[7899,7903],{"type":27,"tag":367,"props":7900,"children":7901},{"style":3814},[7902],{"type":50,"value":6070},{"type":27,"tag":367,"props":7904,"children":7905},{"style":374},[7906],{"type":50,"value":3822},{"type":27,"tag":367,"props":7908,"children":7909},{"class":369,"line":1282},[7910,7914],{"type":27,"tag":367,"props":7911,"children":7912},{"style":374},[7913],{"type":50,"value":5466},{"type":27,"tag":367,"props":7915,"children":7916},{"style":1459},[7917],{"type":50,"value":6086},{"type":27,"tag":367,"props":7919,"children":7920},{"class":369,"line":1295},[7921,7925],{"type":27,"tag":367,"props":7922,"children":7923},{"style":3814},[7924],{"type":50,"value":6094},{"type":27,"tag":367,"props":7926,"children":7927},{"style":374},[7928],{"type":50,"value":3822},{"type":27,"tag":367,"props":7930,"children":7931},{"class":369,"line":1303},[7932,7936],{"type":27,"tag":367,"props":7933,"children":7934},{"style":3814},[7935],{"type":50,"value":6106},{"type":27,"tag":367,"props":7937,"children":7938},{"style":374},[7939],{"type":50,"value":3822},{"type":27,"tag":367,"props":7941,"children":7942},{"class":369,"line":1312},[7943,7947,7951],{"type":27,"tag":367,"props":7944,"children":7945},{"style":3814},[7946],{"type":50,"value":6118},{"type":27,"tag":367,"props":7948,"children":7949},{"style":374},[7950],{"type":50,"value":391},{"type":27,"tag":367,"props":7952,"children":7953},{"style":1459},[7954],{"type":50,"value":6127},{"type":27,"tag":367,"props":7956,"children":7957},{"class":369,"line":1320},[7958,7962],{"type":27,"tag":367,"props":7959,"children":7960},{"style":3814},[7961],{"type":50,"value":6136},{"type":27,"tag":367,"props":7963,"children":7964},{"style":374},[7965],{"type":50,"value":3822},{"type":27,"tag":367,"props":7967,"children":7968},{"class":369,"line":1333},[7969,7973,7977,7981],{"type":27,"tag":367,"props":7970,"children":7971},{"style":374},[7972],{"type":50,"value":5466},{"type":27,"tag":367,"props":7974,"children":7975},{"style":3814},[7976],{"type":50,"value":4170},{"type":27,"tag":367,"props":7978,"children":7979},{"style":374},[7980],{"type":50,"value":391},{"type":27,"tag":367,"props":7982,"children":7983},{"style":1459},[7984],{"type":50,"value":6161},{"type":27,"tag":367,"props":7986,"children":7987},{"class":369,"line":1346},[7988,7992,7996,8000],{"type":27,"tag":367,"props":7989,"children":7990},{"style":374},[7991],{"type":50,"value":5466},{"type":27,"tag":367,"props":7993,"children":7994},{"style":3814},[7995],{"type":50,"value":4170},{"type":27,"tag":367,"props":7997,"children":7998},{"style":374},[7999],{"type":50,"value":391},{"type":27,"tag":367,"props":8001,"children":8002},{"style":1459},[8003],{"type":50,"value":4179},{"type":27,"tag":367,"props":8005,"children":8006},{"class":369,"line":1367},[8007,8011,8015],{"type":27,"tag":367,"props":8008,"children":8009},{"style":3814},[8010],{"type":50,"value":6190},{"type":27,"tag":367,"props":8012,"children":8013},{"style":374},[8014],{"type":50,"value":391},{"type":27,"tag":367,"props":8016,"children":8017},{"style":1459},[8018],{"type":50,"value":4196},{"type":27,"tag":367,"props":8020,"children":8021},{"class":369,"line":1380},[8022,8026,8030,8034],{"type":27,"tag":367,"props":8023,"children":8024},{"style":374},[8025],{"type":50,"value":5466},{"type":27,"tag":367,"props":8027,"children":8028},{"style":3814},[8029],{"type":50,"value":4170},{"type":27,"tag":367,"props":8031,"children":8032},{"style":374},[8033],{"type":50,"value":391},{"type":27,"tag":367,"props":8035,"children":8036},{"style":1459},[8037],{"type":50,"value":4216},{"type":27,"tag":4668,"props":8039,"children":8040},{},[8041],{"type":50,"value":4672},{"title":7,"searchDepth":119,"depth":119,"links":8043},[8044,8047,8050],{"id":5837,"depth":119,"text":5840,"children":8045},[8046],{"id":5940,"depth":405,"text":5943},{"id":6236,"depth":119,"text":5807,"children":8048},[8049],{"id":6282,"depth":405,"text":6285},{"id":7108,"depth":119,"text":7111},{"_path":197,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":198,"description":199,"author":162,"image":163,"releaseDate":200,"blogCategories":8052,"articleTags":8053,"tags":8054,"body":8055,"_type":122,"_id":204,"_source":124,"_file":205,"_stem":206,"_extension":127},[166,167],[167,169],[21,172],{"type":24,"children":8056,"toc":8582},[8057,8061,8072,8078,8091,8100,8131,8137,8164,8169,8197,8506,8511,8578],{"type":27,"tag":241,"props":8058,"children":8060},{"alt":7,"aspect-ratio":243,"height":244,"object-fit":245,"src":8059},"/blog/shopware-renovate.png",[],{"type":27,"tag":46,"props":8062,"children":8063},{},[8064,8070],{"type":27,"tag":259,"props":8065,"children":8067},{"href":8066},"https://docs.renovatebot.com/",[8068],{"type":50,"value":8069},"Renovate",{"type":50,"value":8071}," 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":27,"tag":67,"props":8073,"children":8075},{"id":8074},"shopware-versioning-scheme",[8076],{"type":50,"value":8077},"Shopware versioning scheme",{"type":27,"tag":46,"props":8079,"children":8080},{},[8081,8083,8089],{"type":50,"value":8082},"Shopware is using a custom versioning scheme. You can read the ",{"type":27,"tag":259,"props":8084,"children":8086},{"href":8085},"https://www.shopware.com/en/news/shopware-6-versioning-strategy/",[8087],{"type":50,"value":8088},"official article",{"type":50,"value":8090},", but in short:",{"type":27,"tag":8092,"props":8093,"children":8094},"blockquote",{},[8095],{"type":27,"tag":46,"props":8096,"children":8097},{},[8098],{"type":50,"value":8099},"Shopware implemented SemVer as  \"SemVer with benefits\".",{"type":27,"tag":8092,"props":8101,"children":8102},{},[8103,8108,8126],{"type":27,"tag":46,"props":8104,"children":8105},{},[8106],{"type":50,"value":8107},"A SemVer compliant version has three numbers: Major, Minor, and Patch. They are incremented following this ruleset:",{"type":27,"tag":4770,"props":8109,"children":8110},{},[8111,8116,8121],{"type":27,"tag":282,"props":8112,"children":8113},{},[8114],{"type":50,"value":8115},"MAJOR: Incompatible API changes are made",{"type":27,"tag":282,"props":8117,"children":8118},{},[8119],{"type":50,"value":8120},"MINOR: Functionality is added in a backward-compatible manner",{"type":27,"tag":282,"props":8122,"children":8123},{},[8124],{"type":50,"value":8125},"PATCH: Backward-compatible bug fixes are made",{"type":27,"tag":46,"props":8127,"children":8128},{},[8129],{"type":50,"value":8130},"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":27,"tag":67,"props":8132,"children":8134},{"id":8133},"renovate-configuration",[8135],{"type":50,"value":8136},"Renovate configuration",{"type":27,"tag":46,"props":8138,"children":8139},{},[8140,8142,8148,8150,8156,8158],{"type":50,"value":8141},"The ",{"type":27,"tag":288,"props":8143,"children":8145},{"className":8144},[],[8146],{"type":50,"value":8147},"\"big marketing number\"",{"type":50,"value":8149}," or ",{"type":27,"tag":288,"props":8151,"children":8153},{"className":8152},[],[8154],{"type":50,"value":8155},"\"generation\"",{"type":50,"value":8157}," is reflected in Renovate as ",{"type":27,"tag":288,"props":8159,"children":8161},{"className":8160},[],[8162],{"type":50,"value":8163},"compatibility",{"type":27,"tag":46,"props":8165,"children":8166},{},[8167],{"type":50,"value":8168},"The following configuration will:",{"type":27,"tag":278,"props":8170,"children":8171},{},[8172,8177,8187,8192],{"type":27,"tag":282,"props":8173,"children":8174},{},[8175],{"type":50,"value":8176},"Group all shopware specific updates",{"type":27,"tag":282,"props":8178,"children":8179},{},[8180,8182],{"type":50,"value":8181},"Group the updates as ",{"type":27,"tag":288,"props":8183,"children":8185},{"className":8184},[],[8186],{"type":50,"value":21},{"type":27,"tag":282,"props":8188,"children":8189},{},[8190],{"type":50,"value":8191},"Tell Renovate how to extract the version",{"type":27,"tag":282,"props":8193,"children":8194},{},[8195],{"type":50,"value":8196},"Tell Renovate where to find changelog information",{"type":27,"tag":351,"props":8198,"children":8201},{"className":353,"code":8199,"filename":8200,"language":361,"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","renovate.json",[8202],{"type":27,"tag":288,"props":8203,"children":8204},{"__ignoreMap":7},[8205,8212,8233,8245,8252,8273,8285,8293,8301,8313,8324,8336,8348,8356,8363,8384,8468,8485,8492,8499],{"type":27,"tag":367,"props":8206,"children":8207},{"class":369,"line":370},[8208],{"type":27,"tag":367,"props":8209,"children":8210},{"style":374},[8211],{"type":50,"value":377},{"type":27,"tag":367,"props":8213,"children":8214},{"class":369,"line":119},[8215,8220,8224,8229],{"type":27,"tag":367,"props":8216,"children":8217},{"style":383},[8218],{"type":50,"value":8219},"  \"$schema\"",{"type":27,"tag":367,"props":8221,"children":8222},{"style":374},[8223],{"type":50,"value":391},{"type":27,"tag":367,"props":8225,"children":8226},{"style":394},[8227],{"type":50,"value":8228},"\"https://docs.renovatebot.com/renovate-schema.json\"",{"type":27,"tag":367,"props":8230,"children":8231},{"style":374},[8232],{"type":50,"value":402},{"type":27,"tag":367,"props":8234,"children":8235},{"class":369,"line":405},[8236,8241],{"type":27,"tag":367,"props":8237,"children":8238},{"style":383},[8239],{"type":50,"value":8240},"  \"packageRules\"",{"type":27,"tag":367,"props":8242,"children":8243},{"style":374},[8244],{"type":50,"value":631},{"type":27,"tag":367,"props":8246,"children":8247},{"class":369,"line":427},[8248],{"type":27,"tag":367,"props":8249,"children":8250},{"style":374},[8251],{"type":50,"value":640},{"type":27,"tag":367,"props":8253,"children":8254},{"class":369,"line":449},[8255,8260,8264,8269],{"type":27,"tag":367,"props":8256,"children":8257},{"style":383},[8258],{"type":50,"value":8259},"      \"description\"",{"type":27,"tag":367,"props":8261,"children":8262},{"style":374},[8263],{"type":50,"value":391},{"type":27,"tag":367,"props":8265,"children":8266},{"style":394},[8267],{"type":50,"value":8268},"\"Follow Shopware version schema\"",{"type":27,"tag":367,"props":8270,"children":8271},{"style":374},[8272],{"type":50,"value":402},{"type":27,"tag":367,"props":8274,"children":8275},{"class":369,"line":463},[8276,8281],{"type":27,"tag":367,"props":8277,"children":8278},{"style":383},[8279],{"type":50,"value":8280},"      \"matchDatasources\"",{"type":27,"tag":367,"props":8282,"children":8283},{"style":374},[8284],{"type":50,"value":631},{"type":27,"tag":367,"props":8286,"children":8287},{"class":369,"line":485},[8288],{"type":27,"tag":367,"props":8289,"children":8290},{"style":394},[8291],{"type":50,"value":8292},"        \"packagist\"\n",{"type":27,"tag":367,"props":8294,"children":8295},{"class":369,"line":507},[8296],{"type":27,"tag":367,"props":8297,"children":8298},{"style":374},[8299],{"type":50,"value":8300},"      ],\n",{"type":27,"tag":367,"props":8302,"children":8303},{"class":369,"line":529},[8304,8309],{"type":27,"tag":367,"props":8305,"children":8306},{"style":383},[8307],{"type":50,"value":8308},"      \"matchPackageNames\"",{"type":27,"tag":367,"props":8310,"children":8311},{"style":374},[8312],{"type":50,"value":631},{"type":27,"tag":367,"props":8314,"children":8315},{"class":369,"line":551},[8316,8320],{"type":27,"tag":367,"props":8317,"children":8318},{"style":394},[8319],{"type":50,"value":1848},{"type":27,"tag":367,"props":8321,"children":8322},{"style":374},[8323],{"type":50,"value":402},{"type":27,"tag":367,"props":8325,"children":8326},{"class":369,"line":572},[8327,8332],{"type":27,"tag":367,"props":8328,"children":8329},{"style":394},[8330],{"type":50,"value":8331},"        \"shopware/administration\"",{"type":27,"tag":367,"props":8333,"children":8334},{"style":374},[8335],{"type":50,"value":402},{"type":27,"tag":367,"props":8337,"children":8338},{"class":369,"line":593},[8339,8344],{"type":27,"tag":367,"props":8340,"children":8341},{"style":394},[8342],{"type":50,"value":8343},"        \"shopware/elasticsearch\"",{"type":27,"tag":367,"props":8345,"children":8346},{"style":374},[8347],{"type":50,"value":402},{"type":27,"tag":367,"props":8349,"children":8350},{"class":369,"line":611},[8351],{"type":27,"tag":367,"props":8352,"children":8353},{"style":394},[8354],{"type":50,"value":8355},"        \"shopware/storefront\"\n",{"type":27,"tag":367,"props":8357,"children":8358},{"class":369,"line":620},[8359],{"type":27,"tag":367,"props":8360,"children":8361},{"style":374},[8362],{"type":50,"value":8300},{"type":27,"tag":367,"props":8364,"children":8365},{"class":369,"line":634},[8366,8371,8375,8380],{"type":27,"tag":367,"props":8367,"children":8368},{"style":383},[8369],{"type":50,"value":8370},"      \"groupName\"",{"type":27,"tag":367,"props":8372,"children":8373},{"style":374},[8374],{"type":50,"value":391},{"type":27,"tag":367,"props":8376,"children":8377},{"style":394},[8378],{"type":50,"value":8379},"\"shopware\"",{"type":27,"tag":367,"props":8381,"children":8382},{"style":374},[8383],{"type":50,"value":402},{"type":27,"tag":367,"props":8385,"children":8386},{"class":369,"line":643},[8387,8392,8396,8401,8405,8410,8414,8419,8423,8428,8432,8437,8441,8446,8450,8455,8459,8464],{"type":27,"tag":367,"props":8388,"children":8389},{"style":383},[8390],{"type":50,"value":8391},"      \"versioning\"",{"type":27,"tag":367,"props":8393,"children":8394},{"style":374},[8395],{"type":50,"value":391},{"type":27,"tag":367,"props":8397,"children":8398},{"style":394},[8399],{"type":50,"value":8400},"\"regex:(?\u003Ccompatibility>",{"type":27,"tag":367,"props":8402,"children":8403},{"style":713},[8404],{"type":50,"value":1026},{"type":27,"tag":367,"props":8406,"children":8407},{"style":394},[8408],{"type":50,"value":8409},"d+)",{"type":27,"tag":367,"props":8411,"children":8412},{"style":713},[8413],{"type":50,"value":1026},{"type":27,"tag":367,"props":8415,"children":8416},{"style":394},[8417],{"type":50,"value":8418},".(?\u003Cmajor>",{"type":27,"tag":367,"props":8420,"children":8421},{"style":713},[8422],{"type":50,"value":1026},{"type":27,"tag":367,"props":8424,"children":8425},{"style":394},[8426],{"type":50,"value":8427},"d+)(",{"type":27,"tag":367,"props":8429,"children":8430},{"style":713},[8431],{"type":50,"value":1026},{"type":27,"tag":367,"props":8433,"children":8434},{"style":394},[8435],{"type":50,"value":8436},".(?\u003Cminor>",{"type":27,"tag":367,"props":8438,"children":8439},{"style":713},[8440],{"type":50,"value":1026},{"type":27,"tag":367,"props":8442,"children":8443},{"style":394},[8444],{"type":50,"value":8445},"d+))?(",{"type":27,"tag":367,"props":8447,"children":8448},{"style":713},[8449],{"type":50,"value":1026},{"type":27,"tag":367,"props":8451,"children":8452},{"style":394},[8453],{"type":50,"value":8454},".(?\u003Cpatch>",{"type":27,"tag":367,"props":8456,"children":8457},{"style":713},[8458],{"type":50,"value":1026},{"type":27,"tag":367,"props":8460,"children":8461},{"style":394},[8462],{"type":50,"value":8463},"d+))?$\"",{"type":27,"tag":367,"props":8465,"children":8466},{"style":374},[8467],{"type":50,"value":402},{"type":27,"tag":367,"props":8469,"children":8470},{"class":369,"line":665},[8471,8476,8480],{"type":27,"tag":367,"props":8472,"children":8473},{"style":383},[8474],{"type":50,"value":8475},"      \"sourceUrl\"",{"type":27,"tag":367,"props":8477,"children":8478},{"style":374},[8479],{"type":50,"value":391},{"type":27,"tag":367,"props":8481,"children":8482},{"style":394},[8483],{"type":50,"value":8484},"\"https://github.com/shopware/shopware\"\n",{"type":27,"tag":367,"props":8486,"children":8487},{"class":369,"line":687},[8488],{"type":27,"tag":367,"props":8489,"children":8490},{"style":374},[8491],{"type":50,"value":976},{"type":27,"tag":367,"props":8493,"children":8494},{"class":369,"line":700},[8495],{"type":27,"tag":367,"props":8496,"children":8497},{"style":374},[8498],{"type":50,"value":4614},{"type":27,"tag":367,"props":8500,"children":8501},{"class":369,"line":719},[8502],{"type":27,"tag":367,"props":8503,"children":8504},{"style":374},[8505],{"type":50,"value":1434},{"type":27,"tag":46,"props":8507,"children":8508},{},[8509],{"type":50,"value":8510},"This should result in creation of following merge/pull requests",{"type":27,"tag":4770,"props":8512,"children":8513},{},[8514,8549],{"type":27,"tag":282,"props":8515,"children":8516},{},[8517,8519,8525,8527,8533,8534,8540,8541,8547],{"type":50,"value":8518},"fix(deps): update shopware (",{"type":27,"tag":288,"props":8520,"children":8522},{"className":8521},[],[8523],{"type":50,"value":8524},"shopware/administration",{"type":50,"value":8526},", ",{"type":27,"tag":288,"props":8528,"children":8530},{"className":8529},[],[8531],{"type":50,"value":8532},"shopware/core",{"type":50,"value":8526},{"type":27,"tag":288,"props":8535,"children":8537},{"className":8536},[],[8538],{"type":50,"value":8539},"shopware/elasticsearch",{"type":50,"value":8526},{"type":27,"tag":288,"props":8542,"children":8544},{"className":8543},[],[8545],{"type":50,"value":8546},"shopware/storefront",{"type":50,"value":8548},")`",{"type":27,"tag":282,"props":8550,"children":8551},{},[8552,8554,8559,8560,8565,8566,8571,8572,8577],{"type":50,"value":8553},"fix(deps): update shopware to v7 (major) (",{"type":27,"tag":288,"props":8555,"children":8557},{"className":8556},[],[8558],{"type":50,"value":8524},{"type":50,"value":8526},{"type":27,"tag":288,"props":8561,"children":8563},{"className":8562},[],[8564],{"type":50,"value":8532},{"type":50,"value":8526},{"type":27,"tag":288,"props":8567,"children":8569},{"className":8568},[],[8570],{"type":50,"value":8539},{"type":50,"value":8526},{"type":27,"tag":288,"props":8573,"children":8575},{"className":8574},[],[8576],{"type":50,"value":8546},{"type":50,"value":8548},{"type":27,"tag":4668,"props":8579,"children":8580},{},[8581],{"type":50,"value":4672},{"title":7,"searchDepth":119,"depth":119,"links":8583},[8584,8585],{"id":8074,"depth":119,"text":8077},{"id":8133,"depth":119,"text":8136},{"_path":208,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":209,"description":210,"author":211,"image":212,"releaseDate":213,"blogCategories":8587,"articleTags":8588,"tags":8589,"body":8590,"_type":122,"_id":218,"_source":124,"_file":219,"_stem":220,"_extension":127},[166,167],[216,169],[22,152],{"type":24,"children":8591,"toc":8653},[8592,8598,8619,8624,8629,8635,8648],{"type":27,"tag":67,"props":8593,"children":8595},{"id":8594},"what-is-this",[8596],{"type":50,"value":8597},"What is this?",{"type":27,"tag":46,"props":8599,"children":8600},{},[8601,8603,8609,8611,8617],{"type":50,"value":8602},"This wrapper serves as a simple and cost-effective bridge that translates calls from the\n",{"type":27,"tag":259,"props":8604,"children":8606},{"href":8605},"https://docs.developer.amazonservices.com/en_US/dev_guide/index.html",[8607],{"type":50,"value":8608},"Amazon Marketplace Web Service (MWS)",{"type":50,"value":8610},"\nAPI to ",{"type":27,"tag":259,"props":8612,"children":8614},{"href":8613},"https://developer-docs.amazon.com/sp-api",[8615],{"type":50,"value":8616},"Selling Partner (SP) API",{"type":50,"value":8618}," calls. It was specifically developed for customers with outdated systems and limited\nbudgets, for whom a complete redevelopment of the Amazon interface would be economically unfeasible.\nThe wrapper allows these customers to continue their business even after the MWS interface is discontinued.",{"type":27,"tag":46,"props":8620,"children":8621},{},[8622],{"type":50,"value":8623},"Technically, the project is based on a Docker container that functions as a web server. This server receives MWS API calls,\ntranslates them into SP API calls, and converts the responses from the SP API back into the format of the MWS API.",{"type":27,"tag":46,"props":8625,"children":8626},{},[8627],{"type":50,"value":8628},"The idea for this wrapper originated from a proof of concept, with the aim to verify whether the interfaces are\nsufficiently similar to enable a direct translation. Despite concerns that the devil might be in the details,\nthe calls proved to be relatively simple to translate. It was only necessary to adjust some feed names\nand occasionally make two API calls to gather all the necessary information.\nOverall, the project has been surprisingly trouble-free.",{"type":27,"tag":67,"props":8630,"children":8632},{"id":8631},"download",[8633],{"type":50,"value":8634},"Download",{"type":27,"tag":46,"props":8636,"children":8637},{},[8638,8640,8646],{"type":50,"value":8639},"Interested? The project has been published as open-source on GitHub:\n",{"type":27,"tag":259,"props":8641,"children":8643},{"href":8642},"https://github.com/bhelm/Amazon-MWS-SP-Wrapper",[8644],{"type":50,"value":8645},"Amazon-MWS-SP-API-Wrapper",{"type":50,"value":8647},". This offer is aimed at developers\nwho also see the wrapper approach as the most efficient solution and want to contribute to the open-source community.",{"type":27,"tag":46,"props":8649,"children":8650},{},[8651],{"type":50,"value":8652},"If you need support integrating it into your application or if adjustments or extensions to the wrapper\nare necessary, we are happy to help. Since the wrapper is currently used by only a limited number of customers,\nit covers only part of the possible API calls and parameters and is by no means a \"complete solution\".",{"title":7,"searchDepth":119,"depth":119,"links":8654},[8655,8656],{"id":8594,"depth":119,"text":8597},{"id":8631,"depth":119,"text":8634},{"_path":222,"_dir":159,"_draft":6,"_partial":6,"_locale":7,"title":223,"description":224,"author":211,"image":225,"releaseDate":226,"blogCategories":8658,"articleTags":8659,"tags":8660,"body":8661,"_type":122,"_id":231,"_source":124,"_file":232,"_stem":233,"_extension":127},[170,167],[229],[21],{"type":24,"children":8662,"toc":9159},[8663,8669,8674,8685,8690,8696,8701,8721,8730,8735,8740,9059,9064,9069,9074,9079,9091,9143,9149,9155],{"type":27,"tag":67,"props":8664,"children":8666},{"id":8665},"shopware-5-parallel-thumbnail-generation-after-moving-a-shopware-5-system-to-another-server",[8667],{"type":50,"value":8668},"Shopware 5 - parallel thumbnail generation after moving a Shopware 5 system to another server",{"type":27,"tag":46,"props":8670,"children":8671},{},[8672],{"type":50,"value":8673},"We had a customer with 400k images and 1600k thumbnails that needed to move from an old hdd based server to a new ssd based one. The problem was that the old server was so slow that it already needed two days to count through all images, not speaking about coping them.",{"type":27,"tag":46,"props":8675,"children":8676},{},[8677,8679],{"type":50,"value":8678},"So we decided to copy only the original images and regenerate the Thumbnails. For copying the original images, I created a small console command that exports all paths of the original images that we need to copy: ",{"type":27,"tag":259,"props":8680,"children":8682},{"href":8681},"https://gist.github.com/bhelm/2d30f0cebcf4a7d8ea41c532ec67cd62",[8683],{"type":50,"value":8684},"ExportImagesCommand.php",{"type":27,"tag":46,"props":8686,"children":8687},{},[8688],{"type":50,"value":8689},"This filelist can be used with tar -T or rsync --files-from= options that tells these tools to only process the listed files. for the initial copy process, tar is highly recommended, as it just picks up the files listed without doing any \"calculation\" as rsync does.",{"type":27,"tag":67,"props":8691,"children":8693},{"id":8692},"sw5-default-thumbnail-generation-would-have-taken-80-hours",[8694],{"type":50,"value":8695},"SW5 default thumbnail generation would have taken 80 hours",{"type":27,"tag":46,"props":8697,"children":8698},{},[8699],{"type":50,"value":8700},"... and would only use half of a core.",{"type":27,"tag":46,"props":8702,"children":8703},{},[8704,8706,8712,8714,8719],{"type":50,"value":8705},"I was curious if I can speed up this generation process. The server itself has 32 cores available, so I copied the ",{"type":27,"tag":8707,"props":8708,"children":8709},"em",{},[8710],{"type":50,"value":8711},"generate thumbnail",{"type":50,"value":8713}," command from sw5 and modified it to work in batches with an ",{"type":27,"tag":8707,"props":8715,"children":8716},{},[8717],{"type":50,"value":8718},"--batch",{"type":50,"value":8720}," parameter:",{"type":27,"tag":46,"props":8722,"children":8723},{},[8724],{"type":27,"tag":259,"props":8725,"children":8727},{"href":8726},"https://gist.github.com/bhelm/2015d3829d4a3f24f9760f6e4e1aac1f",[8728],{"type":50,"value":8729},"ParallelThumbnailGenerateCommand.php",{"type":27,"tag":46,"props":8731,"children":8732},{},[8733],{"type":50,"value":8734},"To make it work, I just modified the Shopware core at engine/Shopware/Models/Media/Repository.php",{"type":27,"tag":46,"props":8736,"children":8737},{},[8738],{"type":50,"value":8739},"I just changed the getAlbumMediaQuery function to:",{"type":27,"tag":351,"props":8741,"children":8745},{"className":8742,"code":8743,"language":8744,"meta":7,"style":7},"language-cpp shiki shiki-themes github-dark github-dark monokai","public function getAlbumMediaQuery($albumId, $filter = null, $orderBy = null, $offset = null, $limit = null, $validTypes = null, $batch = null)\n{\n$builder = $this->getAlbumMediaQueryBuilder($albumId, $filter, $orderBy, $validTypes);\nif (is_numeric($batch)) {\n$builder->andWhere('MOD(media.id, 1000) = ?3');\n$builder->setParameter(3, $batch);\n}\n\n    if ($limit !== null) {\n        $builder->setFirstResult($offset)\n                ->setMaxResults($limit);\n    }\n\n    return $builder->getQuery();\n}\n","cpp",[8746],{"type":27,"tag":288,"props":8747,"children":8748},{"__ignoreMap":7},[8749,8822,8829,8867,8889,8917,8943,8950,8957,8979,8997,9015,9022,9029,9052],{"type":27,"tag":367,"props":8750,"children":8751},{"class":369,"line":370},[8752,8757,8762,8767,8772,8777,8781,8786,8790,8795,8799,8804,8808,8813,8817],{"type":27,"tag":367,"props":8753,"children":8754},{"style":374},[8755],{"type":50,"value":8756},"public function ",{"type":27,"tag":367,"props":8758,"children":8759},{"style":1454},[8760],{"type":50,"value":8761},"getAlbumMediaQuery",{"type":27,"tag":367,"props":8763,"children":8764},{"style":374},[8765],{"type":50,"value":8766},"($albumId, $filter ",{"type":27,"tag":367,"props":8768,"children":8769},{"style":3364},[8770],{"type":50,"value":8771},"=",{"type":27,"tag":367,"props":8773,"children":8774},{"style":374},[8775],{"type":50,"value":8776}," null, $orderBy ",{"type":27,"tag":367,"props":8778,"children":8779},{"style":3364},[8780],{"type":50,"value":8771},{"type":27,"tag":367,"props":8782,"children":8783},{"style":374},[8784],{"type":50,"value":8785}," null, $offset ",{"type":27,"tag":367,"props":8787,"children":8788},{"style":3364},[8789],{"type":50,"value":8771},{"type":27,"tag":367,"props":8791,"children":8792},{"style":374},[8793],{"type":50,"value":8794}," null, $limit ",{"type":27,"tag":367,"props":8796,"children":8797},{"style":3364},[8798],{"type":50,"value":8771},{"type":27,"tag":367,"props":8800,"children":8801},{"style":374},[8802],{"type":50,"value":8803}," null, $validTypes ",{"type":27,"tag":367,"props":8805,"children":8806},{"style":3364},[8807],{"type":50,"value":8771},{"type":27,"tag":367,"props":8809,"children":8810},{"style":374},[8811],{"type":50,"value":8812}," null, $batch ",{"type":27,"tag":367,"props":8814,"children":8815},{"style":3364},[8816],{"type":50,"value":8771},{"type":27,"tag":367,"props":8818,"children":8819},{"style":374},[8820],{"type":50,"value":8821}," null)\n",{"type":27,"tag":367,"props":8823,"children":8824},{"class":369,"line":119},[8825],{"type":27,"tag":367,"props":8826,"children":8827},{"style":374},[8828],{"type":50,"value":377},{"type":27,"tag":367,"props":8830,"children":8831},{"class":369,"line":405},[8832,8837,8841,8846,8852,8857,8862],{"type":27,"tag":367,"props":8833,"children":8834},{"style":374},[8835],{"type":50,"value":8836},"$builder ",{"type":27,"tag":367,"props":8838,"children":8839},{"style":3364},[8840],{"type":50,"value":8771},{"type":27,"tag":367,"props":8842,"children":8843},{"style":374},[8844],{"type":50,"value":8845}," $",{"type":27,"tag":367,"props":8847,"children":8849},{"style":8848},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#FD971F",[8850],{"type":50,"value":8851},"this",{"type":27,"tag":367,"props":8853,"children":8854},{"style":374},[8855],{"type":50,"value":8856},"->",{"type":27,"tag":367,"props":8858,"children":8859},{"style":1454},[8860],{"type":50,"value":8861},"getAlbumMediaQueryBuilder",{"type":27,"tag":367,"props":8863,"children":8864},{"style":374},[8865],{"type":50,"value":8866},"($albumId, $filter, $orderBy, $validTypes);\n",{"type":27,"tag":367,"props":8868,"children":8869},{"class":369,"line":427},[8870,8874,8879,8884],{"type":27,"tag":367,"props":8871,"children":8872},{"style":3364},[8873],{"type":50,"value":4170},{"type":27,"tag":367,"props":8875,"children":8876},{"style":374},[8877],{"type":50,"value":8878}," (",{"type":27,"tag":367,"props":8880,"children":8881},{"style":1454},[8882],{"type":50,"value":8883},"is_numeric",{"type":27,"tag":367,"props":8885,"children":8886},{"style":374},[8887],{"type":50,"value":8888},"($batch)) {\n",{"type":27,"tag":367,"props":8890,"children":8891},{"class":369,"line":449},[8892,8897,8902,8907,8912],{"type":27,"tag":367,"props":8893,"children":8894},{"style":374},[8895],{"type":50,"value":8896},"$builder->",{"type":27,"tag":367,"props":8898,"children":8899},{"style":1454},[8900],{"type":50,"value":8901},"andWhere",{"type":27,"tag":367,"props":8903,"children":8904},{"style":374},[8905],{"type":50,"value":8906},"(",{"type":27,"tag":367,"props":8908,"children":8909},{"style":1459},[8910],{"type":50,"value":8911},"'MOD(media.id, 1000) = ?3'",{"type":27,"tag":367,"props":8913,"children":8914},{"style":374},[8915],{"type":50,"value":8916},");\n",{"type":27,"tag":367,"props":8918,"children":8919},{"class":369,"line":463},[8920,8924,8929,8933,8938],{"type":27,"tag":367,"props":8921,"children":8922},{"style":374},[8923],{"type":50,"value":8896},{"type":27,"tag":367,"props":8925,"children":8926},{"style":1454},[8927],{"type":50,"value":8928},"setParameter",{"type":27,"tag":367,"props":8930,"children":8931},{"style":374},[8932],{"type":50,"value":8906},{"type":27,"tag":367,"props":8934,"children":8935},{"style":713},[8936],{"type":50,"value":8937},"3",{"type":27,"tag":367,"props":8939,"children":8940},{"style":374},[8941],{"type":50,"value":8942},", $batch);\n",{"type":27,"tag":367,"props":8944,"children":8945},{"class":369,"line":485},[8946],{"type":27,"tag":367,"props":8947,"children":8948},{"style":374},[8949],{"type":50,"value":1434},{"type":27,"tag":367,"props":8951,"children":8952},{"class":369,"line":507},[8953],{"type":27,"tag":367,"props":8954,"children":8955},{"emptyLinePlaceholder":132},[8956],{"type":50,"value":1629},{"type":27,"tag":367,"props":8958,"children":8959},{"class":369,"line":529},[8960,8964,8969,8974],{"type":27,"tag":367,"props":8961,"children":8962},{"style":3364},[8963],{"type":50,"value":3949},{"type":27,"tag":367,"props":8965,"children":8966},{"style":374},[8967],{"type":50,"value":8968}," ($limit ",{"type":27,"tag":367,"props":8970,"children":8971},{"style":3364},[8972],{"type":50,"value":8973},"!==",{"type":27,"tag":367,"props":8975,"children":8976},{"style":374},[8977],{"type":50,"value":8978}," null) {\n",{"type":27,"tag":367,"props":8980,"children":8981},{"class":369,"line":551},[8982,8987,8992],{"type":27,"tag":367,"props":8983,"children":8984},{"style":374},[8985],{"type":50,"value":8986},"        $builder->",{"type":27,"tag":367,"props":8988,"children":8989},{"style":1454},[8990],{"type":50,"value":8991},"setFirstResult",{"type":27,"tag":367,"props":8993,"children":8994},{"style":374},[8995],{"type":50,"value":8996},"($offset)\n",{"type":27,"tag":367,"props":8998,"children":8999},{"class":369,"line":572},[9000,9005,9010],{"type":27,"tag":367,"props":9001,"children":9002},{"style":3364},[9003],{"type":50,"value":9004},"                ->",{"type":27,"tag":367,"props":9006,"children":9007},{"style":1454},[9008],{"type":50,"value":9009},"setMaxResults",{"type":27,"tag":367,"props":9011,"children":9012},{"style":374},[9013],{"type":50,"value":9014},"($limit);\n",{"type":27,"tag":367,"props":9016,"children":9017},{"class":369,"line":593},[9018],{"type":27,"tag":367,"props":9019,"children":9020},{"style":374},[9021],{"type":50,"value":976},{"type":27,"tag":367,"props":9023,"children":9024},{"class":369,"line":611},[9025],{"type":27,"tag":367,"props":9026,"children":9027},{"emptyLinePlaceholder":132},[9028],{"type":50,"value":1629},{"type":27,"tag":367,"props":9030,"children":9031},{"class":369,"line":620},[9032,9037,9042,9047],{"type":27,"tag":367,"props":9033,"children":9034},{"style":3364},[9035],{"type":50,"value":9036},"    return",{"type":27,"tag":367,"props":9038,"children":9039},{"style":374},[9040],{"type":50,"value":9041}," $builder->",{"type":27,"tag":367,"props":9043,"children":9044},{"style":1454},[9045],{"type":50,"value":9046},"getQuery",{"type":27,"tag":367,"props":9048,"children":9049},{"style":374},[9050],{"type":50,"value":9051},"();\n",{"type":27,"tag":367,"props":9053,"children":9054},{"class":369,"line":634},[9055],{"type":27,"tag":367,"props":9056,"children":9057},{"style":374},[9058],{"type":50,"value":1434},{"type":27,"tag":46,"props":9060,"children":9061},{},[9062],{"type":50,"value":9063},"It is an optional parameter and won’t break anything. If you do a Shopware update, this would be gone, but as I was in the quest to speed up things for a one-time task, I just modified it in the core instead of finding a long-term solution.",{"type":27,"tag":46,"props":9065,"children":9066},{},[9067],{"type":50,"value":9068},"What this function does is calculating a modulo of 1000 on the media id and compares it with the batch id. So we basically have 1000 batches to process until all work is done.",{"type":27,"tag":46,"props":9070,"children":9071},{},[9072],{"type":50,"value":9073},"Now we only need to start all 1000 batches in a parallel manner. For doing so, I used the very helpful tool parallel - which is available in Linux:",{"type":27,"tag":46,"props":9075,"children":9076},{},[9077],{"type":50,"value":9078},"It starts 64 batches in parallel and continues its work until all 1000 batches are finished.",{"type":27,"tag":46,"props":9080,"children":9081},{},[9082,9084,9089],{"type":50,"value":9083},"And this is how it looks at ",{"type":27,"tag":8707,"props":9085,"children":9086},{},[9087],{"type":50,"value":9088},"htop",{"type":50,"value":9090},":",{"type":27,"tag":351,"props":9092,"children":9096},{"className":9093,"code":9094,"language":9095,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark github-dark monokai","parallel -j 64 ./bin/console my:image:generate:thumbnails --batch ::: {0..999}\n","bash",[9097],{"type":27,"tag":288,"props":9098,"children":9099},{"__ignoreMap":7},[9100],{"type":27,"tag":367,"props":9101,"children":9102},{"class":369,"line":370},[9103,9108,9113,9118,9123,9128,9133,9138],{"type":27,"tag":367,"props":9104,"children":9105},{"style":1454},[9106],{"type":50,"value":9107},"parallel",{"type":27,"tag":367,"props":9109,"children":9110},{"style":713},[9111],{"type":50,"value":9112}," -j",{"type":27,"tag":367,"props":9114,"children":9115},{"style":713},[9116],{"type":50,"value":9117}," 64",{"type":27,"tag":367,"props":9119,"children":9120},{"style":1459},[9121],{"type":50,"value":9122}," ./bin/console",{"type":27,"tag":367,"props":9124,"children":9125},{"style":1459},[9126],{"type":50,"value":9127}," my:image:generate:thumbnails",{"type":27,"tag":367,"props":9129,"children":9130},{"style":713},[9131],{"type":50,"value":9132}," --batch",{"type":27,"tag":367,"props":9134,"children":9135},{"style":1459},[9136],{"type":50,"value":9137}," :::",{"type":27,"tag":367,"props":9139,"children":9140},{"style":1459},[9141],{"type":50,"value":9142}," {0..999}\n",{"type":27,"tag":241,"props":9144,"children":9148},{"alt":9088,"aspect-ratio":9145,"height":244,"object-fit":9146,"src":9147},"2","contain","/blog/htop.png",[],{"type":27,"tag":67,"props":9150,"children":9152},{"id":9151},"finally-all-the-work-is-now-finished-in-35-hours-instead-of-80",[9153],{"type":50,"value":9154},"Finally, all the work is now finished in 3.5 hours instead of 80.",{"type":27,"tag":4668,"props":9156,"children":9157},{},[9158],{"type":50,"value":4672},{"title":7,"searchDepth":119,"depth":119,"links":9160},[9161,9162,9163],{"id":8665,"depth":119,"text":8668},{"id":8692,"depth":119,"text":8695},{"id":9151,"depth":119,"text":9154},{"_path":9165,"_dir":9166,"_draft":6,"_partial":6,"_locale":7,"slug":162,"teams":9167,"primaryTeam":9169,"firstName":9170,"lastName":9171,"prefixTitle":7,"suffixTitle":9172,"education":9173,"role":9178,"workingSince":9183,"inTheCompanySince":9184,"techSkills":9185,"skills":9224,"projects":9241,"contactDetails":9251,"_image":9255,"image":9256,"_id":9257,"_type":361,"title":9258,"_source":9166,"_file":9259,"_stem":9260,"_extension":361},"/employees/robert-juzak","employees",[9168,9169],"appDev","devOps","Robert","Juzak","B.Sc.",[9174],[9175,9176,9177],"Bachelor of Computer Science","Technische Universität Breslau","2016",[9179,9180,9181,9182],"softwareDeveloper","fullstackDeveloper","admin","consultant","2015","2018",[9186,9190,9192,9195,9198,9201,9203,9206,9209,9213,9216,9218,9221],{"name":9187,"level":9188,"icon":9189},"Docker","expert","/images/Docker.svg",{"name":9191,"level":9188},"GitLab",{"name":9193,"level":9188,"icon":9194},"Kubernetes","/images/Kubernetes.svg",{"name":9196,"level":9188,"icon":9197},"PHPUnit","/images/PHP-Unit.svg",{"name":9199,"level":9188,"icon":9200},"Portainer","/images/Portainer.svg",{"name":9202,"level":9188},"Sentry",{"name":9204,"level":9188,"icon":9205},"Sonarqube","/images/Sonarqube.svg",{"name":9207,"level":9188,"icon":9208},"Linux","/images/linux_os-mono.svg",{"name":9210,"level":9211,"icon":9212},"CSS","advanced","/images/css.svg",{"name":9214,"level":9211,"icon":9215},"HTML","/images/html.svg",{"name":9217,"level":9211},"PHP",{"name":9219,"level":9211,"icon":9220},"SQL","/images/SQL.svg",{"name":9222,"level":9211,"icon":9223},"VueJS","/images/vuejs.svg",[9225,9226,9228,9229,9231,9233,9235,9237,9239],{"name":3699,"level":9188},{"name":9227,"level":9188},"qualityAssurance",{"name":9169,"level":9188},{"name":9230,"level":9188},"testDrivenBugfix",{"name":9232,"level":9188},"testDrivenDevelopment",{"name":9234,"level":9211},"accessibility",{"name":9236,"level":9211},"databases",{"name":9238,"level":9211},"linuxServerAdministration",{"name":9240,"level":9211},"softwareArchitect",[9242,9247,9249],{"project":9243,"position":9244},"Herole",[9245,9246],"Dev-Ops","Frontend Developer",{"project":9248,"position":9246},"Huawei-Calibration-aaS",{"project":9250,"position":9246},"Huawei-Inspect-3D",{"eMail":9252,"phone":9253,"visibility":9254},"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",{"_path":9262,"_dir":9166,"_draft":6,"_partial":6,"_locale":7,"slug":211,"teams":9263,"primaryTeam":9169,"firstName":9265,"lastName":9266,"prefixTitle":7,"suffixTitle":7,"education":9267,"executiveRole":9272,"role":9273,"workingSince":9278,"inTheCompanySince":9279,"techSkills":9280,"skills":9312,"projects":9321,"contactDetails":9333,"_image":9336,"image":9337,"_id":9338,"_type":361,"title":9339,"_source":9166,"_file":9340,"_stem":9341,"_extension":361},"/employees/bernd-helm",[9264,9169],"ai","Bernd","Helm",[9268],[9269,9270,9271],"B. Sc. Angewandte Informatik","FHDW Dresden","2010","CTO",[9274,9275,9169,9276,9181,9179,9277,9182],"founder","chiefTechnologyOfficer","databaseSpecialist","backendDeveloper","2005","2008",[9281,9282,9283,9285,9288,9290,9293,9294,9296,9298,9299,9302,9305,9306,9307,9310],{"name":9187,"level":9188,"icon":9189},{"name":9207,"level":9188,"icon":9208},{"name":9284,"level":9188},"Zabbix",{"name":9286,"level":9188,"icon":9287},"MariaDB ColumnStore","/images/maria-db-logo.svg",{"name":9289,"level":9188},"OpenAI",{"name":9291,"level":9188,"icon":9292},"Pytorch","/images/PyTorch.svg",{"name":9217,"level":9188},{"name":9295,"level":9188},"Java",{"name":9297,"level":9188},"Python",{"name":9219,"level":9188,"icon":9220},{"name":9300,"level":9211,"icon":9301},"C++","/images/cpp-logo.svg",{"name":9303,"level":9211,"icon":9304},"C#","/images/csharp.svg",{"name":9210,"level":9211,"icon":9212},{"name":9214,"level":9211,"icon":9215},{"name":9308,"level":9211,"icon":9309},"OpenCV","/images/OpenCV.svg",{"name":9311,"level":9211,"icon":9223},"Vue.js",[9313,9315,9317,9318,9319,9320],{"name":9314,"level":9188},"artificialIntelligence",{"name":9316,"level":9188},"codingGuidelines",{"name":9236,"level":9188},{"name":9238,"level":9188},{"name":9240,"level":9188},{"name":9227,"level":9211},[9322,9325,9326,9328,9331],{"project":9323,"position":9324},"Gridside","Technical Consultant",{"project":9243,"position":9324},{"project":9327,"position":9324},"Montagespezis",{"project":9329,"position":9330},"Orsee","Technical Manager",{"project":9332,"position":9324},"Vipr",{"eMail":9334,"phone":9335,"visibility":9254},"bernd.helm@helmundwalter.de","+49 351 799 035 20","images/employees/Portraits/bernd_helm.webp","images/employees/Portraits/BerndHelm_MS.webp","employees:employees:1.bernd-helm.json","Bernd Helm","employees/1.bernd-helm.json","employees/1.bernd-helm",1782284062609]