in build/src/utils/config.js [23:107]
async function loadConfig(repoPath) {
repoPath = repoPath || path.join(__dirname, '..', '..', '..');
const definitionBuildConfigFile = getConfig('definitionBuildConfigFile', 'definition-manifest.json');
// Get list of definition folders
const containersPath = path.join(repoPath, getConfig('containersPathInRepo', 'containers'));
const definitions = await asyncUtils.readdir(containersPath, { withFileTypes: true });
await asyncUtils.forEach(definitions, async (definitionFolder) => {
// If directory entry is a file (like README.md, skip
if (!definitionFolder.isDirectory()) {
return;
}
const definitionId = definitionFolder.name;
const definitionPath = path.resolve(path.join(containersPath, definitionId));
// If a .deprecated file is found, remove the directory from staging and return
if(await asyncUtils.exists(path.join(definitionPath, '.deprecated'))) {
await asyncUtils.rimraf(definitionPath);
return;
}
// Add to complete list of definitions
allDefinitionPaths[definitionId] = {
path: definitionPath,
relativeToRootPath: path.relative(repoPath, definitionPath)
}
// If definition-manifest.json exists, load it
const manifestPath = path.join(definitionPath, definitionBuildConfigFile);
if (await asyncUtils.exists(manifestPath)) {
await loadDefinitionManifest(manifestPath, definitionId);
}
});
// Load repo containers to build
const repoContainersToBuildPath = path.join(repoPath, getConfig('repoContainersToBuildPath', 'repository-containers/build'));
const repoContainerManifestFiles = glob.sync(`${repoContainersToBuildPath}/**/${definitionBuildConfigFile}`);
await asyncUtils.forEach(repoContainerManifestFiles, async (manifestFilePath) => {
const definitionPath = path.resolve(path.dirname(manifestFilePath));
const definitionId = path.relative(repoContainersToBuildPath, definitionPath);
allDefinitionPaths[definitionId] = {
path: definitionPath,
relativeToRootPath: path.relative(repoPath, definitionPath)
}
await loadDefinitionManifest(manifestFilePath, definitionId);
});
// Populate image variants and tag lookup
for (let definitionId in config.definitionBuildSettings) {
const buildSettings = config.definitionBuildSettings[definitionId];
const definitionVariants = config.definitionVariants[definitionId];
const dependencies = config.definitionDependencies[definitionId];
buildSettings.architecture = buildSettings.architecture || ['linux/amd64'];
// Populate images list for variants for dependency registration
dependencies.imageVariants = definitionVariants ?
definitionVariants.map((variant) => dependencies.image.replace('${VARIANT}', variant)) :
[dependencies.image];
// Populate definition and variant lookup
if (buildSettings.tags) {
// Variants can be used as a VARAINT arg in tags, so support that too. However, these can
// get overwritten in certain tag configs resulting in bad lookups, so **process them first**.
const variants = definitionVariants ? ['${VARIANT}', '$VARIANT'].concat(definitionVariants) : [undefined];
variants.forEach((variant) => {
const blankTagList = getTagsForVersion(definitionId, '', 'ANY', 'ANY', variant);
blankTagList.forEach((blankTag) => {
definitionTagLookup[blankTag] = {
id: definitionId,
variant: variant
};
});
const devTagList = getTagsForVersion(definitionId, 'dev', 'ANY', 'ANY', variant);
devTagList.forEach((devTag) => {
definitionTagLookup[devTag] = {
id: definitionId,
variant: variant
}
});
})
}
}
config.needsDedicatedPage = config.needsDedicatedPage || [];
}