@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
54 lines • 2.85 kB
JavaScript
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'
});