mirror of
https://github.com/graycoreio/github-actions-magento2.git
synced 2026-06-17 06:11:20 +00:00
86 lines
2.3 KiB
TypeScript
86 lines
2.3 KiB
TypeScript
import { PackageMatrixVersion, Services } from '../matrix/matrix-type';
|
|
import {
|
|
mysqlConfig,
|
|
elasticsearchConfig,
|
|
opensearchConfig,
|
|
rabbitmqConfig,
|
|
redisConfig,
|
|
valkeyConfig
|
|
} from './service-config';
|
|
|
|
interface SearchEngineChoice {
|
|
type: 'opensearch' | 'elasticsearch';
|
|
image: string;
|
|
}
|
|
|
|
interface CacheChoice {
|
|
type: 'valkey' | 'redis';
|
|
image: string;
|
|
}
|
|
|
|
/**
|
|
* Determines which search engine to use for a matrix entry.
|
|
* Prefers opensearch over elasticsearch.
|
|
*/
|
|
function getSearchEngineChoice(entry: PackageMatrixVersion): SearchEngineChoice | null {
|
|
if (entry.opensearch && entry.opensearch.trim() !== '') {
|
|
return { type: 'opensearch', image: entry.opensearch };
|
|
}
|
|
if (entry.elasticsearch && entry.elasticsearch.trim() !== '') {
|
|
return { type: 'elasticsearch', image: entry.elasticsearch };
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Determines which cache to use for a matrix entry.
|
|
* Prefers valkey over redis.
|
|
*/
|
|
function getCacheChoice(entry: PackageMatrixVersion): CacheChoice | null {
|
|
if (entry.valkey && entry.valkey.trim() !== '') {
|
|
return { type: 'valkey', image: entry.valkey };
|
|
}
|
|
if (entry.redis && entry.redis.trim() !== '') {
|
|
return { type: 'redis', image: entry.redis };
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Builds the services object for a single matrix entry.
|
|
*/
|
|
export function buildServicesForEntry(entry: PackageMatrixVersion): Services {
|
|
const services: Services = {};
|
|
|
|
// MySQL is always included if present
|
|
if (entry.mysql && entry.mysql.trim() !== '') {
|
|
services.mysql = mysqlConfig.getConfig(entry.mysql);
|
|
}
|
|
|
|
// Search engine: prefer opensearch over elasticsearch
|
|
const searchEngine = getSearchEngineChoice(entry);
|
|
if (searchEngine) {
|
|
if (searchEngine.type === 'opensearch') {
|
|
services.opensearch = opensearchConfig.getConfig(searchEngine.image);
|
|
} else {
|
|
services.elasticsearch = elasticsearchConfig.getConfig(searchEngine.image);
|
|
}
|
|
}
|
|
|
|
// RabbitMQ
|
|
if (entry.rabbitmq && entry.rabbitmq.trim() !== '') {
|
|
services.rabbitmq = rabbitmqConfig.getConfig(entry.rabbitmq);
|
|
}
|
|
|
|
// Cache: prefer valkey over redis
|
|
const cache = getCacheChoice(entry);
|
|
if (cache) {
|
|
if (cache.type === 'valkey') {
|
|
services.valkey = valkeyConfig.getConfig(cache.image);
|
|
} else {
|
|
services.redis = redisConfig.getConfig(cache.image);
|
|
}
|
|
}
|
|
|
|
return services;
|
|
} |