async function package()

in build/src/package.js [13:70]


async function package(repo, release, updateLatest, registry, registryPath, stubRegistry,
    stubRegistryPath, prepAndPackageOnly, packageOnly, cleanWhenDone, definitionsToSkipPush) {

    // Optional argument defaults
    packageOnly = typeof packageOnly === 'undefined' ? false : packageOnly;
    prepAndPackageOnly = typeof prepAndPackageOnly === 'undefined' ? false : prepAndPackageOnly;
    cleanWhenDone = typeof cleanWhenDone === 'undefined' ? true : cleanWhenDone;
    stubRegistry = stubRegistry || registry;
    stubRegistryPath = stubRegistryPath || registryPath;

    // Stage content and load config
    const stagingFolder = await configUtils.getStagingFolder(release);
    await configUtils.loadConfig(stagingFolder);

    if (!packageOnly) {
        // First, push images, update content
        await push(repo, release, updateLatest, registry, registryPath, stubRegistry, stubRegistryPath, true, prepAndPackageOnly, definitionsToSkipPush);
    }

    // Then package
    console.log(`\n(*) **** Package ${release} ****`);

    console.log(`(*) Updating package.json with release version...`);
    const version = configUtils.getVersionFromRelease(release);
    const packageJsonVersion = version === 'dev' ? packageJson.version + '-dev' : version;
    const packageJsonPath = path.join(stagingFolder, 'package.json');
    const packageJsonRaw = await asyncUtils.readFile(packageJsonPath);
    const packageJsonModified = packageJsonRaw.replace(/"version".?:.?".+"/, `"version": "${packageJsonVersion}"`);
    await asyncUtils.writeFile(packageJsonPath, packageJsonModified);

    // Update all definition config files for release (devcontainer.json, Dockerfile, library-scripts)
    const allDefinitions = configUtils.getAllDefinitionPaths();
    for (let currentDefinitionId in allDefinitions) {
        if (typeof currentDefinitionId === 'string') {
            await prep.updateConfigForRelease(currentDefinitionId, repo, release, registry, registryPath, stubRegistry, stubRegistryPath);
        }
    }

    console.log('(*) Packaging...');
    const opts = { stdio: 'inherit', cwd: stagingFolder, shell: true };
    await asyncUtils.spawn('yarn', ['install'], opts);
    await asyncUtils.spawn('npm', ['pack'], opts); // Need to use npm due to https://github.com/yarnpkg/yarn/issues/685

    let outputPath = null;
    console.log('(*) Moving package...');
    outputPath = path.join(__dirname, '..', '..', `${packageJson.name}-${packageJsonVersion}.tgz`);
    await asyncUtils.copyFile(path.join(stagingFolder, `${packageJson.name}-${packageJsonVersion}.tgz`), outputPath);

    if (cleanWhenDone) {
        // And finally clean up
        console.log('(*) Cleaning up...');
        await asyncUtils.rimraf(stagingFolder);
    }

    console.log('(*) Done!!');

    return outputPath;
}