Merge staging: Fix security-scan workflow and ErrorAggregationInitializer

This commit is contained in:
2025-11-01 00:31:11 +01:00
3 changed files with 59 additions and 22 deletions

View File

@@ -18,12 +18,25 @@ jobs:
steps:
- name: Checkout code
run: |
REF_NAME="${{ github.ref_name }}"
REPO="${{ github.repository }}"
if [ -z "$REF_NAME" ]; then
# For pull_request events, use the head ref (source branch)
if [ "${{ github.event_name }}" = "pull_request" ]; then
REF_NAME="${{ github.head_ref || github.event.pull_request.head.ref }}"
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
REF_NAME="${{ inputs.branch || github.ref_name }}"
else
REF_NAME="${{ github.ref_name }}"
fi
# Fallback to main if REF_NAME is still empty
if [ -z "$REF_NAME" ] || [ "$REF_NAME" = "" ]; then
REF_NAME="main"
fi
REPO="${{ github.repository }}"
echo "📋 Cloning branch: $REF_NAME"
echo "📦 Repository: $REPO"
# Use CI token if available, otherwise try public access
if [ -n "${{ secrets.CI_TOKEN }}" ]; then
git clone --depth 1 --branch "$REF_NAME" \

View File

@@ -166,9 +166,9 @@ final class DefaultContainer implements Container
try {
$reflection = $this->reflectionProvider->getClass($className);
// Check if class is instantiable using framework's method
// Check if class is instantiable using the framework's method
if (! $reflection->isInstantiable()) {
$this->throwDetailedBindingException($class, $reflection);
$this->throwDetailedBindingException($class/*, $reflection*/);
}
$dependencies = $this->dependencyResolver->resolveDependencies($className);
@@ -199,7 +199,7 @@ final class DefaultContainer implements Container
}
}
private function throwDetailedBindingException(string $class, $reflection): never
private function throwDetailedBindingException(string $class/*, $reflection*/): never
{
$availableBindings = array_keys($this->bindings->getAllBindings());
$dependencyChain = implode(' -> ', $this->resolving);

View File

@@ -23,6 +23,30 @@ use App\Framework\Mail\TransportInterface;
*/
final readonly class ErrorAggregationInitializer
{
public function __construct(
private Environment $env,
){}
#[Initializer]
public function initErrorAggregator(Container $container): ErrorAggregatorInterface
{
$enabled = $this->env->getBool('ERROR_AGGREGATION_ENABLED', true);
if(!$enabled) {
return new NullErrorAggregator();
}
return new ErrorAggregator(
storage: $container->get(ErrorStorageInterface::class),
cache: $container->get(Cache::class),
clock: $container->get(Clock::class),
alertQueue: $container->get(Queue::class),
logger: $container->get(Logger::class),
batchSize: $this->env->getInt('ERROR_AGGREGATION_BATCH_SIZE', 100),
maxRetentionDays: $this->env->getInt('ERROR_AGGREGATION_MAX_RETENTION_DAYS', 90)
);
}
#[Initializer]
public function initialize(Container $container): void
{
@@ -44,22 +68,22 @@ final readonly class ErrorAggregationInitializer
});
// Error Aggregator Interface - bind to concrete or Null implementation
$container->bind(ErrorAggregatorInterface::class, function (Container $container) use ($enabled) {
if (! $enabled) {
return new NullErrorAggregator();
}
$env = $container->get(Environment::class);
return new ErrorAggregator(
storage: $container->get(ErrorStorageInterface::class),
cache: $container->get(Cache::class),
clock: $container->get(Clock::class),
alertQueue: $container->get(Queue::class),
logger: $container->get(Logger::class),
batchSize: $env->getInt('ERROR_AGGREGATION_BATCH_SIZE', 100),
maxRetentionDays: $env->getInt('ERROR_AGGREGATION_MAX_RETENTION_DAYS', 90)
);
});
// $container->bind(ErrorAggregatorInterface::class, function (Container $container) use ($enabled) {
// if (! $enabled) {
// return new NullErrorAggregator();
// }
//
// $env = $container->get(Environment::class);
// return new ErrorAggregator(
// storage: $container->get(ErrorStorageInterface::class),
// cache: $container->get(Cache::class),
// clock: $container->get(Clock::class),
// alertQueue: $container->get(Queue::class),
// logger: $container->get(Logger::class),
// batchSize: $env->getInt('ERROR_AGGREGATION_BATCH_SIZE', 100),
// maxRetentionDays: $env->getInt('ERROR_AGGREGATION_MAX_RETENTION_DAYS', 90)
// );
// });
// Error Aggregator (concrete class) - delegate to interface
$container->bind(ErrorAggregator::class, function (Container $container) use ($enabled) {