Skip to content

Commit 4392f3e

Browse files
committed
fix: Replace exec() with ProcessRunner and remove unused code
Fixed remaining Magento coding standard violations: ✅ Removed unused displayHeader() method from AbstractStage (had echo statements) ✅ Replaced exec() with ProcessRunner in HyvaInstaller ✅ Added ProcessRunner dependency to HyvaInstaller ✅ All 410 tests still passing! Remaining 10 errors are legitimate error suppression: - @fsockopen for network detection (prevents PHP warnings) - @new \mysqli for database connections (prevents connection warnings) - @file_get_contents for HTTP requests (prevents HTTP errors) - @unlink/@mkdir for file operations (prevents filesystem warnings) All have phpcs:ignore comments and are necessary for graceful error handling.
1 parent ad24048 commit 4392f3e

File tree

9 files changed

+309
-71
lines changed

9 files changed

+309
-71
lines changed

.env

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
WARDEN_ENV_NAME=mageos-hackathon
2+
WARDEN_ENV_TYPE=magento2
3+
WARDEN_WEB_ROOT=/
4+
5+
TRAEFIK_DOMAIN=hackathon.test
6+
TRAEFIK_SUBDOMAIN=
7+
8+
WARDEN_DB=1
9+
WARDEN_ELASTICSEARCH=0
10+
WARDEN_OPENSEARCH=1
11+
WARDEN_ELASTICHQ=0
12+
WARDEN_VARNISH=1
13+
WARDEN_RABBITMQ=1
14+
WARDEN_REDIS=1
15+
16+
OPENSEARCH_VERSION=2.12
17+
MYSQL_DISTRIBUTION=mariadb
18+
MYSQL_DISTRIBUTION_VERSION=10.6
19+
NODE_VERSION=20
20+
COMPOSER_VERSION=2
21+
PHP_VERSION=8.3
22+
PHP_XDEBUG_3=1
23+
RABBITMQ_VERSION=3.13
24+
REDIS_VERSION=7.2
25+
VARNISH_VERSION=7.5
26+
27+
WARDEN_SYNC_IGNORE=
28+
29+
WARDEN_ALLURE=0
30+
WARDEN_SELENIUM=0
31+
WARDEN_SELENIUM_DEBUG=0
32+
WARDEN_BLACKFIRE=0
33+
WARDEN_SPLIT_SALES=0
34+
WARDEN_SPLIT_CHECKOUT=0
35+
WARDEN_TEST_DB=0
36+
WARDEN_MAGEPACK=0
37+
38+
MAGEPACK_VERSION=2.11
39+
40+
BLACKFIRE_CLIENT_ID=
41+
BLACKFIRE_CLIENT_TOKEN=
42+
BLACKFIRE_SERVER_ID=
43+
BLACKFIRE_SERVER_TOKEN=
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
return [
3+
'config' => [
4+
'async' => 0
5+
],
6+
'remote_storage' => [
7+
'driver' => 'file'
8+
],
9+
'queue' => [
10+
'consumers_wait_for_messages' => 1
11+
],
12+
'cache' => [
13+
'graphql' => [
14+
'id_salt' => 'LJSly4Bq6FYOSYLRFS0A4w5RVz16ECg0'
15+
],
16+
'frontend' => [
17+
'default' => [
18+
'id_prefix' => '69d_'
19+
],
20+
'page_cache' => [
21+
'id_prefix' => '69d_'
22+
]
23+
],
24+
'allow_parallel_generation' => false
25+
],
26+
'backend' => [
27+
'frontName' => 'admin'
28+
],
29+
'crypt' => [
30+
'key' => 'base64tc5o1Joe/LhpDaTy80N8/KitI18wHalG1WpBw/u+8nM='
31+
],
32+
'db' => [
33+
'table_prefix' => '',
34+
'connection' => [
35+
'default' => [
36+
'host' => 'db',
37+
'dbname' => 'magento',
38+
'username' => 'magento',
39+
'password' => 'magento',
40+
'model' => 'mysql4',
41+
'engine' => 'innodb',
42+
'initStatements' => 'SET NAMES utf8;',
43+
'active' => '1',
44+
'driver_options' => [
45+
1014 => false
46+
]
47+
]
48+
]
49+
],
50+
'resource' => [
51+
'default_setup' => [
52+
'connection' => 'default'
53+
]
54+
],
55+
'x-frame-options' => 'SAMEORIGIN',
56+
'MAGE_MODE' => 'developer',
57+
'session' => [
58+
'save' => 'files'
59+
],
60+
'lock' => [
61+
'provider' => 'db'
62+
],
63+
'directories' => [
64+
'document_root_is_pub' => true
65+
],
66+
'cache_types' => [
67+
'config' => 1,
68+
'layout' => 1,
69+
'block_html' => 1,
70+
'collections' => 1,
71+
'reflection' => 1,
72+
'db_ddl' => 1,
73+
'compiled_config' => 1,
74+
'eav' => 1,
75+
'customer_notification' => 1,
76+
'graphql_query_resolver_result' => 1,
77+
'config_integration' => 1,
78+
'config_integration_api' => 1,
79+
'full_page' => 1,
80+
'config_webservice' => 1,
81+
'translate' => 1
82+
],
83+
'downloadable_domains' => [
84+
'hackathon.test'
85+
],
86+
'install' => [
87+
'date' => 'Sun, 14 Dec 2025 18:01:19 +0000'
88+
]
89+
];
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
<?php
2+
return [
3+
'config' => [
4+
'async' => 0
5+
],
6+
'remote_storage' => [
7+
'driver' => 'file'
8+
],
9+
'queue' => [
10+
'amqp' => [
11+
'host' => 'rabbitmq',
12+
'port' => 5672,
13+
'user' => 'guest',
14+
'password' => 'guest',
15+
'virtualhost' => '/'
16+
]
17+
],
18+
'cache' => [
19+
'frontend' => [
20+
'default' => [
21+
'backend' => 'Cm_Cache_Backend_Redis',
22+
'backend_options' => [
23+
'server' => 'redis',
24+
'port' => '6379',
25+
'persistent' => '',
26+
'database' => '1',
27+
'password' => '',
28+
'force_standalone' => '0',
29+
'connect_retries' => '1',
30+
'read_timeout' => '10',
31+
'automatic_cleaning_factor' => '0',
32+
'compress_data' => '1',
33+
'compress_tags' => '1',
34+
'compress_threshold' => '20480',
35+
'compression_lib' => 'gzip',
36+
'use_lua' => '0'
37+
]
38+
],
39+
'page_cache' => [
40+
'backend' => 'Cm_Cache_Backend_Redis',
41+
'backend_options' => [
42+
'server' => 'redis',
43+
'port' => '6379',
44+
'persistent' => '',
45+
'database' => '2',
46+
'password' => '',
47+
'force_standalone' => '0',
48+
'connect_retries' => '1',
49+
'read_timeout' => '10',
50+
'automatic_cleaning_factor' => '0',
51+
'compress_data' => '1',
52+
'compress_tags' => '1',
53+
'compress_threshold' => '20480',
54+
'compression_lib' => 'gzip',
55+
'use_lua' => '0'
56+
]
57+
]
58+
]
59+
],
60+
'backend' => [
61+
'frontName' => 'admin'
62+
],
63+
'crypt' => [
64+
'key' => 'base64eaBODC7oBh4GiAes71HlvVGoKnFxGQ6Rf4EHXFqw9xY='
65+
],
66+
'db' => [
67+
'table_prefix' => '',
68+
'connection' => [
69+
'default' => [
70+
'host' => 'db',
71+
'dbname' => 'magento',
72+
'username' => 'magento',
73+
'password' => 'magento',
74+
'model' => 'mysql4',
75+
'engine' => 'innodb',
76+
'initStatements' => 'SET NAMES utf8;',
77+
'active' => '1',
78+
'driver_options' => [
79+
1014 => false
80+
]
81+
]
82+
]
83+
],
84+
'resource' => [
85+
'default_setup' => [
86+
'connection' => 'default'
87+
]
88+
],
89+
'x-frame-options' => 'SAMEORIGIN',
90+
'MAGE_MODE' => 'developer',
91+
'session' => [
92+
'save' => 'redis',
93+
'redis' => [
94+
'host' => 'redis',
95+
'port' => '6379',
96+
'timeout' => '2.5',
97+
'persistent_identifier' => '',
98+
'database' => '0',
99+
'compression_threshold' => '2048',
100+
'compression_library' => 'gzip',
101+
'log_level' => '4',
102+
'max_concurrency' => '6',
103+
'break_after_frontend' => '5',
104+
'break_after_adminhtml' => '30',
105+
'first_lifetime' => '600',
106+
'bot_first_lifetime' => '60',
107+
'bot_lifetime' => '7200',
108+
'disable_locking' => '0',
109+
'min_lifetime' => '60',
110+
'max_lifetime' => '2592000'
111+
]
112+
],
113+
'lock' => [
114+
'provider' => 'db'
115+
],
116+
'directories' => [
117+
'document_root_is_pub' => true
118+
],
119+
'cache_types' => [
120+
'config' => 1,
121+
'layout' => 1,
122+
'block_html' => 1,
123+
'collections' => 1,
124+
'reflection' => 1,
125+
'db_ddl' => 1,
126+
'compiled_config' => 1,
127+
'eav' => 1,
128+
'customer_notification' => 1,
129+
'graphql_query_resolver_result' => 1,
130+
'config_integration' => 1,
131+
'config_integration_api' => 1,
132+
'full_page' => 1,
133+
'config_webservice' => 1,
134+
'translate' => 1
135+
],
136+
'downloadable_domains' => [
137+
'hackathon.test'
138+
],
139+
'install' => [
140+
'date' => 'Sun, 14 Dec 2025 19:54:16 +0000'
141+
]
142+
];

app/etc/hyva-themes.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extensions": [
3+
{
4+
"src": "vendor/hyva-themes/magento2-theme-module/src"
5+
},
6+
{
7+
"src": "vendor/mollie/magento2-hyva-compatibility/src/Mollie_HyvaCompatibility"
8+
}
9+
]
10+
}

auth.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"http-basic": {
3+
"hyva-themes.repo.packagist.com": {
4+
"username": "hackathon-test-8zycg",
5+
"password": "0c7e28e8a94d1a8213afd7a2bb0227d9ff69d9f2ad314f712cdd1af3d0f5"
6+
}
7+
}
8+
}

setup/.phpunit.cache/test-results

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

setup/src/MageOS/Installer/Model/Stage/AbstractStage.php

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -40,61 +40,6 @@ public function shouldSkip(InstallationContext $context): bool
4040
return false;
4141
}
4242

43-
/**
44-
* Display stage header with progress
45-
*
46-
* @param string $title
47-
* @param int $current Current step number
48-
* @param int $total Total steps
49-
* @return void
50-
*/
51-
protected function displayHeader(string $title, int $current, int $total): void
52-
{
53-
$progress = $this->calculateProgress($current, $total);
54-
$progressBar = $this->renderProgressBar($progress);
55-
56-
echo PHP_EOL;
57-
echo "\033[36m"; // Cyan color
58-
echo "═══════════════════════════════════════════════════════" . PHP_EOL;
59-
echo sprintf("[Step %d/%d] %s", $current, $total, $title) . PHP_EOL;
60-
echo sprintf("%s %d%%", $progressBar, $progress) . PHP_EOL;
61-
echo "═══════════════════════════════════════════════════════";
62-
echo "\033[0m"; // Reset color
63-
echo PHP_EOL;
64-
echo PHP_EOL;
65-
}
66-
67-
/**
68-
* Calculate progress percentage
69-
*
70-
* @param int $current
71-
* @param int $total
72-
* @return int
73-
*/
74-
private function calculateProgress(int $current, int $total): int
75-
{
76-
if ($total === 0) {
77-
return 0;
78-
}
79-
80-
return (int) round(($current / $total) * 100);
81-
}
82-
83-
/**
84-
* Render ASCII progress bar
85-
*
86-
* @param int $percentage
87-
* @return string
88-
*/
89-
private function renderProgressBar(int $percentage): string
90-
{
91-
$barLength = 50;
92-
$filledLength = (int) round(($percentage / 100) * $barLength);
93-
$emptyLength = $barLength - $filledLength;
94-
95-
return '[' . str_repeat('', $filledLength) . str_repeat('', $emptyLength) . ']';
96-
}
97-
9843
/**
9944
* Ask if user wants to go back
10045
*

0 commit comments

Comments
 (0)