[{"data":1,"prerenderedAt":9524},["ShallowReactive",2],{"portfolio-en-purize":3,"employee-bernd-helm":281,"related-blog-shopware_e-commerce--en":388,"content-query-lDWCmQfCc3":466,"content-query-pY5GjeCLfZ":4915,"content-query-DexhC6jnXN":5999,"content-query-AVfm838iln":8281,"content-query-Dmf1CQj4Id":8816,"content-query-ViehLtZIqO":8887,"content-query-KtO3wftRle":9391,"content-query-1PFeYVQSzn":9463,"related-refs-shopware_e-commerce-purize-en":9499},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"subtitle":9,"heroImage":10,"areaOfApplication":11,"industry":12,"technologies":13,"period":17,"teamDescription":20,"budget":21,"tags":22,"body":25,"_type":275,"_id":276,"_source":277,"_file":278,"_stem":279,"_extension":280},"/en/portfolio/purize","portfolio",false,"","Purize Filters","E-COMMERCE AND FULFILLMENT FOR ACTIVATED CARBON FILTERS \"MADE IN GERMANY\"","/images/portfolio/barcode-machine-verdandijpg.jpg","E-Commerce & Fulfillment","E-Commerce and Fulfillment",[14,15,16],"zabbix","mysql","php",{"from":18,"to":19},"March 2017","present","1 e-commerce consultant, 1 developer, DevOps team","six-figure",[23,24],"shopware","e-commerce",{"type":26,"children":27,"toc":270},"root",[28,86,172,263],{"type":29,"tag":30,"props":31,"children":34},"element","section-component",{"className":32},[33],"no-pattern",[35,80],{"type":29,"tag":36,"props":37,"children":46},"v-card",{"className":38,"style":45},[39,40,41,42,43,44],"description__card","text-justify","px-4","px-md-18","py-4","py-md-14","background-color: rgba(var(--v-theme-primary), 0.1)",[47,65,75],{"type":29,"tag":48,"props":49,"children":50},"p",{},[51,58,60],{"type":29,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":56,"value":57},"text","PURIZE® Filters produces high-quality activated carbon filters \"Made in Germany\" that reduce harmful substances",{"type":56,"value":59},".\nThe company is 100% committed to Germany as a production location, as comparable activated carbon filters\nthat meet PURIZE® quality standards are difficult to manufacture in the Far East.\nThe challenge for PURIZE® was to establish an efficient E-commerce and fulfillment process alongside\nthe production of their high-quality products to keep pace with their growing customer base.\n",{"type":29,"tag":52,"props":61,"children":62},{},[63],{"type":56,"value":64},"Our task was to implement a complete e-commerce solution and ensure a smooth shipping process.",{"type":29,"tag":66,"props":67,"children":74},"img",{"alt":68,"aspect-ratio":69,"className":70,"object-fit":72,"src":73},"Verdandi Workstation for the fulfillment process at Purize","3",[71],"my-5","contain","/images/portfolio/verdandi_workstation.jpg",[],{"type":29,"tag":48,"props":76,"children":77},{},[78],{"type":56,"value":79},"To maximize the efficiency of the ordering process, we deployed our fulfillment services and created a\nseamless connection to shipping service providers. This integration\nenables fast and reliable processing of orders and shipping, leading to higher\ncustomer satisfaction. Additionally, we serve as consultants for all challenges in the\ne-commerce sector. This included technical support for webshop optimization and continuous\nimprovement of the entire online sales process.",{"type":29,"tag":81,"props":82,"children":85},"v-divider",{"className":83},[84],"hw-my",[],{"type":29,"tag":30,"props":87,"children":88},{},[89,102],{"type":29,"tag":90,"props":91,"children":99},"h2",{"className":92,"id":98},[93,94,95,96,97],"justify-center","mt-12","mb-4","mb-md-8","pt-0","our-services",[100],{"type":56,"value":101}," Our Services ",{"type":29,"tag":36,"props":103,"children":109},{"className":104},[105,106,41,42,43,44,107,108],"background","transparent-4","mb-8","mb-md-12",[110,141],{"type":29,"tag":111,"props":112,"children":114},"v-row",{":no-gutters":113,"no-gutters":7},"true",[115,137],{"type":29,"tag":116,"props":117,"children":120},"v-col",{"cols":118,"md":119},12,"8",[121],{"type":29,"tag":122,"props":123,"children":125},"h3",{"id":124},"e-commerce-consulting-implementation",[126],{"type":29,"tag":127,"props":128,"children":134},"span",{"className":129},[130,131,132,133],"w-100","text-center","mt-sm-n5","mt-md-n6",[135],{"type":56,"value":136},"E-Commerce Consulting & Implementation",{"type":29,"tag":116,"props":138,"children":140},{"cols":118,"md":139},"4",[],{"type":29,"tag":111,"props":142,"children":145},{"className":143},[144],"mt-0",[146,164],{"type":29,"tag":116,"props":147,"children":148},{"cols":118,"md":119},[149,154,159],{"type":29,"tag":48,"props":150,"children":151},{},[152],{"type":56,"value":153},"For PURIZE® Filters, we implemented a comprehensive e-commerce solution tailored to the specific requirements\nof their product and target audience.\nOur e-commerce consulting included continuous optimization of the shop platform, setup of efficient\npayment processes, and integration of various marketing tools. We supported PURIZE® in strengthening their\nonline presence and making the best possible use of the digital sales channel.",{"type":29,"tag":48,"props":155,"children":156},{},[157],{"type":56,"value":158},"The technical implementation included setting up a scalable shop solution that runs stably even with increasing\norder numbers and offers a seamless shopping experience. All technical aspects were\ndesigned to be easy to maintain and expandable when needed, to keep pace with the company's growth.",{"type":29,"tag":48,"props":160,"children":161},{},[162],{"type":56,"value":163},"A central element of our collaboration with PURIZE® is the provision of a complete\nfulfillment service. We developed a customized solution that covers all aspects of order processing — from order\nacceptance and storage to shipping of the products. The seamless integration of our\nfulfillment system with the e-commerce shop enables real-time tracking of inventory and automated\nordering processes.",{"type":29,"tag":116,"props":165,"children":166},{"cols":118,"md":139},[167],{"type":29,"tag":168,"props":169,"children":171},"employees-card",{":showExecutiveRole":113,"name":170},"bernd-helm",[],{"type":29,"tag":30,"props":173,"children":174},{},[175,182,259],{"type":29,"tag":90,"props":176,"children":179},{"className":177,"id":178},[93,94,95,96,97],"special-challenges",[180],{"type":56,"value":181}," Special Challenges ",{"type":29,"tag":36,"props":183,"children":185},{"className":184},[105,106,41,42,43,44],[186],{"type":29,"tag":111,"props":187,"children":188},{},[189,209,229,241],{"type":29,"tag":116,"props":190,"children":192},{"cols":118,"md":191,"sm":69},"2",[193],{"type":29,"tag":194,"props":195,"children":203},"v-responsive",{"aspect-ratio":196,"className":197,"content-class":201,"style":202},"0.921",[198,199,200],"bg-primary-lighten-3","hw-hexagon","mx-auto","d-flex justify-center align-center","width: 100%; max-width: 120px;",[204],{"type":29,"tag":205,"props":206,"children":208},"hw-image",{"src":207},"/images/scalability-logo.svg",[],{"type":29,"tag":116,"props":210,"children":213},{"cols":118,"md":211,"sm":212},"10","9",[214,224],{"type":29,"tag":122,"props":215,"children":217},{"id":216},"scalability-during-rapid-growth",[218],{"type":29,"tag":127,"props":219,"children":221},{"className":220},[132,133],[222],{"type":56,"value":223},"Scalability During Rapid Growth",{"type":29,"tag":48,"props":225,"children":226},{},[227],{"type":56,"value":228},"A particular challenge in this project was the need to create a system that could keep pace with\nPURIZE®'s rapid growth. The company's e-commerce sector experienced rapid\ngrowth, which placed increased demands on infrastructure, storage capacities, and shipping processes. Our\nsolution therefore had to be designed to be scalable from the outset in order to cope with peak times and continuous growth.",{"type":29,"tag":116,"props":230,"children":231},{"cols":118,"md":191,"sm":69},[232],{"type":29,"tag":194,"props":233,"children":236},{"aspect-ratio":196,"className":234,"content-class":201,"style":202},[235,199,200],"bg-primary-lighten-1",[237],{"type":29,"tag":205,"props":238,"children":240},{"src":239},"/images/data-processing-logo.svg",[],{"type":29,"tag":116,"props":242,"children":243},{"cols":118,"md":211,"sm":212},[244,254],{"type":29,"tag":122,"props":245,"children":247},{"id":246},"seamless-integration-of-shipping-service-providers",[248],{"type":29,"tag":127,"props":249,"children":251},{"className":250},[132,133],[252],{"type":56,"value":253},"Seamless Integration of Shipping Service Providers",{"type":29,"tag":48,"props":255,"children":256},{},[257],{"type":56,"value":258},"The integration of shipping service providers required complex technical implementation to ensure\nseamless communication between the webshop, our fulfillment system, and the logistics platforms.\nWe had to develop a robust API interface capable of transmitting order data in real-time,\nfeeding back tracking information, and updating the status of each shipment. A particular challenge\nwas to harmonize different data formats and communication protocols and ensure error-free\ntransmission. Through the use of modern integration tools and the development of specific\nmiddleware components, we were able to create a stable and reliable connection.",{"type":29,"tag":81,"props":260,"children":262},{"className":261},[84],[],{"type":29,"tag":30,"props":264,"children":265},{},[266],{"type":29,"tag":267,"props":268,"children":269},"contact-form",{},[],{"title":7,"searchDepth":271,"depth":271,"links":272},2,[273,274],{"id":98,"depth":271,"text":101},{"id":178,"depth":271,"text":181},"markdown","common:en:portfolio:9000.purize:index.md","common","en/portfolio/9000.purize/index.md","en/portfolio/9000.purize/index","md",{"_path":282,"_dir":283,"_draft":6,"_partial":6,"_locale":7,"slug":170,"teams":284,"primaryTeam":286,"firstName":287,"lastName":288,"prefixTitle":7,"suffixTitle":7,"education":289,"executiveRole":294,"role":295,"workingSince":303,"inTheCompanySince":304,"techSkills":305,"skills":351,"projects":364,"contactDetails":377,"_image":381,"image":382,"_id":383,"_type":384,"title":385,"_source":283,"_file":386,"_stem":387,"_extension":384},"/employees/bernd-helm","employees",[285,286],"ai","devOps","Bernd","Helm",[290],[291,292,293],"B. Sc. Angewandte Informatik","FHDW Dresden","2010","CTO",[296,297,286,298,299,300,301,302],"founder","chiefTechnologyOfficer","databaseSpecialist","admin","softwareDeveloper","backendDeveloper","consultant","2005","2008",[306,310,313,315,318,320,323,325,327,329,332,336,339,342,345,348],{"name":307,"level":308,"icon":309},"Docker","expert","/images/Docker.svg",{"name":311,"level":308,"icon":312},"Linux","/images/linux_os-mono.svg",{"name":314,"level":308},"Zabbix",{"name":316,"level":308,"icon":317},"MariaDB ColumnStore","/images/maria-db-logo.svg",{"name":319,"level":308},"OpenAI",{"name":321,"level":308,"icon":322},"Pytorch","/images/PyTorch.svg",{"name":324,"level":308},"PHP",{"name":326,"level":308},"Java",{"name":328,"level":308},"Python",{"name":330,"level":308,"icon":331},"SQL","/images/SQL.svg",{"name":333,"level":334,"icon":335},"C++","advanced","/images/cpp-logo.svg",{"name":337,"level":334,"icon":338},"C#","/images/csharp.svg",{"name":340,"level":334,"icon":341},"CSS","/images/css.svg",{"name":343,"level":334,"icon":344},"HTML","/images/html.svg",{"name":346,"level":334,"icon":347},"OpenCV","/images/OpenCV.svg",{"name":349,"level":334,"icon":350},"Vue.js","/images/vuejs.svg",[352,354,356,358,360,362],{"name":353,"level":308},"artificialIntelligence",{"name":355,"level":308},"codingGuidelines",{"name":357,"level":308},"databases",{"name":359,"level":308},"linuxServerAdministration",{"name":361,"level":308},"softwareArchitect",{"name":363,"level":334},"qualityAssurance",[365,368,370,372,375],{"project":366,"position":367},"Gridside","Technical Consultant",{"project":369,"position":367},"Herole",{"project":371,"position":367},"Montagespezis",{"project":373,"position":374},"Orsee","Technical Manager",{"project":376,"position":367},"Vipr",{"eMail":378,"phone":379,"visibility":380},"bernd.helm@helmundwalter.de","+49 351 799 035 20","1","images/employees/Portraits/bernd_helm.webp","images/employees/Portraits/BerndHelm_MS.webp","employees:employees:1.bernd-helm.json","json","Bernd Helm","employees/1.bernd-helm.json","employees/1.bernd-helm",[389,408,418,428,439,453],{"_path":390,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":392,"description":393,"author":394,"image":395,"releaseDate":396,"blogCategories":397,"articleTags":400,"tags":403,"_type":275,"_id":405,"_source":277,"_file":406,"_stem":407,"_extension":280},"/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",[398,399],"What moves us","DevOps",[399,401,402],"Open Source","Shopware",[23,404],"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":409,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":410,"description":411,"author":394,"image":395,"releaseDate":396,"blogCategories":412,"articleTags":413,"tags":414,"_type":275,"_id":415,"_source":277,"_file":416,"_stem":417,"_extension":280},"/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",[398,399],[399,401,402],[23,404],"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":419,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":420,"description":421,"author":394,"image":395,"releaseDate":396,"blogCategories":422,"articleTags":423,"tags":424,"_type":275,"_id":425,"_source":277,"_file":426,"_stem":427,"_extension":280},"/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",[398,399],[399,401,402],[23,404],"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":429,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":430,"description":431,"author":394,"image":395,"releaseDate":432,"blogCategories":433,"articleTags":434,"tags":435,"_type":275,"_id":436,"_source":277,"_file":437,"_stem":438,"_extension":280},"/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",[398,399],[399,401],[23,404],"common:en:blog:16.shopware-renovate-bot.md","en/blog/16.shopware-renovate-bot.md","en/blog/16.shopware-renovate-bot",{"_path":440,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":441,"description":442,"author":170,"image":443,"releaseDate":444,"blogCategories":445,"articleTags":446,"tags":448,"_type":275,"_id":450,"_source":277,"_file":451,"_stem":452,"_extension":280},"/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.","/blog/thumbnails/AWS.svg","2024-02-21",[398,399],[447,401],"Amazon",[24,449],"backend","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":454,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":455,"description":456,"author":170,"image":457,"releaseDate":458,"blogCategories":459,"articleTags":460,"tags":462,"_type":275,"_id":463,"_source":277,"_file":464,"_stem":465,"_extension":280},"/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",[402,399],[461],"VPN",[23],"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":390,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":392,"description":393,"author":394,"image":395,"releaseDate":396,"blogCategories":467,"articleTags":468,"tags":469,"body":470,"_type":275,"_id":405,"_source":277,"_file":406,"_stem":407,"_extension":280},[398,399],[399,401,402],[23,404],{"type":26,"children":471,"toc":4903},[472,479,484,498,503,508,547,552,558,563,569,581,1662,1667,1695,1705,1709,1722,1745,1882,1895,1900,1906,1918,1938,2340,2381,2386,2407,2549,2561,2567,2578,2583,2595,2630,2635,3562,3567,3666,3671,3730,3741,3746,3767,3902,3912,3918,3939,3942,3946,3952,3958,3963,3979,4029,4189,4195,4200,4211,4224,4447,4852,4857,4897],{"type":29,"tag":66,"props":473,"children":478},{"alt":7,"aspect-ratio":474,"height":475,"object-fit":476,"src":477},"1.78",300,"fill","/blog/shopware-plugin-release.png",[],{"type":29,"tag":48,"props":480,"children":481},{},[482],{"type":56,"value":483},"There are many ways to install Shopware 6 plugins. You can download them directly in the admin panel or install them with composer.",{"type":29,"tag":48,"props":485,"children":486},{},[487,489,496],{"type":56,"value":488},"There is a detailed comparison in the ",{"type":29,"tag":490,"props":491,"children":493},"a",{"href":492},"https://developer.shopware.com/docs/guides/plugins/plugins/",[494],{"type":56,"value":495},"official documentation",{"type":56,"value":497},".",{"type":29,"tag":48,"props":499,"children":500},{},[501],{"type":56,"value":502},"As a developer and maintainer of themes, customizations, third part API's, etc., I'm focused on Static Plugins.",{"type":29,"tag":48,"props":504,"children":505},{},[506],{"type":56,"value":507},"The workflow is simple:",{"type":29,"tag":509,"props":510,"children":511},"ol",{},[512,525,536],{"type":29,"tag":513,"props":514,"children":515},"li",{},[516,518],{"type":56,"value":517},"Create a plugin with ",{"type":29,"tag":519,"props":520,"children":522},"code",{"className":521},[],[523],{"type":56,"value":524},"bin/console plugin:create --static",{"type":29,"tag":513,"props":526,"children":527},{},[528,530],{"type":56,"value":529},"Require it with ",{"type":29,"tag":490,"props":531,"children":533},{"href":532},"https://developer.shopware.com/docs/guides/plugins/plugins/#static-plugins",[534],{"type":56,"value":535},"composer",{"type":29,"tag":513,"props":537,"children":538},{},[539,541],{"type":56,"value":540},"Build the project with ",{"type":29,"tag":490,"props":542,"children":544},{"href":543},"https://developer.shopware.com/docs/products/cli/project-commands/build.html#example-docker-image",[545],{"type":56,"value":546},"shopware-cli",{"type":29,"tag":48,"props":548,"children":549},{},[550],{"type":56,"value":551},"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":29,"tag":90,"props":553,"children":555},{"id":554},"extracting-the-plugin",[556],{"type":56,"value":557},"Extracting the plugin",{"type":29,"tag":48,"props":559,"children":560},{},[561],{"type":56,"value":562},"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":29,"tag":122,"props":564,"children":566},{"id":565},"download-with-git",[567],{"type":56,"value":568},"Download with git",{"type":29,"tag":48,"props":570,"children":571},{},[572,574,579],{"type":56,"value":573},"We just need to tell ",{"type":29,"tag":519,"props":575,"children":577},{"className":576},[],[578],{"type":56,"value":535},{"type":56,"value":580}," where to find our plugin",{"type":29,"tag":582,"props":583,"children":592},"pre",{"className":584,"code":585,"filename":586,"highlights":587,"language":384,"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",[588,589,590,591],36,37,38,39,[593],{"type":29,"tag":519,"props":594,"children":595},{"__ignoreMap":7},[596,607,632,654,676,690,712,734,756,778,799,820,837,846,860,869,891,913,926,945,954,963,971,991,1012,1024,1040,1048,1056,1064,1084,1105,1117,1133,1141,1149,1158,1179,1196,1205,1214,1227,1240,1269,1277,1285,1306,1319,1332,1353,1370,1378,1399,1416,1424,1437,1450,1468,1476,1489,1498,1507,1520,1528,1537,1545,1558,1571,1592,1605,1618,1627,1636,1644,1653],{"type":29,"tag":127,"props":597,"children":600},{"class":598,"line":599},"line",1,[601],{"type":29,"tag":127,"props":602,"children":604},{"style":603},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[605],{"type":56,"value":606},"{\n",{"type":29,"tag":127,"props":608,"children":609},{"class":598,"line":271},[610,616,621,627],{"type":29,"tag":127,"props":611,"children":613},{"style":612},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic",[614],{"type":56,"value":615},"  \"name\"",{"type":29,"tag":127,"props":617,"children":618},{"style":603},[619],{"type":56,"value":620},": ",{"type":29,"tag":127,"props":622,"children":624},{"style":623},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2",[625],{"type":56,"value":626},"\"shopware/production\"",{"type":29,"tag":127,"props":628,"children":629},{"style":603},[630],{"type":56,"value":631},",\n",{"type":29,"tag":127,"props":633,"children":635},{"class":598,"line":634},3,[636,641,645,650],{"type":29,"tag":127,"props":637,"children":638},{"style":612},[639],{"type":56,"value":640},"  \"license\"",{"type":29,"tag":127,"props":642,"children":643},{"style":603},[644],{"type":56,"value":620},{"type":29,"tag":127,"props":646,"children":647},{"style":623},[648],{"type":56,"value":649},"\"MIT\"",{"type":29,"tag":127,"props":651,"children":652},{"style":603},[653],{"type":56,"value":631},{"type":29,"tag":127,"props":655,"children":657},{"class":598,"line":656},4,[658,663,667,672],{"type":29,"tag":127,"props":659,"children":660},{"style":612},[661],{"type":56,"value":662},"  \"type\"",{"type":29,"tag":127,"props":664,"children":665},{"style":603},[666],{"type":56,"value":620},{"type":29,"tag":127,"props":668,"children":669},{"style":623},[670],{"type":56,"value":671},"\"project\"",{"type":29,"tag":127,"props":673,"children":674},{"style":603},[675],{"type":56,"value":631},{"type":29,"tag":127,"props":677,"children":679},{"class":598,"line":678},5,[680,685],{"type":29,"tag":127,"props":681,"children":682},{"style":612},[683],{"type":56,"value":684},"  \"require\"",{"type":29,"tag":127,"props":686,"children":687},{"style":603},[688],{"type":56,"value":689},": {\n",{"type":29,"tag":127,"props":691,"children":693},{"class":598,"line":692},6,[694,699,703,708],{"type":29,"tag":127,"props":695,"children":696},{"style":612},[697],{"type":56,"value":698},"    \"composer-runtime-api\"",{"type":29,"tag":127,"props":700,"children":701},{"style":603},[702],{"type":56,"value":620},{"type":29,"tag":127,"props":704,"children":705},{"style":623},[706],{"type":56,"value":707},"\"^2.0\"",{"type":29,"tag":127,"props":709,"children":710},{"style":603},[711],{"type":56,"value":631},{"type":29,"tag":127,"props":713,"children":715},{"class":598,"line":714},7,[716,721,725,730],{"type":29,"tag":127,"props":717,"children":718},{"style":612},[719],{"type":56,"value":720},"    \"acme/sample-plugin\"",{"type":29,"tag":127,"props":722,"children":723},{"style":603},[724],{"type":56,"value":620},{"type":29,"tag":127,"props":726,"children":727},{"style":623},[728],{"type":56,"value":729},"\"^1.0\"",{"type":29,"tag":127,"props":731,"children":732},{"style":603},[733],{"type":56,"value":631},{"type":29,"tag":127,"props":735,"children":737},{"class":598,"line":736},8,[738,743,747,752],{"type":29,"tag":127,"props":739,"children":740},{"style":612},[741],{"type":56,"value":742},"    \"shopware/administration\"",{"type":29,"tag":127,"props":744,"children":745},{"style":603},[746],{"type":56,"value":620},{"type":29,"tag":127,"props":748,"children":749},{"style":623},[750],{"type":56,"value":751},"\"*\"",{"type":29,"tag":127,"props":753,"children":754},{"style":603},[755],{"type":56,"value":631},{"type":29,"tag":127,"props":757,"children":759},{"class":598,"line":758},9,[760,765,769,774],{"type":29,"tag":127,"props":761,"children":762},{"style":612},[763],{"type":56,"value":764},"    \"shopware/core\"",{"type":29,"tag":127,"props":766,"children":767},{"style":603},[768],{"type":56,"value":620},{"type":29,"tag":127,"props":770,"children":771},{"style":623},[772],{"type":56,"value":773},"\"6.6.10.2\"",{"type":29,"tag":127,"props":775,"children":776},{"style":603},[777],{"type":56,"value":631},{"type":29,"tag":127,"props":779,"children":781},{"class":598,"line":780},10,[782,787,791,795],{"type":29,"tag":127,"props":783,"children":784},{"style":612},[785],{"type":56,"value":786},"    \"shopware/elasticsearch\"",{"type":29,"tag":127,"props":788,"children":789},{"style":603},[790],{"type":56,"value":620},{"type":29,"tag":127,"props":792,"children":793},{"style":623},[794],{"type":56,"value":751},{"type":29,"tag":127,"props":796,"children":797},{"style":603},[798],{"type":56,"value":631},{"type":29,"tag":127,"props":800,"children":802},{"class":598,"line":801},11,[803,808,812,816],{"type":29,"tag":127,"props":804,"children":805},{"style":612},[806],{"type":56,"value":807},"    \"shopware/storefront\"",{"type":29,"tag":127,"props":809,"children":810},{"style":603},[811],{"type":56,"value":620},{"type":29,"tag":127,"props":813,"children":814},{"style":623},[815],{"type":56,"value":751},{"type":29,"tag":127,"props":817,"children":818},{"style":603},[819],{"type":56,"value":631},{"type":29,"tag":127,"props":821,"children":822},{"class":598,"line":118},[823,828,832],{"type":29,"tag":127,"props":824,"children":825},{"style":612},[826],{"type":56,"value":827},"    \"symfony/flex\"",{"type":29,"tag":127,"props":829,"children":830},{"style":603},[831],{"type":56,"value":620},{"type":29,"tag":127,"props":833,"children":834},{"style":623},[835],{"type":56,"value":836},"\"~2\"\n",{"type":29,"tag":127,"props":838,"children":840},{"class":598,"line":839},13,[841],{"type":29,"tag":127,"props":842,"children":843},{"style":603},[844],{"type":56,"value":845},"  },\n",{"type":29,"tag":127,"props":847,"children":849},{"class":598,"line":848},14,[850,855],{"type":29,"tag":127,"props":851,"children":852},{"style":612},[853],{"type":56,"value":854},"  \"repositories\"",{"type":29,"tag":127,"props":856,"children":857},{"style":603},[858],{"type":56,"value":859},": [\n",{"type":29,"tag":127,"props":861,"children":863},{"class":598,"line":862},15,[864],{"type":29,"tag":127,"props":865,"children":866},{"style":603},[867],{"type":56,"value":868},"    {\n",{"type":29,"tag":127,"props":870,"children":872},{"class":598,"line":871},16,[873,878,882,887],{"type":29,"tag":127,"props":874,"children":875},{"style":612},[876],{"type":56,"value":877},"      \"type\"",{"type":29,"tag":127,"props":879,"children":880},{"style":603},[881],{"type":56,"value":620},{"type":29,"tag":127,"props":883,"children":884},{"style":623},[885],{"type":56,"value":886},"\"path\"",{"type":29,"tag":127,"props":888,"children":889},{"style":603},[890],{"type":56,"value":631},{"type":29,"tag":127,"props":892,"children":894},{"class":598,"line":893},17,[895,900,904,909],{"type":29,"tag":127,"props":896,"children":897},{"style":612},[898],{"type":56,"value":899},"      \"url\"",{"type":29,"tag":127,"props":901,"children":902},{"style":603},[903],{"type":56,"value":620},{"type":29,"tag":127,"props":905,"children":906},{"style":623},[907],{"type":56,"value":908},"\"custom/plugins/*\"",{"type":29,"tag":127,"props":910,"children":911},{"style":603},[912],{"type":56,"value":631},{"type":29,"tag":127,"props":914,"children":916},{"class":598,"line":915},18,[917,922],{"type":29,"tag":127,"props":918,"children":919},{"style":612},[920],{"type":56,"value":921},"      \"options\"",{"type":29,"tag":127,"props":923,"children":924},{"style":603},[925],{"type":56,"value":689},{"type":29,"tag":127,"props":927,"children":929},{"class":598,"line":928},19,[930,935,939],{"type":29,"tag":127,"props":931,"children":932},{"style":612},[933],{"type":56,"value":934},"        \"symlink\"",{"type":29,"tag":127,"props":936,"children":937},{"style":603},[938],{"type":56,"value":620},{"type":29,"tag":127,"props":940,"children":942},{"style":941},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[943],{"type":56,"value":944},"true\n",{"type":29,"tag":127,"props":946,"children":948},{"class":598,"line":947},20,[949],{"type":29,"tag":127,"props":950,"children":951},{"style":603},[952],{"type":56,"value":953},"      }\n",{"type":29,"tag":127,"props":955,"children":957},{"class":598,"line":956},21,[958],{"type":29,"tag":127,"props":959,"children":960},{"style":603},[961],{"type":56,"value":962},"    },\n",{"type":29,"tag":127,"props":964,"children":966},{"class":598,"line":965},22,[967],{"type":29,"tag":127,"props":968,"children":969},{"style":603},[970],{"type":56,"value":868},{"type":29,"tag":127,"props":972,"children":974},{"class":598,"line":973},23,[975,979,983,987],{"type":29,"tag":127,"props":976,"children":977},{"style":612},[978],{"type":56,"value":877},{"type":29,"tag":127,"props":980,"children":981},{"style":603},[982],{"type":56,"value":620},{"type":29,"tag":127,"props":984,"children":985},{"style":623},[986],{"type":56,"value":886},{"type":29,"tag":127,"props":988,"children":989},{"style":603},[990],{"type":56,"value":631},{"type":29,"tag":127,"props":992,"children":994},{"class":598,"line":993},24,[995,999,1003,1008],{"type":29,"tag":127,"props":996,"children":997},{"style":612},[998],{"type":56,"value":899},{"type":29,"tag":127,"props":1000,"children":1001},{"style":603},[1002],{"type":56,"value":620},{"type":29,"tag":127,"props":1004,"children":1005},{"style":623},[1006],{"type":56,"value":1007},"\"custom/plugins/*/packages/*\"",{"type":29,"tag":127,"props":1009,"children":1010},{"style":603},[1011],{"type":56,"value":631},{"type":29,"tag":127,"props":1013,"children":1015},{"class":598,"line":1014},25,[1016,1020],{"type":29,"tag":127,"props":1017,"children":1018},{"style":612},[1019],{"type":56,"value":921},{"type":29,"tag":127,"props":1021,"children":1022},{"style":603},[1023],{"type":56,"value":689},{"type":29,"tag":127,"props":1025,"children":1027},{"class":598,"line":1026},26,[1028,1032,1036],{"type":29,"tag":127,"props":1029,"children":1030},{"style":612},[1031],{"type":56,"value":934},{"type":29,"tag":127,"props":1033,"children":1034},{"style":603},[1035],{"type":56,"value":620},{"type":29,"tag":127,"props":1037,"children":1038},{"style":941},[1039],{"type":56,"value":944},{"type":29,"tag":127,"props":1041,"children":1043},{"class":598,"line":1042},27,[1044],{"type":29,"tag":127,"props":1045,"children":1046},{"style":603},[1047],{"type":56,"value":953},{"type":29,"tag":127,"props":1049,"children":1051},{"class":598,"line":1050},28,[1052],{"type":29,"tag":127,"props":1053,"children":1054},{"style":603},[1055],{"type":56,"value":962},{"type":29,"tag":127,"props":1057,"children":1059},{"class":598,"line":1058},29,[1060],{"type":29,"tag":127,"props":1061,"children":1062},{"style":603},[1063],{"type":56,"value":868},{"type":29,"tag":127,"props":1065,"children":1067},{"class":598,"line":1066},30,[1068,1072,1076,1080],{"type":29,"tag":127,"props":1069,"children":1070},{"style":612},[1071],{"type":56,"value":877},{"type":29,"tag":127,"props":1073,"children":1074},{"style":603},[1075],{"type":56,"value":620},{"type":29,"tag":127,"props":1077,"children":1078},{"style":623},[1079],{"type":56,"value":886},{"type":29,"tag":127,"props":1081,"children":1082},{"style":603},[1083],{"type":56,"value":631},{"type":29,"tag":127,"props":1085,"children":1087},{"class":598,"line":1086},31,[1088,1092,1096,1101],{"type":29,"tag":127,"props":1089,"children":1090},{"style":612},[1091],{"type":56,"value":899},{"type":29,"tag":127,"props":1093,"children":1094},{"style":603},[1095],{"type":56,"value":620},{"type":29,"tag":127,"props":1097,"children":1098},{"style":623},[1099],{"type":56,"value":1100},"\"custom/static-plugins/*\"",{"type":29,"tag":127,"props":1102,"children":1103},{"style":603},[1104],{"type":56,"value":631},{"type":29,"tag":127,"props":1106,"children":1108},{"class":598,"line":1107},32,[1109,1113],{"type":29,"tag":127,"props":1110,"children":1111},{"style":612},[1112],{"type":56,"value":921},{"type":29,"tag":127,"props":1114,"children":1115},{"style":603},[1116],{"type":56,"value":689},{"type":29,"tag":127,"props":1118,"children":1120},{"class":598,"line":1119},33,[1121,1125,1129],{"type":29,"tag":127,"props":1122,"children":1123},{"style":612},[1124],{"type":56,"value":934},{"type":29,"tag":127,"props":1126,"children":1127},{"style":603},[1128],{"type":56,"value":620},{"type":29,"tag":127,"props":1130,"children":1131},{"style":941},[1132],{"type":56,"value":944},{"type":29,"tag":127,"props":1134,"children":1136},{"class":598,"line":1135},34,[1137],{"type":29,"tag":127,"props":1138,"children":1139},{"style":603},[1140],{"type":56,"value":953},{"type":29,"tag":127,"props":1142,"children":1144},{"class":598,"line":1143},35,[1145],{"type":29,"tag":127,"props":1146,"children":1147},{"style":603},[1148],{"type":56,"value":962},{"type":29,"tag":127,"props":1150,"children":1153},{"class":1151,"line":588},[598,1152],"highlight",[1154],{"type":29,"tag":127,"props":1155,"children":1156},{"style":603},[1157],{"type":56,"value":868},{"type":29,"tag":127,"props":1159,"children":1161},{"class":1160,"line":589},[598,1152],[1162,1166,1170,1175],{"type":29,"tag":127,"props":1163,"children":1164},{"style":612},[1165],{"type":56,"value":877},{"type":29,"tag":127,"props":1167,"children":1168},{"style":603},[1169],{"type":56,"value":620},{"type":29,"tag":127,"props":1171,"children":1172},{"style":623},[1173],{"type":56,"value":1174},"\"git\"",{"type":29,"tag":127,"props":1176,"children":1177},{"style":603},[1178],{"type":56,"value":631},{"type":29,"tag":127,"props":1180,"children":1182},{"class":1181,"line":590},[598,1152],[1183,1187,1191],{"type":29,"tag":127,"props":1184,"children":1185},{"style":612},[1186],{"type":56,"value":899},{"type":29,"tag":127,"props":1188,"children":1189},{"style":603},[1190],{"type":56,"value":620},{"type":29,"tag":127,"props":1192,"children":1193},{"style":623},[1194],{"type":56,"value":1195},"\"https://\u003CDOMAIN-NAME>/\u003Cgroup>/\u003Crepo>.git\"\n",{"type":29,"tag":127,"props":1197,"children":1199},{"class":1198,"line":591},[598,1152],[1200],{"type":29,"tag":127,"props":1201,"children":1202},{"style":603},[1203],{"type":56,"value":1204},"    }\n",{"type":29,"tag":127,"props":1206,"children":1208},{"class":598,"line":1207},40,[1209],{"type":29,"tag":127,"props":1210,"children":1211},{"style":603},[1212],{"type":56,"value":1213},"  ],\n",{"type":29,"tag":127,"props":1215,"children":1217},{"class":598,"line":1216},41,[1218,1223],{"type":29,"tag":127,"props":1219,"children":1220},{"style":612},[1221],{"type":56,"value":1222},"  \"autoload\"",{"type":29,"tag":127,"props":1224,"children":1225},{"style":603},[1226],{"type":56,"value":689},{"type":29,"tag":127,"props":1228,"children":1230},{"class":598,"line":1229},42,[1231,1236],{"type":29,"tag":127,"props":1232,"children":1233},{"style":612},[1234],{"type":56,"value":1235},"    \"psr-4\"",{"type":29,"tag":127,"props":1237,"children":1238},{"style":603},[1239],{"type":56,"value":689},{"type":29,"tag":127,"props":1241,"children":1243},{"class":598,"line":1242},43,[1244,1249,1255,1260,1264],{"type":29,"tag":127,"props":1245,"children":1246},{"style":612},[1247],{"type":56,"value":1248},"      \"App",{"type":29,"tag":127,"props":1250,"children":1252},{"style":1251},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#AE81FF;--shiki-sepia-font-style:italic",[1253],{"type":56,"value":1254},"\\\\",{"type":29,"tag":127,"props":1256,"children":1257},{"style":612},[1258],{"type":56,"value":1259},"\"",{"type":29,"tag":127,"props":1261,"children":1262},{"style":603},[1263],{"type":56,"value":620},{"type":29,"tag":127,"props":1265,"children":1266},{"style":623},[1267],{"type":56,"value":1268},"\"src/\"\n",{"type":29,"tag":127,"props":1270,"children":1272},{"class":598,"line":1271},44,[1273],{"type":29,"tag":127,"props":1274,"children":1275},{"style":603},[1276],{"type":56,"value":1204},{"type":29,"tag":127,"props":1278,"children":1280},{"class":598,"line":1279},45,[1281],{"type":29,"tag":127,"props":1282,"children":1283},{"style":603},[1284],{"type":56,"value":845},{"type":29,"tag":127,"props":1286,"children":1288},{"class":598,"line":1287},46,[1289,1294,1298,1302],{"type":29,"tag":127,"props":1290,"children":1291},{"style":612},[1292],{"type":56,"value":1293},"  \"prefer-stable\"",{"type":29,"tag":127,"props":1295,"children":1296},{"style":603},[1297],{"type":56,"value":620},{"type":29,"tag":127,"props":1299,"children":1300},{"style":941},[1301],{"type":56,"value":113},{"type":29,"tag":127,"props":1303,"children":1304},{"style":603},[1305],{"type":56,"value":631},{"type":29,"tag":127,"props":1307,"children":1309},{"class":598,"line":1308},47,[1310,1315],{"type":29,"tag":127,"props":1311,"children":1312},{"style":612},[1313],{"type":56,"value":1314},"  \"config\"",{"type":29,"tag":127,"props":1316,"children":1317},{"style":603},[1318],{"type":56,"value":689},{"type":29,"tag":127,"props":1320,"children":1322},{"class":598,"line":1321},48,[1323,1328],{"type":29,"tag":127,"props":1324,"children":1325},{"style":612},[1326],{"type":56,"value":1327},"    \"allow-plugins\"",{"type":29,"tag":127,"props":1329,"children":1330},{"style":603},[1331],{"type":56,"value":689},{"type":29,"tag":127,"props":1333,"children":1335},{"class":598,"line":1334},49,[1336,1341,1345,1349],{"type":29,"tag":127,"props":1337,"children":1338},{"style":612},[1339],{"type":56,"value":1340},"      \"symfony/flex\"",{"type":29,"tag":127,"props":1342,"children":1343},{"style":603},[1344],{"type":56,"value":620},{"type":29,"tag":127,"props":1346,"children":1347},{"style":941},[1348],{"type":56,"value":113},{"type":29,"tag":127,"props":1350,"children":1351},{"style":603},[1352],{"type":56,"value":631},{"type":29,"tag":127,"props":1354,"children":1356},{"class":598,"line":1355},50,[1357,1362,1366],{"type":29,"tag":127,"props":1358,"children":1359},{"style":612},[1360],{"type":56,"value":1361},"      \"symfony/runtime\"",{"type":29,"tag":127,"props":1363,"children":1364},{"style":603},[1365],{"type":56,"value":620},{"type":29,"tag":127,"props":1367,"children":1368},{"style":941},[1369],{"type":56,"value":944},{"type":29,"tag":127,"props":1371,"children":1373},{"class":598,"line":1372},51,[1374],{"type":29,"tag":127,"props":1375,"children":1376},{"style":603},[1377],{"type":56,"value":962},{"type":29,"tag":127,"props":1379,"children":1381},{"class":598,"line":1380},52,[1382,1387,1391,1395],{"type":29,"tag":127,"props":1383,"children":1384},{"style":612},[1385],{"type":56,"value":1386},"    \"optimize-autoloader\"",{"type":29,"tag":127,"props":1388,"children":1389},{"style":603},[1390],{"type":56,"value":620},{"type":29,"tag":127,"props":1392,"children":1393},{"style":941},[1394],{"type":56,"value":113},{"type":29,"tag":127,"props":1396,"children":1397},{"style":603},[1398],{"type":56,"value":631},{"type":29,"tag":127,"props":1400,"children":1402},{"class":598,"line":1401},53,[1403,1408,1412],{"type":29,"tag":127,"props":1404,"children":1405},{"style":612},[1406],{"type":56,"value":1407},"    \"sort-packages\"",{"type":29,"tag":127,"props":1409,"children":1410},{"style":603},[1411],{"type":56,"value":620},{"type":29,"tag":127,"props":1413,"children":1414},{"style":941},[1415],{"type":56,"value":944},{"type":29,"tag":127,"props":1417,"children":1419},{"class":598,"line":1418},54,[1420],{"type":29,"tag":127,"props":1421,"children":1422},{"style":603},[1423],{"type":56,"value":845},{"type":29,"tag":127,"props":1425,"children":1427},{"class":598,"line":1426},55,[1428,1433],{"type":29,"tag":127,"props":1429,"children":1430},{"style":612},[1431],{"type":56,"value":1432},"  \"scripts\"",{"type":29,"tag":127,"props":1434,"children":1435},{"style":603},[1436],{"type":56,"value":689},{"type":29,"tag":127,"props":1438,"children":1440},{"class":598,"line":1439},56,[1441,1446],{"type":29,"tag":127,"props":1442,"children":1443},{"style":612},[1444],{"type":56,"value":1445},"    \"auto-scripts\"",{"type":29,"tag":127,"props":1447,"children":1448},{"style":603},[1449],{"type":56,"value":689},{"type":29,"tag":127,"props":1451,"children":1453},{"class":598,"line":1452},57,[1454,1459,1463],{"type":29,"tag":127,"props":1455,"children":1456},{"style":612},[1457],{"type":56,"value":1458},"      \"assets:install\"",{"type":29,"tag":127,"props":1460,"children":1461},{"style":603},[1462],{"type":56,"value":620},{"type":29,"tag":127,"props":1464,"children":1465},{"style":623},[1466],{"type":56,"value":1467},"\"symfony-cmd\"\n",{"type":29,"tag":127,"props":1469,"children":1471},{"class":598,"line":1470},58,[1472],{"type":29,"tag":127,"props":1473,"children":1474},{"style":603},[1475],{"type":56,"value":962},{"type":29,"tag":127,"props":1477,"children":1479},{"class":598,"line":1478},59,[1480,1485],{"type":29,"tag":127,"props":1481,"children":1482},{"style":612},[1483],{"type":56,"value":1484},"    \"post-install-cmd\"",{"type":29,"tag":127,"props":1486,"children":1487},{"style":603},[1488],{"type":56,"value":859},{"type":29,"tag":127,"props":1490,"children":1492},{"class":598,"line":1491},60,[1493],{"type":29,"tag":127,"props":1494,"children":1495},{"style":623},[1496],{"type":56,"value":1497},"      \"@auto-scripts\"\n",{"type":29,"tag":127,"props":1499,"children":1501},{"class":598,"line":1500},61,[1502],{"type":29,"tag":127,"props":1503,"children":1504},{"style":603},[1505],{"type":56,"value":1506},"    ],\n",{"type":29,"tag":127,"props":1508,"children":1510},{"class":598,"line":1509},62,[1511,1516],{"type":29,"tag":127,"props":1512,"children":1513},{"style":612},[1514],{"type":56,"value":1515},"    \"post-update-cmd\"",{"type":29,"tag":127,"props":1517,"children":1518},{"style":603},[1519],{"type":56,"value":859},{"type":29,"tag":127,"props":1521,"children":1523},{"class":598,"line":1522},63,[1524],{"type":29,"tag":127,"props":1525,"children":1526},{"style":623},[1527],{"type":56,"value":1497},{"type":29,"tag":127,"props":1529,"children":1531},{"class":598,"line":1530},64,[1532],{"type":29,"tag":127,"props":1533,"children":1534},{"style":603},[1535],{"type":56,"value":1536},"    ]\n",{"type":29,"tag":127,"props":1538,"children":1540},{"class":598,"line":1539},65,[1541],{"type":29,"tag":127,"props":1542,"children":1543},{"style":603},[1544],{"type":56,"value":845},{"type":29,"tag":127,"props":1546,"children":1548},{"class":598,"line":1547},66,[1549,1554],{"type":29,"tag":127,"props":1550,"children":1551},{"style":612},[1552],{"type":56,"value":1553},"  \"extra\"",{"type":29,"tag":127,"props":1555,"children":1556},{"style":603},[1557],{"type":56,"value":689},{"type":29,"tag":127,"props":1559,"children":1561},{"class":598,"line":1560},67,[1562,1567],{"type":29,"tag":127,"props":1563,"children":1564},{"style":612},[1565],{"type":56,"value":1566},"    \"symfony\"",{"type":29,"tag":127,"props":1568,"children":1569},{"style":603},[1570],{"type":56,"value":689},{"type":29,"tag":127,"props":1572,"children":1574},{"class":598,"line":1573},68,[1575,1580,1584,1588],{"type":29,"tag":127,"props":1576,"children":1577},{"style":612},[1578],{"type":56,"value":1579},"      \"allow-contrib\"",{"type":29,"tag":127,"props":1581,"children":1582},{"style":603},[1583],{"type":56,"value":620},{"type":29,"tag":127,"props":1585,"children":1586},{"style":941},[1587],{"type":56,"value":113},{"type":29,"tag":127,"props":1589,"children":1590},{"style":603},[1591],{"type":56,"value":631},{"type":29,"tag":127,"props":1593,"children":1595},{"class":598,"line":1594},69,[1596,1601],{"type":29,"tag":127,"props":1597,"children":1598},{"style":612},[1599],{"type":56,"value":1600},"      \"endpoint\"",{"type":29,"tag":127,"props":1602,"children":1603},{"style":603},[1604],{"type":56,"value":859},{"type":29,"tag":127,"props":1606,"children":1608},{"class":598,"line":1607},70,[1609,1614],{"type":29,"tag":127,"props":1610,"children":1611},{"style":623},[1612],{"type":56,"value":1613},"        \"https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json\"",{"type":29,"tag":127,"props":1615,"children":1616},{"style":603},[1617],{"type":56,"value":631},{"type":29,"tag":127,"props":1619,"children":1621},{"class":598,"line":1620},71,[1622],{"type":29,"tag":127,"props":1623,"children":1624},{"style":623},[1625],{"type":56,"value":1626},"        \"flex://defaults\"\n",{"type":29,"tag":127,"props":1628,"children":1630},{"class":598,"line":1629},72,[1631],{"type":29,"tag":127,"props":1632,"children":1633},{"style":603},[1634],{"type":56,"value":1635},"      ]\n",{"type":29,"tag":127,"props":1637,"children":1639},{"class":598,"line":1638},73,[1640],{"type":29,"tag":127,"props":1641,"children":1642},{"style":603},[1643],{"type":56,"value":1204},{"type":29,"tag":127,"props":1645,"children":1647},{"class":598,"line":1646},74,[1648],{"type":29,"tag":127,"props":1649,"children":1650},{"style":603},[1651],{"type":56,"value":1652},"  }\n",{"type":29,"tag":127,"props":1654,"children":1656},{"class":598,"line":1655},75,[1657],{"type":29,"tag":127,"props":1658,"children":1659},{"style":603},[1660],{"type":56,"value":1661},"}\n",{"type":29,"tag":48,"props":1663,"children":1664},{},[1665],{"type":56,"value":1666},"and require it with",{"type":29,"tag":582,"props":1668,"children":1672},{"className":1669,"code":1670,"language":1671,"meta":7,"style":7},"language-shell shiki shiki-themes github-dark github-dark monokai","composer req acme/sample-plugin\n","shell",[1673],{"type":29,"tag":519,"props":1674,"children":1675},{"__ignoreMap":7},[1676],{"type":29,"tag":127,"props":1677,"children":1678},{"class":598,"line":599},[1679,1684,1690],{"type":29,"tag":127,"props":1680,"children":1682},{"style":1681},"--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E",[1683],{"type":56,"value":535},{"type":29,"tag":127,"props":1685,"children":1687},{"style":1686},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[1688],{"type":56,"value":1689}," req",{"type":29,"tag":127,"props":1691,"children":1692},{"style":1686},[1693],{"type":56,"value":1694}," acme/sample-plugin\n",{"type":29,"tag":1696,"props":1697,"children":1699},"v-alert",{"type":1698},"error",[1700],{"type":29,"tag":48,"props":1701,"children":1702},{},[1703],{"type":56,"value":1704},"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":29,"tag":1706,"props":1707,"children":1708},"br",{},[],{"type":29,"tag":48,"props":1710,"children":1711},{},[1712,1714,1720],{"type":56,"value":1713},"Yes... this is the downside. We need to use ",{"type":29,"tag":519,"props":1715,"children":1717},{"className":1716},[],[1718],{"type":56,"value":1719},"dev-master",{"type":56,"value":1721}," as a version",{"type":29,"tag":582,"props":1723,"children":1725},{"className":1669,"code":1724,"language":1671,"meta":7,"style":7},"composer req acme/sample-plugin:dev-master\n",[1726],{"type":29,"tag":519,"props":1727,"children":1728},{"__ignoreMap":7},[1729],{"type":29,"tag":127,"props":1730,"children":1731},{"class":598,"line":599},[1732,1736,1740],{"type":29,"tag":127,"props":1733,"children":1734},{"style":1681},[1735],{"type":56,"value":535},{"type":29,"tag":127,"props":1737,"children":1738},{"style":1686},[1739],{"type":56,"value":1689},{"type":29,"tag":127,"props":1741,"children":1742},{"style":1686},[1743],{"type":56,"value":1744}," acme/sample-plugin:dev-master\n",{"type":29,"tag":582,"props":1746,"children":1750},{"className":1747,"code":1748,"language":1749,"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",[1751],{"type":29,"tag":519,"props":1752,"children":1753},{"__ignoreMap":7},[1754,1762,1770,1778,1786,1794,1802,1810,1818,1826,1834,1842,1850,1859,1867,1874],{"type":29,"tag":127,"props":1755,"children":1756},{"class":598,"line":599},[1757],{"type":29,"tag":127,"props":1758,"children":1759},{},[1760],{"type":56,"value":1761},"./composer.json has been updated\n",{"type":29,"tag":127,"props":1763,"children":1764},{"class":598,"line":271},[1765],{"type":29,"tag":127,"props":1766,"children":1767},{},[1768],{"type":56,"value":1769},"Running composer update acme/sample-plugin\n",{"type":29,"tag":127,"props":1771,"children":1772},{"class":598,"line":634},[1773],{"type":29,"tag":127,"props":1774,"children":1775},{},[1776],{"type":56,"value":1777},"Loading composer repositories with package information                                                                \n",{"type":29,"tag":127,"props":1779,"children":1780},{"class":598,"line":656},[1781],{"type":29,"tag":127,"props":1782,"children":1783},{},[1784],{"type":56,"value":1785},"Updating dependencies                                 \n",{"type":29,"tag":127,"props":1787,"children":1788},{"class":598,"line":678},[1789],{"type":29,"tag":127,"props":1790,"children":1791},{},[1792],{"type":56,"value":1793},"Lock file operations: 1 install, 0 updates, 0 removals\n",{"type":29,"tag":127,"props":1795,"children":1796},{"class":598,"line":692},[1797],{"type":29,"tag":127,"props":1798,"children":1799},{},[1800],{"type":56,"value":1801},"  - Locking acme/sample-plugin (dev-master 294414d)\n",{"type":29,"tag":127,"props":1803,"children":1804},{"class":598,"line":714},[1805],{"type":29,"tag":127,"props":1806,"children":1807},{},[1808],{"type":56,"value":1809},"Writing lock file\n",{"type":29,"tag":127,"props":1811,"children":1812},{"class":598,"line":736},[1813],{"type":29,"tag":127,"props":1814,"children":1815},{},[1816],{"type":56,"value":1817},"Installing dependencies from lock file (including require-dev)\n",{"type":29,"tag":127,"props":1819,"children":1820},{"class":598,"line":758},[1821],{"type":29,"tag":127,"props":1822,"children":1823},{},[1824],{"type":56,"value":1825},"Package operations: 1 install, 0 updates, 0 removals\n",{"type":29,"tag":127,"props":1827,"children":1828},{"class":598,"line":780},[1829],{"type":29,"tag":127,"props":1830,"children":1831},{},[1832],{"type":56,"value":1833},"  - Syncing acme/sample-plugin (dev-master 294414d) into cache\n",{"type":29,"tag":127,"props":1835,"children":1836},{"class":598,"line":801},[1837],{"type":29,"tag":127,"props":1838,"children":1839},{},[1840],{"type":56,"value":1841},"  - Installing acme/sample-plugin (dev-master 294414d): Cloning 294414deb2 from cache\n",{"type":29,"tag":127,"props":1843,"children":1844},{"class":598,"line":118},[1845],{"type":29,"tag":127,"props":1846,"children":1847},{},[1848],{"type":56,"value":1849},"Generating optimized autoload files\n",{"type":29,"tag":127,"props":1851,"children":1852},{"class":598,"line":839},[1853],{"type":29,"tag":127,"props":1854,"children":1856},{"emptyLinePlaceholder":1855},true,[1857],{"type":56,"value":1858},"\n",{"type":29,"tag":127,"props":1860,"children":1861},{"class":598,"line":848},[1862],{"type":29,"tag":127,"props":1863,"children":1864},{},[1865],{"type":56,"value":1866},"Run composer recipes at any time to see the status of your Symfony recipes.\n",{"type":29,"tag":127,"props":1868,"children":1869},{"class":598,"line":862},[1870],{"type":29,"tag":127,"props":1871,"children":1872},{"emptyLinePlaceholder":1855},[1873],{"type":56,"value":1858},{"type":29,"tag":127,"props":1875,"children":1876},{"class":598,"line":871},[1877],{"type":29,"tag":127,"props":1878,"children":1879},{},[1880],{"type":56,"value":1881},"Executing script assets:install [OK]\n",{"type":29,"tag":48,"props":1883,"children":1884},{},[1885,1887,1893],{"type":56,"value":1886},"Composer will use ",{"type":29,"tag":519,"props":1888,"children":1890},{"className":1889},[],[1891],{"type":56,"value":1892},"git",{"type":56,"value":1894}," to clone our repo and use the default branch and the commit hash to track the release.",{"type":29,"tag":48,"props":1896,"children":1897},{},[1898],{"type":56,"value":1899},"This works, but we can do better.",{"type":29,"tag":122,"props":1901,"children":1903},{"id":1902},"git-tags",[1904],{"type":56,"value":1905},"Git tags",{"type":29,"tag":48,"props":1907,"children":1908},{},[1909,1911,1917],{"type":56,"value":1910},"Let's tag our plugin with ",{"type":29,"tag":519,"props":1912,"children":1914},{"className":1913},[],[1915],{"type":56,"value":1916},"v1.0.0",{"type":56,"value":497},{"type":29,"tag":48,"props":1919,"children":1920},{},[1921,1923,1929,1931,1937],{"type":56,"value":1922},"Make sure to set the ",{"type":29,"tag":519,"props":1924,"children":1926},{"className":1925},[],[1927],{"type":56,"value":1928},"version",{"type":56,"value":1930}," in ",{"type":29,"tag":519,"props":1932,"children":1934},{"className":1933},[],[1935],{"type":56,"value":1936},"composer.json",{"type":56,"value":497},{"type":29,"tag":582,"props":1939,"children":1943},{"className":584,"code":1940,"filename":1941,"highlights":1942,"language":384,"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",[678],[1944],{"type":29,"tag":519,"props":1945,"children":1946},{"__ignoreMap":7},[1947,1954,1975,1995,2016,2038,2058,2070,2087,2094,2106,2136,2148,2169,2186,2194,2201,2213,2225,2249,2256,2263,2275,2286,2319,2326,2333],{"type":29,"tag":127,"props":1948,"children":1949},{"class":598,"line":599},[1950],{"type":29,"tag":127,"props":1951,"children":1952},{"style":603},[1953],{"type":56,"value":606},{"type":29,"tag":127,"props":1955,"children":1956},{"class":598,"line":271},[1957,1962,1966,1971],{"type":29,"tag":127,"props":1958,"children":1959},{"style":612},[1960],{"type":56,"value":1961},"    \"name\"",{"type":29,"tag":127,"props":1963,"children":1964},{"style":603},[1965],{"type":56,"value":620},{"type":29,"tag":127,"props":1967,"children":1968},{"style":623},[1969],{"type":56,"value":1970},"\"acme/sample-plugin\"",{"type":29,"tag":127,"props":1972,"children":1973},{"style":603},[1974],{"type":56,"value":631},{"type":29,"tag":127,"props":1976,"children":1977},{"class":598,"line":634},[1978,1983,1987,1991],{"type":29,"tag":127,"props":1979,"children":1980},{"style":612},[1981],{"type":56,"value":1982},"    \"description\"",{"type":29,"tag":127,"props":1984,"children":1985},{"style":603},[1986],{"type":56,"value":620},{"type":29,"tag":127,"props":1988,"children":1989},{"style":623},[1990],{"type":56,"value":1970},{"type":29,"tag":127,"props":1992,"children":1993},{"style":603},[1994],{"type":56,"value":631},{"type":29,"tag":127,"props":1996,"children":1997},{"class":598,"line":656},[1998,2003,2007,2012],{"type":29,"tag":127,"props":1999,"children":2000},{"style":612},[2001],{"type":56,"value":2002},"    \"type\"",{"type":29,"tag":127,"props":2004,"children":2005},{"style":603},[2006],{"type":56,"value":620},{"type":29,"tag":127,"props":2008,"children":2009},{"style":623},[2010],{"type":56,"value":2011},"\"shopware-platform-plugin\"",{"type":29,"tag":127,"props":2013,"children":2014},{"style":603},[2015],{"type":56,"value":631},{"type":29,"tag":127,"props":2017,"children":2019},{"class":2018,"line":678},[598,1152],[2020,2025,2029,2034],{"type":29,"tag":127,"props":2021,"children":2022},{"style":612},[2023],{"type":56,"value":2024},"    \"version\"",{"type":29,"tag":127,"props":2026,"children":2027},{"style":603},[2028],{"type":56,"value":620},{"type":29,"tag":127,"props":2030,"children":2031},{"style":623},[2032],{"type":56,"value":2033},"\"1.0.0\"",{"type":29,"tag":127,"props":2035,"children":2036},{"style":603},[2037],{"type":56,"value":631},{"type":29,"tag":127,"props":2039,"children":2040},{"class":598,"line":692},[2041,2046,2050,2054],{"type":29,"tag":127,"props":2042,"children":2043},{"style":612},[2044],{"type":56,"value":2045},"    \"license\"",{"type":29,"tag":127,"props":2047,"children":2048},{"style":603},[2049],{"type":56,"value":620},{"type":29,"tag":127,"props":2051,"children":2052},{"style":623},[2053],{"type":56,"value":649},{"type":29,"tag":127,"props":2055,"children":2056},{"style":603},[2057],{"type":56,"value":631},{"type":29,"tag":127,"props":2059,"children":2060},{"class":598,"line":714},[2061,2066],{"type":29,"tag":127,"props":2062,"children":2063},{"style":612},[2064],{"type":56,"value":2065},"    \"require\"",{"type":29,"tag":127,"props":2067,"children":2068},{"style":603},[2069],{"type":56,"value":689},{"type":29,"tag":127,"props":2071,"children":2072},{"class":598,"line":736},[2073,2078,2082],{"type":29,"tag":127,"props":2074,"children":2075},{"style":612},[2076],{"type":56,"value":2077},"        \"shopware/core\"",{"type":29,"tag":127,"props":2079,"children":2080},{"style":603},[2081],{"type":56,"value":620},{"type":29,"tag":127,"props":2083,"children":2084},{"style":623},[2085],{"type":56,"value":2086},"\"~6.6.0\"\n",{"type":29,"tag":127,"props":2088,"children":2089},{"class":598,"line":758},[2090],{"type":29,"tag":127,"props":2091,"children":2092},{"style":603},[2093],{"type":56,"value":962},{"type":29,"tag":127,"props":2095,"children":2096},{"class":598,"line":780},[2097,2102],{"type":29,"tag":127,"props":2098,"children":2099},{"style":612},[2100],{"type":56,"value":2101},"    \"extra\"",{"type":29,"tag":127,"props":2103,"children":2104},{"style":603},[2105],{"type":56,"value":689},{"type":29,"tag":127,"props":2107,"children":2108},{"class":598,"line":801},[2109,2114,2118,2123,2127,2132],{"type":29,"tag":127,"props":2110,"children":2111},{"style":612},[2112],{"type":56,"value":2113},"        \"shopware-plugin-class\"",{"type":29,"tag":127,"props":2115,"children":2116},{"style":603},[2117],{"type":56,"value":620},{"type":29,"tag":127,"props":2119,"children":2120},{"style":623},[2121],{"type":56,"value":2122},"\"Acme",{"type":29,"tag":127,"props":2124,"children":2125},{"style":941},[2126],{"type":56,"value":1254},{"type":29,"tag":127,"props":2128,"children":2129},{"style":623},[2130],{"type":56,"value":2131},"SamplePlugin\"",{"type":29,"tag":127,"props":2133,"children":2134},{"style":603},[2135],{"type":56,"value":631},{"type":29,"tag":127,"props":2137,"children":2138},{"class":598,"line":118},[2139,2144],{"type":29,"tag":127,"props":2140,"children":2141},{"style":612},[2142],{"type":56,"value":2143},"        \"label\"",{"type":29,"tag":127,"props":2145,"children":2146},{"style":603},[2147],{"type":56,"value":689},{"type":29,"tag":127,"props":2149,"children":2150},{"class":598,"line":839},[2151,2156,2160,2165],{"type":29,"tag":127,"props":2152,"children":2153},{"style":612},[2154],{"type":56,"value":2155},"            \"de-DE\"",{"type":29,"tag":127,"props":2157,"children":2158},{"style":603},[2159],{"type":56,"value":620},{"type":29,"tag":127,"props":2161,"children":2162},{"style":623},[2163],{"type":56,"value":2164},"\"Skeleton plugin\"",{"type":29,"tag":127,"props":2166,"children":2167},{"style":603},[2168],{"type":56,"value":631},{"type":29,"tag":127,"props":2170,"children":2171},{"class":598,"line":848},[2172,2177,2181],{"type":29,"tag":127,"props":2173,"children":2174},{"style":612},[2175],{"type":56,"value":2176},"            \"en-GB\"",{"type":29,"tag":127,"props":2178,"children":2179},{"style":603},[2180],{"type":56,"value":620},{"type":29,"tag":127,"props":2182,"children":2183},{"style":623},[2184],{"type":56,"value":2185},"\"Skeleton plugin\"\n",{"type":29,"tag":127,"props":2187,"children":2188},{"class":598,"line":862},[2189],{"type":29,"tag":127,"props":2190,"children":2191},{"style":603},[2192],{"type":56,"value":2193},"        }\n",{"type":29,"tag":127,"props":2195,"children":2196},{"class":598,"line":871},[2197],{"type":29,"tag":127,"props":2198,"children":2199},{"style":603},[2200],{"type":56,"value":962},{"type":29,"tag":127,"props":2202,"children":2203},{"class":598,"line":893},[2204,2209],{"type":29,"tag":127,"props":2205,"children":2206},{"style":612},[2207],{"type":56,"value":2208},"    \"autoload\"",{"type":29,"tag":127,"props":2210,"children":2211},{"style":603},[2212],{"type":56,"value":689},{"type":29,"tag":127,"props":2214,"children":2215},{"class":598,"line":915},[2216,2221],{"type":29,"tag":127,"props":2217,"children":2218},{"style":612},[2219],{"type":56,"value":2220},"        \"psr-4\"",{"type":29,"tag":127,"props":2222,"children":2223},{"style":603},[2224],{"type":56,"value":689},{"type":29,"tag":127,"props":2226,"children":2227},{"class":598,"line":928},[2228,2233,2237,2241,2245],{"type":29,"tag":127,"props":2229,"children":2230},{"style":612},[2231],{"type":56,"value":2232},"            \"Acme",{"type":29,"tag":127,"props":2234,"children":2235},{"style":1251},[2236],{"type":56,"value":1254},{"type":29,"tag":127,"props":2238,"children":2239},{"style":612},[2240],{"type":56,"value":1259},{"type":29,"tag":127,"props":2242,"children":2243},{"style":603},[2244],{"type":56,"value":620},{"type":29,"tag":127,"props":2246,"children":2247},{"style":623},[2248],{"type":56,"value":1268},{"type":29,"tag":127,"props":2250,"children":2251},{"class":598,"line":947},[2252],{"type":29,"tag":127,"props":2253,"children":2254},{"style":603},[2255],{"type":56,"value":2193},{"type":29,"tag":127,"props":2257,"children":2258},{"class":598,"line":956},[2259],{"type":29,"tag":127,"props":2260,"children":2261},{"style":603},[2262],{"type":56,"value":962},{"type":29,"tag":127,"props":2264,"children":2265},{"class":598,"line":965},[2266,2271],{"type":29,"tag":127,"props":2267,"children":2268},{"style":612},[2269],{"type":56,"value":2270},"    \"autoload-dev\"",{"type":29,"tag":127,"props":2272,"children":2273},{"style":603},[2274],{"type":56,"value":689},{"type":29,"tag":127,"props":2276,"children":2277},{"class":598,"line":973},[2278,2282],{"type":29,"tag":127,"props":2279,"children":2280},{"style":612},[2281],{"type":56,"value":2220},{"type":29,"tag":127,"props":2283,"children":2284},{"style":603},[2285],{"type":56,"value":689},{"type":29,"tag":127,"props":2287,"children":2288},{"class":598,"line":993},[2289,2293,2297,2302,2306,2310,2314],{"type":29,"tag":127,"props":2290,"children":2291},{"style":612},[2292],{"type":56,"value":2232},{"type":29,"tag":127,"props":2294,"children":2295},{"style":1251},[2296],{"type":56,"value":1254},{"type":29,"tag":127,"props":2298,"children":2299},{"style":612},[2300],{"type":56,"value":2301},"Tests",{"type":29,"tag":127,"props":2303,"children":2304},{"style":1251},[2305],{"type":56,"value":1254},{"type":29,"tag":127,"props":2307,"children":2308},{"style":612},[2309],{"type":56,"value":1259},{"type":29,"tag":127,"props":2311,"children":2312},{"style":603},[2313],{"type":56,"value":620},{"type":29,"tag":127,"props":2315,"children":2316},{"style":623},[2317],{"type":56,"value":2318},"\"tests/\"\n",{"type":29,"tag":127,"props":2320,"children":2321},{"class":598,"line":1014},[2322],{"type":29,"tag":127,"props":2323,"children":2324},{"style":603},[2325],{"type":56,"value":2193},{"type":29,"tag":127,"props":2327,"children":2328},{"class":598,"line":1026},[2329],{"type":29,"tag":127,"props":2330,"children":2331},{"style":603},[2332],{"type":56,"value":1204},{"type":29,"tag":127,"props":2334,"children":2335},{"class":598,"line":1042},[2336],{"type":29,"tag":127,"props":2337,"children":2338},{"style":603},[2339],{"type":56,"value":1661},{"type":29,"tag":582,"props":2341,"children":2343},{"className":1669,"code":2342,"language":1671,"meta":7,"style":7},"git tag v1.0.0\ngit push --tags\n",[2344],{"type":29,"tag":519,"props":2345,"children":2346},{"__ignoreMap":7},[2347,2364],{"type":29,"tag":127,"props":2348,"children":2349},{"class":598,"line":599},[2350,2354,2359],{"type":29,"tag":127,"props":2351,"children":2352},{"style":1681},[2353],{"type":56,"value":1892},{"type":29,"tag":127,"props":2355,"children":2356},{"style":1686},[2357],{"type":56,"value":2358}," tag",{"type":29,"tag":127,"props":2360,"children":2361},{"style":1686},[2362],{"type":56,"value":2363}," v1.0.0\n",{"type":29,"tag":127,"props":2365,"children":2366},{"class":598,"line":271},[2367,2371,2376],{"type":29,"tag":127,"props":2368,"children":2369},{"style":1681},[2370],{"type":56,"value":1892},{"type":29,"tag":127,"props":2372,"children":2373},{"style":1686},[2374],{"type":56,"value":2375}," push",{"type":29,"tag":127,"props":2377,"children":2378},{"style":941},[2379],{"type":56,"value":2380}," --tags\n",{"type":29,"tag":48,"props":2382,"children":2383},{},[2384],{"type":56,"value":2385},"Now this will work:",{"type":29,"tag":582,"props":2387,"children":2388},{"className":1669,"code":1670,"language":1671,"meta":7,"style":7},[2389],{"type":29,"tag":519,"props":2390,"children":2391},{"__ignoreMap":7},[2392],{"type":29,"tag":127,"props":2393,"children":2394},{"class":598,"line":599},[2395,2399,2403],{"type":29,"tag":127,"props":2396,"children":2397},{"style":1681},[2398],{"type":56,"value":535},{"type":29,"tag":127,"props":2400,"children":2401},{"style":1686},[2402],{"type":56,"value":1689},{"type":29,"tag":127,"props":2404,"children":2405},{"style":1686},[2406],{"type":56,"value":1694},{"type":29,"tag":582,"props":2408,"children":2412},{"className":2409,"code":2410,"language":2411,"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",[2413],{"type":29,"tag":519,"props":2414,"children":2415},{"__ignoreMap":7},[2416,2424,2431,2439,2447,2454,2462,2469,2476,2483,2491,2499,2506,2513,2520,2527,2534,2541],{"type":29,"tag":127,"props":2417,"children":2418},{"class":598,"line":599},[2419],{"type":29,"tag":127,"props":2420,"children":2421},{},[2422],{"type":56,"value":2423},"./composer.json has been updated                                                                                                            \n",{"type":29,"tag":127,"props":2425,"children":2426},{"class":598,"line":271},[2427],{"type":29,"tag":127,"props":2428,"children":2429},{},[2430],{"type":56,"value":1769},{"type":29,"tag":127,"props":2432,"children":2433},{"class":598,"line":634},[2434],{"type":29,"tag":127,"props":2435,"children":2436},{},[2437],{"type":56,"value":2438},"Loading composer repositories with package information\n",{"type":29,"tag":127,"props":2440,"children":2441},{"class":598,"line":656},[2442],{"type":29,"tag":127,"props":2443,"children":2444},{},[2445],{"type":56,"value":2446},"Updating dependencies\n",{"type":29,"tag":127,"props":2448,"children":2449},{"class":598,"line":678},[2450],{"type":29,"tag":127,"props":2451,"children":2452},{},[2453],{"type":56,"value":1793},{"type":29,"tag":127,"props":2455,"children":2456},{"class":598,"line":692},[2457],{"type":29,"tag":127,"props":2458,"children":2459},{},[2460],{"type":56,"value":2461},"  - Locking acme/sample-plugin (1.0.0)\n",{"type":29,"tag":127,"props":2463,"children":2464},{"class":598,"line":714},[2465],{"type":29,"tag":127,"props":2466,"children":2467},{},[2468],{"type":56,"value":1809},{"type":29,"tag":127,"props":2470,"children":2471},{"class":598,"line":736},[2472],{"type":29,"tag":127,"props":2473,"children":2474},{},[2475],{"type":56,"value":1817},{"type":29,"tag":127,"props":2477,"children":2478},{"class":598,"line":758},[2479],{"type":29,"tag":127,"props":2480,"children":2481},{},[2482],{"type":56,"value":1825},{"type":29,"tag":127,"props":2484,"children":2485},{"class":598,"line":780},[2486],{"type":29,"tag":127,"props":2487,"children":2488},{},[2489],{"type":56,"value":2490},"  - Syncing acme/sample-plugin (1.0.0) into cache\n",{"type":29,"tag":127,"props":2492,"children":2493},{"class":598,"line":801},[2494],{"type":29,"tag":127,"props":2495,"children":2496},{},[2497],{"type":56,"value":2498},"  - Installing acme/sample-plugin (1.0.0): Cloning 294414deb2 from cache\n",{"type":29,"tag":127,"props":2500,"children":2501},{"class":598,"line":118},[2502],{"type":29,"tag":127,"props":2503,"children":2504},{},[2505],{"type":56,"value":1849},{"type":29,"tag":127,"props":2507,"children":2508},{"class":598,"line":839},[2509],{"type":29,"tag":127,"props":2510,"children":2511},{"emptyLinePlaceholder":1855},[2512],{"type":56,"value":1858},{"type":29,"tag":127,"props":2514,"children":2515},{"class":598,"line":848},[2516],{"type":29,"tag":127,"props":2517,"children":2518},{},[2519],{"type":56,"value":1866},{"type":29,"tag":127,"props":2521,"children":2522},{"class":598,"line":862},[2523],{"type":29,"tag":127,"props":2524,"children":2525},{"emptyLinePlaceholder":1855},[2526],{"type":56,"value":1858},{"type":29,"tag":127,"props":2528,"children":2529},{"class":598,"line":871},[2530],{"type":29,"tag":127,"props":2531,"children":2532},{},[2533],{"type":56,"value":1881},{"type":29,"tag":127,"props":2535,"children":2536},{"class":598,"line":893},[2537],{"type":29,"tag":127,"props":2538,"children":2539},{"emptyLinePlaceholder":1855},[2540],{"type":56,"value":1858},{"type":29,"tag":127,"props":2542,"children":2543},{"class":598,"line":915},[2544],{"type":29,"tag":127,"props":2545,"children":2546},{},[2547],{"type":56,"value":2548},"Using version ^1.0 for acme/sample-plugin\n",{"type":29,"tag":48,"props":2550,"children":2551},{},[2552,2554,2559],{"type":56,"value":2553},"This is better, but we are still using ",{"type":29,"tag":519,"props":2555,"children":2557},{"className":2556},[],[2558],{"type":56,"value":1892},{"type":56,"value":2560}," to fetch the plugin. We can do better.",{"type":29,"tag":122,"props":2562,"children":2564},{"id":2563},"gitlab-package-registry",[2565],{"type":56,"value":2566},"GitLab Package registry",{"type":29,"tag":48,"props":2568,"children":2569},{},[2570,2572,2577],{"type":56,"value":2571},"Here is where the GitLab part starts. For more details refer to the ",{"type":29,"tag":490,"props":2573,"children":2575},{"href":2574},"https://docs.gitlab.com/18.3/user/packages/composer_repository/",[2576],{"type":56,"value":495},{"type":56,"value":497},{"type":29,"tag":48,"props":2579,"children":2580},{},[2581],{"type":56,"value":2582},"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":29,"tag":48,"props":2584,"children":2585},{},[2586,2588,2593],{"type":56,"value":2587},"Let's release our ",{"type":29,"tag":519,"props":2589,"children":2591},{"className":2590},[],[2592],{"type":56,"value":1916},{"type":56,"value":2594}," tag as a composer package.",{"type":29,"tag":582,"props":2596,"children":2598},{"className":1669,"code":2597,"language":1671,"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",[2599],{"type":29,"tag":519,"props":2600,"children":2601},{"__ignoreMap":7},[2602],{"type":29,"tag":127,"props":2603,"children":2604},{"class":598,"line":599},[2605,2610,2615,2620,2625],{"type":29,"tag":127,"props":2606,"children":2607},{"style":1681},[2608],{"type":56,"value":2609},"curl",{"type":29,"tag":127,"props":2611,"children":2612},{"style":941},[2613],{"type":56,"value":2614}," --fail-with-body",{"type":29,"tag":127,"props":2616,"children":2617},{"style":941},[2618],{"type":56,"value":2619}," --data",{"type":29,"tag":127,"props":2621,"children":2622},{"style":1686},[2623],{"type":56,"value":2624}," tag=v1.0.0",{"type":29,"tag":127,"props":2626,"children":2627},{"style":1686},[2628],{"type":56,"value":2629}," \"https://__token__:\u003Cpersonal-access-token>@\u003CDOMAIN-NAME>/api/v4/projects/\u003Cproject_id>/packages/composer\"\n",{"type":29,"tag":48,"props":2631,"children":2632},{},[2633],{"type":56,"value":2634},"Now we need to update the repository information:",{"type":29,"tag":582,"props":2636,"children":2639},{"className":584,"code":2637,"filename":586,"highlights":2638,"language":384,"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",[588,589,590,591],[2640],{"type":29,"tag":519,"props":2641,"children":2642},{"__ignoreMap":7},[2643,2650,2669,2688,2707,2718,2737,2756,2775,2794,2813,2832,2847,2854,2865,2872,2891,2910,2921,2936,2943,2950,2957,2976,2995,3006,3021,3028,3035,3042,3061,3080,3091,3106,3113,3120,3128,3149,3166,3174,3181,3192,3203,3226,3233,3240,3259,3270,3281,3300,3315,3322,3341,3356,3363,3374,3385,3400,3407,3418,3425,3432,3443,3450,3457,3464,3475,3486,3505,3516,3527,3534,3541,3548,3555],{"type":29,"tag":127,"props":2644,"children":2645},{"class":598,"line":599},[2646],{"type":29,"tag":127,"props":2647,"children":2648},{"style":603},[2649],{"type":56,"value":606},{"type":29,"tag":127,"props":2651,"children":2652},{"class":598,"line":271},[2653,2657,2661,2665],{"type":29,"tag":127,"props":2654,"children":2655},{"style":612},[2656],{"type":56,"value":615},{"type":29,"tag":127,"props":2658,"children":2659},{"style":603},[2660],{"type":56,"value":620},{"type":29,"tag":127,"props":2662,"children":2663},{"style":623},[2664],{"type":56,"value":626},{"type":29,"tag":127,"props":2666,"children":2667},{"style":603},[2668],{"type":56,"value":631},{"type":29,"tag":127,"props":2670,"children":2671},{"class":598,"line":634},[2672,2676,2680,2684],{"type":29,"tag":127,"props":2673,"children":2674},{"style":612},[2675],{"type":56,"value":640},{"type":29,"tag":127,"props":2677,"children":2678},{"style":603},[2679],{"type":56,"value":620},{"type":29,"tag":127,"props":2681,"children":2682},{"style":623},[2683],{"type":56,"value":649},{"type":29,"tag":127,"props":2685,"children":2686},{"style":603},[2687],{"type":56,"value":631},{"type":29,"tag":127,"props":2689,"children":2690},{"class":598,"line":656},[2691,2695,2699,2703],{"type":29,"tag":127,"props":2692,"children":2693},{"style":612},[2694],{"type":56,"value":662},{"type":29,"tag":127,"props":2696,"children":2697},{"style":603},[2698],{"type":56,"value":620},{"type":29,"tag":127,"props":2700,"children":2701},{"style":623},[2702],{"type":56,"value":671},{"type":29,"tag":127,"props":2704,"children":2705},{"style":603},[2706],{"type":56,"value":631},{"type":29,"tag":127,"props":2708,"children":2709},{"class":598,"line":678},[2710,2714],{"type":29,"tag":127,"props":2711,"children":2712},{"style":612},[2713],{"type":56,"value":684},{"type":29,"tag":127,"props":2715,"children":2716},{"style":603},[2717],{"type":56,"value":689},{"type":29,"tag":127,"props":2719,"children":2720},{"class":598,"line":692},[2721,2725,2729,2733],{"type":29,"tag":127,"props":2722,"children":2723},{"style":612},[2724],{"type":56,"value":698},{"type":29,"tag":127,"props":2726,"children":2727},{"style":603},[2728],{"type":56,"value":620},{"type":29,"tag":127,"props":2730,"children":2731},{"style":623},[2732],{"type":56,"value":707},{"type":29,"tag":127,"props":2734,"children":2735},{"style":603},[2736],{"type":56,"value":631},{"type":29,"tag":127,"props":2738,"children":2739},{"class":598,"line":714},[2740,2744,2748,2752],{"type":29,"tag":127,"props":2741,"children":2742},{"style":612},[2743],{"type":56,"value":720},{"type":29,"tag":127,"props":2745,"children":2746},{"style":603},[2747],{"type":56,"value":620},{"type":29,"tag":127,"props":2749,"children":2750},{"style":623},[2751],{"type":56,"value":729},{"type":29,"tag":127,"props":2753,"children":2754},{"style":603},[2755],{"type":56,"value":631},{"type":29,"tag":127,"props":2757,"children":2758},{"class":598,"line":736},[2759,2763,2767,2771],{"type":29,"tag":127,"props":2760,"children":2761},{"style":612},[2762],{"type":56,"value":742},{"type":29,"tag":127,"props":2764,"children":2765},{"style":603},[2766],{"type":56,"value":620},{"type":29,"tag":127,"props":2768,"children":2769},{"style":623},[2770],{"type":56,"value":751},{"type":29,"tag":127,"props":2772,"children":2773},{"style":603},[2774],{"type":56,"value":631},{"type":29,"tag":127,"props":2776,"children":2777},{"class":598,"line":758},[2778,2782,2786,2790],{"type":29,"tag":127,"props":2779,"children":2780},{"style":612},[2781],{"type":56,"value":764},{"type":29,"tag":127,"props":2783,"children":2784},{"style":603},[2785],{"type":56,"value":620},{"type":29,"tag":127,"props":2787,"children":2788},{"style":623},[2789],{"type":56,"value":773},{"type":29,"tag":127,"props":2791,"children":2792},{"style":603},[2793],{"type":56,"value":631},{"type":29,"tag":127,"props":2795,"children":2796},{"class":598,"line":780},[2797,2801,2805,2809],{"type":29,"tag":127,"props":2798,"children":2799},{"style":612},[2800],{"type":56,"value":786},{"type":29,"tag":127,"props":2802,"children":2803},{"style":603},[2804],{"type":56,"value":620},{"type":29,"tag":127,"props":2806,"children":2807},{"style":623},[2808],{"type":56,"value":751},{"type":29,"tag":127,"props":2810,"children":2811},{"style":603},[2812],{"type":56,"value":631},{"type":29,"tag":127,"props":2814,"children":2815},{"class":598,"line":801},[2816,2820,2824,2828],{"type":29,"tag":127,"props":2817,"children":2818},{"style":612},[2819],{"type":56,"value":807},{"type":29,"tag":127,"props":2821,"children":2822},{"style":603},[2823],{"type":56,"value":620},{"type":29,"tag":127,"props":2825,"children":2826},{"style":623},[2827],{"type":56,"value":751},{"type":29,"tag":127,"props":2829,"children":2830},{"style":603},[2831],{"type":56,"value":631},{"type":29,"tag":127,"props":2833,"children":2834},{"class":598,"line":118},[2835,2839,2843],{"type":29,"tag":127,"props":2836,"children":2837},{"style":612},[2838],{"type":56,"value":827},{"type":29,"tag":127,"props":2840,"children":2841},{"style":603},[2842],{"type":56,"value":620},{"type":29,"tag":127,"props":2844,"children":2845},{"style":623},[2846],{"type":56,"value":836},{"type":29,"tag":127,"props":2848,"children":2849},{"class":598,"line":839},[2850],{"type":29,"tag":127,"props":2851,"children":2852},{"style":603},[2853],{"type":56,"value":845},{"type":29,"tag":127,"props":2855,"children":2856},{"class":598,"line":848},[2857,2861],{"type":29,"tag":127,"props":2858,"children":2859},{"style":612},[2860],{"type":56,"value":854},{"type":29,"tag":127,"props":2862,"children":2863},{"style":603},[2864],{"type":56,"value":859},{"type":29,"tag":127,"props":2866,"children":2867},{"class":598,"line":862},[2868],{"type":29,"tag":127,"props":2869,"children":2870},{"style":603},[2871],{"type":56,"value":868},{"type":29,"tag":127,"props":2873,"children":2874},{"class":598,"line":871},[2875,2879,2883,2887],{"type":29,"tag":127,"props":2876,"children":2877},{"style":612},[2878],{"type":56,"value":877},{"type":29,"tag":127,"props":2880,"children":2881},{"style":603},[2882],{"type":56,"value":620},{"type":29,"tag":127,"props":2884,"children":2885},{"style":623},[2886],{"type":56,"value":886},{"type":29,"tag":127,"props":2888,"children":2889},{"style":603},[2890],{"type":56,"value":631},{"type":29,"tag":127,"props":2892,"children":2893},{"class":598,"line":893},[2894,2898,2902,2906],{"type":29,"tag":127,"props":2895,"children":2896},{"style":612},[2897],{"type":56,"value":899},{"type":29,"tag":127,"props":2899,"children":2900},{"style":603},[2901],{"type":56,"value":620},{"type":29,"tag":127,"props":2903,"children":2904},{"style":623},[2905],{"type":56,"value":908},{"type":29,"tag":127,"props":2907,"children":2908},{"style":603},[2909],{"type":56,"value":631},{"type":29,"tag":127,"props":2911,"children":2912},{"class":598,"line":915},[2913,2917],{"type":29,"tag":127,"props":2914,"children":2915},{"style":612},[2916],{"type":56,"value":921},{"type":29,"tag":127,"props":2918,"children":2919},{"style":603},[2920],{"type":56,"value":689},{"type":29,"tag":127,"props":2922,"children":2923},{"class":598,"line":928},[2924,2928,2932],{"type":29,"tag":127,"props":2925,"children":2926},{"style":612},[2927],{"type":56,"value":934},{"type":29,"tag":127,"props":2929,"children":2930},{"style":603},[2931],{"type":56,"value":620},{"type":29,"tag":127,"props":2933,"children":2934},{"style":941},[2935],{"type":56,"value":944},{"type":29,"tag":127,"props":2937,"children":2938},{"class":598,"line":947},[2939],{"type":29,"tag":127,"props":2940,"children":2941},{"style":603},[2942],{"type":56,"value":953},{"type":29,"tag":127,"props":2944,"children":2945},{"class":598,"line":956},[2946],{"type":29,"tag":127,"props":2947,"children":2948},{"style":603},[2949],{"type":56,"value":962},{"type":29,"tag":127,"props":2951,"children":2952},{"class":598,"line":965},[2953],{"type":29,"tag":127,"props":2954,"children":2955},{"style":603},[2956],{"type":56,"value":868},{"type":29,"tag":127,"props":2958,"children":2959},{"class":598,"line":973},[2960,2964,2968,2972],{"type":29,"tag":127,"props":2961,"children":2962},{"style":612},[2963],{"type":56,"value":877},{"type":29,"tag":127,"props":2965,"children":2966},{"style":603},[2967],{"type":56,"value":620},{"type":29,"tag":127,"props":2969,"children":2970},{"style":623},[2971],{"type":56,"value":886},{"type":29,"tag":127,"props":2973,"children":2974},{"style":603},[2975],{"type":56,"value":631},{"type":29,"tag":127,"props":2977,"children":2978},{"class":598,"line":993},[2979,2983,2987,2991],{"type":29,"tag":127,"props":2980,"children":2981},{"style":612},[2982],{"type":56,"value":899},{"type":29,"tag":127,"props":2984,"children":2985},{"style":603},[2986],{"type":56,"value":620},{"type":29,"tag":127,"props":2988,"children":2989},{"style":623},[2990],{"type":56,"value":1007},{"type":29,"tag":127,"props":2992,"children":2993},{"style":603},[2994],{"type":56,"value":631},{"type":29,"tag":127,"props":2996,"children":2997},{"class":598,"line":1014},[2998,3002],{"type":29,"tag":127,"props":2999,"children":3000},{"style":612},[3001],{"type":56,"value":921},{"type":29,"tag":127,"props":3003,"children":3004},{"style":603},[3005],{"type":56,"value":689},{"type":29,"tag":127,"props":3007,"children":3008},{"class":598,"line":1026},[3009,3013,3017],{"type":29,"tag":127,"props":3010,"children":3011},{"style":612},[3012],{"type":56,"value":934},{"type":29,"tag":127,"props":3014,"children":3015},{"style":603},[3016],{"type":56,"value":620},{"type":29,"tag":127,"props":3018,"children":3019},{"style":941},[3020],{"type":56,"value":944},{"type":29,"tag":127,"props":3022,"children":3023},{"class":598,"line":1042},[3024],{"type":29,"tag":127,"props":3025,"children":3026},{"style":603},[3027],{"type":56,"value":953},{"type":29,"tag":127,"props":3029,"children":3030},{"class":598,"line":1050},[3031],{"type":29,"tag":127,"props":3032,"children":3033},{"style":603},[3034],{"type":56,"value":962},{"type":29,"tag":127,"props":3036,"children":3037},{"class":598,"line":1058},[3038],{"type":29,"tag":127,"props":3039,"children":3040},{"style":603},[3041],{"type":56,"value":868},{"type":29,"tag":127,"props":3043,"children":3044},{"class":598,"line":1066},[3045,3049,3053,3057],{"type":29,"tag":127,"props":3046,"children":3047},{"style":612},[3048],{"type":56,"value":877},{"type":29,"tag":127,"props":3050,"children":3051},{"style":603},[3052],{"type":56,"value":620},{"type":29,"tag":127,"props":3054,"children":3055},{"style":623},[3056],{"type":56,"value":886},{"type":29,"tag":127,"props":3058,"children":3059},{"style":603},[3060],{"type":56,"value":631},{"type":29,"tag":127,"props":3062,"children":3063},{"class":598,"line":1086},[3064,3068,3072,3076],{"type":29,"tag":127,"props":3065,"children":3066},{"style":612},[3067],{"type":56,"value":899},{"type":29,"tag":127,"props":3069,"children":3070},{"style":603},[3071],{"type":56,"value":620},{"type":29,"tag":127,"props":3073,"children":3074},{"style":623},[3075],{"type":56,"value":1100},{"type":29,"tag":127,"props":3077,"children":3078},{"style":603},[3079],{"type":56,"value":631},{"type":29,"tag":127,"props":3081,"children":3082},{"class":598,"line":1107},[3083,3087],{"type":29,"tag":127,"props":3084,"children":3085},{"style":612},[3086],{"type":56,"value":921},{"type":29,"tag":127,"props":3088,"children":3089},{"style":603},[3090],{"type":56,"value":689},{"type":29,"tag":127,"props":3092,"children":3093},{"class":598,"line":1119},[3094,3098,3102],{"type":29,"tag":127,"props":3095,"children":3096},{"style":612},[3097],{"type":56,"value":934},{"type":29,"tag":127,"props":3099,"children":3100},{"style":603},[3101],{"type":56,"value":620},{"type":29,"tag":127,"props":3103,"children":3104},{"style":941},[3105],{"type":56,"value":944},{"type":29,"tag":127,"props":3107,"children":3108},{"class":598,"line":1135},[3109],{"type":29,"tag":127,"props":3110,"children":3111},{"style":603},[3112],{"type":56,"value":953},{"type":29,"tag":127,"props":3114,"children":3115},{"class":598,"line":1143},[3116],{"type":29,"tag":127,"props":3117,"children":3118},{"style":603},[3119],{"type":56,"value":962},{"type":29,"tag":127,"props":3121,"children":3123},{"class":3122,"line":588},[598,1152],[3124],{"type":29,"tag":127,"props":3125,"children":3126},{"style":603},[3127],{"type":56,"value":868},{"type":29,"tag":127,"props":3129,"children":3131},{"class":3130,"line":589},[598,1152],[3132,3136,3140,3145],{"type":29,"tag":127,"props":3133,"children":3134},{"style":612},[3135],{"type":56,"value":877},{"type":29,"tag":127,"props":3137,"children":3138},{"style":603},[3139],{"type":56,"value":620},{"type":29,"tag":127,"props":3141,"children":3142},{"style":623},[3143],{"type":56,"value":3144},"\"composer\"",{"type":29,"tag":127,"props":3146,"children":3147},{"style":603},[3148],{"type":56,"value":631},{"type":29,"tag":127,"props":3150,"children":3152},{"class":3151,"line":590},[598,1152],[3153,3157,3161],{"type":29,"tag":127,"props":3154,"children":3155},{"style":612},[3156],{"type":56,"value":899},{"type":29,"tag":127,"props":3158,"children":3159},{"style":603},[3160],{"type":56,"value":620},{"type":29,"tag":127,"props":3162,"children":3163},{"style":623},[3164],{"type":56,"value":3165},"\"https://\u003CDOMAIN-NAME>/api/v4/api/v4/group/\u003Cgroup_id>/-/packages/composer/packages.json\"\n",{"type":29,"tag":127,"props":3167,"children":3169},{"class":3168,"line":591},[598,1152],[3170],{"type":29,"tag":127,"props":3171,"children":3172},{"style":603},[3173],{"type":56,"value":1204},{"type":29,"tag":127,"props":3175,"children":3176},{"class":598,"line":1207},[3177],{"type":29,"tag":127,"props":3178,"children":3179},{"style":603},[3180],{"type":56,"value":1213},{"type":29,"tag":127,"props":3182,"children":3183},{"class":598,"line":1216},[3184,3188],{"type":29,"tag":127,"props":3185,"children":3186},{"style":612},[3187],{"type":56,"value":1222},{"type":29,"tag":127,"props":3189,"children":3190},{"style":603},[3191],{"type":56,"value":689},{"type":29,"tag":127,"props":3193,"children":3194},{"class":598,"line":1229},[3195,3199],{"type":29,"tag":127,"props":3196,"children":3197},{"style":612},[3198],{"type":56,"value":1235},{"type":29,"tag":127,"props":3200,"children":3201},{"style":603},[3202],{"type":56,"value":689},{"type":29,"tag":127,"props":3204,"children":3205},{"class":598,"line":1242},[3206,3210,3214,3218,3222],{"type":29,"tag":127,"props":3207,"children":3208},{"style":612},[3209],{"type":56,"value":1248},{"type":29,"tag":127,"props":3211,"children":3212},{"style":1251},[3213],{"type":56,"value":1254},{"type":29,"tag":127,"props":3215,"children":3216},{"style":612},[3217],{"type":56,"value":1259},{"type":29,"tag":127,"props":3219,"children":3220},{"style":603},[3221],{"type":56,"value":620},{"type":29,"tag":127,"props":3223,"children":3224},{"style":623},[3225],{"type":56,"value":1268},{"type":29,"tag":127,"props":3227,"children":3228},{"class":598,"line":1271},[3229],{"type":29,"tag":127,"props":3230,"children":3231},{"style":603},[3232],{"type":56,"value":1204},{"type":29,"tag":127,"props":3234,"children":3235},{"class":598,"line":1279},[3236],{"type":29,"tag":127,"props":3237,"children":3238},{"style":603},[3239],{"type":56,"value":845},{"type":29,"tag":127,"props":3241,"children":3242},{"class":598,"line":1287},[3243,3247,3251,3255],{"type":29,"tag":127,"props":3244,"children":3245},{"style":612},[3246],{"type":56,"value":1293},{"type":29,"tag":127,"props":3248,"children":3249},{"style":603},[3250],{"type":56,"value":620},{"type":29,"tag":127,"props":3252,"children":3253},{"style":941},[3254],{"type":56,"value":113},{"type":29,"tag":127,"props":3256,"children":3257},{"style":603},[3258],{"type":56,"value":631},{"type":29,"tag":127,"props":3260,"children":3261},{"class":598,"line":1308},[3262,3266],{"type":29,"tag":127,"props":3263,"children":3264},{"style":612},[3265],{"type":56,"value":1314},{"type":29,"tag":127,"props":3267,"children":3268},{"style":603},[3269],{"type":56,"value":689},{"type":29,"tag":127,"props":3271,"children":3272},{"class":598,"line":1321},[3273,3277],{"type":29,"tag":127,"props":3274,"children":3275},{"style":612},[3276],{"type":56,"value":1327},{"type":29,"tag":127,"props":3278,"children":3279},{"style":603},[3280],{"type":56,"value":689},{"type":29,"tag":127,"props":3282,"children":3283},{"class":598,"line":1334},[3284,3288,3292,3296],{"type":29,"tag":127,"props":3285,"children":3286},{"style":612},[3287],{"type":56,"value":1340},{"type":29,"tag":127,"props":3289,"children":3290},{"style":603},[3291],{"type":56,"value":620},{"type":29,"tag":127,"props":3293,"children":3294},{"style":941},[3295],{"type":56,"value":113},{"type":29,"tag":127,"props":3297,"children":3298},{"style":603},[3299],{"type":56,"value":631},{"type":29,"tag":127,"props":3301,"children":3302},{"class":598,"line":1355},[3303,3307,3311],{"type":29,"tag":127,"props":3304,"children":3305},{"style":612},[3306],{"type":56,"value":1361},{"type":29,"tag":127,"props":3308,"children":3309},{"style":603},[3310],{"type":56,"value":620},{"type":29,"tag":127,"props":3312,"children":3313},{"style":941},[3314],{"type":56,"value":944},{"type":29,"tag":127,"props":3316,"children":3317},{"class":598,"line":1372},[3318],{"type":29,"tag":127,"props":3319,"children":3320},{"style":603},[3321],{"type":56,"value":962},{"type":29,"tag":127,"props":3323,"children":3324},{"class":598,"line":1380},[3325,3329,3333,3337],{"type":29,"tag":127,"props":3326,"children":3327},{"style":612},[3328],{"type":56,"value":1386},{"type":29,"tag":127,"props":3330,"children":3331},{"style":603},[3332],{"type":56,"value":620},{"type":29,"tag":127,"props":3334,"children":3335},{"style":941},[3336],{"type":56,"value":113},{"type":29,"tag":127,"props":3338,"children":3339},{"style":603},[3340],{"type":56,"value":631},{"type":29,"tag":127,"props":3342,"children":3343},{"class":598,"line":1401},[3344,3348,3352],{"type":29,"tag":127,"props":3345,"children":3346},{"style":612},[3347],{"type":56,"value":1407},{"type":29,"tag":127,"props":3349,"children":3350},{"style":603},[3351],{"type":56,"value":620},{"type":29,"tag":127,"props":3353,"children":3354},{"style":941},[3355],{"type":56,"value":944},{"type":29,"tag":127,"props":3357,"children":3358},{"class":598,"line":1418},[3359],{"type":29,"tag":127,"props":3360,"children":3361},{"style":603},[3362],{"type":56,"value":845},{"type":29,"tag":127,"props":3364,"children":3365},{"class":598,"line":1426},[3366,3370],{"type":29,"tag":127,"props":3367,"children":3368},{"style":612},[3369],{"type":56,"value":1432},{"type":29,"tag":127,"props":3371,"children":3372},{"style":603},[3373],{"type":56,"value":689},{"type":29,"tag":127,"props":3375,"children":3376},{"class":598,"line":1439},[3377,3381],{"type":29,"tag":127,"props":3378,"children":3379},{"style":612},[3380],{"type":56,"value":1445},{"type":29,"tag":127,"props":3382,"children":3383},{"style":603},[3384],{"type":56,"value":689},{"type":29,"tag":127,"props":3386,"children":3387},{"class":598,"line":1452},[3388,3392,3396],{"type":29,"tag":127,"props":3389,"children":3390},{"style":612},[3391],{"type":56,"value":1458},{"type":29,"tag":127,"props":3393,"children":3394},{"style":603},[3395],{"type":56,"value":620},{"type":29,"tag":127,"props":3397,"children":3398},{"style":623},[3399],{"type":56,"value":1467},{"type":29,"tag":127,"props":3401,"children":3402},{"class":598,"line":1470},[3403],{"type":29,"tag":127,"props":3404,"children":3405},{"style":603},[3406],{"type":56,"value":962},{"type":29,"tag":127,"props":3408,"children":3409},{"class":598,"line":1478},[3410,3414],{"type":29,"tag":127,"props":3411,"children":3412},{"style":612},[3413],{"type":56,"value":1484},{"type":29,"tag":127,"props":3415,"children":3416},{"style":603},[3417],{"type":56,"value":859},{"type":29,"tag":127,"props":3419,"children":3420},{"class":598,"line":1491},[3421],{"type":29,"tag":127,"props":3422,"children":3423},{"style":623},[3424],{"type":56,"value":1497},{"type":29,"tag":127,"props":3426,"children":3427},{"class":598,"line":1500},[3428],{"type":29,"tag":127,"props":3429,"children":3430},{"style":603},[3431],{"type":56,"value":1506},{"type":29,"tag":127,"props":3433,"children":3434},{"class":598,"line":1509},[3435,3439],{"type":29,"tag":127,"props":3436,"children":3437},{"style":612},[3438],{"type":56,"value":1515},{"type":29,"tag":127,"props":3440,"children":3441},{"style":603},[3442],{"type":56,"value":859},{"type":29,"tag":127,"props":3444,"children":3445},{"class":598,"line":1522},[3446],{"type":29,"tag":127,"props":3447,"children":3448},{"style":623},[3449],{"type":56,"value":1497},{"type":29,"tag":127,"props":3451,"children":3452},{"class":598,"line":1530},[3453],{"type":29,"tag":127,"props":3454,"children":3455},{"style":603},[3456],{"type":56,"value":1536},{"type":29,"tag":127,"props":3458,"children":3459},{"class":598,"line":1539},[3460],{"type":29,"tag":127,"props":3461,"children":3462},{"style":603},[3463],{"type":56,"value":845},{"type":29,"tag":127,"props":3465,"children":3466},{"class":598,"line":1547},[3467,3471],{"type":29,"tag":127,"props":3468,"children":3469},{"style":612},[3470],{"type":56,"value":1553},{"type":29,"tag":127,"props":3472,"children":3473},{"style":603},[3474],{"type":56,"value":689},{"type":29,"tag":127,"props":3476,"children":3477},{"class":598,"line":1560},[3478,3482],{"type":29,"tag":127,"props":3479,"children":3480},{"style":612},[3481],{"type":56,"value":1566},{"type":29,"tag":127,"props":3483,"children":3484},{"style":603},[3485],{"type":56,"value":689},{"type":29,"tag":127,"props":3487,"children":3488},{"class":598,"line":1573},[3489,3493,3497,3501],{"type":29,"tag":127,"props":3490,"children":3491},{"style":612},[3492],{"type":56,"value":1579},{"type":29,"tag":127,"props":3494,"children":3495},{"style":603},[3496],{"type":56,"value":620},{"type":29,"tag":127,"props":3498,"children":3499},{"style":941},[3500],{"type":56,"value":113},{"type":29,"tag":127,"props":3502,"children":3503},{"style":603},[3504],{"type":56,"value":631},{"type":29,"tag":127,"props":3506,"children":3507},{"class":598,"line":1594},[3508,3512],{"type":29,"tag":127,"props":3509,"children":3510},{"style":612},[3511],{"type":56,"value":1600},{"type":29,"tag":127,"props":3513,"children":3514},{"style":603},[3515],{"type":56,"value":859},{"type":29,"tag":127,"props":3517,"children":3518},{"class":598,"line":1607},[3519,3523],{"type":29,"tag":127,"props":3520,"children":3521},{"style":623},[3522],{"type":56,"value":1613},{"type":29,"tag":127,"props":3524,"children":3525},{"style":603},[3526],{"type":56,"value":631},{"type":29,"tag":127,"props":3528,"children":3529},{"class":598,"line":1620},[3530],{"type":29,"tag":127,"props":3531,"children":3532},{"style":623},[3533],{"type":56,"value":1626},{"type":29,"tag":127,"props":3535,"children":3536},{"class":598,"line":1629},[3537],{"type":29,"tag":127,"props":3538,"children":3539},{"style":603},[3540],{"type":56,"value":1635},{"type":29,"tag":127,"props":3542,"children":3543},{"class":598,"line":1638},[3544],{"type":29,"tag":127,"props":3545,"children":3546},{"style":603},[3547],{"type":56,"value":1204},{"type":29,"tag":127,"props":3549,"children":3550},{"class":598,"line":1646},[3551],{"type":29,"tag":127,"props":3552,"children":3553},{"style":603},[3554],{"type":56,"value":1652},{"type":29,"tag":127,"props":3556,"children":3557},{"class":598,"line":1655},[3558],{"type":29,"tag":127,"props":3559,"children":3560},{"style":603},[3561],{"type":56,"value":1661},{"type":29,"tag":48,"props":3563,"children":3564},{},[3565],{"type":56,"value":3566},"or by using the CLI:",{"type":29,"tag":582,"props":3568,"children":3570},{"className":1669,"code":3569,"language":1671,"meta":7,"style":7},"composer config repositories.\u003Cgroup_id> composer https://\u003CDOMAIN-NAME>/api/v4/group/\u003Cgroup_id>/-/packages/composer/packages.json\n",[3571],{"type":29,"tag":519,"props":3572,"children":3573},{"__ignoreMap":7},[3574],{"type":29,"tag":127,"props":3575,"children":3576},{"class":598,"line":599},[3577,3581,3586,3591,3597,3602,3607,3612,3617,3622,3626,3631,3636,3640,3645,3649,3653,3657,3661],{"type":29,"tag":127,"props":3578,"children":3579},{"style":1681},[3580],{"type":56,"value":535},{"type":29,"tag":127,"props":3582,"children":3583},{"style":1686},[3584],{"type":56,"value":3585}," config",{"type":29,"tag":127,"props":3587,"children":3588},{"style":1686},[3589],{"type":56,"value":3590}," repositories.",{"type":29,"tag":127,"props":3592,"children":3594},{"style":3593},"--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-sepia:#F92672",[3595],{"type":56,"value":3596},"\u003C",{"type":29,"tag":127,"props":3598,"children":3599},{"style":1686},[3600],{"type":56,"value":3601},"group_i",{"type":29,"tag":127,"props":3603,"children":3604},{"style":603},[3605],{"type":56,"value":3606},"d",{"type":29,"tag":127,"props":3608,"children":3609},{"style":3593},[3610],{"type":56,"value":3611},">",{"type":29,"tag":127,"props":3613,"children":3614},{"style":1686},[3615],{"type":56,"value":3616}," composer",{"type":29,"tag":127,"props":3618,"children":3619},{"style":1686},[3620],{"type":56,"value":3621}," https://",{"type":29,"tag":127,"props":3623,"children":3624},{"style":3593},[3625],{"type":56,"value":3596},{"type":29,"tag":127,"props":3627,"children":3628},{"style":1686},[3629],{"type":56,"value":3630},"DOMAIN-NAM",{"type":29,"tag":127,"props":3632,"children":3633},{"style":603},[3634],{"type":56,"value":3635},"E",{"type":29,"tag":127,"props":3637,"children":3638},{"style":3593},[3639],{"type":56,"value":3611},{"type":29,"tag":127,"props":3641,"children":3642},{"style":1686},[3643],{"type":56,"value":3644},"/api/v4/group/",{"type":29,"tag":127,"props":3646,"children":3647},{"style":3593},[3648],{"type":56,"value":3596},{"type":29,"tag":127,"props":3650,"children":3651},{"style":1686},[3652],{"type":56,"value":3601},{"type":29,"tag":127,"props":3654,"children":3655},{"style":603},[3656],{"type":56,"value":3606},{"type":29,"tag":127,"props":3658,"children":3659},{"style":3593},[3660],{"type":56,"value":3611},{"type":29,"tag":127,"props":3662,"children":3663},{"style":1686},[3664],{"type":56,"value":3665},"/-/packages/composer/packages.json\n",{"type":29,"tag":48,"props":3667,"children":3668},{},[3669],{"type":56,"value":3670},"And setup GitLab credentials:",{"type":29,"tag":582,"props":3672,"children":3674},{"className":1669,"code":3673,"language":1671,"meta":7,"style":7},"composer config gitlab-token.\u003CDOMAIN-NAME> \u003Cpersonal_access_token>\n",[3675],{"type":29,"tag":519,"props":3676,"children":3677},{"__ignoreMap":7},[3678],{"type":29,"tag":127,"props":3679,"children":3680},{"class":598,"line":599},[3681,3685,3689,3694,3698,3702,3706,3710,3715,3720,3725],{"type":29,"tag":127,"props":3682,"children":3683},{"style":1681},[3684],{"type":56,"value":535},{"type":29,"tag":127,"props":3686,"children":3687},{"style":1686},[3688],{"type":56,"value":3585},{"type":29,"tag":127,"props":3690,"children":3691},{"style":1686},[3692],{"type":56,"value":3693}," gitlab-token.",{"type":29,"tag":127,"props":3695,"children":3696},{"style":3593},[3697],{"type":56,"value":3596},{"type":29,"tag":127,"props":3699,"children":3700},{"style":1686},[3701],{"type":56,"value":3630},{"type":29,"tag":127,"props":3703,"children":3704},{"style":603},[3705],{"type":56,"value":3635},{"type":29,"tag":127,"props":3707,"children":3708},{"style":3593},[3709],{"type":56,"value":3611},{"type":29,"tag":127,"props":3711,"children":3712},{"style":3593},[3713],{"type":56,"value":3714}," \u003C",{"type":29,"tag":127,"props":3716,"children":3717},{"style":1686},[3718],{"type":56,"value":3719},"personal_access_toke",{"type":29,"tag":127,"props":3721,"children":3722},{"style":603},[3723],{"type":56,"value":3724},"n",{"type":29,"tag":127,"props":3726,"children":3727},{"style":3593},[3728],{"type":56,"value":3729},">\n",{"type":29,"tag":48,"props":3731,"children":3732},{},[3733,3735,3740],{"type":56,"value":3734},"You can read more about this process in the ",{"type":29,"tag":490,"props":3736,"children":3738},{"href":3737},"https://docs.gitlab.com/user/packages/composer_repository/#install-a-composer-package",[3739],{"type":56,"value":495},{"type":56,"value":497},{"type":29,"tag":48,"props":3742,"children":3743},{},[3744],{"type":56,"value":3745},"Now we require our package us usual:",{"type":29,"tag":582,"props":3747,"children":3748},{"className":1669,"code":1670,"language":1671,"meta":7,"style":7},[3749],{"type":29,"tag":519,"props":3750,"children":3751},{"__ignoreMap":7},[3752],{"type":29,"tag":127,"props":3753,"children":3754},{"class":598,"line":599},[3755,3759,3763],{"type":29,"tag":127,"props":3756,"children":3757},{"style":1681},[3758],{"type":56,"value":535},{"type":29,"tag":127,"props":3760,"children":3761},{"style":1686},[3762],{"type":56,"value":1689},{"type":29,"tag":127,"props":3764,"children":3765},{"style":1686},[3766],{"type":56,"value":1694},{"type":29,"tag":582,"props":3768,"children":3770},{"className":2409,"code":3769,"language":2411,"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",[3771],{"type":29,"tag":519,"props":3772,"children":3773},{"__ignoreMap":7},[3774,3781,3788,3795,3802,3809,3816,3823,3830,3837,3845,3853,3860,3867,3874,3881,3888,3895],{"type":29,"tag":127,"props":3775,"children":3776},{"class":598,"line":599},[3777],{"type":29,"tag":127,"props":3778,"children":3779},{},[3780],{"type":56,"value":1761},{"type":29,"tag":127,"props":3782,"children":3783},{"class":598,"line":271},[3784],{"type":29,"tag":127,"props":3785,"children":3786},{},[3787],{"type":56,"value":1769},{"type":29,"tag":127,"props":3789,"children":3790},{"class":598,"line":634},[3791],{"type":29,"tag":127,"props":3792,"children":3793},{},[3794],{"type":56,"value":2438},{"type":29,"tag":127,"props":3796,"children":3797},{"class":598,"line":656},[3798],{"type":29,"tag":127,"props":3799,"children":3800},{},[3801],{"type":56,"value":2446},{"type":29,"tag":127,"props":3803,"children":3804},{"class":598,"line":678},[3805],{"type":29,"tag":127,"props":3806,"children":3807},{},[3808],{"type":56,"value":1793},{"type":29,"tag":127,"props":3810,"children":3811},{"class":598,"line":692},[3812],{"type":29,"tag":127,"props":3813,"children":3814},{},[3815],{"type":56,"value":2461},{"type":29,"tag":127,"props":3817,"children":3818},{"class":598,"line":714},[3819],{"type":29,"tag":127,"props":3820,"children":3821},{},[3822],{"type":56,"value":1809},{"type":29,"tag":127,"props":3824,"children":3825},{"class":598,"line":736},[3826],{"type":29,"tag":127,"props":3827,"children":3828},{},[3829],{"type":56,"value":1817},{"type":29,"tag":127,"props":3831,"children":3832},{"class":598,"line":758},[3833],{"type":29,"tag":127,"props":3834,"children":3835},{},[3836],{"type":56,"value":1825},{"type":29,"tag":127,"props":3838,"children":3839},{"class":598,"line":780},[3840],{"type":29,"tag":127,"props":3841,"children":3842},{},[3843],{"type":56,"value":3844},"  - Downloading acme/sample-plugin (1.0.0)\n",{"type":29,"tag":127,"props":3846,"children":3847},{"class":598,"line":801},[3848],{"type":29,"tag":127,"props":3849,"children":3850},{},[3851],{"type":56,"value":3852},"  - Installing acme/sample-plugin (1.0.0): Extracting archive\n",{"type":29,"tag":127,"props":3854,"children":3855},{"class":598,"line":118},[3856],{"type":29,"tag":127,"props":3857,"children":3858},{},[3859],{"type":56,"value":1849},{"type":29,"tag":127,"props":3861,"children":3862},{"class":598,"line":839},[3863],{"type":29,"tag":127,"props":3864,"children":3865},{"emptyLinePlaceholder":1855},[3866],{"type":56,"value":1858},{"type":29,"tag":127,"props":3868,"children":3869},{"class":598,"line":848},[3870],{"type":29,"tag":127,"props":3871,"children":3872},{},[3873],{"type":56,"value":1866},{"type":29,"tag":127,"props":3875,"children":3876},{"class":598,"line":862},[3877],{"type":29,"tag":127,"props":3878,"children":3879},{"emptyLinePlaceholder":1855},[3880],{"type":56,"value":1858},{"type":29,"tag":127,"props":3882,"children":3883},{"class":598,"line":871},[3884],{"type":29,"tag":127,"props":3885,"children":3886},{},[3887],{"type":56,"value":1881},{"type":29,"tag":127,"props":3889,"children":3890},{"class":598,"line":893},[3891],{"type":29,"tag":127,"props":3892,"children":3893},{"emptyLinePlaceholder":1855},[3894],{"type":56,"value":1858},{"type":29,"tag":127,"props":3896,"children":3897},{"class":598,"line":915},[3898],{"type":29,"tag":127,"props":3899,"children":3900},{},[3901],{"type":56,"value":2548},{"type":29,"tag":48,"props":3903,"children":3904},{},[3905],{"type":29,"tag":127,"props":3906,"children":3909},{"className":3907},[3908],"text-h2",[3910],{"type":56,"value":3911},"Awesome. Direct package download!",{"type":29,"tag":122,"props":3913,"children":3915},{"id":3914},"why-bother",[3916],{"type":56,"value":3917},"Why bother?",{"type":29,"tag":48,"props":3919,"children":3920},{},[3921,3923,3929,3931,3937],{"type":56,"value":3922},"This is an excellent question. The main reason is package caching. When running in a ",{"type":29,"tag":519,"props":3924,"children":3926},{"className":3925},[],[3927],{"type":56,"value":3928},"CI/CD",{"type":56,"value":3930}," environment or ",{"type":29,"tag":519,"props":3932,"children":3934},{"className":3933},[],[3935],{"type":56,"value":3936},"docker build",{"type":56,"value":3938},",\ncaching packages can give you a massive performance boost.",{"type":29,"tag":1706,"props":3940,"children":3941},{},[],{"type":29,"tag":3943,"props":3944,"children":3945},"hr",{},[],{"type":29,"tag":90,"props":3947,"children":3949},{"id":3948},"release-pipeline",[3950],{"type":56,"value":3951},"Release pipeline",{"type":29,"tag":122,"props":3953,"children":3955},{"id":3954},"with-manual-tagging",[3956],{"type":56,"value":3957},"With manual tagging",{"type":29,"tag":48,"props":3959,"children":3960},{},[3961],{"type":56,"value":3962},"This is a simple pipeline when you need to manually create and push a git tag.",{"type":29,"tag":48,"props":3964,"children":3965},{},[3966,3968,3973,3974],{"type":56,"value":3967},"Make sure to always update the ",{"type":29,"tag":519,"props":3969,"children":3971},{"className":3970},[],[3972],{"type":56,"value":1928},{"type":56,"value":1930},{"type":29,"tag":519,"props":3975,"children":3977},{"className":3976},[],[3978],{"type":56,"value":1936},{"type":29,"tag":582,"props":3980,"children":3982},{"className":1669,"code":3981,"language":1671,"meta":7,"style":7},"git tag \u003Cversion>\ngit push --tags\n",[3983],{"type":29,"tag":519,"props":3984,"children":3985},{"__ignoreMap":7},[3986,4014],{"type":29,"tag":127,"props":3987,"children":3988},{"class":598,"line":599},[3989,3993,3997,4001,4006,4010],{"type":29,"tag":127,"props":3990,"children":3991},{"style":1681},[3992],{"type":56,"value":1892},{"type":29,"tag":127,"props":3994,"children":3995},{"style":1686},[3996],{"type":56,"value":2358},{"type":29,"tag":127,"props":3998,"children":3999},{"style":3593},[4000],{"type":56,"value":3714},{"type":29,"tag":127,"props":4002,"children":4003},{"style":1686},[4004],{"type":56,"value":4005},"versio",{"type":29,"tag":127,"props":4007,"children":4008},{"style":603},[4009],{"type":56,"value":3724},{"type":29,"tag":127,"props":4011,"children":4012},{"style":3593},[4013],{"type":56,"value":3729},{"type":29,"tag":127,"props":4015,"children":4016},{"class":598,"line":271},[4017,4021,4025],{"type":29,"tag":127,"props":4018,"children":4019},{"style":1681},[4020],{"type":56,"value":1892},{"type":29,"tag":127,"props":4022,"children":4023},{"style":1686},[4024],{"type":56,"value":2375},{"type":29,"tag":127,"props":4026,"children":4027},{"style":941},[4028],{"type":56,"value":2380},{"type":29,"tag":582,"props":4030,"children":4035},{"className":4031,"code":4032,"filename":4033,"language":4034,"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","yaml",[4036],{"type":29,"tag":519,"props":4037,"children":4038},{"__ignoreMap":7},[4039,4053,4066,4073,4085,4102,4118,4130,4143,4160,4172],{"type":29,"tag":127,"props":4040,"children":4041},{"class":598,"line":599},[4042,4048],{"type":29,"tag":127,"props":4043,"children":4045},{"style":4044},"--shiki-default:#85E89D;--shiki-dark:#85E89D;--shiki-sepia:#F92672",[4046],{"type":56,"value":4047},"stages",{"type":29,"tag":127,"props":4049,"children":4050},{"style":603},[4051],{"type":56,"value":4052},":\n",{"type":29,"tag":127,"props":4054,"children":4055},{"class":598,"line":271},[4056,4061],{"type":29,"tag":127,"props":4057,"children":4058},{"style":603},[4059],{"type":56,"value":4060},"  - ",{"type":29,"tag":127,"props":4062,"children":4063},{"style":1686},[4064],{"type":56,"value":4065},"release\n",{"type":29,"tag":127,"props":4067,"children":4068},{"class":598,"line":634},[4069],{"type":29,"tag":127,"props":4070,"children":4071},{"emptyLinePlaceholder":1855},[4072],{"type":56,"value":1858},{"type":29,"tag":127,"props":4074,"children":4075},{"class":598,"line":656},[4076,4081],{"type":29,"tag":127,"props":4077,"children":4078},{"style":4044},[4079],{"type":56,"value":4080},"deploy",{"type":29,"tag":127,"props":4082,"children":4083},{"style":603},[4084],{"type":56,"value":4052},{"type":29,"tag":127,"props":4086,"children":4087},{"class":598,"line":678},[4088,4093,4097],{"type":29,"tag":127,"props":4089,"children":4090},{"style":4044},[4091],{"type":56,"value":4092},"  image",{"type":29,"tag":127,"props":4094,"children":4095},{"style":603},[4096],{"type":56,"value":620},{"type":29,"tag":127,"props":4098,"children":4099},{"style":1686},[4100],{"type":56,"value":4101},"alpine/curl\n",{"type":29,"tag":127,"props":4103,"children":4104},{"class":598,"line":692},[4105,4110,4114],{"type":29,"tag":127,"props":4106,"children":4107},{"style":4044},[4108],{"type":56,"value":4109},"  stage",{"type":29,"tag":127,"props":4111,"children":4112},{"style":603},[4113],{"type":56,"value":620},{"type":29,"tag":127,"props":4115,"children":4116},{"style":1686},[4117],{"type":56,"value":4065},{"type":29,"tag":127,"props":4119,"children":4120},{"class":598,"line":714},[4121,4126],{"type":29,"tag":127,"props":4122,"children":4123},{"style":4044},[4124],{"type":56,"value":4125},"  script",{"type":29,"tag":127,"props":4127,"children":4128},{"style":603},[4129],{"type":56,"value":4052},{"type":29,"tag":127,"props":4131,"children":4132},{"class":598,"line":736},[4133,4138],{"type":29,"tag":127,"props":4134,"children":4135},{"style":603},[4136],{"type":56,"value":4137},"    - ",{"type":29,"tag":127,"props":4139,"children":4140},{"style":1686},[4141],{"type":56,"value":4142},"'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":29,"tag":127,"props":4144,"children":4145},{"class":598,"line":758},[4146,4151,4155],{"type":29,"tag":127,"props":4147,"children":4148},{"style":4044},[4149],{"type":56,"value":4150},"  environment",{"type":29,"tag":127,"props":4152,"children":4153},{"style":603},[4154],{"type":56,"value":620},{"type":29,"tag":127,"props":4156,"children":4157},{"style":1686},[4158],{"type":56,"value":4159},"production\n",{"type":29,"tag":127,"props":4161,"children":4162},{"class":598,"line":780},[4163,4168],{"type":29,"tag":127,"props":4164,"children":4165},{"style":4044},[4166],{"type":56,"value":4167},"  rules",{"type":29,"tag":127,"props":4169,"children":4170},{"style":603},[4171],{"type":56,"value":4052},{"type":29,"tag":127,"props":4173,"children":4174},{"class":598,"line":801},[4175,4180,4184],{"type":29,"tag":127,"props":4176,"children":4177},{"style":4044},[4178],{"type":56,"value":4179},"    if",{"type":29,"tag":127,"props":4181,"children":4182},{"style":603},[4183],{"type":56,"value":620},{"type":29,"tag":127,"props":4185,"children":4186},{"style":1686},[4187],{"type":56,"value":4188},"$CI_COMMIT_TAG\n",{"type":29,"tag":122,"props":4190,"children":4192},{"id":4191},"with-semantic-release",[4193],{"type":56,"value":4194},"With semantic-release",{"type":29,"tag":48,"props":4196,"children":4197},{},[4198],{"type":56,"value":4199},"It would be a lot easier if we could just push our changes and don't care about versioning and tagging.",{"type":29,"tag":48,"props":4201,"children":4202},{},[4203,4209],{"type":29,"tag":490,"props":4204,"children":4206},{"href":4205},"https://github.com/semantic-release/semantic-release",[4207],{"type":56,"value":4208},"semantic-release",{"type":56,"value":4210}," automates the whole package release workflow.",{"type":29,"tag":48,"props":4212,"children":4213},{},[4214,4216,4222],{"type":56,"value":4215},"Please follow the ",{"type":29,"tag":490,"props":4217,"children":4219},{"href":4218},"https://github.com/semantic-release/gitlab?tab=readme-ov-file#gitlab-authentication",[4220],{"type":56,"value":4221},"GitLab authentication instruction",{"type":56,"value":4223}," before you continue to read.",{"type":29,"tag":582,"props":4225,"children":4228},{"className":4031,"code":4226,"filename":4227,"language":4034,"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",[4229],{"type":29,"tag":519,"props":4230,"children":4231},{"__ignoreMap":7},[4232,4243,4254,4261,4273,4288,4299,4316,4339,4355,4366,4378,4389,4410,4427],{"type":29,"tag":127,"props":4233,"children":4234},{"class":598,"line":599},[4235,4239],{"type":29,"tag":127,"props":4236,"children":4237},{"style":4044},[4238],{"type":56,"value":4047},{"type":29,"tag":127,"props":4240,"children":4241},{"style":603},[4242],{"type":56,"value":4052},{"type":29,"tag":127,"props":4244,"children":4245},{"class":598,"line":271},[4246,4250],{"type":29,"tag":127,"props":4247,"children":4248},{"style":603},[4249],{"type":56,"value":4060},{"type":29,"tag":127,"props":4251,"children":4252},{"style":1686},[4253],{"type":56,"value":4065},{"type":29,"tag":127,"props":4255,"children":4256},{"class":598,"line":634},[4257],{"type":29,"tag":127,"props":4258,"children":4259},{"emptyLinePlaceholder":1855},[4260],{"type":56,"value":1858},{"type":29,"tag":127,"props":4262,"children":4263},{"class":598,"line":656},[4264,4269],{"type":29,"tag":127,"props":4265,"children":4266},{"style":4044},[4267],{"type":56,"value":4268},"release",{"type":29,"tag":127,"props":4270,"children":4271},{"style":603},[4272],{"type":56,"value":4052},{"type":29,"tag":127,"props":4274,"children":4275},{"class":598,"line":678},[4276,4280,4284],{"type":29,"tag":127,"props":4277,"children":4278},{"style":4044},[4279],{"type":56,"value":4109},{"type":29,"tag":127,"props":4281,"children":4282},{"style":603},[4283],{"type":56,"value":620},{"type":29,"tag":127,"props":4285,"children":4286},{"style":1686},[4287],{"type":56,"value":4065},{"type":29,"tag":127,"props":4289,"children":4290},{"class":598,"line":692},[4291,4295],{"type":29,"tag":127,"props":4292,"children":4293},{"style":4044},[4294],{"type":56,"value":4092},{"type":29,"tag":127,"props":4296,"children":4297},{"style":603},[4298],{"type":56,"value":4052},{"type":29,"tag":127,"props":4300,"children":4301},{"class":598,"line":714},[4302,4307,4311],{"type":29,"tag":127,"props":4303,"children":4304},{"style":4044},[4305],{"type":56,"value":4306},"    name",{"type":29,"tag":127,"props":4308,"children":4309},{"style":603},[4310],{"type":56,"value":620},{"type":29,"tag":127,"props":4312,"children":4313},{"style":1686},[4314],{"type":56,"value":4315},"ghcr.io/voxpupuli/semantic-release:25.0.0-latest\n",{"type":29,"tag":127,"props":4317,"children":4318},{"class":598,"line":736},[4319,4324,4329,4334],{"type":29,"tag":127,"props":4320,"children":4321},{"style":4044},[4322],{"type":56,"value":4323},"    entrypoint",{"type":29,"tag":127,"props":4325,"children":4326},{"style":603},[4327],{"type":56,"value":4328},": [",{"type":29,"tag":127,"props":4330,"children":4331},{"style":1686},[4332],{"type":56,"value":4333},"\"\"",{"type":29,"tag":127,"props":4335,"children":4336},{"style":603},[4337],{"type":56,"value":4338},"]\n",{"type":29,"tag":127,"props":4340,"children":4341},{"class":598,"line":758},[4342,4347,4351],{"type":29,"tag":127,"props":4343,"children":4344},{"style":4044},[4345],{"type":56,"value":4346},"  interruptible",{"type":29,"tag":127,"props":4348,"children":4349},{"style":603},[4350],{"type":56,"value":620},{"type":29,"tag":127,"props":4352,"children":4353},{"style":941},[4354],{"type":56,"value":944},{"type":29,"tag":127,"props":4356,"children":4357},{"class":598,"line":780},[4358,4362],{"type":29,"tag":127,"props":4359,"children":4360},{"style":4044},[4361],{"type":56,"value":4125},{"type":29,"tag":127,"props":4363,"children":4364},{"style":603},[4365],{"type":56,"value":4052},{"type":29,"tag":127,"props":4367,"children":4368},{"class":598,"line":801},[4369,4373],{"type":29,"tag":127,"props":4370,"children":4371},{"style":603},[4372],{"type":56,"value":4137},{"type":29,"tag":127,"props":4374,"children":4375},{"style":1686},[4376],{"type":56,"value":4377},"/container-entrypoint.sh\n",{"type":29,"tag":127,"props":4379,"children":4380},{"class":598,"line":118},[4381,4385],{"type":29,"tag":127,"props":4382,"children":4383},{"style":4044},[4384],{"type":56,"value":4167},{"type":29,"tag":127,"props":4386,"children":4387},{"style":603},[4388],{"type":56,"value":4052},{"type":29,"tag":127,"props":4390,"children":4391},{"class":598,"line":839},[4392,4396,4401,4405],{"type":29,"tag":127,"props":4393,"children":4394},{"style":603},[4395],{"type":56,"value":4137},{"type":29,"tag":127,"props":4397,"children":4398},{"style":4044},[4399],{"type":56,"value":4400},"if",{"type":29,"tag":127,"props":4402,"children":4403},{"style":603},[4404],{"type":56,"value":620},{"type":29,"tag":127,"props":4406,"children":4407},{"style":1686},[4408],{"type":56,"value":4409},"$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH\n",{"type":29,"tag":127,"props":4411,"children":4412},{"class":598,"line":848},[4413,4418,4422],{"type":29,"tag":127,"props":4414,"children":4415},{"style":4044},[4416],{"type":56,"value":4417},"      when",{"type":29,"tag":127,"props":4419,"children":4420},{"style":603},[4421],{"type":56,"value":620},{"type":29,"tag":127,"props":4423,"children":4424},{"style":1686},[4425],{"type":56,"value":4426},"never\n",{"type":29,"tag":127,"props":4428,"children":4429},{"class":598,"line":862},[4430,4434,4438,4442],{"type":29,"tag":127,"props":4431,"children":4432},{"style":603},[4433],{"type":56,"value":4137},{"type":29,"tag":127,"props":4435,"children":4436},{"style":4044},[4437],{"type":56,"value":4400},{"type":29,"tag":127,"props":4439,"children":4440},{"style":603},[4441],{"type":56,"value":620},{"type":29,"tag":127,"props":4443,"children":4444},{"style":1686},[4445],{"type":56,"value":4446},"$CI_COMMIT_BRANCH\n",{"type":29,"tag":582,"props":4448,"children":4451},{"className":584,"code":4449,"filename":4450,"language":384,"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",[4452],{"type":29,"tag":519,"props":4453,"children":4454},{"__ignoreMap":7},[4455,4462,4474,4486,4494,4506,4514,4526,4534,4556,4603,4645,4653,4661,4668,4675,4682,4694,4701,4721,4748,4755,4762,4769,4781,4788,4823,4830,4837,4845],{"type":29,"tag":127,"props":4456,"children":4457},{"class":598,"line":599},[4458],{"type":29,"tag":127,"props":4459,"children":4460},{"style":603},[4461],{"type":56,"value":606},{"type":29,"tag":127,"props":4463,"children":4464},{"class":598,"line":271},[4465,4470],{"type":29,"tag":127,"props":4466,"children":4467},{"style":612},[4468],{"type":56,"value":4469},"  \"plugins\"",{"type":29,"tag":127,"props":4471,"children":4472},{"style":603},[4473],{"type":56,"value":859},{"type":29,"tag":127,"props":4475,"children":4476},{"class":598,"line":634},[4477,4482],{"type":29,"tag":127,"props":4478,"children":4479},{"style":623},[4480],{"type":56,"value":4481},"    \"@semantic-release/commit-analyzer\"",{"type":29,"tag":127,"props":4483,"children":4484},{"style":603},[4485],{"type":56,"value":631},{"type":29,"tag":127,"props":4487,"children":4488},{"class":598,"line":656},[4489],{"type":29,"tag":127,"props":4490,"children":4491},{"style":603},[4492],{"type":56,"value":4493},"    [\n",{"type":29,"tag":127,"props":4495,"children":4496},{"class":598,"line":678},[4497,4502],{"type":29,"tag":127,"props":4498,"children":4499},{"style":623},[4500],{"type":56,"value":4501},"      \"semantic-release-replace-plugin\"",{"type":29,"tag":127,"props":4503,"children":4504},{"style":603},[4505],{"type":56,"value":631},{"type":29,"tag":127,"props":4507,"children":4508},{"class":598,"line":692},[4509],{"type":29,"tag":127,"props":4510,"children":4511},{"style":603},[4512],{"type":56,"value":4513},"      {\n",{"type":29,"tag":127,"props":4515,"children":4516},{"class":598,"line":714},[4517,4522],{"type":29,"tag":127,"props":4518,"children":4519},{"style":612},[4520],{"type":56,"value":4521},"        \"replacements\"",{"type":29,"tag":127,"props":4523,"children":4524},{"style":603},[4525],{"type":56,"value":859},{"type":29,"tag":127,"props":4527,"children":4528},{"class":598,"line":736},[4529],{"type":29,"tag":127,"props":4530,"children":4531},{"style":603},[4532],{"type":56,"value":4533},"          {\n",{"type":29,"tag":127,"props":4535,"children":4536},{"class":598,"line":758},[4537,4542,4546,4551],{"type":29,"tag":127,"props":4538,"children":4539},{"style":612},[4540],{"type":56,"value":4541},"            \"files\"",{"type":29,"tag":127,"props":4543,"children":4544},{"style":603},[4545],{"type":56,"value":4328},{"type":29,"tag":127,"props":4547,"children":4548},{"style":623},[4549],{"type":56,"value":4550},"\"composer.json\"",{"type":29,"tag":127,"props":4552,"children":4553},{"style":603},[4554],{"type":56,"value":4555},"],\n",{"type":29,"tag":127,"props":4557,"children":4558},{"class":598,"line":780},[4559,4564,4568,4573,4578,4582,4586,4591,4595,4599],{"type":29,"tag":127,"props":4560,"children":4561},{"style":612},[4562],{"type":56,"value":4563},"            \"from\"",{"type":29,"tag":127,"props":4565,"children":4566},{"style":603},[4567],{"type":56,"value":620},{"type":29,"tag":127,"props":4569,"children":4570},{"style":623},[4571],{"type":56,"value":4572},"\"version",{"type":29,"tag":127,"props":4574,"children":4575},{"style":941},[4576],{"type":56,"value":4577},"\\\"",{"type":29,"tag":127,"props":4579,"children":4580},{"style":623},[4581],{"type":56,"value":620},{"type":29,"tag":127,"props":4583,"children":4584},{"style":941},[4585],{"type":56,"value":4577},{"type":29,"tag":127,"props":4587,"children":4588},{"style":623},[4589],{"type":56,"value":4590},".*",{"type":29,"tag":127,"props":4592,"children":4593},{"style":941},[4594],{"type":56,"value":4577},{"type":29,"tag":127,"props":4596,"children":4597},{"style":623},[4598],{"type":56,"value":1259},{"type":29,"tag":127,"props":4600,"children":4601},{"style":603},[4602],{"type":56,"value":631},{"type":29,"tag":127,"props":4604,"children":4605},{"class":598,"line":801},[4606,4611,4615,4619,4623,4627,4631,4636,4640],{"type":29,"tag":127,"props":4607,"children":4608},{"style":612},[4609],{"type":56,"value":4610},"            \"to\"",{"type":29,"tag":127,"props":4612,"children":4613},{"style":603},[4614],{"type":56,"value":620},{"type":29,"tag":127,"props":4616,"children":4617},{"style":623},[4618],{"type":56,"value":4572},{"type":29,"tag":127,"props":4620,"children":4621},{"style":941},[4622],{"type":56,"value":4577},{"type":29,"tag":127,"props":4624,"children":4625},{"style":623},[4626],{"type":56,"value":620},{"type":29,"tag":127,"props":4628,"children":4629},{"style":941},[4630],{"type":56,"value":4577},{"type":29,"tag":127,"props":4632,"children":4633},{"style":623},[4634],{"type":56,"value":4635},"${nextRelease.version}",{"type":29,"tag":127,"props":4637,"children":4638},{"style":941},[4639],{"type":56,"value":4577},{"type":29,"tag":127,"props":4641,"children":4642},{"style":623},[4643],{"type":56,"value":4644},"\"\n",{"type":29,"tag":127,"props":4646,"children":4647},{"class":598,"line":118},[4648],{"type":29,"tag":127,"props":4649,"children":4650},{"style":603},[4651],{"type":56,"value":4652},"          }\n",{"type":29,"tag":127,"props":4654,"children":4655},{"class":598,"line":839},[4656],{"type":29,"tag":127,"props":4657,"children":4658},{"style":603},[4659],{"type":56,"value":4660},"        ]\n",{"type":29,"tag":127,"props":4662,"children":4663},{"class":598,"line":848},[4664],{"type":29,"tag":127,"props":4665,"children":4666},{"style":603},[4667],{"type":56,"value":953},{"type":29,"tag":127,"props":4669,"children":4670},{"class":598,"line":862},[4671],{"type":29,"tag":127,"props":4672,"children":4673},{"style":603},[4674],{"type":56,"value":1506},{"type":29,"tag":127,"props":4676,"children":4677},{"class":598,"line":871},[4678],{"type":29,"tag":127,"props":4679,"children":4680},{"style":603},[4681],{"type":56,"value":4493},{"type":29,"tag":127,"props":4683,"children":4684},{"class":598,"line":893},[4685,4690],{"type":29,"tag":127,"props":4686,"children":4687},{"style":623},[4688],{"type":56,"value":4689},"      \"@semantic-release/git\"",{"type":29,"tag":127,"props":4691,"children":4692},{"style":603},[4693],{"type":56,"value":631},{"type":29,"tag":127,"props":4695,"children":4696},{"class":598,"line":915},[4697],{"type":29,"tag":127,"props":4698,"children":4699},{"style":603},[4700],{"type":56,"value":4513},{"type":29,"tag":127,"props":4702,"children":4703},{"class":598,"line":928},[4704,4709,4713,4717],{"type":29,"tag":127,"props":4705,"children":4706},{"style":612},[4707],{"type":56,"value":4708},"        \"assets\"",{"type":29,"tag":127,"props":4710,"children":4711},{"style":603},[4712],{"type":56,"value":4328},{"type":29,"tag":127,"props":4714,"children":4715},{"style":623},[4716],{"type":56,"value":4550},{"type":29,"tag":127,"props":4718,"children":4719},{"style":603},[4720],{"type":56,"value":4555},{"type":29,"tag":127,"props":4722,"children":4723},{"class":598,"line":947},[4724,4729,4733,4738,4743],{"type":29,"tag":127,"props":4725,"children":4726},{"style":612},[4727],{"type":56,"value":4728},"        \"message\"",{"type":29,"tag":127,"props":4730,"children":4731},{"style":603},[4732],{"type":56,"value":620},{"type":29,"tag":127,"props":4734,"children":4735},{"style":623},[4736],{"type":56,"value":4737},"\"chore(release): ${nextRelease.version} [skip ci]",{"type":29,"tag":127,"props":4739,"children":4740},{"style":941},[4741],{"type":56,"value":4742},"\\n\\n",{"type":29,"tag":127,"props":4744,"children":4745},{"style":623},[4746],{"type":56,"value":4747},"${nextRelease.notes}\"\n",{"type":29,"tag":127,"props":4749,"children":4750},{"class":598,"line":956},[4751],{"type":29,"tag":127,"props":4752,"children":4753},{"style":603},[4754],{"type":56,"value":953},{"type":29,"tag":127,"props":4756,"children":4757},{"class":598,"line":965},[4758],{"type":29,"tag":127,"props":4759,"children":4760},{"style":603},[4761],{"type":56,"value":1506},{"type":29,"tag":127,"props":4763,"children":4764},{"class":598,"line":973},[4765],{"type":29,"tag":127,"props":4766,"children":4767},{"style":603},[4768],{"type":56,"value":4493},{"type":29,"tag":127,"props":4770,"children":4771},{"class":598,"line":993},[4772,4777],{"type":29,"tag":127,"props":4773,"children":4774},{"style":623},[4775],{"type":56,"value":4776},"      \"@semantic-release/exec\"",{"type":29,"tag":127,"props":4778,"children":4779},{"style":603},[4780],{"type":56,"value":631},{"type":29,"tag":127,"props":4782,"children":4783},{"class":598,"line":1014},[4784],{"type":29,"tag":127,"props":4785,"children":4786},{"style":603},[4787],{"type":56,"value":4513},{"type":29,"tag":127,"props":4789,"children":4790},{"class":598,"line":1026},[4791,4796,4800,4805,4809,4814,4818],{"type":29,"tag":127,"props":4792,"children":4793},{"style":612},[4794],{"type":56,"value":4795},"        \"publishCmd\"",{"type":29,"tag":127,"props":4797,"children":4798},{"style":603},[4799],{"type":56,"value":620},{"type":29,"tag":127,"props":4801,"children":4802},{"style":623},[4803],{"type":56,"value":4804},"\"curl --fail-with-body --header ",{"type":29,"tag":127,"props":4806,"children":4807},{"style":941},[4808],{"type":56,"value":4577},{"type":29,"tag":127,"props":4810,"children":4811},{"style":623},[4812],{"type":56,"value":4813},"Job-Token: ${process.env.CI_JOB_TOKEN}",{"type":29,"tag":127,"props":4815,"children":4816},{"style":941},[4817],{"type":56,"value":4577},{"type":29,"tag":127,"props":4819,"children":4820},{"style":623},[4821],{"type":56,"value":4822}," --data tag=${nextRelease.gitTag} ${process.env.CI_API_V4_URL}/projects/${process.env.CI_PROJECT_ID}/packages/composer\"\n",{"type":29,"tag":127,"props":4824,"children":4825},{"class":598,"line":1042},[4826],{"type":29,"tag":127,"props":4827,"children":4828},{"style":603},[4829],{"type":56,"value":953},{"type":29,"tag":127,"props":4831,"children":4832},{"class":598,"line":1050},[4833],{"type":29,"tag":127,"props":4834,"children":4835},{"style":603},[4836],{"type":56,"value":1536},{"type":29,"tag":127,"props":4838,"children":4839},{"class":598,"line":1058},[4840],{"type":29,"tag":127,"props":4841,"children":4842},{"style":603},[4843],{"type":56,"value":4844},"  ]\n",{"type":29,"tag":127,"props":4846,"children":4847},{"class":598,"line":1066},[4848],{"type":29,"tag":127,"props":4849,"children":4850},{"style":603},[4851],{"type":56,"value":1661},{"type":29,"tag":48,"props":4853,"children":4854},{},[4855],{"type":56,"value":4856},"This will:",{"type":29,"tag":509,"props":4858,"children":4859},{},[4860,4865,4875,4887,4892],{"type":29,"tag":513,"props":4861,"children":4862},{},[4863],{"type":56,"value":4864},"Analise the commits from the last release to decide if a new version should be released",{"type":29,"tag":513,"props":4866,"children":4867},{},[4868,4870],{"type":56,"value":4869},"Update the version in ",{"type":29,"tag":519,"props":4871,"children":4873},{"className":4872},[],[4874],{"type":56,"value":1936},{"type":29,"tag":513,"props":4876,"children":4877},{},[4878,4880,4885],{"type":56,"value":4879},"Commit the ",{"type":29,"tag":519,"props":4881,"children":4883},{"className":4882},[],[4884],{"type":56,"value":1936},{"type":56,"value":4886}," back into the repo",{"type":29,"tag":513,"props":4888,"children":4889},{},[4890],{"type":56,"value":4891},"Create a tag",{"type":29,"tag":513,"props":4893,"children":4894},{},[4895],{"type":56,"value":4896},"Release a composer package from this tag",{"type":29,"tag":4898,"props":4899,"children":4900},"style",{},[4901],{"type":56,"value":4902},"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":271,"depth":271,"links":4904},[4905,4911],{"id":554,"depth":271,"text":557,"children":4906},[4907,4908,4909,4910],{"id":565,"depth":634,"text":568},{"id":1902,"depth":634,"text":1905},{"id":2563,"depth":634,"text":2566},{"id":3914,"depth":634,"text":3917},{"id":3948,"depth":271,"text":3951,"children":4912},[4913,4914],{"id":3954,"depth":634,"text":3957},{"id":4191,"depth":634,"text":4194},{"_path":409,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":410,"description":411,"author":394,"image":395,"releaseDate":396,"blogCategories":4916,"articleTags":4917,"tags":4918,"body":4919,"_type":275,"_id":415,"_source":277,"_file":416,"_stem":417,"_extension":280},[398,399],[399,401,402],[23,404],{"type":26,"children":4920,"toc":5995},[4921,4925,4937,4949,4955,4960,4989,4994,4999,5018,5030,5035,5056,5062,5082,5401,5412,5417,5960,5969,5973,5991],{"type":29,"tag":66,"props":4922,"children":4924},{"alt":7,"aspect-ratio":474,"height":475,"object-fit":476,"src":4923},"/blog/shopware-plugin-build+release.png",[],{"type":29,"tag":48,"props":4926,"children":4927},{},[4928,4930,4935],{"type":56,"value":4929},"In my ",{"type":29,"tag":490,"props":4931,"children":4932},{"href":390},[4933],{"type":56,"value":4934},"previous post",{"type":56,"value":4936}," I described how to distribute a Shopware 6 plugin over GitLab Package registry.",{"type":29,"tag":48,"props":4938,"children":4939},{},[4940,4942,4947],{"type":56,"value":4941},"When building our project using ",{"type":29,"tag":490,"props":4943,"children":4945},{"href":4944},"https://developer.shopware.com/docs/products/cli/extension-commands/build.html#building-an-extension",[4946],{"type":56,"value":546},{"type":56,"value":4948},",\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":29,"tag":90,"props":4950,"children":4952},{"id":4951},"building-manually",[4953],{"type":56,"value":4954},"Building manually",{"type":29,"tag":48,"props":4956,"children":4957},{},[4958],{"type":56,"value":4959},"Building a plugin is as simple as running:",{"type":29,"tag":582,"props":4961,"children":4963},{"className":1669,"code":4962,"language":1671,"meta":7,"style":7},"shopware-cli extension build .\n",[4964],{"type":29,"tag":519,"props":4965,"children":4966},{"__ignoreMap":7},[4967],{"type":29,"tag":127,"props":4968,"children":4969},{"class":598,"line":599},[4970,4974,4979,4984],{"type":29,"tag":127,"props":4971,"children":4972},{"style":1681},[4973],{"type":56,"value":546},{"type":29,"tag":127,"props":4975,"children":4976},{"style":1686},[4977],{"type":56,"value":4978}," extension",{"type":29,"tag":127,"props":4980,"children":4981},{"style":1686},[4982],{"type":56,"value":4983}," build",{"type":29,"tag":127,"props":4985,"children":4986},{"style":1686},[4987],{"type":56,"value":4988}," .\n",{"type":29,"tag":48,"props":4990,"children":4991},{},[4992],{"type":56,"value":4993},"In the plugin root directory.",{"type":29,"tag":48,"props":4995,"children":4996},{},[4997],{"type":56,"value":4998},"There are some tweaks you can make, like:",{"type":29,"tag":5000,"props":5001,"children":5002},"ul",{},[5003,5008,5013],{"type":29,"tag":513,"props":5004,"children":5005},{},[5006],{"type":56,"value":5007},"constrain a shopware version",{"type":29,"tag":513,"props":5009,"children":5010},{},[5011],{"type":56,"value":5012},"specify extra bundles",{"type":29,"tag":513,"props":5014,"children":5015},{},[5016],{"type":56,"value":5017},"use esbuild",{"type":29,"tag":48,"props":5019,"children":5020},{},[5021,5023,5028],{"type":56,"value":5022},"Please refer to the ",{"type":29,"tag":490,"props":5024,"children":5026},{"href":5025},"https://developer.shopware.com/docs/products/cli/extension-commands/build.html",[5027],{"type":56,"value":495},{"type":56,"value":5029}," for detailed configuration.",{"type":29,"tag":48,"props":5031,"children":5032},{},[5033],{"type":56,"value":5034},"The build process will create the following directories containing the compiled files:",{"type":29,"tag":5000,"props":5036,"children":5037},{},[5038,5047],{"type":29,"tag":513,"props":5039,"children":5040},{},[5041],{"type":29,"tag":519,"props":5042,"children":5044},{"className":5043},[],[5045],{"type":56,"value":5046},"src/Resources/app/storefront/dist/",{"type":29,"tag":513,"props":5048,"children":5049},{},[5050],{"type":29,"tag":519,"props":5051,"children":5053},{"className":5052},[],[5054],{"type":56,"value":5055},"src/Resources/public/static/",{"type":29,"tag":90,"props":5057,"children":5059},{"id":5058},"build-pipeline",[5060],{"type":56,"value":5061},"Build pipeline",{"type":29,"tag":48,"props":5063,"children":5064},{},[5065,5067,5072,5074,5080],{"type":56,"value":5066},"We use the official ",{"type":29,"tag":519,"props":5068,"children":5070},{"className":5069},[],[5071],{"type":56,"value":546},{"type":56,"value":5073}," docker image. To speed up the process, we take advantage of the ",{"type":29,"tag":519,"props":5075,"children":5077},{"className":5076},[],[5078],{"type":56,"value":5079},"CI",{"type":56,"value":5081}," caching system.",{"type":29,"tag":582,"props":5083,"children":5086},{"className":4031,"code":5084,"filename":4227,"highlights":5085,"language":4034,"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",[692,848,862,871,893,915],[5087],{"type":29,"tag":519,"props":5088,"children":5089},{"__ignoreMap":7},[5090,5101,5113,5120,5132,5143,5160,5179,5194,5206,5223,5240,5251,5262,5275,5297,5310,5324,5337,5348,5367,5382],{"type":29,"tag":127,"props":5091,"children":5092},{"class":598,"line":599},[5093,5097],{"type":29,"tag":127,"props":5094,"children":5095},{"style":4044},[5096],{"type":56,"value":4047},{"type":29,"tag":127,"props":5098,"children":5099},{"style":603},[5100],{"type":56,"value":4052},{"type":29,"tag":127,"props":5102,"children":5103},{"class":598,"line":271},[5104,5108],{"type":29,"tag":127,"props":5105,"children":5106},{"style":603},[5107],{"type":56,"value":4060},{"type":29,"tag":127,"props":5109,"children":5110},{"style":1686},[5111],{"type":56,"value":5112},"build\n",{"type":29,"tag":127,"props":5114,"children":5115},{"class":598,"line":634},[5116],{"type":29,"tag":127,"props":5117,"children":5118},{"emptyLinePlaceholder":1855},[5119],{"type":56,"value":1858},{"type":29,"tag":127,"props":5121,"children":5122},{"class":598,"line":656},[5123,5128],{"type":29,"tag":127,"props":5124,"children":5125},{"style":4044},[5126],{"type":56,"value":5127},"build",{"type":29,"tag":127,"props":5129,"children":5130},{"style":603},[5131],{"type":56,"value":4052},{"type":29,"tag":127,"props":5133,"children":5134},{"class":598,"line":678},[5135,5139],{"type":29,"tag":127,"props":5136,"children":5137},{"style":4044},[5138],{"type":56,"value":4092},{"type":29,"tag":127,"props":5140,"children":5141},{"style":603},[5142],{"type":56,"value":4052},{"type":29,"tag":127,"props":5144,"children":5146},{"class":5145,"line":692},[598,1152],[5147,5151,5155],{"type":29,"tag":127,"props":5148,"children":5149},{"style":4044},[5150],{"type":56,"value":4306},{"type":29,"tag":127,"props":5152,"children":5153},{"style":603},[5154],{"type":56,"value":620},{"type":29,"tag":127,"props":5156,"children":5157},{"style":1686},[5158],{"type":56,"value":5159},"ghcr.io/shopware/shopware-cli:latest-php-8.2\n",{"type":29,"tag":127,"props":5161,"children":5162},{"class":598,"line":714},[5163,5167,5171,5175],{"type":29,"tag":127,"props":5164,"children":5165},{"style":4044},[5166],{"type":56,"value":4323},{"type":29,"tag":127,"props":5168,"children":5169},{"style":603},[5170],{"type":56,"value":4328},{"type":29,"tag":127,"props":5172,"children":5173},{"style":1686},[5174],{"type":56,"value":4333},{"type":29,"tag":127,"props":5176,"children":5177},{"style":603},[5178],{"type":56,"value":4338},{"type":29,"tag":127,"props":5180,"children":5181},{"class":598,"line":736},[5182,5186,5190],{"type":29,"tag":127,"props":5183,"children":5184},{"style":4044},[5185],{"type":56,"value":4109},{"type":29,"tag":127,"props":5187,"children":5188},{"style":603},[5189],{"type":56,"value":620},{"type":29,"tag":127,"props":5191,"children":5192},{"style":1686},[5193],{"type":56,"value":5112},{"type":29,"tag":127,"props":5195,"children":5196},{"class":598,"line":758},[5197,5202],{"type":29,"tag":127,"props":5198,"children":5199},{"style":4044},[5200],{"type":56,"value":5201},"  variables",{"type":29,"tag":127,"props":5203,"children":5204},{"style":603},[5205],{"type":56,"value":4052},{"type":29,"tag":127,"props":5207,"children":5208},{"class":598,"line":780},[5209,5214,5218],{"type":29,"tag":127,"props":5210,"children":5211},{"style":4044},[5212],{"type":56,"value":5213},"    COMPOSER_CACHE_DIR",{"type":29,"tag":127,"props":5215,"children":5216},{"style":603},[5217],{"type":56,"value":620},{"type":29,"tag":127,"props":5219,"children":5220},{"style":1686},[5221],{"type":56,"value":5222},"${CI_PROJECT_DIR}/.composer\n",{"type":29,"tag":127,"props":5224,"children":5225},{"class":598,"line":801},[5226,5231,5235],{"type":29,"tag":127,"props":5227,"children":5228},{"style":4044},[5229],{"type":56,"value":5230},"    npm_config_cache",{"type":29,"tag":127,"props":5232,"children":5233},{"style":603},[5234],{"type":56,"value":620},{"type":29,"tag":127,"props":5236,"children":5237},{"style":1686},[5238],{"type":56,"value":5239},"${CI_PROJECT_DIR}/.npm\n",{"type":29,"tag":127,"props":5241,"children":5242},{"class":598,"line":118},[5243,5247],{"type":29,"tag":127,"props":5244,"children":5245},{"style":4044},[5246],{"type":56,"value":4125},{"type":29,"tag":127,"props":5248,"children":5249},{"style":603},[5250],{"type":56,"value":4052},{"type":29,"tag":127,"props":5252,"children":5253},{"class":598,"line":839},[5254,5258],{"type":29,"tag":127,"props":5255,"children":5256},{"style":603},[5257],{"type":56,"value":4137},{"type":29,"tag":127,"props":5259,"children":5260},{"style":1686},[5261],{"type":56,"value":4962},{"type":29,"tag":127,"props":5263,"children":5265},{"class":5264,"line":848},[598,1152],[5266,5271],{"type":29,"tag":127,"props":5267,"children":5268},{"style":4044},[5269],{"type":56,"value":5270},"  cache",{"type":29,"tag":127,"props":5272,"children":5273},{"style":603},[5274],{"type":56,"value":4052},{"type":29,"tag":127,"props":5276,"children":5278},{"class":5277,"line":862},[598,1152],[5279,5283,5288,5292],{"type":29,"tag":127,"props":5280,"children":5281},{"style":603},[5282],{"type":56,"value":4137},{"type":29,"tag":127,"props":5284,"children":5285},{"style":4044},[5286],{"type":56,"value":5287},"key",{"type":29,"tag":127,"props":5289,"children":5290},{"style":603},[5291],{"type":56,"value":620},{"type":29,"tag":127,"props":5293,"children":5294},{"style":1686},[5295],{"type":56,"value":5296},"$CI_JOB_NAME\n",{"type":29,"tag":127,"props":5298,"children":5300},{"class":5299,"line":871},[598,1152],[5301,5306],{"type":29,"tag":127,"props":5302,"children":5303},{"style":4044},[5304],{"type":56,"value":5305},"      paths",{"type":29,"tag":127,"props":5307,"children":5308},{"style":603},[5309],{"type":56,"value":4052},{"type":29,"tag":127,"props":5311,"children":5313},{"class":5312,"line":893},[598,1152],[5314,5319],{"type":29,"tag":127,"props":5315,"children":5316},{"style":603},[5317],{"type":56,"value":5318},"        - ",{"type":29,"tag":127,"props":5320,"children":5321},{"style":1686},[5322],{"type":56,"value":5323},"$COMPOSER_CACHE_DIR\n",{"type":29,"tag":127,"props":5325,"children":5327},{"class":5326,"line":915},[598,1152],[5328,5332],{"type":29,"tag":127,"props":5329,"children":5330},{"style":603},[5331],{"type":56,"value":5318},{"type":29,"tag":127,"props":5333,"children":5334},{"style":1686},[5335],{"type":56,"value":5336},"$npm_config_cache\n",{"type":29,"tag":127,"props":5338,"children":5339},{"class":598,"line":928},[5340,5344],{"type":29,"tag":127,"props":5341,"children":5342},{"style":4044},[5343],{"type":56,"value":4167},{"type":29,"tag":127,"props":5345,"children":5346},{"style":603},[5347],{"type":56,"value":4052},{"type":29,"tag":127,"props":5349,"children":5350},{"class":598,"line":947},[5351,5355,5359,5363],{"type":29,"tag":127,"props":5352,"children":5353},{"style":603},[5354],{"type":56,"value":4137},{"type":29,"tag":127,"props":5356,"children":5357},{"style":4044},[5358],{"type":56,"value":4400},{"type":29,"tag":127,"props":5360,"children":5361},{"style":603},[5362],{"type":56,"value":620},{"type":29,"tag":127,"props":5364,"children":5365},{"style":1686},[5366],{"type":56,"value":4409},{"type":29,"tag":127,"props":5368,"children":5369},{"class":598,"line":956},[5370,5374,5378],{"type":29,"tag":127,"props":5371,"children":5372},{"style":4044},[5373],{"type":56,"value":4417},{"type":29,"tag":127,"props":5375,"children":5376},{"style":603},[5377],{"type":56,"value":620},{"type":29,"tag":127,"props":5379,"children":5380},{"style":1686},[5381],{"type":56,"value":4426},{"type":29,"tag":127,"props":5383,"children":5384},{"class":598,"line":965},[5385,5389,5393,5397],{"type":29,"tag":127,"props":5386,"children":5387},{"style":603},[5388],{"type":56,"value":4137},{"type":29,"tag":127,"props":5390,"children":5391},{"style":4044},[5392],{"type":56,"value":4400},{"type":29,"tag":127,"props":5394,"children":5395},{"style":603},[5396],{"type":56,"value":620},{"type":29,"tag":127,"props":5398,"children":5399},{"style":1686},[5400],{"type":56,"value":4446},{"type":29,"tag":48,"props":5402,"children":5403},{},[5404,5406,5411],{"type":56,"value":5405},"Let's combine it with our release pipeline from the ",{"type":29,"tag":490,"props":5407,"children":5409},{"href":5408},"/en/blog/shopware-plugin-gitlab-pipeline-release#with-semantic-release",[5410],{"type":56,"value":4934},{"type":56,"value":497},{"type":29,"tag":48,"props":5413,"children":5414},{},[5415],{"type":56,"value":5416},"It's important to pass the built artifacts over to the next job.",{"type":29,"tag":582,"props":5418,"children":5421},{"className":4031,"code":5419,"filename":4227,"highlights":5420,"language":4034,"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",[947,956,965,973],[5422],{"type":29,"tag":519,"props":5423,"children":5424},{"__ignoreMap":7},[5425,5436,5447,5458,5465,5476,5487,5502,5521,5536,5547,5562,5577,5588,5599,5610,5629,5640,5651,5662,5675,5688,5702,5715,5726,5745,5760,5779,5786,5797,5812,5823,5839,5858,5873,5884,5896,5907,5926,5941],{"type":29,"tag":127,"props":5426,"children":5427},{"class":598,"line":599},[5428,5432],{"type":29,"tag":127,"props":5429,"children":5430},{"style":4044},[5431],{"type":56,"value":4047},{"type":29,"tag":127,"props":5433,"children":5434},{"style":603},[5435],{"type":56,"value":4052},{"type":29,"tag":127,"props":5437,"children":5438},{"class":598,"line":271},[5439,5443],{"type":29,"tag":127,"props":5440,"children":5441},{"style":603},[5442],{"type":56,"value":4060},{"type":29,"tag":127,"props":5444,"children":5445},{"style":1686},[5446],{"type":56,"value":4065},{"type":29,"tag":127,"props":5448,"children":5449},{"class":598,"line":634},[5450,5454],{"type":29,"tag":127,"props":5451,"children":5452},{"style":603},[5453],{"type":56,"value":4060},{"type":29,"tag":127,"props":5455,"children":5456},{"style":1686},[5457],{"type":56,"value":5112},{"type":29,"tag":127,"props":5459,"children":5460},{"class":598,"line":656},[5461],{"type":29,"tag":127,"props":5462,"children":5463},{"emptyLinePlaceholder":1855},[5464],{"type":56,"value":1858},{"type":29,"tag":127,"props":5466,"children":5467},{"class":598,"line":678},[5468,5472],{"type":29,"tag":127,"props":5469,"children":5470},{"style":4044},[5471],{"type":56,"value":5127},{"type":29,"tag":127,"props":5473,"children":5474},{"style":603},[5475],{"type":56,"value":4052},{"type":29,"tag":127,"props":5477,"children":5478},{"class":598,"line":692},[5479,5483],{"type":29,"tag":127,"props":5480,"children":5481},{"style":4044},[5482],{"type":56,"value":4092},{"type":29,"tag":127,"props":5484,"children":5485},{"style":603},[5486],{"type":56,"value":4052},{"type":29,"tag":127,"props":5488,"children":5489},{"class":598,"line":714},[5490,5494,5498],{"type":29,"tag":127,"props":5491,"children":5492},{"style":4044},[5493],{"type":56,"value":4306},{"type":29,"tag":127,"props":5495,"children":5496},{"style":603},[5497],{"type":56,"value":620},{"type":29,"tag":127,"props":5499,"children":5500},{"style":1686},[5501],{"type":56,"value":5159},{"type":29,"tag":127,"props":5503,"children":5504},{"class":598,"line":736},[5505,5509,5513,5517],{"type":29,"tag":127,"props":5506,"children":5507},{"style":4044},[5508],{"type":56,"value":4323},{"type":29,"tag":127,"props":5510,"children":5511},{"style":603},[5512],{"type":56,"value":4328},{"type":29,"tag":127,"props":5514,"children":5515},{"style":1686},[5516],{"type":56,"value":4333},{"type":29,"tag":127,"props":5518,"children":5519},{"style":603},[5520],{"type":56,"value":4338},{"type":29,"tag":127,"props":5522,"children":5523},{"class":598,"line":758},[5524,5528,5532],{"type":29,"tag":127,"props":5525,"children":5526},{"style":4044},[5527],{"type":56,"value":4109},{"type":29,"tag":127,"props":5529,"children":5530},{"style":603},[5531],{"type":56,"value":620},{"type":29,"tag":127,"props":5533,"children":5534},{"style":1686},[5535],{"type":56,"value":5112},{"type":29,"tag":127,"props":5537,"children":5538},{"class":598,"line":780},[5539,5543],{"type":29,"tag":127,"props":5540,"children":5541},{"style":4044},[5542],{"type":56,"value":5201},{"type":29,"tag":127,"props":5544,"children":5545},{"style":603},[5546],{"type":56,"value":4052},{"type":29,"tag":127,"props":5548,"children":5549},{"class":598,"line":801},[5550,5554,5558],{"type":29,"tag":127,"props":5551,"children":5552},{"style":4044},[5553],{"type":56,"value":5213},{"type":29,"tag":127,"props":5555,"children":5556},{"style":603},[5557],{"type":56,"value":620},{"type":29,"tag":127,"props":5559,"children":5560},{"style":1686},[5561],{"type":56,"value":5222},{"type":29,"tag":127,"props":5563,"children":5564},{"class":598,"line":118},[5565,5569,5573],{"type":29,"tag":127,"props":5566,"children":5567},{"style":4044},[5568],{"type":56,"value":5230},{"type":29,"tag":127,"props":5570,"children":5571},{"style":603},[5572],{"type":56,"value":620},{"type":29,"tag":127,"props":5574,"children":5575},{"style":1686},[5576],{"type":56,"value":5239},{"type":29,"tag":127,"props":5578,"children":5579},{"class":598,"line":839},[5580,5584],{"type":29,"tag":127,"props":5581,"children":5582},{"style":4044},[5583],{"type":56,"value":4125},{"type":29,"tag":127,"props":5585,"children":5586},{"style":603},[5587],{"type":56,"value":4052},{"type":29,"tag":127,"props":5589,"children":5590},{"class":598,"line":848},[5591,5595],{"type":29,"tag":127,"props":5592,"children":5593},{"style":603},[5594],{"type":56,"value":4137},{"type":29,"tag":127,"props":5596,"children":5597},{"style":1686},[5598],{"type":56,"value":4962},{"type":29,"tag":127,"props":5600,"children":5601},{"class":598,"line":862},[5602,5606],{"type":29,"tag":127,"props":5603,"children":5604},{"style":4044},[5605],{"type":56,"value":5270},{"type":29,"tag":127,"props":5607,"children":5608},{"style":603},[5609],{"type":56,"value":4052},{"type":29,"tag":127,"props":5611,"children":5612},{"class":598,"line":871},[5613,5617,5621,5625],{"type":29,"tag":127,"props":5614,"children":5615},{"style":603},[5616],{"type":56,"value":4137},{"type":29,"tag":127,"props":5618,"children":5619},{"style":4044},[5620],{"type":56,"value":5287},{"type":29,"tag":127,"props":5622,"children":5623},{"style":603},[5624],{"type":56,"value":620},{"type":29,"tag":127,"props":5626,"children":5627},{"style":1686},[5628],{"type":56,"value":5296},{"type":29,"tag":127,"props":5630,"children":5631},{"class":598,"line":893},[5632,5636],{"type":29,"tag":127,"props":5633,"children":5634},{"style":4044},[5635],{"type":56,"value":5305},{"type":29,"tag":127,"props":5637,"children":5638},{"style":603},[5639],{"type":56,"value":4052},{"type":29,"tag":127,"props":5641,"children":5642},{"class":598,"line":915},[5643,5647],{"type":29,"tag":127,"props":5644,"children":5645},{"style":603},[5646],{"type":56,"value":5318},{"type":29,"tag":127,"props":5648,"children":5649},{"style":1686},[5650],{"type":56,"value":5323},{"type":29,"tag":127,"props":5652,"children":5653},{"class":598,"line":928},[5654,5658],{"type":29,"tag":127,"props":5655,"children":5656},{"style":603},[5657],{"type":56,"value":5318},{"type":29,"tag":127,"props":5659,"children":5660},{"style":1686},[5661],{"type":56,"value":5336},{"type":29,"tag":127,"props":5663,"children":5665},{"class":5664,"line":947},[598,1152],[5666,5671],{"type":29,"tag":127,"props":5667,"children":5668},{"style":4044},[5669],{"type":56,"value":5670},"  artifacts",{"type":29,"tag":127,"props":5672,"children":5673},{"style":603},[5674],{"type":56,"value":4052},{"type":29,"tag":127,"props":5676,"children":5678},{"class":5677,"line":956},[598,1152],[5679,5684],{"type":29,"tag":127,"props":5680,"children":5681},{"style":4044},[5682],{"type":56,"value":5683},"    paths",{"type":29,"tag":127,"props":5685,"children":5686},{"style":603},[5687],{"type":56,"value":4052},{"type":29,"tag":127,"props":5689,"children":5691},{"class":5690,"line":965},[598,1152],[5692,5697],{"type":29,"tag":127,"props":5693,"children":5694},{"style":603},[5695],{"type":56,"value":5696},"      - ",{"type":29,"tag":127,"props":5698,"children":5699},{"style":1686},[5700],{"type":56,"value":5701},"src/Resources/public\n",{"type":29,"tag":127,"props":5703,"children":5705},{"class":5704,"line":973},[598,1152],[5706,5710],{"type":29,"tag":127,"props":5707,"children":5708},{"style":603},[5709],{"type":56,"value":5696},{"type":29,"tag":127,"props":5711,"children":5712},{"style":1686},[5713],{"type":56,"value":5714},"src/Storefront/Resources/public\n",{"type":29,"tag":127,"props":5716,"children":5717},{"class":598,"line":993},[5718,5722],{"type":29,"tag":127,"props":5719,"children":5720},{"style":4044},[5721],{"type":56,"value":4167},{"type":29,"tag":127,"props":5723,"children":5724},{"style":603},[5725],{"type":56,"value":4052},{"type":29,"tag":127,"props":5727,"children":5728},{"class":598,"line":1014},[5729,5733,5737,5741],{"type":29,"tag":127,"props":5730,"children":5731},{"style":603},[5732],{"type":56,"value":4137},{"type":29,"tag":127,"props":5734,"children":5735},{"style":4044},[5736],{"type":56,"value":4400},{"type":29,"tag":127,"props":5738,"children":5739},{"style":603},[5740],{"type":56,"value":620},{"type":29,"tag":127,"props":5742,"children":5743},{"style":1686},[5744],{"type":56,"value":4409},{"type":29,"tag":127,"props":5746,"children":5747},{"class":598,"line":1026},[5748,5752,5756],{"type":29,"tag":127,"props":5749,"children":5750},{"style":4044},[5751],{"type":56,"value":4417},{"type":29,"tag":127,"props":5753,"children":5754},{"style":603},[5755],{"type":56,"value":620},{"type":29,"tag":127,"props":5757,"children":5758},{"style":1686},[5759],{"type":56,"value":4426},{"type":29,"tag":127,"props":5761,"children":5762},{"class":598,"line":1042},[5763,5767,5771,5775],{"type":29,"tag":127,"props":5764,"children":5765},{"style":603},[5766],{"type":56,"value":4137},{"type":29,"tag":127,"props":5768,"children":5769},{"style":4044},[5770],{"type":56,"value":4400},{"type":29,"tag":127,"props":5772,"children":5773},{"style":603},[5774],{"type":56,"value":620},{"type":29,"tag":127,"props":5776,"children":5777},{"style":1686},[5778],{"type":56,"value":4446},{"type":29,"tag":127,"props":5780,"children":5781},{"class":598,"line":1050},[5782],{"type":29,"tag":127,"props":5783,"children":5784},{"emptyLinePlaceholder":1855},[5785],{"type":56,"value":1858},{"type":29,"tag":127,"props":5787,"children":5788},{"class":598,"line":1058},[5789,5793],{"type":29,"tag":127,"props":5790,"children":5791},{"style":4044},[5792],{"type":56,"value":4268},{"type":29,"tag":127,"props":5794,"children":5795},{"style":603},[5796],{"type":56,"value":4052},{"type":29,"tag":127,"props":5798,"children":5799},{"class":598,"line":1066},[5800,5804,5808],{"type":29,"tag":127,"props":5801,"children":5802},{"style":4044},[5803],{"type":56,"value":4109},{"type":29,"tag":127,"props":5805,"children":5806},{"style":603},[5807],{"type":56,"value":620},{"type":29,"tag":127,"props":5809,"children":5810},{"style":1686},[5811],{"type":56,"value":4065},{"type":29,"tag":127,"props":5813,"children":5814},{"class":598,"line":1086},[5815,5819],{"type":29,"tag":127,"props":5816,"children":5817},{"style":4044},[5818],{"type":56,"value":4092},{"type":29,"tag":127,"props":5820,"children":5821},{"style":603},[5822],{"type":56,"value":4052},{"type":29,"tag":127,"props":5824,"children":5825},{"class":598,"line":1107},[5826,5830,5834],{"type":29,"tag":127,"props":5827,"children":5828},{"style":4044},[5829],{"type":56,"value":4306},{"type":29,"tag":127,"props":5831,"children":5832},{"style":603},[5833],{"type":56,"value":620},{"type":29,"tag":127,"props":5835,"children":5836},{"style":1686},[5837],{"type":56,"value":5838},"ghcr.io/voxpupuli/semantic-release:latest\n",{"type":29,"tag":127,"props":5840,"children":5841},{"class":598,"line":1119},[5842,5846,5850,5854],{"type":29,"tag":127,"props":5843,"children":5844},{"style":4044},[5845],{"type":56,"value":4323},{"type":29,"tag":127,"props":5847,"children":5848},{"style":603},[5849],{"type":56,"value":4328},{"type":29,"tag":127,"props":5851,"children":5852},{"style":1686},[5853],{"type":56,"value":4333},{"type":29,"tag":127,"props":5855,"children":5856},{"style":603},[5857],{"type":56,"value":4338},{"type":29,"tag":127,"props":5859,"children":5860},{"class":598,"line":1135},[5861,5865,5869],{"type":29,"tag":127,"props":5862,"children":5863},{"style":4044},[5864],{"type":56,"value":4346},{"type":29,"tag":127,"props":5866,"children":5867},{"style":603},[5868],{"type":56,"value":620},{"type":29,"tag":127,"props":5870,"children":5871},{"style":941},[5872],{"type":56,"value":944},{"type":29,"tag":127,"props":5874,"children":5875},{"class":598,"line":1143},[5876,5880],{"type":29,"tag":127,"props":5877,"children":5878},{"style":4044},[5879],{"type":56,"value":4125},{"type":29,"tag":127,"props":5881,"children":5882},{"style":603},[5883],{"type":56,"value":4052},{"type":29,"tag":127,"props":5885,"children":5886},{"class":598,"line":588},[5887,5891],{"type":29,"tag":127,"props":5888,"children":5889},{"style":603},[5890],{"type":56,"value":4137},{"type":29,"tag":127,"props":5892,"children":5893},{"style":1686},[5894],{"type":56,"value":5895},"/docker-entrypoint.sh\n",{"type":29,"tag":127,"props":5897,"children":5898},{"class":598,"line":589},[5899,5903],{"type":29,"tag":127,"props":5900,"children":5901},{"style":4044},[5902],{"type":56,"value":4167},{"type":29,"tag":127,"props":5904,"children":5905},{"style":603},[5906],{"type":56,"value":4052},{"type":29,"tag":127,"props":5908,"children":5909},{"class":598,"line":590},[5910,5914,5918,5922],{"type":29,"tag":127,"props":5911,"children":5912},{"style":603},[5913],{"type":56,"value":4137},{"type":29,"tag":127,"props":5915,"children":5916},{"style":4044},[5917],{"type":56,"value":4400},{"type":29,"tag":127,"props":5919,"children":5920},{"style":603},[5921],{"type":56,"value":620},{"type":29,"tag":127,"props":5923,"children":5924},{"style":1686},[5925],{"type":56,"value":4409},{"type":29,"tag":127,"props":5927,"children":5928},{"class":598,"line":591},[5929,5933,5937],{"type":29,"tag":127,"props":5930,"children":5931},{"style":4044},[5932],{"type":56,"value":4417},{"type":29,"tag":127,"props":5934,"children":5935},{"style":603},[5936],{"type":56,"value":620},{"type":29,"tag":127,"props":5938,"children":5939},{"style":1686},[5940],{"type":56,"value":4426},{"type":29,"tag":127,"props":5942,"children":5943},{"class":598,"line":1207},[5944,5948,5952,5956],{"type":29,"tag":127,"props":5945,"children":5946},{"style":603},[5947],{"type":56,"value":4137},{"type":29,"tag":127,"props":5949,"children":5950},{"style":4044},[5951],{"type":56,"value":4400},{"type":29,"tag":127,"props":5953,"children":5954},{"style":603},[5955],{"type":56,"value":620},{"type":29,"tag":127,"props":5957,"children":5958},{"style":1686},[5959],{"type":56,"value":4446},{"type":29,"tag":48,"props":5961,"children":5962},{},[5963],{"type":29,"tag":127,"props":5964,"children":5966},{"className":5965},[3908],[5967],{"type":56,"value":5968},"That's it!",{"type":29,"tag":48,"props":5970,"children":5971},{},[5972],{"type":56,"value":4856},{"type":29,"tag":509,"props":5974,"children":5975},{},[5976,5981,5986],{"type":29,"tag":513,"props":5977,"children":5978},{},[5979],{"type":56,"value":5980},"Build all the assets",{"type":29,"tag":513,"props":5982,"children":5983},{},[5984],{"type":56,"value":5985},"Pass them to the second job",{"type":29,"tag":513,"props":5987,"children":5988},{},[5989],{"type":56,"value":5990},"Run the release process as described previously",{"type":29,"tag":4898,"props":5992,"children":5993},{},[5994],{"type":56,"value":4902},{"title":7,"searchDepth":271,"depth":271,"links":5996},[5997,5998],{"id":4951,"depth":271,"text":4954},{"id":5058,"depth":271,"text":5061},{"_path":419,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":420,"description":421,"author":394,"image":395,"releaseDate":396,"blogCategories":6000,"articleTags":6001,"tags":6002,"body":6003,"_type":275,"_id":425,"_source":277,"_file":426,"_stem":427,"_extension":280},[398,399],[399,401,402],[23,404],{"type":26,"children":6004,"toc":8272},[6005,6009,6014,6065,6071,6083,6094,6136,6149,6157,6168,6174,6179,6449,6454,6459,6464,6469,6480,6485,6510,6516,6528,7298,7303,7331,7336,7342,7347,8268],{"type":29,"tag":66,"props":6006,"children":6008},{"alt":7,"aspect-ratio":474,"height":475,"object-fit":476,"src":6007},"/blog/shopware-plugin-test.png",[],{"type":29,"tag":48,"props":6010,"children":6011},{},[6012],{"type":56,"value":6013},"When it comes to testing a Shopware 6 plugin, there are two types of test that can be performed:",{"type":29,"tag":509,"props":6015,"children":6016},{},[6017,6053],{"type":29,"tag":513,"props":6018,"children":6019},{},[6020,6022,6028,6030],{"type":56,"value":6021},"Testing the code itself (",{"type":29,"tag":490,"props":6023,"children":6025},{"href":6024},"https://developer.shopware.com/docs/guides/plugins/plugins/testing/",[6026],{"type":56,"value":6027},"more in the official documentation",{"type":56,"value":6029},")\n",{"type":29,"tag":509,"props":6031,"children":6032},{},[6033,6038,6043,6048],{"type":29,"tag":513,"props":6034,"children":6035},{},[6036],{"type":56,"value":6037},"PHP unit test",{"type":29,"tag":513,"props":6039,"children":6040},{},[6041],{"type":56,"value":6042},"Jest unit tests in Shopware's storefront",{"type":29,"tag":513,"props":6044,"children":6045},{},[6046],{"type":56,"value":6047},"Jest unit tests in Shopware's administration",{"type":29,"tag":513,"props":6049,"children":6050},{},[6051],{"type":56,"value":6052},"End-to-End (E2E) Testing",{"type":29,"tag":513,"props":6054,"children":6055},{},[6056,6058,6063],{"type":56,"value":6057},"Ensuring high code quality (",{"type":29,"tag":490,"props":6059,"children":6061},{"href":6060},"https://developer.shopware.com/docs/products/cli/validation.html",[6062],{"type":56,"value":6027},{"type":56,"value":6064},")",{"type":29,"tag":90,"props":6066,"children":6068},{"id":6067},"code-quality",[6069],{"type":56,"value":6070},"Code quality",{"type":29,"tag":48,"props":6072,"children":6073},{},[6074,6076,6081],{"type":56,"value":6075},"Let's start with code quality because it's easier to run it outside a ",{"type":29,"tag":519,"props":6077,"children":6079},{"className":6078},[],[6080],{"type":56,"value":3928},{"type":56,"value":6082}," environment.",{"type":29,"tag":48,"props":6084,"children":6085},{},[6086,6088,6093],{"type":56,"value":6087},"We will again use the ",{"type":29,"tag":519,"props":6089,"children":6091},{"className":6090},[],[6092],{"type":56,"value":546},{"type":56,"value":497},{"type":29,"tag":582,"props":6095,"children":6097},{"code":6096,"language":1671,"meta":7,"className":1669,"style":7},"shopware-cli extension validate --full --reporter summary .\n",[6098],{"type":29,"tag":519,"props":6099,"children":6100},{"__ignoreMap":7},[6101],{"type":29,"tag":127,"props":6102,"children":6103},{"class":598,"line":599},[6104,6108,6112,6117,6122,6127,6132],{"type":29,"tag":127,"props":6105,"children":6106},{"style":1681},[6107],{"type":56,"value":546},{"type":29,"tag":127,"props":6109,"children":6110},{"style":1686},[6111],{"type":56,"value":4978},{"type":29,"tag":127,"props":6113,"children":6114},{"style":1686},[6115],{"type":56,"value":6116}," validate",{"type":29,"tag":127,"props":6118,"children":6119},{"style":941},[6120],{"type":56,"value":6121}," --full",{"type":29,"tag":127,"props":6123,"children":6124},{"style":941},[6125],{"type":56,"value":6126}," --reporter",{"type":29,"tag":127,"props":6128,"children":6129},{"style":1686},[6130],{"type":56,"value":6131}," summary",{"type":29,"tag":127,"props":6133,"children":6134},{"style":1686},[6135],{"type":56,"value":4988},{"type":29,"tag":48,"props":6137,"children":6138},{},[6139,6141,6147],{"type":56,"value":6140},"This will run all the tests described ",{"type":29,"tag":490,"props":6142,"children":6144},{"href":6143},"https://developer.shopware.com/docs/products/cli/validation.html#running-all-validation-tools",[6145],{"type":56,"value":6146},"here",{"type":56,"value":6148},"\nand hopefully produce an output like this:",{"type":29,"tag":582,"props":6150,"children":6152},{"code":6151},"✖ 0 problems (0 errors, 0 warnings)\n",[6153],{"type":29,"tag":519,"props":6154,"children":6155},{"__ignoreMap":7},[6156],{"type":56,"value":6151},{"type":29,"tag":48,"props":6158,"children":6159},{},[6160,6162,6167],{"type":56,"value":6161},"If there are any errors, refer to the Shopware documentation how to fix them and rerun only the failed tests like described ",{"type":29,"tag":490,"props":6163,"children":6165},{"href":6164},"https://developer.shopware.com/docs/products/cli/validation.html#running-specific-tools",[6166],{"type":56,"value":6146},{"type":56,"value":497},{"type":29,"tag":122,"props":6169,"children":6171},{"id":6170},"code-quality-pipeline",[6172],{"type":56,"value":6173},"Code quality pipeline",{"type":29,"tag":48,"props":6175,"children":6176},{},[6177],{"type":56,"value":6178},"Now we will run it in GitLab.",{"type":29,"tag":582,"props":6180,"children":6183},{"code":6181,"filename":4227,"highlights":6182,"language":4034,"meta":7,"className":4031,"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",[692,848,862,871,893,915],[6184],{"type":29,"tag":519,"props":6185,"children":6186},{"__ignoreMap":7},[6187,6198,6210,6217,6228,6240,6257,6277,6293,6305,6317,6329,6341,6358,6371,6392,6412,6429],{"type":29,"tag":127,"props":6188,"children":6189},{"class":598,"line":599},[6190,6194],{"type":29,"tag":127,"props":6191,"children":6192},{"style":4044},[6193],{"type":56,"value":4047},{"type":29,"tag":127,"props":6195,"children":6196},{"style":603},[6197],{"type":56,"value":4052},{"type":29,"tag":127,"props":6199,"children":6200},{"class":598,"line":271},[6201,6205],{"type":29,"tag":127,"props":6202,"children":6203},{"style":603},[6204],{"type":56,"value":4060},{"type":29,"tag":127,"props":6206,"children":6207},{"style":1686},[6208],{"type":56,"value":6209},"test\n",{"type":29,"tag":127,"props":6211,"children":6212},{"class":598,"line":634},[6213],{"type":29,"tag":127,"props":6214,"children":6215},{"emptyLinePlaceholder":1855},[6216],{"type":56,"value":1858},{"type":29,"tag":127,"props":6218,"children":6219},{"class":598,"line":656},[6220,6224],{"type":29,"tag":127,"props":6221,"children":6222},{"style":4044},[6223],{"type":56,"value":6067},{"type":29,"tag":127,"props":6225,"children":6226},{"style":603},[6227],{"type":56,"value":4052},{"type":29,"tag":127,"props":6229,"children":6230},{"class":598,"line":678},[6231,6236],{"type":29,"tag":127,"props":6232,"children":6233},{"style":4044},[6234],{"type":56,"value":6235},"   image",{"type":29,"tag":127,"props":6237,"children":6238},{"style":603},[6239],{"type":56,"value":4052},{"type":29,"tag":127,"props":6241,"children":6243},{"class":6242,"line":692},[598,1152],[6244,6249,6253],{"type":29,"tag":127,"props":6245,"children":6246},{"style":4044},[6247],{"type":56,"value":6248},"      name",{"type":29,"tag":127,"props":6250,"children":6251},{"style":603},[6252],{"type":56,"value":620},{"type":29,"tag":127,"props":6254,"children":6255},{"style":1686},[6256],{"type":56,"value":5159},{"type":29,"tag":127,"props":6258,"children":6259},{"class":598,"line":714},[6260,6265,6269,6273],{"type":29,"tag":127,"props":6261,"children":6262},{"style":4044},[6263],{"type":56,"value":6264},"      entrypoint",{"type":29,"tag":127,"props":6266,"children":6267},{"style":603},[6268],{"type":56,"value":4328},{"type":29,"tag":127,"props":6270,"children":6271},{"style":1686},[6272],{"type":56,"value":4333},{"type":29,"tag":127,"props":6274,"children":6275},{"style":603},[6276],{"type":56,"value":4338},{"type":29,"tag":127,"props":6278,"children":6279},{"class":598,"line":736},[6280,6285,6289],{"type":29,"tag":127,"props":6281,"children":6282},{"style":4044},[6283],{"type":56,"value":6284},"   stage",{"type":29,"tag":127,"props":6286,"children":6287},{"style":603},[6288],{"type":56,"value":620},{"type":29,"tag":127,"props":6290,"children":6291},{"style":1686},[6292],{"type":56,"value":6209},{"type":29,"tag":127,"props":6294,"children":6295},{"class":598,"line":758},[6296,6301],{"type":29,"tag":127,"props":6297,"children":6298},{"style":4044},[6299],{"type":56,"value":6300},"   script",{"type":29,"tag":127,"props":6302,"children":6303},{"style":603},[6304],{"type":56,"value":4052},{"type":29,"tag":127,"props":6306,"children":6307},{"class":598,"line":780},[6308,6312],{"type":29,"tag":127,"props":6309,"children":6310},{"style":603},[6311],{"type":56,"value":5696},{"type":29,"tag":127,"props":6313,"children":6314},{"style":1686},[6315],{"type":56,"value":6316},"shopware-cli extension validate --full . | tee report.json\n",{"type":29,"tag":127,"props":6318,"children":6319},{"class":598,"line":801},[6320,6325],{"type":29,"tag":127,"props":6321,"children":6322},{"style":4044},[6323],{"type":56,"value":6324},"   artifacts",{"type":29,"tag":127,"props":6326,"children":6327},{"style":603},[6328],{"type":56,"value":4052},{"type":29,"tag":127,"props":6330,"children":6331},{"class":598,"line":118},[6332,6337],{"type":29,"tag":127,"props":6333,"children":6334},{"style":4044},[6335],{"type":56,"value":6336},"      reports",{"type":29,"tag":127,"props":6338,"children":6339},{"style":603},[6340],{"type":56,"value":4052},{"type":29,"tag":127,"props":6342,"children":6343},{"class":598,"line":839},[6344,6349,6353],{"type":29,"tag":127,"props":6345,"children":6346},{"style":4044},[6347],{"type":56,"value":6348},"         codequality",{"type":29,"tag":127,"props":6350,"children":6351},{"style":603},[6352],{"type":56,"value":620},{"type":29,"tag":127,"props":6354,"children":6355},{"style":1686},[6356],{"type":56,"value":6357},"report.json\n",{"type":29,"tag":127,"props":6359,"children":6361},{"class":6360,"line":848},[598,1152],[6362,6367],{"type":29,"tag":127,"props":6363,"children":6364},{"style":4044},[6365],{"type":56,"value":6366},"   rules",{"type":29,"tag":127,"props":6368,"children":6369},{"style":603},[6370],{"type":56,"value":4052},{"type":29,"tag":127,"props":6372,"children":6374},{"class":6373,"line":862},[598,1152],[6375,6379,6383,6387],{"type":29,"tag":127,"props":6376,"children":6377},{"style":603},[6378],{"type":56,"value":5696},{"type":29,"tag":127,"props":6380,"children":6381},{"style":4044},[6382],{"type":56,"value":4400},{"type":29,"tag":127,"props":6384,"children":6385},{"style":603},[6386],{"type":56,"value":620},{"type":29,"tag":127,"props":6388,"children":6389},{"style":1686},[6390],{"type":56,"value":6391},"$CI_PIPELINE_SOURCE == \"merge_request_event\"\n",{"type":29,"tag":127,"props":6393,"children":6395},{"class":6394,"line":871},[598,1152],[6396,6400,6404,6408],{"type":29,"tag":127,"props":6397,"children":6398},{"style":603},[6399],{"type":56,"value":5696},{"type":29,"tag":127,"props":6401,"children":6402},{"style":4044},[6403],{"type":56,"value":4400},{"type":29,"tag":127,"props":6405,"children":6406},{"style":603},[6407],{"type":56,"value":620},{"type":29,"tag":127,"props":6409,"children":6410},{"style":1686},[6411],{"type":56,"value":4409},{"type":29,"tag":127,"props":6413,"children":6415},{"class":6414,"line":893},[598,1152],[6416,6421,6425],{"type":29,"tag":127,"props":6417,"children":6418},{"style":4044},[6419],{"type":56,"value":6420},"        when",{"type":29,"tag":127,"props":6422,"children":6423},{"style":603},[6424],{"type":56,"value":620},{"type":29,"tag":127,"props":6426,"children":6427},{"style":1686},[6428],{"type":56,"value":4426},{"type":29,"tag":127,"props":6430,"children":6432},{"class":6431,"line":915},[598,1152],[6433,6437,6441,6445],{"type":29,"tag":127,"props":6434,"children":6435},{"style":603},[6436],{"type":56,"value":5696},{"type":29,"tag":127,"props":6438,"children":6439},{"style":4044},[6440],{"type":56,"value":4400},{"type":29,"tag":127,"props":6442,"children":6443},{"style":603},[6444],{"type":56,"value":620},{"type":29,"tag":127,"props":6446,"children":6447},{"style":1686},[6448],{"type":56,"value":4446},{"type":29,"tag":48,"props":6450,"children":6451},{},[6452],{"type":56,"value":6453},"This pipeline will run on the default branch and on merge request pipelines.",{"type":29,"tag":48,"props":6455,"children":6456},{},[6457],{"type":56,"value":6458},"Running on the default branch before build and release prevents from accidentally creating a low-quality release.",{"type":29,"tag":48,"props":6460,"children":6461},{},[6462],{"type":56,"value":6463},"A nice touch to the MR pipeline is the Code Quality report integration!",{"type":29,"tag":90,"props":6465,"children":6467},{"id":6466},"php-unit-test",[6468],{"type":56,"value":6037},{"type":29,"tag":48,"props":6470,"children":6471},{},[6472,6474],{"type":56,"value":6473},"First of all, we need to configure PHPUnit by following the ",{"type":29,"tag":490,"props":6475,"children":6477},{"href":6476},"https://developer.shopware.com/docs/guides/plugins/plugins/testing/php-unit.html",[6478],{"type":56,"value":6479},"official shopware documentation",{"type":29,"tag":48,"props":6481,"children":6482},{},[6483],{"type":56,"value":6484},"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":29,"tag":582,"props":6486,"children":6488},{"code":6487,"language":1671,"meta":7,"className":1669,"style":7},"./vendor/bin/phpunit --configuration=\"custom/static-plugins/SwagBasicExample\"\n",[6489],{"type":29,"tag":519,"props":6490,"children":6491},{"__ignoreMap":7},[6492],{"type":29,"tag":127,"props":6493,"children":6494},{"class":598,"line":599},[6495,6500,6505],{"type":29,"tag":127,"props":6496,"children":6497},{"style":1681},[6498],{"type":56,"value":6499},"./vendor/bin/phpunit",{"type":29,"tag":127,"props":6501,"children":6502},{"style":941},[6503],{"type":56,"value":6504}," --configuration=",{"type":29,"tag":127,"props":6506,"children":6507},{"style":1686},[6508],{"type":56,"value":6509},"\"custom/static-plugins/SwagBasicExample\"\n",{"type":29,"tag":122,"props":6511,"children":6513},{"id":6512},"phpunit-pipeline",[6514],{"type":56,"value":6515},"PHPUnit pipeline",{"type":29,"tag":48,"props":6517,"children":6518},{},[6519,6521,6526],{"type":56,"value":6520},"Running PHPUnit for a plugin requires a full Shopware instance. Fortunately, ",{"type":29,"tag":519,"props":6522,"children":6524},{"className":6523},[],[6525],{"type":56,"value":546},{"type":56,"value":6527}," can help us to deal with it.",{"type":29,"tag":582,"props":6529,"children":6532},{"code":6530,"filename":4227,"highlights":6531,"language":4034,"meta":7,"className":4031,"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",[758,780,801,118,839,848,871,947,956,965,973,1042,1050,1058,1066,1086,1107,1119,1135,1143,588,590],[6533],{"type":29,"tag":519,"props":6534,"children":6535},{"__ignoreMap":7},[6536,6547,6559,6566,6578,6593,6604,6619,6638,6651,6673,6691,6704,6722,6740,6751,6769,6786,6803,6811,6829,6847,6865,6881,6888,6905,6917,6930,6943,6956,6969,6982,6995,7008,7021,7034,7046,7057,7070,7077,7088,7107,7118,7129,7146,7157,7169,7181,7198,7215,7226,7245,7264,7279],{"type":29,"tag":127,"props":6537,"children":6538},{"class":598,"line":599},[6539,6543],{"type":29,"tag":127,"props":6540,"children":6541},{"style":4044},[6542],{"type":56,"value":4047},{"type":29,"tag":127,"props":6544,"children":6545},{"style":603},[6546],{"type":56,"value":4052},{"type":29,"tag":127,"props":6548,"children":6549},{"class":598,"line":271},[6550,6555],{"type":29,"tag":127,"props":6551,"children":6552},{"style":603},[6553],{"type":56,"value":6554},"   - ",{"type":29,"tag":127,"props":6556,"children":6557},{"style":1686},[6558],{"type":56,"value":6209},{"type":29,"tag":127,"props":6560,"children":6561},{"class":598,"line":634},[6562],{"type":29,"tag":127,"props":6563,"children":6564},{"emptyLinePlaceholder":1855},[6565],{"type":56,"value":1858},{"type":29,"tag":127,"props":6567,"children":6568},{"class":598,"line":656},[6569,6574],{"type":29,"tag":127,"props":6570,"children":6571},{"style":4044},[6572],{"type":56,"value":6573},"phpunit",{"type":29,"tag":127,"props":6575,"children":6576},{"style":603},[6577],{"type":56,"value":4052},{"type":29,"tag":127,"props":6579,"children":6580},{"class":598,"line":678},[6581,6585,6589],{"type":29,"tag":127,"props":6582,"children":6583},{"style":4044},[6584],{"type":56,"value":4109},{"type":29,"tag":127,"props":6586,"children":6587},{"style":603},[6588],{"type":56,"value":620},{"type":29,"tag":127,"props":6590,"children":6591},{"style":1686},[6592],{"type":56,"value":6209},{"type":29,"tag":127,"props":6594,"children":6595},{"class":598,"line":692},[6596,6600],{"type":29,"tag":127,"props":6597,"children":6598},{"style":4044},[6599],{"type":56,"value":4092},{"type":29,"tag":127,"props":6601,"children":6602},{"style":603},[6603],{"type":56,"value":4052},{"type":29,"tag":127,"props":6605,"children":6606},{"class":598,"line":714},[6607,6611,6615],{"type":29,"tag":127,"props":6608,"children":6609},{"style":4044},[6610],{"type":56,"value":4306},{"type":29,"tag":127,"props":6612,"children":6613},{"style":603},[6614],{"type":56,"value":620},{"type":29,"tag":127,"props":6616,"children":6617},{"style":1686},[6618],{"type":56,"value":5159},{"type":29,"tag":127,"props":6620,"children":6621},{"class":598,"line":736},[6622,6626,6630,6634],{"type":29,"tag":127,"props":6623,"children":6624},{"style":4044},[6625],{"type":56,"value":4323},{"type":29,"tag":127,"props":6627,"children":6628},{"style":603},[6629],{"type":56,"value":4328},{"type":29,"tag":127,"props":6631,"children":6632},{"style":1686},[6633],{"type":56,"value":4333},{"type":29,"tag":127,"props":6635,"children":6636},{"style":603},[6637],{"type":56,"value":4338},{"type":29,"tag":127,"props":6639,"children":6641},{"class":6640,"line":758},[598,1152],[6642,6647],{"type":29,"tag":127,"props":6643,"children":6644},{"style":4044},[6645],{"type":56,"value":6646},"  services",{"type":29,"tag":127,"props":6648,"children":6649},{"style":603},[6650],{"type":56,"value":4052},{"type":29,"tag":127,"props":6652,"children":6654},{"class":6653,"line":780},[598,1152],[6655,6659,6664,6668],{"type":29,"tag":127,"props":6656,"children":6657},{"style":603},[6658],{"type":56,"value":4137},{"type":29,"tag":127,"props":6660,"children":6661},{"style":4044},[6662],{"type":56,"value":6663},"name",{"type":29,"tag":127,"props":6665,"children":6666},{"style":603},[6667],{"type":56,"value":620},{"type":29,"tag":127,"props":6669,"children":6670},{"style":1686},[6671],{"type":56,"value":6672},"mysql:8.3.0\n",{"type":29,"tag":127,"props":6674,"children":6676},{"class":6675,"line":801},[598,1152],[6677,6682,6686],{"type":29,"tag":127,"props":6678,"children":6679},{"style":4044},[6680],{"type":56,"value":6681},"      alias",{"type":29,"tag":127,"props":6683,"children":6684},{"style":603},[6685],{"type":56,"value":620},{"type":29,"tag":127,"props":6687,"children":6688},{"style":1686},[6689],{"type":56,"value":6690},"test_database\n",{"type":29,"tag":127,"props":6692,"children":6694},{"class":6693,"line":118},[598,1152],[6695,6700],{"type":29,"tag":127,"props":6696,"children":6697},{"style":4044},[6698],{"type":56,"value":6699},"      variables",{"type":29,"tag":127,"props":6701,"children":6702},{"style":603},[6703],{"type":56,"value":4052},{"type":29,"tag":127,"props":6705,"children":6707},{"class":6706,"line":839},[598,1152],[6708,6713,6717],{"type":29,"tag":127,"props":6709,"children":6710},{"style":4044},[6711],{"type":56,"value":6712},"        MYSQL_SKIP_TEST_DB",{"type":29,"tag":127,"props":6714,"children":6715},{"style":603},[6716],{"type":56,"value":620},{"type":29,"tag":127,"props":6718,"children":6719},{"style":1686},[6720],{"type":56,"value":6721},"'yes'\n",{"type":29,"tag":127,"props":6723,"children":6725},{"class":6724,"line":848},[598,1152],[6726,6731,6735],{"type":29,"tag":127,"props":6727,"children":6728},{"style":4044},[6729],{"type":56,"value":6730},"        MYSQL_ALLOW_EMPTY_PASSWORD",{"type":29,"tag":127,"props":6732,"children":6733},{"style":603},[6734],{"type":56,"value":620},{"type":29,"tag":127,"props":6736,"children":6737},{"style":941},[6738],{"type":56,"value":6739},"yes\n",{"type":29,"tag":127,"props":6741,"children":6742},{"class":598,"line":862},[6743,6747],{"type":29,"tag":127,"props":6744,"children":6745},{"style":4044},[6746],{"type":56,"value":5201},{"type":29,"tag":127,"props":6748,"children":6749},{"style":603},[6750],{"type":56,"value":4052},{"type":29,"tag":127,"props":6752,"children":6754},{"class":6753,"line":871},[598,1152],[6755,6760,6764],{"type":29,"tag":127,"props":6756,"children":6757},{"style":4044},[6758],{"type":56,"value":6759},"    GIT_STRATEGY",{"type":29,"tag":127,"props":6761,"children":6762},{"style":603},[6763],{"type":56,"value":620},{"type":29,"tag":127,"props":6765,"children":6766},{"style":1686},[6767],{"type":56,"value":6768},"none\n",{"type":29,"tag":127,"props":6770,"children":6771},{"class":598,"line":893},[6772,6777,6781],{"type":29,"tag":127,"props":6773,"children":6774},{"style":4044},[6775],{"type":56,"value":6776},"    SHOPWARE_ROOT",{"type":29,"tag":127,"props":6778,"children":6779},{"style":603},[6780],{"type":56,"value":620},{"type":29,"tag":127,"props":6782,"children":6783},{"style":1686},[6784],{"type":56,"value":6785},"${CI_PROJECT_DIR}/shopware\n",{"type":29,"tag":127,"props":6787,"children":6788},{"class":598,"line":915},[6789,6794,6798],{"type":29,"tag":127,"props":6790,"children":6791},{"style":4044},[6792],{"type":56,"value":6793},"    SHOPWARE_VERSION",{"type":29,"tag":127,"props":6795,"children":6796},{"style":603},[6797],{"type":56,"value":620},{"type":29,"tag":127,"props":6799,"children":6800},{"style":941},[6801],{"type":56,"value":6802},"6.6.10.13\n",{"type":29,"tag":127,"props":6804,"children":6805},{"class":598,"line":928},[6806],{"type":29,"tag":127,"props":6807,"children":6808},{"style":603},[6809],{"type":56,"value":6810},"    \n",{"type":29,"tag":127,"props":6812,"children":6814},{"class":6813,"line":947},[598,1152],[6815,6820,6824],{"type":29,"tag":127,"props":6816,"children":6817},{"style":4044},[6818],{"type":56,"value":6819},"    APP_SECRET",{"type":29,"tag":127,"props":6821,"children":6822},{"style":603},[6823],{"type":56,"value":620},{"type":29,"tag":127,"props":6825,"children":6826},{"style":1686},[6827],{"type":56,"value":6828},"def00000bb5acb32b54ff8ee130270586eec0e878f7337dc7a837acc31d3ff00f93a56b595448b4b29664847dd51991b3314ff65aeeeb761a133b0ec0e070433bff08e48\n",{"type":29,"tag":127,"props":6830,"children":6832},{"class":6831,"line":956},[598,1152],[6833,6838,6842],{"type":29,"tag":127,"props":6834,"children":6835},{"style":4044},[6836],{"type":56,"value":6837},"    MESSENGER_TRANSPORT_DSN",{"type":29,"tag":127,"props":6839,"children":6840},{"style":603},[6841],{"type":56,"value":620},{"type":29,"tag":127,"props":6843,"children":6844},{"style":1686},[6845],{"type":56,"value":6846},"sync://\n",{"type":29,"tag":127,"props":6848,"children":6850},{"class":6849,"line":965},[598,1152],[6851,6856,6860],{"type":29,"tag":127,"props":6852,"children":6853},{"style":4044},[6854],{"type":56,"value":6855},"    DATABASE_URL",{"type":29,"tag":127,"props":6857,"children":6858},{"style":603},[6859],{"type":56,"value":620},{"type":29,"tag":127,"props":6861,"children":6862},{"style":1686},[6863],{"type":56,"value":6864},"mysql://root@test_database/shopware\n",{"type":29,"tag":127,"props":6866,"children":6868},{"class":6867,"line":973},[598,1152],[6869,6873,6877],{"type":29,"tag":127,"props":6870,"children":6871},{"style":4044},[6872],{"type":56,"value":5213},{"type":29,"tag":127,"props":6874,"children":6875},{"style":603},[6876],{"type":56,"value":620},{"type":29,"tag":127,"props":6878,"children":6879},{"style":1686},[6880],{"type":56,"value":5222},{"type":29,"tag":127,"props":6882,"children":6883},{"class":598,"line":993},[6884],{"type":29,"tag":127,"props":6885,"children":6886},{"emptyLinePlaceholder":1855},[6887],{"type":56,"value":1858},{"type":29,"tag":127,"props":6889,"children":6890},{"class":598,"line":1014},[6891,6896,6900],{"type":29,"tag":127,"props":6892,"children":6893},{"style":4044},[6894],{"type":56,"value":6895},"    XDEBUG_MODE",{"type":29,"tag":127,"props":6897,"children":6898},{"style":603},[6899],{"type":56,"value":620},{"type":29,"tag":127,"props":6901,"children":6902},{"style":1686},[6903],{"type":56,"value":6904},"coverage\n",{"type":29,"tag":127,"props":6906,"children":6907},{"class":598,"line":1026},[6908,6913],{"type":29,"tag":127,"props":6909,"children":6910},{"style":4044},[6911],{"type":56,"value":6912},"  before_script",{"type":29,"tag":127,"props":6914,"children":6915},{"style":603},[6916],{"type":56,"value":4052},{"type":29,"tag":127,"props":6918,"children":6920},{"class":6919,"line":1042},[598,1152],[6921,6925],{"type":29,"tag":127,"props":6922,"children":6923},{"style":603},[6924],{"type":56,"value":4137},{"type":29,"tag":127,"props":6926,"children":6927},{"style":1686},[6928],{"type":56,"value":6929},"apk add --no-cache php-8.2-xdebug\n",{"type":29,"tag":127,"props":6931,"children":6933},{"class":6932,"line":1050},[598,1152],[6934,6938],{"type":29,"tag":127,"props":6935,"children":6936},{"style":603},[6937],{"type":56,"value":4137},{"type":29,"tag":127,"props":6939,"children":6940},{"style":1686},[6941],{"type":56,"value":6942},"shopware-cli project create shopware ${SHOPWARE_VERSION}\n",{"type":29,"tag":127,"props":6944,"children":6946},{"class":6945,"line":1058},[598,1152],[6947,6951],{"type":29,"tag":127,"props":6948,"children":6949},{"style":603},[6950],{"type":56,"value":4137},{"type":29,"tag":127,"props":6952,"children":6953},{"style":1686},[6954],{"type":56,"value":6955},"cd $SHOPWARE_ROOT\n",{"type":29,"tag":127,"props":6957,"children":6959},{"class":6958,"line":1066},[598,1152],[6960,6964],{"type":29,"tag":127,"props":6961,"children":6962},{"style":603},[6963],{"type":56,"value":4137},{"type":29,"tag":127,"props":6965,"children":6966},{"style":1686},[6967],{"type":56,"value":6968},"composer req --dev shopware/dev-tools phpunit/phpunit\n",{"type":29,"tag":127,"props":6970,"children":6972},{"class":6971,"line":1086},[598,1152],[6973,6977],{"type":29,"tag":127,"props":6974,"children":6975},{"style":603},[6976],{"type":56,"value":4137},{"type":29,"tag":127,"props":6978,"children":6979},{"style":1686},[6980],{"type":56,"value":6981},"git clone \"https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git\" \"custom/plugins/${CI_PROJECT_NAME}\"\n",{"type":29,"tag":127,"props":6983,"children":6985},{"class":6984,"line":1107},[598,1152],[6986,6990],{"type":29,"tag":127,"props":6987,"children":6988},{"style":603},[6989],{"type":56,"value":4137},{"type":29,"tag":127,"props":6991,"children":6992},{"style":1686},[6993],{"type":56,"value":6994},"cd custom/plugins/${CI_PROJECT_NAME}\n",{"type":29,"tag":127,"props":6996,"children":6998},{"class":6997,"line":1119},[598,1152],[6999,7003],{"type":29,"tag":127,"props":7000,"children":7001},{"style":603},[7002],{"type":56,"value":4137},{"type":29,"tag":127,"props":7004,"children":7005},{"style":1686},[7006],{"type":56,"value":7007},"git checkout ${CI_COMMIT_SHA}\n",{"type":29,"tag":127,"props":7009,"children":7011},{"class":7010,"line":1135},[598,1152],[7012,7016],{"type":29,"tag":127,"props":7013,"children":7014},{"style":603},[7015],{"type":56,"value":4137},{"type":29,"tag":127,"props":7017,"children":7018},{"style":1686},[7019],{"type":56,"value":7020},"cd ${SHOPWARE_ROOT}\n",{"type":29,"tag":127,"props":7022,"children":7024},{"class":7023,"line":1143},[598,1152],[7025,7029],{"type":29,"tag":127,"props":7026,"children":7027},{"style":603},[7028],{"type":56,"value":4137},{"type":29,"tag":127,"props":7030,"children":7031},{"style":1686},[7032],{"type":56,"value":7033},"composer require $(composer -d custom/plugins/${CI_PROJECT_NAME} config name)\n",{"type":29,"tag":127,"props":7035,"children":7037},{"class":7036,"line":588},[598,1152],[7038,7042],{"type":29,"tag":127,"props":7039,"children":7040},{"style":603},[7041],{"type":56,"value":4137},{"type":29,"tag":127,"props":7043,"children":7044},{"style":1686},[7045],{"type":56,"value":6994},{"type":29,"tag":127,"props":7047,"children":7048},{"class":598,"line":589},[7049,7053],{"type":29,"tag":127,"props":7050,"children":7051},{"style":4044},[7052],{"type":56,"value":4125},{"type":29,"tag":127,"props":7054,"children":7055},{"style":603},[7056],{"type":56,"value":4052},{"type":29,"tag":127,"props":7058,"children":7060},{"class":7059,"line":590},[598,1152],[7061,7065],{"type":29,"tag":127,"props":7062,"children":7063},{"style":603},[7064],{"type":56,"value":4137},{"type":29,"tag":127,"props":7066,"children":7067},{"style":1686},[7068],{"type":56,"value":7069},"${SHOPWARE_ROOT}/vendor/bin/phpunit --coverage-text --coverage-cobertura=coverage.cobertura.xml\n",{"type":29,"tag":127,"props":7071,"children":7072},{"class":598,"line":591},[7073],{"type":29,"tag":127,"props":7074,"children":7075},{"emptyLinePlaceholder":1855},[7076],{"type":56,"value":1858},{"type":29,"tag":127,"props":7078,"children":7079},{"class":598,"line":1207},[7080,7084],{"type":29,"tag":127,"props":7081,"children":7082},{"style":4044},[7083],{"type":56,"value":5270},{"type":29,"tag":127,"props":7085,"children":7086},{"style":603},[7087],{"type":56,"value":4052},{"type":29,"tag":127,"props":7089,"children":7090},{"class":598,"line":1216},[7091,7095,7099,7103],{"type":29,"tag":127,"props":7092,"children":7093},{"style":603},[7094],{"type":56,"value":4137},{"type":29,"tag":127,"props":7096,"children":7097},{"style":4044},[7098],{"type":56,"value":5287},{"type":29,"tag":127,"props":7100,"children":7101},{"style":603},[7102],{"type":56,"value":620},{"type":29,"tag":127,"props":7104,"children":7105},{"style":1686},[7106],{"type":56,"value":5296},{"type":29,"tag":127,"props":7108,"children":7109},{"class":598,"line":1229},[7110,7114],{"type":29,"tag":127,"props":7111,"children":7112},{"style":4044},[7113],{"type":56,"value":5305},{"type":29,"tag":127,"props":7115,"children":7116},{"style":603},[7117],{"type":56,"value":4052},{"type":29,"tag":127,"props":7119,"children":7120},{"class":598,"line":1242},[7121,7125],{"type":29,"tag":127,"props":7122,"children":7123},{"style":603},[7124],{"type":56,"value":5318},{"type":29,"tag":127,"props":7126,"children":7127},{"style":1686},[7128],{"type":56,"value":5323},{"type":29,"tag":127,"props":7130,"children":7131},{"class":598,"line":1271},[7132,7137,7141],{"type":29,"tag":127,"props":7133,"children":7134},{"style":4044},[7135],{"type":56,"value":7136},"  coverage",{"type":29,"tag":127,"props":7138,"children":7139},{"style":603},[7140],{"type":56,"value":620},{"type":29,"tag":127,"props":7142,"children":7143},{"style":1686},[7144],{"type":56,"value":7145},"/^\\s*Lines:\\s*\\d+.\\d+\\%/\n",{"type":29,"tag":127,"props":7147,"children":7148},{"class":598,"line":1279},[7149,7153],{"type":29,"tag":127,"props":7150,"children":7151},{"style":4044},[7152],{"type":56,"value":5670},{"type":29,"tag":127,"props":7154,"children":7155},{"style":603},[7156],{"type":56,"value":4052},{"type":29,"tag":127,"props":7158,"children":7159},{"class":598,"line":1287},[7160,7165],{"type":29,"tag":127,"props":7161,"children":7162},{"style":4044},[7163],{"type":56,"value":7164},"    reports",{"type":29,"tag":127,"props":7166,"children":7167},{"style":603},[7168],{"type":56,"value":4052},{"type":29,"tag":127,"props":7170,"children":7171},{"class":598,"line":1308},[7172,7177],{"type":29,"tag":127,"props":7173,"children":7174},{"style":4044},[7175],{"type":56,"value":7176},"      coverage_report",{"type":29,"tag":127,"props":7178,"children":7179},{"style":603},[7180],{"type":56,"value":4052},{"type":29,"tag":127,"props":7182,"children":7183},{"class":598,"line":1321},[7184,7189,7193],{"type":29,"tag":127,"props":7185,"children":7186},{"style":4044},[7187],{"type":56,"value":7188},"        coverage_format",{"type":29,"tag":127,"props":7190,"children":7191},{"style":603},[7192],{"type":56,"value":620},{"type":29,"tag":127,"props":7194,"children":7195},{"style":1686},[7196],{"type":56,"value":7197},"cobertura\n",{"type":29,"tag":127,"props":7199,"children":7200},{"class":598,"line":1334},[7201,7206,7210],{"type":29,"tag":127,"props":7202,"children":7203},{"style":4044},[7204],{"type":56,"value":7205},"        path",{"type":29,"tag":127,"props":7207,"children":7208},{"style":603},[7209],{"type":56,"value":620},{"type":29,"tag":127,"props":7211,"children":7212},{"style":1686},[7213],{"type":56,"value":7214},"coverage.cobertura.xml\n",{"type":29,"tag":127,"props":7216,"children":7217},{"class":598,"line":1355},[7218,7222],{"type":29,"tag":127,"props":7219,"children":7220},{"style":4044},[7221],{"type":56,"value":4167},{"type":29,"tag":127,"props":7223,"children":7224},{"style":603},[7225],{"type":56,"value":4052},{"type":29,"tag":127,"props":7227,"children":7228},{"class":598,"line":1372},[7229,7233,7237,7241],{"type":29,"tag":127,"props":7230,"children":7231},{"style":603},[7232],{"type":56,"value":4137},{"type":29,"tag":127,"props":7234,"children":7235},{"style":4044},[7236],{"type":56,"value":4400},{"type":29,"tag":127,"props":7238,"children":7239},{"style":603},[7240],{"type":56,"value":620},{"type":29,"tag":127,"props":7242,"children":7243},{"style":1686},[7244],{"type":56,"value":6391},{"type":29,"tag":127,"props":7246,"children":7247},{"class":598,"line":1380},[7248,7252,7256,7260],{"type":29,"tag":127,"props":7249,"children":7250},{"style":603},[7251],{"type":56,"value":4137},{"type":29,"tag":127,"props":7253,"children":7254},{"style":4044},[7255],{"type":56,"value":4400},{"type":29,"tag":127,"props":7257,"children":7258},{"style":603},[7259],{"type":56,"value":620},{"type":29,"tag":127,"props":7261,"children":7262},{"style":1686},[7263],{"type":56,"value":4409},{"type":29,"tag":127,"props":7265,"children":7266},{"class":598,"line":1401},[7267,7271,7275],{"type":29,"tag":127,"props":7268,"children":7269},{"style":4044},[7270],{"type":56,"value":4417},{"type":29,"tag":127,"props":7272,"children":7273},{"style":603},[7274],{"type":56,"value":620},{"type":29,"tag":127,"props":7276,"children":7277},{"style":1686},[7278],{"type":56,"value":4426},{"type":29,"tag":127,"props":7280,"children":7281},{"class":598,"line":1418},[7282,7286,7290,7294],{"type":29,"tag":127,"props":7283,"children":7284},{"style":603},[7285],{"type":56,"value":4137},{"type":29,"tag":127,"props":7287,"children":7288},{"style":4044},[7289],{"type":56,"value":4400},{"type":29,"tag":127,"props":7291,"children":7292},{"style":603},[7293],{"type":56,"value":620},{"type":29,"tag":127,"props":7295,"children":7296},{"style":1686},[7297],{"type":56,"value":4446},{"type":29,"tag":48,"props":7299,"children":7300},{},[7301],{"type":56,"value":7302},"Let's explain this a little",{"type":29,"tag":509,"props":7304,"children":7305},{},[7306,7311,7316,7321,7326],{"type":29,"tag":513,"props":7307,"children":7308},{},[7309],{"type":56,"value":7310},"We disable automatic repository cloning (16)",{"type":29,"tag":513,"props":7312,"children":7313},{},[7314],{"type":56,"value":7315},"We include a database service (9-14)",{"type":29,"tag":513,"props":7317,"children":7318},{},[7319],{"type":56,"value":7320},"We set some required Shopware env variables (20-23)",{"type":29,"tag":513,"props":7322,"children":7323},{},[7324],{"type":56,"value":7325},"Create an empty shopware project with phpunit and xdebug (27-36)",{"type":29,"tag":513,"props":7327,"children":7328},{},[7329],{"type":56,"value":7330},"Run PHPUnit with code coverage generation as text and in cobertura format (38)",{"type":29,"tag":48,"props":7332,"children":7333},{},[7334],{"type":56,"value":7335},"Like the Code quality pipeline, this takes full advantage of GitLab coverage reporting",{"type":29,"tag":90,"props":7337,"children":7339},{"id":7338},"putting-it-all-together",[7340],{"type":56,"value":7341},"Putting it all together",{"type":29,"tag":48,"props":7343,"children":7344},{},[7345],{"type":56,"value":7346},"For this part, we don't include the build and release part.",{"type":29,"tag":582,"props":7348,"children":7350},{"code":7349,"filename":4227,"language":4034,"meta":7,"className":4031,"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",[7351],{"type":29,"tag":519,"props":7352,"children":7353},{"__ignoreMap":7},[7354,7365,7376,7383,7394,7409,7420,7435,7454,7465,7484,7499,7510,7525,7540,7551,7566,7581,7596,7603,7618,7633,7648,7663,7670,7685,7696,7707,7718,7729,7740,7751,7762,7773,7784,7795,7806,7817,7828,7835,7846,7865,7876,7887,7902,7913,7924,7935,7950,7965,7976,7995,8014,8029,8048,8055,8066,8077,8092,8111,8126,8137,8148,8159,8170,8185,8196,8215,8234,8249],{"type":29,"tag":127,"props":7355,"children":7356},{"class":598,"line":599},[7357,7361],{"type":29,"tag":127,"props":7358,"children":7359},{"style":4044},[7360],{"type":56,"value":4047},{"type":29,"tag":127,"props":7362,"children":7363},{"style":603},[7364],{"type":56,"value":4052},{"type":29,"tag":127,"props":7366,"children":7367},{"class":598,"line":271},[7368,7372],{"type":29,"tag":127,"props":7369,"children":7370},{"style":603},[7371],{"type":56,"value":6554},{"type":29,"tag":127,"props":7373,"children":7374},{"style":1686},[7375],{"type":56,"value":6209},{"type":29,"tag":127,"props":7377,"children":7378},{"class":598,"line":634},[7379],{"type":29,"tag":127,"props":7380,"children":7381},{"emptyLinePlaceholder":1855},[7382],{"type":56,"value":1858},{"type":29,"tag":127,"props":7384,"children":7385},{"class":598,"line":656},[7386,7390],{"type":29,"tag":127,"props":7387,"children":7388},{"style":4044},[7389],{"type":56,"value":6573},{"type":29,"tag":127,"props":7391,"children":7392},{"style":603},[7393],{"type":56,"value":4052},{"type":29,"tag":127,"props":7395,"children":7396},{"class":598,"line":678},[7397,7401,7405],{"type":29,"tag":127,"props":7398,"children":7399},{"style":4044},[7400],{"type":56,"value":4109},{"type":29,"tag":127,"props":7402,"children":7403},{"style":603},[7404],{"type":56,"value":620},{"type":29,"tag":127,"props":7406,"children":7407},{"style":1686},[7408],{"type":56,"value":6209},{"type":29,"tag":127,"props":7410,"children":7411},{"class":598,"line":692},[7412,7416],{"type":29,"tag":127,"props":7413,"children":7414},{"style":4044},[7415],{"type":56,"value":4092},{"type":29,"tag":127,"props":7417,"children":7418},{"style":603},[7419],{"type":56,"value":4052},{"type":29,"tag":127,"props":7421,"children":7422},{"class":598,"line":714},[7423,7427,7431],{"type":29,"tag":127,"props":7424,"children":7425},{"style":4044},[7426],{"type":56,"value":4306},{"type":29,"tag":127,"props":7428,"children":7429},{"style":603},[7430],{"type":56,"value":620},{"type":29,"tag":127,"props":7432,"children":7433},{"style":1686},[7434],{"type":56,"value":5159},{"type":29,"tag":127,"props":7436,"children":7437},{"class":598,"line":736},[7438,7442,7446,7450],{"type":29,"tag":127,"props":7439,"children":7440},{"style":4044},[7441],{"type":56,"value":4323},{"type":29,"tag":127,"props":7443,"children":7444},{"style":603},[7445],{"type":56,"value":4328},{"type":29,"tag":127,"props":7447,"children":7448},{"style":1686},[7449],{"type":56,"value":4333},{"type":29,"tag":127,"props":7451,"children":7452},{"style":603},[7453],{"type":56,"value":4338},{"type":29,"tag":127,"props":7455,"children":7456},{"class":598,"line":758},[7457,7461],{"type":29,"tag":127,"props":7458,"children":7459},{"style":4044},[7460],{"type":56,"value":6646},{"type":29,"tag":127,"props":7462,"children":7463},{"style":603},[7464],{"type":56,"value":4052},{"type":29,"tag":127,"props":7466,"children":7467},{"class":598,"line":780},[7468,7472,7476,7480],{"type":29,"tag":127,"props":7469,"children":7470},{"style":603},[7471],{"type":56,"value":4137},{"type":29,"tag":127,"props":7473,"children":7474},{"style":4044},[7475],{"type":56,"value":6663},{"type":29,"tag":127,"props":7477,"children":7478},{"style":603},[7479],{"type":56,"value":620},{"type":29,"tag":127,"props":7481,"children":7482},{"style":1686},[7483],{"type":56,"value":6672},{"type":29,"tag":127,"props":7485,"children":7486},{"class":598,"line":801},[7487,7491,7495],{"type":29,"tag":127,"props":7488,"children":7489},{"style":4044},[7490],{"type":56,"value":6681},{"type":29,"tag":127,"props":7492,"children":7493},{"style":603},[7494],{"type":56,"value":620},{"type":29,"tag":127,"props":7496,"children":7497},{"style":1686},[7498],{"type":56,"value":6690},{"type":29,"tag":127,"props":7500,"children":7501},{"class":598,"line":118},[7502,7506],{"type":29,"tag":127,"props":7503,"children":7504},{"style":4044},[7505],{"type":56,"value":6699},{"type":29,"tag":127,"props":7507,"children":7508},{"style":603},[7509],{"type":56,"value":4052},{"type":29,"tag":127,"props":7511,"children":7512},{"class":598,"line":839},[7513,7517,7521],{"type":29,"tag":127,"props":7514,"children":7515},{"style":4044},[7516],{"type":56,"value":6712},{"type":29,"tag":127,"props":7518,"children":7519},{"style":603},[7520],{"type":56,"value":620},{"type":29,"tag":127,"props":7522,"children":7523},{"style":1686},[7524],{"type":56,"value":6721},{"type":29,"tag":127,"props":7526,"children":7527},{"class":598,"line":848},[7528,7532,7536],{"type":29,"tag":127,"props":7529,"children":7530},{"style":4044},[7531],{"type":56,"value":6730},{"type":29,"tag":127,"props":7533,"children":7534},{"style":603},[7535],{"type":56,"value":620},{"type":29,"tag":127,"props":7537,"children":7538},{"style":941},[7539],{"type":56,"value":6739},{"type":29,"tag":127,"props":7541,"children":7542},{"class":598,"line":862},[7543,7547],{"type":29,"tag":127,"props":7544,"children":7545},{"style":4044},[7546],{"type":56,"value":5201},{"type":29,"tag":127,"props":7548,"children":7549},{"style":603},[7550],{"type":56,"value":4052},{"type":29,"tag":127,"props":7552,"children":7553},{"class":598,"line":871},[7554,7558,7562],{"type":29,"tag":127,"props":7555,"children":7556},{"style":4044},[7557],{"type":56,"value":6759},{"type":29,"tag":127,"props":7559,"children":7560},{"style":603},[7561],{"type":56,"value":620},{"type":29,"tag":127,"props":7563,"children":7564},{"style":1686},[7565],{"type":56,"value":6768},{"type":29,"tag":127,"props":7567,"children":7568},{"class":598,"line":893},[7569,7573,7577],{"type":29,"tag":127,"props":7570,"children":7571},{"style":4044},[7572],{"type":56,"value":6776},{"type":29,"tag":127,"props":7574,"children":7575},{"style":603},[7576],{"type":56,"value":620},{"type":29,"tag":127,"props":7578,"children":7579},{"style":1686},[7580],{"type":56,"value":6785},{"type":29,"tag":127,"props":7582,"children":7583},{"class":598,"line":915},[7584,7588,7592],{"type":29,"tag":127,"props":7585,"children":7586},{"style":4044},[7587],{"type":56,"value":6793},{"type":29,"tag":127,"props":7589,"children":7590},{"style":603},[7591],{"type":56,"value":620},{"type":29,"tag":127,"props":7593,"children":7594},{"style":941},[7595],{"type":56,"value":6802},{"type":29,"tag":127,"props":7597,"children":7598},{"class":598,"line":928},[7599],{"type":29,"tag":127,"props":7600,"children":7601},{"style":603},[7602],{"type":56,"value":6810},{"type":29,"tag":127,"props":7604,"children":7605},{"class":598,"line":947},[7606,7610,7614],{"type":29,"tag":127,"props":7607,"children":7608},{"style":4044},[7609],{"type":56,"value":6819},{"type":29,"tag":127,"props":7611,"children":7612},{"style":603},[7613],{"type":56,"value":620},{"type":29,"tag":127,"props":7615,"children":7616},{"style":1686},[7617],{"type":56,"value":6828},{"type":29,"tag":127,"props":7619,"children":7620},{"class":598,"line":956},[7621,7625,7629],{"type":29,"tag":127,"props":7622,"children":7623},{"style":4044},[7624],{"type":56,"value":6837},{"type":29,"tag":127,"props":7626,"children":7627},{"style":603},[7628],{"type":56,"value":620},{"type":29,"tag":127,"props":7630,"children":7631},{"style":1686},[7632],{"type":56,"value":6846},{"type":29,"tag":127,"props":7634,"children":7635},{"class":598,"line":965},[7636,7640,7644],{"type":29,"tag":127,"props":7637,"children":7638},{"style":4044},[7639],{"type":56,"value":6855},{"type":29,"tag":127,"props":7641,"children":7642},{"style":603},[7643],{"type":56,"value":620},{"type":29,"tag":127,"props":7645,"children":7646},{"style":1686},[7647],{"type":56,"value":6864},{"type":29,"tag":127,"props":7649,"children":7650},{"class":598,"line":973},[7651,7655,7659],{"type":29,"tag":127,"props":7652,"children":7653},{"style":4044},[7654],{"type":56,"value":5213},{"type":29,"tag":127,"props":7656,"children":7657},{"style":603},[7658],{"type":56,"value":620},{"type":29,"tag":127,"props":7660,"children":7661},{"style":1686},[7662],{"type":56,"value":5222},{"type":29,"tag":127,"props":7664,"children":7665},{"class":598,"line":993},[7666],{"type":29,"tag":127,"props":7667,"children":7668},{"emptyLinePlaceholder":1855},[7669],{"type":56,"value":1858},{"type":29,"tag":127,"props":7671,"children":7672},{"class":598,"line":1014},[7673,7677,7681],{"type":29,"tag":127,"props":7674,"children":7675},{"style":4044},[7676],{"type":56,"value":6895},{"type":29,"tag":127,"props":7678,"children":7679},{"style":603},[7680],{"type":56,"value":620},{"type":29,"tag":127,"props":7682,"children":7683},{"style":1686},[7684],{"type":56,"value":6904},{"type":29,"tag":127,"props":7686,"children":7687},{"class":598,"line":1026},[7688,7692],{"type":29,"tag":127,"props":7689,"children":7690},{"style":4044},[7691],{"type":56,"value":6912},{"type":29,"tag":127,"props":7693,"children":7694},{"style":603},[7695],{"type":56,"value":4052},{"type":29,"tag":127,"props":7697,"children":7698},{"class":598,"line":1042},[7699,7703],{"type":29,"tag":127,"props":7700,"children":7701},{"style":603},[7702],{"type":56,"value":4137},{"type":29,"tag":127,"props":7704,"children":7705},{"style":1686},[7706],{"type":56,"value":6929},{"type":29,"tag":127,"props":7708,"children":7709},{"class":598,"line":1050},[7710,7714],{"type":29,"tag":127,"props":7711,"children":7712},{"style":603},[7713],{"type":56,"value":4137},{"type":29,"tag":127,"props":7715,"children":7716},{"style":1686},[7717],{"type":56,"value":6942},{"type":29,"tag":127,"props":7719,"children":7720},{"class":598,"line":1058},[7721,7725],{"type":29,"tag":127,"props":7722,"children":7723},{"style":603},[7724],{"type":56,"value":4137},{"type":29,"tag":127,"props":7726,"children":7727},{"style":1686},[7728],{"type":56,"value":6955},{"type":29,"tag":127,"props":7730,"children":7731},{"class":598,"line":1066},[7732,7736],{"type":29,"tag":127,"props":7733,"children":7734},{"style":603},[7735],{"type":56,"value":4137},{"type":29,"tag":127,"props":7737,"children":7738},{"style":1686},[7739],{"type":56,"value":6968},{"type":29,"tag":127,"props":7741,"children":7742},{"class":598,"line":1086},[7743,7747],{"type":29,"tag":127,"props":7744,"children":7745},{"style":603},[7746],{"type":56,"value":4137},{"type":29,"tag":127,"props":7748,"children":7749},{"style":1686},[7750],{"type":56,"value":6981},{"type":29,"tag":127,"props":7752,"children":7753},{"class":598,"line":1107},[7754,7758],{"type":29,"tag":127,"props":7755,"children":7756},{"style":603},[7757],{"type":56,"value":4137},{"type":29,"tag":127,"props":7759,"children":7760},{"style":1686},[7761],{"type":56,"value":6994},{"type":29,"tag":127,"props":7763,"children":7764},{"class":598,"line":1119},[7765,7769],{"type":29,"tag":127,"props":7766,"children":7767},{"style":603},[7768],{"type":56,"value":4137},{"type":29,"tag":127,"props":7770,"children":7771},{"style":1686},[7772],{"type":56,"value":7007},{"type":29,"tag":127,"props":7774,"children":7775},{"class":598,"line":1135},[7776,7780],{"type":29,"tag":127,"props":7777,"children":7778},{"style":603},[7779],{"type":56,"value":4137},{"type":29,"tag":127,"props":7781,"children":7782},{"style":1686},[7783],{"type":56,"value":7020},{"type":29,"tag":127,"props":7785,"children":7786},{"class":598,"line":1143},[7787,7791],{"type":29,"tag":127,"props":7788,"children":7789},{"style":603},[7790],{"type":56,"value":4137},{"type":29,"tag":127,"props":7792,"children":7793},{"style":1686},[7794],{"type":56,"value":7033},{"type":29,"tag":127,"props":7796,"children":7797},{"class":598,"line":588},[7798,7802],{"type":29,"tag":127,"props":7799,"children":7800},{"style":603},[7801],{"type":56,"value":4137},{"type":29,"tag":127,"props":7803,"children":7804},{"style":1686},[7805],{"type":56,"value":6994},{"type":29,"tag":127,"props":7807,"children":7808},{"class":598,"line":589},[7809,7813],{"type":29,"tag":127,"props":7810,"children":7811},{"style":4044},[7812],{"type":56,"value":4125},{"type":29,"tag":127,"props":7814,"children":7815},{"style":603},[7816],{"type":56,"value":4052},{"type":29,"tag":127,"props":7818,"children":7819},{"class":598,"line":590},[7820,7824],{"type":29,"tag":127,"props":7821,"children":7822},{"style":603},[7823],{"type":56,"value":4137},{"type":29,"tag":127,"props":7825,"children":7826},{"style":1686},[7827],{"type":56,"value":7069},{"type":29,"tag":127,"props":7829,"children":7830},{"class":598,"line":591},[7831],{"type":29,"tag":127,"props":7832,"children":7833},{"emptyLinePlaceholder":1855},[7834],{"type":56,"value":1858},{"type":29,"tag":127,"props":7836,"children":7837},{"class":598,"line":1207},[7838,7842],{"type":29,"tag":127,"props":7839,"children":7840},{"style":4044},[7841],{"type":56,"value":5270},{"type":29,"tag":127,"props":7843,"children":7844},{"style":603},[7845],{"type":56,"value":4052},{"type":29,"tag":127,"props":7847,"children":7848},{"class":598,"line":1216},[7849,7853,7857,7861],{"type":29,"tag":127,"props":7850,"children":7851},{"style":603},[7852],{"type":56,"value":4137},{"type":29,"tag":127,"props":7854,"children":7855},{"style":4044},[7856],{"type":56,"value":5287},{"type":29,"tag":127,"props":7858,"children":7859},{"style":603},[7860],{"type":56,"value":620},{"type":29,"tag":127,"props":7862,"children":7863},{"style":1686},[7864],{"type":56,"value":5296},{"type":29,"tag":127,"props":7866,"children":7867},{"class":598,"line":1229},[7868,7872],{"type":29,"tag":127,"props":7869,"children":7870},{"style":4044},[7871],{"type":56,"value":5305},{"type":29,"tag":127,"props":7873,"children":7874},{"style":603},[7875],{"type":56,"value":4052},{"type":29,"tag":127,"props":7877,"children":7878},{"class":598,"line":1242},[7879,7883],{"type":29,"tag":127,"props":7880,"children":7881},{"style":603},[7882],{"type":56,"value":5318},{"type":29,"tag":127,"props":7884,"children":7885},{"style":1686},[7886],{"type":56,"value":5323},{"type":29,"tag":127,"props":7888,"children":7889},{"class":598,"line":1271},[7890,7894,7898],{"type":29,"tag":127,"props":7891,"children":7892},{"style":4044},[7893],{"type":56,"value":7136},{"type":29,"tag":127,"props":7895,"children":7896},{"style":603},[7897],{"type":56,"value":620},{"type":29,"tag":127,"props":7899,"children":7900},{"style":1686},[7901],{"type":56,"value":7145},{"type":29,"tag":127,"props":7903,"children":7904},{"class":598,"line":1279},[7905,7909],{"type":29,"tag":127,"props":7906,"children":7907},{"style":4044},[7908],{"type":56,"value":5670},{"type":29,"tag":127,"props":7910,"children":7911},{"style":603},[7912],{"type":56,"value":4052},{"type":29,"tag":127,"props":7914,"children":7915},{"class":598,"line":1287},[7916,7920],{"type":29,"tag":127,"props":7917,"children":7918},{"style":4044},[7919],{"type":56,"value":7164},{"type":29,"tag":127,"props":7921,"children":7922},{"style":603},[7923],{"type":56,"value":4052},{"type":29,"tag":127,"props":7925,"children":7926},{"class":598,"line":1308},[7927,7931],{"type":29,"tag":127,"props":7928,"children":7929},{"style":4044},[7930],{"type":56,"value":7176},{"type":29,"tag":127,"props":7932,"children":7933},{"style":603},[7934],{"type":56,"value":4052},{"type":29,"tag":127,"props":7936,"children":7937},{"class":598,"line":1321},[7938,7942,7946],{"type":29,"tag":127,"props":7939,"children":7940},{"style":4044},[7941],{"type":56,"value":7188},{"type":29,"tag":127,"props":7943,"children":7944},{"style":603},[7945],{"type":56,"value":620},{"type":29,"tag":127,"props":7947,"children":7948},{"style":1686},[7949],{"type":56,"value":7197},{"type":29,"tag":127,"props":7951,"children":7952},{"class":598,"line":1334},[7953,7957,7961],{"type":29,"tag":127,"props":7954,"children":7955},{"style":4044},[7956],{"type":56,"value":7205},{"type":29,"tag":127,"props":7958,"children":7959},{"style":603},[7960],{"type":56,"value":620},{"type":29,"tag":127,"props":7962,"children":7963},{"style":1686},[7964],{"type":56,"value":7214},{"type":29,"tag":127,"props":7966,"children":7967},{"class":598,"line":1355},[7968,7972],{"type":29,"tag":127,"props":7969,"children":7970},{"style":4044},[7971],{"type":56,"value":4167},{"type":29,"tag":127,"props":7973,"children":7974},{"style":603},[7975],{"type":56,"value":4052},{"type":29,"tag":127,"props":7977,"children":7978},{"class":598,"line":1372},[7979,7983,7987,7991],{"type":29,"tag":127,"props":7980,"children":7981},{"style":603},[7982],{"type":56,"value":4137},{"type":29,"tag":127,"props":7984,"children":7985},{"style":4044},[7986],{"type":56,"value":4400},{"type":29,"tag":127,"props":7988,"children":7989},{"style":603},[7990],{"type":56,"value":620},{"type":29,"tag":127,"props":7992,"children":7993},{"style":1686},[7994],{"type":56,"value":6391},{"type":29,"tag":127,"props":7996,"children":7997},{"class":598,"line":1380},[7998,8002,8006,8010],{"type":29,"tag":127,"props":7999,"children":8000},{"style":603},[8001],{"type":56,"value":4137},{"type":29,"tag":127,"props":8003,"children":8004},{"style":4044},[8005],{"type":56,"value":4400},{"type":29,"tag":127,"props":8007,"children":8008},{"style":603},[8009],{"type":56,"value":620},{"type":29,"tag":127,"props":8011,"children":8012},{"style":1686},[8013],{"type":56,"value":4409},{"type":29,"tag":127,"props":8015,"children":8016},{"class":598,"line":1401},[8017,8021,8025],{"type":29,"tag":127,"props":8018,"children":8019},{"style":4044},[8020],{"type":56,"value":4417},{"type":29,"tag":127,"props":8022,"children":8023},{"style":603},[8024],{"type":56,"value":620},{"type":29,"tag":127,"props":8026,"children":8027},{"style":1686},[8028],{"type":56,"value":4426},{"type":29,"tag":127,"props":8030,"children":8031},{"class":598,"line":1418},[8032,8036,8040,8044],{"type":29,"tag":127,"props":8033,"children":8034},{"style":603},[8035],{"type":56,"value":4137},{"type":29,"tag":127,"props":8037,"children":8038},{"style":4044},[8039],{"type":56,"value":4400},{"type":29,"tag":127,"props":8041,"children":8042},{"style":603},[8043],{"type":56,"value":620},{"type":29,"tag":127,"props":8045,"children":8046},{"style":1686},[8047],{"type":56,"value":4446},{"type":29,"tag":127,"props":8049,"children":8050},{"class":598,"line":1426},[8051],{"type":29,"tag":127,"props":8052,"children":8053},{"emptyLinePlaceholder":1855},[8054],{"type":56,"value":1858},{"type":29,"tag":127,"props":8056,"children":8057},{"class":598,"line":1439},[8058,8062],{"type":29,"tag":127,"props":8059,"children":8060},{"style":4044},[8061],{"type":56,"value":6067},{"type":29,"tag":127,"props":8063,"children":8064},{"style":603},[8065],{"type":56,"value":4052},{"type":29,"tag":127,"props":8067,"children":8068},{"class":598,"line":1452},[8069,8073],{"type":29,"tag":127,"props":8070,"children":8071},{"style":4044},[8072],{"type":56,"value":6235},{"type":29,"tag":127,"props":8074,"children":8075},{"style":603},[8076],{"type":56,"value":4052},{"type":29,"tag":127,"props":8078,"children":8079},{"class":598,"line":1470},[8080,8084,8088],{"type":29,"tag":127,"props":8081,"children":8082},{"style":4044},[8083],{"type":56,"value":6248},{"type":29,"tag":127,"props":8085,"children":8086},{"style":603},[8087],{"type":56,"value":620},{"type":29,"tag":127,"props":8089,"children":8090},{"style":1686},[8091],{"type":56,"value":5159},{"type":29,"tag":127,"props":8093,"children":8094},{"class":598,"line":1478},[8095,8099,8103,8107],{"type":29,"tag":127,"props":8096,"children":8097},{"style":4044},[8098],{"type":56,"value":6264},{"type":29,"tag":127,"props":8100,"children":8101},{"style":603},[8102],{"type":56,"value":4328},{"type":29,"tag":127,"props":8104,"children":8105},{"style":1686},[8106],{"type":56,"value":4333},{"type":29,"tag":127,"props":8108,"children":8109},{"style":603},[8110],{"type":56,"value":4338},{"type":29,"tag":127,"props":8112,"children":8113},{"class":598,"line":1491},[8114,8118,8122],{"type":29,"tag":127,"props":8115,"children":8116},{"style":4044},[8117],{"type":56,"value":6284},{"type":29,"tag":127,"props":8119,"children":8120},{"style":603},[8121],{"type":56,"value":620},{"type":29,"tag":127,"props":8123,"children":8124},{"style":1686},[8125],{"type":56,"value":6209},{"type":29,"tag":127,"props":8127,"children":8128},{"class":598,"line":1500},[8129,8133],{"type":29,"tag":127,"props":8130,"children":8131},{"style":4044},[8132],{"type":56,"value":6300},{"type":29,"tag":127,"props":8134,"children":8135},{"style":603},[8136],{"type":56,"value":4052},{"type":29,"tag":127,"props":8138,"children":8139},{"class":598,"line":1509},[8140,8144],{"type":29,"tag":127,"props":8141,"children":8142},{"style":603},[8143],{"type":56,"value":5696},{"type":29,"tag":127,"props":8145,"children":8146},{"style":1686},[8147],{"type":56,"value":6316},{"type":29,"tag":127,"props":8149,"children":8150},{"class":598,"line":1522},[8151,8155],{"type":29,"tag":127,"props":8152,"children":8153},{"style":4044},[8154],{"type":56,"value":6324},{"type":29,"tag":127,"props":8156,"children":8157},{"style":603},[8158],{"type":56,"value":4052},{"type":29,"tag":127,"props":8160,"children":8161},{"class":598,"line":1530},[8162,8166],{"type":29,"tag":127,"props":8163,"children":8164},{"style":4044},[8165],{"type":56,"value":6336},{"type":29,"tag":127,"props":8167,"children":8168},{"style":603},[8169],{"type":56,"value":4052},{"type":29,"tag":127,"props":8171,"children":8172},{"class":598,"line":1539},[8173,8177,8181],{"type":29,"tag":127,"props":8174,"children":8175},{"style":4044},[8176],{"type":56,"value":6348},{"type":29,"tag":127,"props":8178,"children":8179},{"style":603},[8180],{"type":56,"value":620},{"type":29,"tag":127,"props":8182,"children":8183},{"style":1686},[8184],{"type":56,"value":6357},{"type":29,"tag":127,"props":8186,"children":8187},{"class":598,"line":1547},[8188,8192],{"type":29,"tag":127,"props":8189,"children":8190},{"style":4044},[8191],{"type":56,"value":6366},{"type":29,"tag":127,"props":8193,"children":8194},{"style":603},[8195],{"type":56,"value":4052},{"type":29,"tag":127,"props":8197,"children":8198},{"class":598,"line":1560},[8199,8203,8207,8211],{"type":29,"tag":127,"props":8200,"children":8201},{"style":603},[8202],{"type":56,"value":5696},{"type":29,"tag":127,"props":8204,"children":8205},{"style":4044},[8206],{"type":56,"value":4400},{"type":29,"tag":127,"props":8208,"children":8209},{"style":603},[8210],{"type":56,"value":620},{"type":29,"tag":127,"props":8212,"children":8213},{"style":1686},[8214],{"type":56,"value":6391},{"type":29,"tag":127,"props":8216,"children":8217},{"class":598,"line":1573},[8218,8222,8226,8230],{"type":29,"tag":127,"props":8219,"children":8220},{"style":603},[8221],{"type":56,"value":5696},{"type":29,"tag":127,"props":8223,"children":8224},{"style":4044},[8225],{"type":56,"value":4400},{"type":29,"tag":127,"props":8227,"children":8228},{"style":603},[8229],{"type":56,"value":620},{"type":29,"tag":127,"props":8231,"children":8232},{"style":1686},[8233],{"type":56,"value":4409},{"type":29,"tag":127,"props":8235,"children":8236},{"class":598,"line":1594},[8237,8241,8245],{"type":29,"tag":127,"props":8238,"children":8239},{"style":4044},[8240],{"type":56,"value":6420},{"type":29,"tag":127,"props":8242,"children":8243},{"style":603},[8244],{"type":56,"value":620},{"type":29,"tag":127,"props":8246,"children":8247},{"style":1686},[8248],{"type":56,"value":4426},{"type":29,"tag":127,"props":8250,"children":8251},{"class":598,"line":1607},[8252,8256,8260,8264],{"type":29,"tag":127,"props":8253,"children":8254},{"style":603},[8255],{"type":56,"value":5696},{"type":29,"tag":127,"props":8257,"children":8258},{"style":4044},[8259],{"type":56,"value":4400},{"type":29,"tag":127,"props":8261,"children":8262},{"style":603},[8263],{"type":56,"value":620},{"type":29,"tag":127,"props":8265,"children":8266},{"style":1686},[8267],{"type":56,"value":4446},{"type":29,"tag":4898,"props":8269,"children":8270},{},[8271],{"type":56,"value":4902},{"title":7,"searchDepth":271,"depth":271,"links":8273},[8274,8277,8280],{"id":6067,"depth":271,"text":6070,"children":8275},[8276],{"id":6170,"depth":634,"text":6173},{"id":6466,"depth":271,"text":6037,"children":8278},[8279],{"id":6512,"depth":634,"text":6515},{"id":7338,"depth":271,"text":7341},{"_path":429,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":430,"description":431,"author":394,"image":395,"releaseDate":432,"blogCategories":8282,"articleTags":8283,"tags":8284,"body":8285,"_type":275,"_id":436,"_source":277,"_file":437,"_stem":438,"_extension":280},[398,399],[399,401],[23,404],{"type":26,"children":8286,"toc":8812},[8287,8291,8302,8308,8321,8330,8361,8367,8394,8399,8427,8736,8741,8808],{"type":29,"tag":66,"props":8288,"children":8290},{"alt":7,"aspect-ratio":474,"height":475,"object-fit":476,"src":8289},"/blog/shopware-renovate.png",[],{"type":29,"tag":48,"props":8292,"children":8293},{},[8294,8300],{"type":29,"tag":490,"props":8295,"children":8297},{"href":8296},"https://docs.renovatebot.com/",[8298],{"type":56,"value":8299},"Renovate",{"type":56,"value":8301}," 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":29,"tag":90,"props":8303,"children":8305},{"id":8304},"shopware-versioning-scheme",[8306],{"type":56,"value":8307},"Shopware versioning scheme",{"type":29,"tag":48,"props":8309,"children":8310},{},[8311,8313,8319],{"type":56,"value":8312},"Shopware is using a custom versioning scheme. You can read the ",{"type":29,"tag":490,"props":8314,"children":8316},{"href":8315},"https://www.shopware.com/en/news/shopware-6-versioning-strategy/",[8317],{"type":56,"value":8318},"official article",{"type":56,"value":8320},", but in short:",{"type":29,"tag":8322,"props":8323,"children":8324},"blockquote",{},[8325],{"type":29,"tag":48,"props":8326,"children":8327},{},[8328],{"type":56,"value":8329},"Shopware implemented SemVer as  \"SemVer with benefits\".",{"type":29,"tag":8322,"props":8331,"children":8332},{},[8333,8338,8356],{"type":29,"tag":48,"props":8334,"children":8335},{},[8336],{"type":56,"value":8337},"A SemVer compliant version has three numbers: Major, Minor, and Patch. They are incremented following this ruleset:",{"type":29,"tag":5000,"props":8339,"children":8340},{},[8341,8346,8351],{"type":29,"tag":513,"props":8342,"children":8343},{},[8344],{"type":56,"value":8345},"MAJOR: Incompatible API changes are made",{"type":29,"tag":513,"props":8347,"children":8348},{},[8349],{"type":56,"value":8350},"MINOR: Functionality is added in a backward-compatible manner",{"type":29,"tag":513,"props":8352,"children":8353},{},[8354],{"type":56,"value":8355},"PATCH: Backward-compatible bug fixes are made",{"type":29,"tag":48,"props":8357,"children":8358},{},[8359],{"type":56,"value":8360},"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":29,"tag":90,"props":8362,"children":8364},{"id":8363},"renovate-configuration",[8365],{"type":56,"value":8366},"Renovate configuration",{"type":29,"tag":48,"props":8368,"children":8369},{},[8370,8372,8378,8380,8386,8388],{"type":56,"value":8371},"The ",{"type":29,"tag":519,"props":8373,"children":8375},{"className":8374},[],[8376],{"type":56,"value":8377},"\"big marketing number\"",{"type":56,"value":8379}," or ",{"type":29,"tag":519,"props":8381,"children":8383},{"className":8382},[],[8384],{"type":56,"value":8385},"\"generation\"",{"type":56,"value":8387}," is reflected in Renovate as ",{"type":29,"tag":519,"props":8389,"children":8391},{"className":8390},[],[8392],{"type":56,"value":8393},"compatibility",{"type":29,"tag":48,"props":8395,"children":8396},{},[8397],{"type":56,"value":8398},"The following configuration will:",{"type":29,"tag":509,"props":8400,"children":8401},{},[8402,8407,8417,8422],{"type":29,"tag":513,"props":8403,"children":8404},{},[8405],{"type":56,"value":8406},"Group all shopware specific updates",{"type":29,"tag":513,"props":8408,"children":8409},{},[8410,8412],{"type":56,"value":8411},"Group the updates as ",{"type":29,"tag":519,"props":8413,"children":8415},{"className":8414},[],[8416],{"type":56,"value":23},{"type":29,"tag":513,"props":8418,"children":8419},{},[8420],{"type":56,"value":8421},"Tell Renovate how to extract the version",{"type":29,"tag":513,"props":8423,"children":8424},{},[8425],{"type":56,"value":8426},"Tell Renovate where to find changelog information",{"type":29,"tag":582,"props":8428,"children":8431},{"className":584,"code":8429,"filename":8430,"language":384,"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",[8432],{"type":29,"tag":519,"props":8433,"children":8434},{"__ignoreMap":7},[8435,8442,8463,8475,8482,8503,8515,8523,8531,8543,8554,8566,8578,8586,8593,8614,8698,8715,8722,8729],{"type":29,"tag":127,"props":8436,"children":8437},{"class":598,"line":599},[8438],{"type":29,"tag":127,"props":8439,"children":8440},{"style":603},[8441],{"type":56,"value":606},{"type":29,"tag":127,"props":8443,"children":8444},{"class":598,"line":271},[8445,8450,8454,8459],{"type":29,"tag":127,"props":8446,"children":8447},{"style":612},[8448],{"type":56,"value":8449},"  \"$schema\"",{"type":29,"tag":127,"props":8451,"children":8452},{"style":603},[8453],{"type":56,"value":620},{"type":29,"tag":127,"props":8455,"children":8456},{"style":623},[8457],{"type":56,"value":8458},"\"https://docs.renovatebot.com/renovate-schema.json\"",{"type":29,"tag":127,"props":8460,"children":8461},{"style":603},[8462],{"type":56,"value":631},{"type":29,"tag":127,"props":8464,"children":8465},{"class":598,"line":634},[8466,8471],{"type":29,"tag":127,"props":8467,"children":8468},{"style":612},[8469],{"type":56,"value":8470},"  \"packageRules\"",{"type":29,"tag":127,"props":8472,"children":8473},{"style":603},[8474],{"type":56,"value":859},{"type":29,"tag":127,"props":8476,"children":8477},{"class":598,"line":656},[8478],{"type":29,"tag":127,"props":8479,"children":8480},{"style":603},[8481],{"type":56,"value":868},{"type":29,"tag":127,"props":8483,"children":8484},{"class":598,"line":678},[8485,8490,8494,8499],{"type":29,"tag":127,"props":8486,"children":8487},{"style":612},[8488],{"type":56,"value":8489},"      \"description\"",{"type":29,"tag":127,"props":8491,"children":8492},{"style":603},[8493],{"type":56,"value":620},{"type":29,"tag":127,"props":8495,"children":8496},{"style":623},[8497],{"type":56,"value":8498},"\"Follow Shopware version schema\"",{"type":29,"tag":127,"props":8500,"children":8501},{"style":603},[8502],{"type":56,"value":631},{"type":29,"tag":127,"props":8504,"children":8505},{"class":598,"line":692},[8506,8511],{"type":29,"tag":127,"props":8507,"children":8508},{"style":612},[8509],{"type":56,"value":8510},"      \"matchDatasources\"",{"type":29,"tag":127,"props":8512,"children":8513},{"style":603},[8514],{"type":56,"value":859},{"type":29,"tag":127,"props":8516,"children":8517},{"class":598,"line":714},[8518],{"type":29,"tag":127,"props":8519,"children":8520},{"style":623},[8521],{"type":56,"value":8522},"        \"packagist\"\n",{"type":29,"tag":127,"props":8524,"children":8525},{"class":598,"line":736},[8526],{"type":29,"tag":127,"props":8527,"children":8528},{"style":603},[8529],{"type":56,"value":8530},"      ],\n",{"type":29,"tag":127,"props":8532,"children":8533},{"class":598,"line":758},[8534,8539],{"type":29,"tag":127,"props":8535,"children":8536},{"style":612},[8537],{"type":56,"value":8538},"      \"matchPackageNames\"",{"type":29,"tag":127,"props":8540,"children":8541},{"style":603},[8542],{"type":56,"value":859},{"type":29,"tag":127,"props":8544,"children":8545},{"class":598,"line":780},[8546,8550],{"type":29,"tag":127,"props":8547,"children":8548},{"style":623},[8549],{"type":56,"value":2077},{"type":29,"tag":127,"props":8551,"children":8552},{"style":603},[8553],{"type":56,"value":631},{"type":29,"tag":127,"props":8555,"children":8556},{"class":598,"line":801},[8557,8562],{"type":29,"tag":127,"props":8558,"children":8559},{"style":623},[8560],{"type":56,"value":8561},"        \"shopware/administration\"",{"type":29,"tag":127,"props":8563,"children":8564},{"style":603},[8565],{"type":56,"value":631},{"type":29,"tag":127,"props":8567,"children":8568},{"class":598,"line":118},[8569,8574],{"type":29,"tag":127,"props":8570,"children":8571},{"style":623},[8572],{"type":56,"value":8573},"        \"shopware/elasticsearch\"",{"type":29,"tag":127,"props":8575,"children":8576},{"style":603},[8577],{"type":56,"value":631},{"type":29,"tag":127,"props":8579,"children":8580},{"class":598,"line":839},[8581],{"type":29,"tag":127,"props":8582,"children":8583},{"style":623},[8584],{"type":56,"value":8585},"        \"shopware/storefront\"\n",{"type":29,"tag":127,"props":8587,"children":8588},{"class":598,"line":848},[8589],{"type":29,"tag":127,"props":8590,"children":8591},{"style":603},[8592],{"type":56,"value":8530},{"type":29,"tag":127,"props":8594,"children":8595},{"class":598,"line":862},[8596,8601,8605,8610],{"type":29,"tag":127,"props":8597,"children":8598},{"style":612},[8599],{"type":56,"value":8600},"      \"groupName\"",{"type":29,"tag":127,"props":8602,"children":8603},{"style":603},[8604],{"type":56,"value":620},{"type":29,"tag":127,"props":8606,"children":8607},{"style":623},[8608],{"type":56,"value":8609},"\"shopware\"",{"type":29,"tag":127,"props":8611,"children":8612},{"style":603},[8613],{"type":56,"value":631},{"type":29,"tag":127,"props":8615,"children":8616},{"class":598,"line":871},[8617,8622,8626,8631,8635,8640,8644,8649,8653,8658,8662,8667,8671,8676,8680,8685,8689,8694],{"type":29,"tag":127,"props":8618,"children":8619},{"style":612},[8620],{"type":56,"value":8621},"      \"versioning\"",{"type":29,"tag":127,"props":8623,"children":8624},{"style":603},[8625],{"type":56,"value":620},{"type":29,"tag":127,"props":8627,"children":8628},{"style":623},[8629],{"type":56,"value":8630},"\"regex:(?\u003Ccompatibility>",{"type":29,"tag":127,"props":8632,"children":8633},{"style":941},[8634],{"type":56,"value":1254},{"type":29,"tag":127,"props":8636,"children":8637},{"style":623},[8638],{"type":56,"value":8639},"d+)",{"type":29,"tag":127,"props":8641,"children":8642},{"style":941},[8643],{"type":56,"value":1254},{"type":29,"tag":127,"props":8645,"children":8646},{"style":623},[8647],{"type":56,"value":8648},".(?\u003Cmajor>",{"type":29,"tag":127,"props":8650,"children":8651},{"style":941},[8652],{"type":56,"value":1254},{"type":29,"tag":127,"props":8654,"children":8655},{"style":623},[8656],{"type":56,"value":8657},"d+)(",{"type":29,"tag":127,"props":8659,"children":8660},{"style":941},[8661],{"type":56,"value":1254},{"type":29,"tag":127,"props":8663,"children":8664},{"style":623},[8665],{"type":56,"value":8666},".(?\u003Cminor>",{"type":29,"tag":127,"props":8668,"children":8669},{"style":941},[8670],{"type":56,"value":1254},{"type":29,"tag":127,"props":8672,"children":8673},{"style":623},[8674],{"type":56,"value":8675},"d+))?(",{"type":29,"tag":127,"props":8677,"children":8678},{"style":941},[8679],{"type":56,"value":1254},{"type":29,"tag":127,"props":8681,"children":8682},{"style":623},[8683],{"type":56,"value":8684},".(?\u003Cpatch>",{"type":29,"tag":127,"props":8686,"children":8687},{"style":941},[8688],{"type":56,"value":1254},{"type":29,"tag":127,"props":8690,"children":8691},{"style":623},[8692],{"type":56,"value":8693},"d+))?$\"",{"type":29,"tag":127,"props":8695,"children":8696},{"style":603},[8697],{"type":56,"value":631},{"type":29,"tag":127,"props":8699,"children":8700},{"class":598,"line":893},[8701,8706,8710],{"type":29,"tag":127,"props":8702,"children":8703},{"style":612},[8704],{"type":56,"value":8705},"      \"sourceUrl\"",{"type":29,"tag":127,"props":8707,"children":8708},{"style":603},[8709],{"type":56,"value":620},{"type":29,"tag":127,"props":8711,"children":8712},{"style":623},[8713],{"type":56,"value":8714},"\"https://github.com/shopware/shopware\"\n",{"type":29,"tag":127,"props":8716,"children":8717},{"class":598,"line":915},[8718],{"type":29,"tag":127,"props":8719,"children":8720},{"style":603},[8721],{"type":56,"value":1204},{"type":29,"tag":127,"props":8723,"children":8724},{"class":598,"line":928},[8725],{"type":29,"tag":127,"props":8726,"children":8727},{"style":603},[8728],{"type":56,"value":4844},{"type":29,"tag":127,"props":8730,"children":8731},{"class":598,"line":947},[8732],{"type":29,"tag":127,"props":8733,"children":8734},{"style":603},[8735],{"type":56,"value":1661},{"type":29,"tag":48,"props":8737,"children":8738},{},[8739],{"type":56,"value":8740},"This should result in creation of following merge/pull requests",{"type":29,"tag":5000,"props":8742,"children":8743},{},[8744,8779],{"type":29,"tag":513,"props":8745,"children":8746},{},[8747,8749,8755,8757,8763,8764,8770,8771,8777],{"type":56,"value":8748},"fix(deps): update shopware (",{"type":29,"tag":519,"props":8750,"children":8752},{"className":8751},[],[8753],{"type":56,"value":8754},"shopware/administration",{"type":56,"value":8756},", ",{"type":29,"tag":519,"props":8758,"children":8760},{"className":8759},[],[8761],{"type":56,"value":8762},"shopware/core",{"type":56,"value":8756},{"type":29,"tag":519,"props":8765,"children":8767},{"className":8766},[],[8768],{"type":56,"value":8769},"shopware/elasticsearch",{"type":56,"value":8756},{"type":29,"tag":519,"props":8772,"children":8774},{"className":8773},[],[8775],{"type":56,"value":8776},"shopware/storefront",{"type":56,"value":8778},")`",{"type":29,"tag":513,"props":8780,"children":8781},{},[8782,8784,8789,8790,8795,8796,8801,8802,8807],{"type":56,"value":8783},"fix(deps): update shopware to v7 (major) (",{"type":29,"tag":519,"props":8785,"children":8787},{"className":8786},[],[8788],{"type":56,"value":8754},{"type":56,"value":8756},{"type":29,"tag":519,"props":8791,"children":8793},{"className":8792},[],[8794],{"type":56,"value":8762},{"type":56,"value":8756},{"type":29,"tag":519,"props":8797,"children":8799},{"className":8798},[],[8800],{"type":56,"value":8769},{"type":56,"value":8756},{"type":29,"tag":519,"props":8803,"children":8805},{"className":8804},[],[8806],{"type":56,"value":8776},{"type":56,"value":8778},{"type":29,"tag":4898,"props":8809,"children":8810},{},[8811],{"type":56,"value":4902},{"title":7,"searchDepth":271,"depth":271,"links":8813},[8814,8815],{"id":8304,"depth":271,"text":8307},{"id":8363,"depth":271,"text":8366},{"_path":440,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":441,"description":442,"author":170,"image":443,"releaseDate":444,"blogCategories":8817,"articleTags":8818,"tags":8819,"body":8820,"_type":275,"_id":450,"_source":277,"_file":451,"_stem":452,"_extension":280},[398,399],[447,401],[24,449],{"type":26,"children":8821,"toc":8883},[8822,8828,8849,8854,8859,8865,8878],{"type":29,"tag":90,"props":8823,"children":8825},{"id":8824},"what-is-this",[8826],{"type":56,"value":8827},"What is this?",{"type":29,"tag":48,"props":8829,"children":8830},{},[8831,8833,8839,8841,8847],{"type":56,"value":8832},"This wrapper serves as a simple and cost-effective bridge that translates calls from the\n",{"type":29,"tag":490,"props":8834,"children":8836},{"href":8835},"https://docs.developer.amazonservices.com/en_US/dev_guide/index.html",[8837],{"type":56,"value":8838},"Amazon Marketplace Web Service (MWS)",{"type":56,"value":8840},"\nAPI to ",{"type":29,"tag":490,"props":8842,"children":8844},{"href":8843},"https://developer-docs.amazon.com/sp-api",[8845],{"type":56,"value":8846},"Selling Partner (SP) API",{"type":56,"value":8848}," 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":29,"tag":48,"props":8850,"children":8851},{},[8852],{"type":56,"value":8853},"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":29,"tag":48,"props":8855,"children":8856},{},[8857],{"type":56,"value":8858},"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":29,"tag":90,"props":8860,"children":8862},{"id":8861},"download",[8863],{"type":56,"value":8864},"Download",{"type":29,"tag":48,"props":8866,"children":8867},{},[8868,8870,8876],{"type":56,"value":8869},"Interested? The project has been published as open-source on GitHub:\n",{"type":29,"tag":490,"props":8871,"children":8873},{"href":8872},"https://github.com/bhelm/Amazon-MWS-SP-Wrapper",[8874],{"type":56,"value":8875},"Amazon-MWS-SP-API-Wrapper",{"type":56,"value":8877},". 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":29,"tag":48,"props":8879,"children":8880},{},[8881],{"type":56,"value":8882},"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":271,"depth":271,"links":8884},[8885,8886],{"id":8824,"depth":271,"text":8827},{"id":8861,"depth":271,"text":8864},{"_path":454,"_dir":391,"_draft":6,"_partial":6,"_locale":7,"title":455,"description":456,"author":170,"image":457,"releaseDate":458,"blogCategories":8888,"articleTags":8889,"tags":8890,"body":8891,"_type":275,"_id":463,"_source":277,"_file":464,"_stem":465,"_extension":280},[402,399],[461],[23],{"type":26,"children":8892,"toc":9386},[8893,8899,8904,8915,8920,8926,8931,8951,8960,8965,8970,9288,9293,9298,9303,9308,9320,9372,9376,9382],{"type":29,"tag":90,"props":8894,"children":8896},{"id":8895},"shopware-5-parallel-thumbnail-generation-after-moving-a-shopware-5-system-to-another-server",[8897],{"type":56,"value":8898},"Shopware 5 - parallel thumbnail generation after moving a Shopware 5 system to another server",{"type":29,"tag":48,"props":8900,"children":8901},{},[8902],{"type":56,"value":8903},"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":29,"tag":48,"props":8905,"children":8906},{},[8907,8909],{"type":56,"value":8908},"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":29,"tag":490,"props":8910,"children":8912},{"href":8911},"https://gist.github.com/bhelm/2d30f0cebcf4a7d8ea41c532ec67cd62",[8913],{"type":56,"value":8914},"ExportImagesCommand.php",{"type":29,"tag":48,"props":8916,"children":8917},{},[8918],{"type":56,"value":8919},"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":29,"tag":90,"props":8921,"children":8923},{"id":8922},"sw5-default-thumbnail-generation-would-have-taken-80-hours",[8924],{"type":56,"value":8925},"SW5 default thumbnail generation would have taken 80 hours",{"type":29,"tag":48,"props":8927,"children":8928},{},[8929],{"type":56,"value":8930},"... and would only use half of a core.",{"type":29,"tag":48,"props":8932,"children":8933},{},[8934,8936,8942,8944,8949],{"type":56,"value":8935},"I was curious if I can speed up this generation process. The server itself has 32 cores available, so I copied the ",{"type":29,"tag":8937,"props":8938,"children":8939},"em",{},[8940],{"type":56,"value":8941},"generate thumbnail",{"type":56,"value":8943}," command from sw5 and modified it to work in batches with an ",{"type":29,"tag":8937,"props":8945,"children":8946},{},[8947],{"type":56,"value":8948},"--batch",{"type":56,"value":8950}," parameter:",{"type":29,"tag":48,"props":8952,"children":8953},{},[8954],{"type":29,"tag":490,"props":8955,"children":8957},{"href":8956},"https://gist.github.com/bhelm/2015d3829d4a3f24f9760f6e4e1aac1f",[8958],{"type":56,"value":8959},"ParallelThumbnailGenerateCommand.php",{"type":29,"tag":48,"props":8961,"children":8962},{},[8963],{"type":56,"value":8964},"To make it work, I just modified the Shopware core at engine/Shopware/Models/Media/Repository.php",{"type":29,"tag":48,"props":8966,"children":8967},{},[8968],{"type":56,"value":8969},"I just changed the getAlbumMediaQuery function to:",{"type":29,"tag":582,"props":8971,"children":8975},{"className":8972,"code":8973,"language":8974,"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",[8976],{"type":29,"tag":519,"props":8977,"children":8978},{"__ignoreMap":7},[8979,9052,9059,9097,9119,9147,9172,9179,9186,9208,9226,9244,9251,9258,9281],{"type":29,"tag":127,"props":8980,"children":8981},{"class":598,"line":599},[8982,8987,8992,8997,9002,9007,9011,9016,9020,9025,9029,9034,9038,9043,9047],{"type":29,"tag":127,"props":8983,"children":8984},{"style":603},[8985],{"type":56,"value":8986},"public function ",{"type":29,"tag":127,"props":8988,"children":8989},{"style":1681},[8990],{"type":56,"value":8991},"getAlbumMediaQuery",{"type":29,"tag":127,"props":8993,"children":8994},{"style":603},[8995],{"type":56,"value":8996},"($albumId, $filter ",{"type":29,"tag":127,"props":8998,"children":8999},{"style":3593},[9000],{"type":56,"value":9001},"=",{"type":29,"tag":127,"props":9003,"children":9004},{"style":603},[9005],{"type":56,"value":9006}," null, $orderBy ",{"type":29,"tag":127,"props":9008,"children":9009},{"style":3593},[9010],{"type":56,"value":9001},{"type":29,"tag":127,"props":9012,"children":9013},{"style":603},[9014],{"type":56,"value":9015}," null, $offset ",{"type":29,"tag":127,"props":9017,"children":9018},{"style":3593},[9019],{"type":56,"value":9001},{"type":29,"tag":127,"props":9021,"children":9022},{"style":603},[9023],{"type":56,"value":9024}," null, $limit ",{"type":29,"tag":127,"props":9026,"children":9027},{"style":3593},[9028],{"type":56,"value":9001},{"type":29,"tag":127,"props":9030,"children":9031},{"style":603},[9032],{"type":56,"value":9033}," null, $validTypes ",{"type":29,"tag":127,"props":9035,"children":9036},{"style":3593},[9037],{"type":56,"value":9001},{"type":29,"tag":127,"props":9039,"children":9040},{"style":603},[9041],{"type":56,"value":9042}," null, $batch ",{"type":29,"tag":127,"props":9044,"children":9045},{"style":3593},[9046],{"type":56,"value":9001},{"type":29,"tag":127,"props":9048,"children":9049},{"style":603},[9050],{"type":56,"value":9051}," null)\n",{"type":29,"tag":127,"props":9053,"children":9054},{"class":598,"line":271},[9055],{"type":29,"tag":127,"props":9056,"children":9057},{"style":603},[9058],{"type":56,"value":606},{"type":29,"tag":127,"props":9060,"children":9061},{"class":598,"line":634},[9062,9067,9071,9076,9082,9087,9092],{"type":29,"tag":127,"props":9063,"children":9064},{"style":603},[9065],{"type":56,"value":9066},"$builder ",{"type":29,"tag":127,"props":9068,"children":9069},{"style":3593},[9070],{"type":56,"value":9001},{"type":29,"tag":127,"props":9072,"children":9073},{"style":603},[9074],{"type":56,"value":9075}," $",{"type":29,"tag":127,"props":9077,"children":9079},{"style":9078},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#FD971F",[9080],{"type":56,"value":9081},"this",{"type":29,"tag":127,"props":9083,"children":9084},{"style":603},[9085],{"type":56,"value":9086},"->",{"type":29,"tag":127,"props":9088,"children":9089},{"style":1681},[9090],{"type":56,"value":9091},"getAlbumMediaQueryBuilder",{"type":29,"tag":127,"props":9093,"children":9094},{"style":603},[9095],{"type":56,"value":9096},"($albumId, $filter, $orderBy, $validTypes);\n",{"type":29,"tag":127,"props":9098,"children":9099},{"class":598,"line":656},[9100,9104,9109,9114],{"type":29,"tag":127,"props":9101,"children":9102},{"style":3593},[9103],{"type":56,"value":4400},{"type":29,"tag":127,"props":9105,"children":9106},{"style":603},[9107],{"type":56,"value":9108}," (",{"type":29,"tag":127,"props":9110,"children":9111},{"style":1681},[9112],{"type":56,"value":9113},"is_numeric",{"type":29,"tag":127,"props":9115,"children":9116},{"style":603},[9117],{"type":56,"value":9118},"($batch)) {\n",{"type":29,"tag":127,"props":9120,"children":9121},{"class":598,"line":678},[9122,9127,9132,9137,9142],{"type":29,"tag":127,"props":9123,"children":9124},{"style":603},[9125],{"type":56,"value":9126},"$builder->",{"type":29,"tag":127,"props":9128,"children":9129},{"style":1681},[9130],{"type":56,"value":9131},"andWhere",{"type":29,"tag":127,"props":9133,"children":9134},{"style":603},[9135],{"type":56,"value":9136},"(",{"type":29,"tag":127,"props":9138,"children":9139},{"style":1686},[9140],{"type":56,"value":9141},"'MOD(media.id, 1000) = ?3'",{"type":29,"tag":127,"props":9143,"children":9144},{"style":603},[9145],{"type":56,"value":9146},");\n",{"type":29,"tag":127,"props":9148,"children":9149},{"class":598,"line":692},[9150,9154,9159,9163,9167],{"type":29,"tag":127,"props":9151,"children":9152},{"style":603},[9153],{"type":56,"value":9126},{"type":29,"tag":127,"props":9155,"children":9156},{"style":1681},[9157],{"type":56,"value":9158},"setParameter",{"type":29,"tag":127,"props":9160,"children":9161},{"style":603},[9162],{"type":56,"value":9136},{"type":29,"tag":127,"props":9164,"children":9165},{"style":941},[9166],{"type":56,"value":69},{"type":29,"tag":127,"props":9168,"children":9169},{"style":603},[9170],{"type":56,"value":9171},", $batch);\n",{"type":29,"tag":127,"props":9173,"children":9174},{"class":598,"line":714},[9175],{"type":29,"tag":127,"props":9176,"children":9177},{"style":603},[9178],{"type":56,"value":1661},{"type":29,"tag":127,"props":9180,"children":9181},{"class":598,"line":736},[9182],{"type":29,"tag":127,"props":9183,"children":9184},{"emptyLinePlaceholder":1855},[9185],{"type":56,"value":1858},{"type":29,"tag":127,"props":9187,"children":9188},{"class":598,"line":758},[9189,9193,9198,9203],{"type":29,"tag":127,"props":9190,"children":9191},{"style":3593},[9192],{"type":56,"value":4179},{"type":29,"tag":127,"props":9194,"children":9195},{"style":603},[9196],{"type":56,"value":9197}," ($limit ",{"type":29,"tag":127,"props":9199,"children":9200},{"style":3593},[9201],{"type":56,"value":9202},"!==",{"type":29,"tag":127,"props":9204,"children":9205},{"style":603},[9206],{"type":56,"value":9207}," null) {\n",{"type":29,"tag":127,"props":9209,"children":9210},{"class":598,"line":780},[9211,9216,9221],{"type":29,"tag":127,"props":9212,"children":9213},{"style":603},[9214],{"type":56,"value":9215},"        $builder->",{"type":29,"tag":127,"props":9217,"children":9218},{"style":1681},[9219],{"type":56,"value":9220},"setFirstResult",{"type":29,"tag":127,"props":9222,"children":9223},{"style":603},[9224],{"type":56,"value":9225},"($offset)\n",{"type":29,"tag":127,"props":9227,"children":9228},{"class":598,"line":801},[9229,9234,9239],{"type":29,"tag":127,"props":9230,"children":9231},{"style":3593},[9232],{"type":56,"value":9233},"                ->",{"type":29,"tag":127,"props":9235,"children":9236},{"style":1681},[9237],{"type":56,"value":9238},"setMaxResults",{"type":29,"tag":127,"props":9240,"children":9241},{"style":603},[9242],{"type":56,"value":9243},"($limit);\n",{"type":29,"tag":127,"props":9245,"children":9246},{"class":598,"line":118},[9247],{"type":29,"tag":127,"props":9248,"children":9249},{"style":603},[9250],{"type":56,"value":1204},{"type":29,"tag":127,"props":9252,"children":9253},{"class":598,"line":839},[9254],{"type":29,"tag":127,"props":9255,"children":9256},{"emptyLinePlaceholder":1855},[9257],{"type":56,"value":1858},{"type":29,"tag":127,"props":9259,"children":9260},{"class":598,"line":848},[9261,9266,9271,9276],{"type":29,"tag":127,"props":9262,"children":9263},{"style":3593},[9264],{"type":56,"value":9265},"    return",{"type":29,"tag":127,"props":9267,"children":9268},{"style":603},[9269],{"type":56,"value":9270}," $builder->",{"type":29,"tag":127,"props":9272,"children":9273},{"style":1681},[9274],{"type":56,"value":9275},"getQuery",{"type":29,"tag":127,"props":9277,"children":9278},{"style":603},[9279],{"type":56,"value":9280},"();\n",{"type":29,"tag":127,"props":9282,"children":9283},{"class":598,"line":862},[9284],{"type":29,"tag":127,"props":9285,"children":9286},{"style":603},[9287],{"type":56,"value":1661},{"type":29,"tag":48,"props":9289,"children":9290},{},[9291],{"type":56,"value":9292},"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":29,"tag":48,"props":9294,"children":9295},{},[9296],{"type":56,"value":9297},"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":29,"tag":48,"props":9299,"children":9300},{},[9301],{"type":56,"value":9302},"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":29,"tag":48,"props":9304,"children":9305},{},[9306],{"type":56,"value":9307},"It starts 64 batches in parallel and continues its work until all 1000 batches are finished.",{"type":29,"tag":48,"props":9309,"children":9310},{},[9311,9313,9318],{"type":56,"value":9312},"And this is how it looks at ",{"type":29,"tag":8937,"props":9314,"children":9315},{},[9316],{"type":56,"value":9317},"htop",{"type":56,"value":9319},":",{"type":29,"tag":582,"props":9321,"children":9325},{"className":9322,"code":9323,"language":9324,"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",[9326],{"type":29,"tag":519,"props":9327,"children":9328},{"__ignoreMap":7},[9329],{"type":29,"tag":127,"props":9330,"children":9331},{"class":598,"line":599},[9332,9337,9342,9347,9352,9357,9362,9367],{"type":29,"tag":127,"props":9333,"children":9334},{"style":1681},[9335],{"type":56,"value":9336},"parallel",{"type":29,"tag":127,"props":9338,"children":9339},{"style":941},[9340],{"type":56,"value":9341}," -j",{"type":29,"tag":127,"props":9343,"children":9344},{"style":941},[9345],{"type":56,"value":9346}," 64",{"type":29,"tag":127,"props":9348,"children":9349},{"style":1686},[9350],{"type":56,"value":9351}," ./bin/console",{"type":29,"tag":127,"props":9353,"children":9354},{"style":1686},[9355],{"type":56,"value":9356}," my:image:generate:thumbnails",{"type":29,"tag":127,"props":9358,"children":9359},{"style":941},[9360],{"type":56,"value":9361}," --batch",{"type":29,"tag":127,"props":9363,"children":9364},{"style":1686},[9365],{"type":56,"value":9366}," :::",{"type":29,"tag":127,"props":9368,"children":9369},{"style":1686},[9370],{"type":56,"value":9371}," {0..999}\n",{"type":29,"tag":66,"props":9373,"children":9375},{"alt":9317,"aspect-ratio":191,"height":475,"object-fit":72,"src":9374},"/blog/htop.png",[],{"type":29,"tag":90,"props":9377,"children":9379},{"id":9378},"finally-all-the-work-is-now-finished-in-35-hours-instead-of-80",[9380],{"type":56,"value":9381},"Finally, all the work is now finished in 3.5 hours instead of 80.",{"type":29,"tag":4898,"props":9383,"children":9384},{},[9385],{"type":56,"value":4902},{"title":7,"searchDepth":271,"depth":271,"links":9387},[9388,9389,9390],{"id":8895,"depth":271,"text":8898},{"id":8922,"depth":271,"text":8925},{"id":9378,"depth":271,"text":9381},{"_path":9392,"_dir":283,"_draft":6,"_partial":6,"_locale":7,"slug":394,"teams":9393,"primaryTeam":286,"firstName":9395,"lastName":9396,"prefixTitle":7,"suffixTitle":9397,"education":9398,"role":9403,"workingSince":9405,"inTheCompanySince":9406,"techSkills":9407,"skills":9432,"projects":9445,"contactDetails":9454,"_image":9457,"image":9458,"_id":9459,"_type":384,"title":9460,"_source":283,"_file":9461,"_stem":9462,"_extension":384},"/employees/robert-juzak",[9394,286],"appDev","Robert","Juzak","B.Sc.",[9399],[9400,9401,9402],"Bachelor of Computer Science","Technische Universität Breslau","2016",[300,9404,299,302],"fullstackDeveloper","2015","2018",[9408,9409,9411,9414,9417,9420,9422,9425,9426,9427,9428,9429,9430],{"name":307,"level":308,"icon":309},{"name":9410,"level":308},"GitLab",{"name":9412,"level":308,"icon":9413},"Kubernetes","/images/Kubernetes.svg",{"name":9415,"level":308,"icon":9416},"PHPUnit","/images/PHP-Unit.svg",{"name":9418,"level":308,"icon":9419},"Portainer","/images/Portainer.svg",{"name":9421,"level":308},"Sentry",{"name":9423,"level":308,"icon":9424},"Sonarqube","/images/Sonarqube.svg",{"name":311,"level":308,"icon":312},{"name":340,"level":334,"icon":341},{"name":343,"level":334,"icon":344},{"name":324,"level":334},{"name":330,"level":334,"icon":331},{"name":9431,"level":334,"icon":350},"VueJS",[9433,9434,9435,9436,9438,9440,9442,9443,9444],{"name":3928,"level":308},{"name":363,"level":308},{"name":286,"level":308},{"name":9437,"level":308},"testDrivenBugfix",{"name":9439,"level":308},"testDrivenDevelopment",{"name":9441,"level":334},"accessibility",{"name":357,"level":334},{"name":359,"level":334},{"name":361,"level":334},[9446,9450,9452],{"project":369,"position":9447},[9448,9449],"Dev-Ops","Frontend Developer",{"project":9451,"position":9449},"Huawei-Calibration-aaS",{"project":9453,"position":9449},"Huawei-Inspect-3D",{"eMail":9455,"phone":9456,"visibility":380},"robert.juzak@helmundwalter.de","+49 351 799 035 26","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":282,"_dir":283,"_draft":6,"_partial":6,"_locale":7,"slug":170,"teams":9464,"primaryTeam":286,"firstName":287,"lastName":288,"prefixTitle":7,"suffixTitle":7,"education":9465,"executiveRole":294,"role":9467,"workingSince":303,"inTheCompanySince":304,"techSkills":9468,"skills":9485,"projects":9492,"contactDetails":9498,"_image":381,"image":382,"_id":383,"_type":384,"title":385,"_source":283,"_file":386,"_stem":387,"_extension":384},[285,286],[9466],[291,292,293],[296,297,286,298,299,300,301,302],[9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484],{"name":307,"level":308,"icon":309},{"name":311,"level":308,"icon":312},{"name":314,"level":308},{"name":316,"level":308,"icon":317},{"name":319,"level":308},{"name":321,"level":308,"icon":322},{"name":324,"level":308},{"name":326,"level":308},{"name":328,"level":308},{"name":330,"level":308,"icon":331},{"name":333,"level":334,"icon":335},{"name":337,"level":334,"icon":338},{"name":340,"level":334,"icon":341},{"name":343,"level":334,"icon":344},{"name":346,"level":334,"icon":347},{"name":349,"level":334,"icon":350},[9486,9487,9488,9489,9490,9491],{"name":353,"level":308},{"name":355,"level":308},{"name":357,"level":308},{"name":359,"level":308},{"name":361,"level":308},{"name":363,"level":334},[9493,9494,9495,9496,9497],{"project":366,"position":367},{"project":369,"position":367},{"project":371,"position":367},{"project":373,"position":374},{"project":376,"position":367},{"eMail":378,"phone":379,"visibility":380},[9500,9513],{"_path":9501,"_dir":9502,"_draft":6,"_partial":1855,"_locale":7,"name":9503,"slug":9502,"text":9504,"hoverText":9505,"image":9506,"customer":9507,"tags":9508,"_id":9509,"_type":4034,"title":9510,"_source":277,"_file":9511,"_stem":9512,"_extension":4034},"/en/portfolio/bitburger/_teaser","bitburger","Bitburger B2B and Brand Shops","Relaunch of Bitburger Brewery Group online shops with new platform","Migration of all brand shops and B2B shop of Bitburger Brewery Group to a unified platform. Ongoing support for redesign initiatives and integration of additional subsystems.","/images/portfolio/bitburger/Bitburger_HuW_Glaeser.jpg","Bitburger",[23,24],"common:en:portfolio:900.bitburger:_teaser.yaml","Teaser","en/portfolio/900.bitburger/_teaser.yaml","en/portfolio/900.bitburger/_teaser",{"_path":9514,"_dir":9515,"_draft":6,"_partial":1855,"_locale":7,"name":9516,"slug":9515,"text":9517,"hoverText":9518,"image":9519,"customer":9516,"tags":9520,"_id":9521,"_type":4034,"title":9510,"_source":277,"_file":9522,"_stem":9523,"_extension":4034},"/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",[449,24],"common:en:portfolio:9030.werner-consulting:_teaser.yaml","en/portfolio/9030.werner-consulting/_teaser.yaml","en/portfolio/9030.werner-consulting/_teaser",1782284065079]