UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

54 lines 2.85 kB
import { scopeSearchManifestUriToRelease } from './release.js'; import { DEFAULT_ATLAS_DLQ_BUCKET_RETENTION_DAYS, normalizeOptionalString, parseGsUri, resolveAtlasDlqBucketName, resolveAtlasNamespacedArtifactUri } from '../../utils/index.js'; const createSearchArtifactBucketProvisioningState = ({ bucketName = null, location = null, manifestUri, status }) => ({ bucketName, location, manifestUri, status }); export const resolveDefaultSearchMapperManifestUri = projectId => resolveAtlasNamespacedArtifactUri(projectId, 'search', 'mappers', 'manifest.json'); export const resolveDefaultSearchRuntimeConfigUri = projectId => resolveAtlasNamespacedArtifactUri(projectId, 'search', 'runtime', 'config.json'); export const resolveSearchDlqBucketName = context => resolveAtlasDlqBucketName(context.projectId); export const resolveSearchMapperManifestUri = context => scopeSearchManifestUriToRelease(normalizeOptionalString(context.config?.deploy?.cloudRun?.mapperManifestUri) ?? resolveDefaultSearchMapperManifestUri(context.projectId), context.config?.release); export const resolveSearchRuntimeConfigUri = context => scopeSearchManifestUriToRelease(normalizeOptionalString(context.config?.deploy?.cloudRun?.runtimeConfigUri) ?? resolveDefaultSearchRuntimeConfigUri(context.projectId), context.config?.release); export const resolveSearchArtifactBucketProvisioning = (context, options = {}) => { const manifestUri = options.destinationUri ?? resolveSearchMapperManifestUri(context); if (!manifestUri.startsWith('gs://')) { return createSearchArtifactBucketProvisioningState({ manifestUri, status: 'skipped' }); } const parsedGsUri = parseGsUri(manifestUri); return createSearchArtifactBucketProvisioningState({ bucketName: parsedGsUri.bucketName, location: options.location ?? context.config?.deploy?.cloudRun?.region, manifestUri, status: 'terraform-managed' }); }; export const resolveSearchManagedArtifactBuckets = context => { const candidates = [resolveSearchArtifactBucketProvisioning(context, { destinationUri: resolveSearchMapperManifestUri(context) }), resolveSearchArtifactBucketProvisioning(context, { destinationUri: resolveSearchRuntimeConfigUri(context) })].filter(state => state.status !== 'skipped' && state.bucketName); const bucketMap = new Map(); for (const state of candidates) { if (!bucketMap.has(state.bucketName)) { bucketMap.set(state.bucketName, state); } } return [...bucketMap.values()].sort((left, right) => left.bucketName.localeCompare(right.bucketName)); }; export const resolveSearchDlqBucketProvisioning = context => ({ bucketName: resolveSearchDlqBucketName(context), location: context.config?.deploy?.cloudRun?.region, retentionDays: DEFAULT_ATLAS_DLQ_BUCKET_RETENTION_DAYS, status: 'terraform-managed' });