export async function scan()

in ide/deploy/scan.js [39:170]


export async function scan() {
    const deployments = new Set();
    const packages = new Set();

    console.log("> Scan:");

    // => REQUIREMENTS
    const defaultReqsGlobs = [
        "packages/*/*/requirements.txt",
        "packages/*/*/package.json",
        "packages/*/*/composer.json",
        "packages/*/*/go.mod"
    ];
    // load user defined requirements or use `defaultReqsGlobs`
    const packageGlobs = getOpenServerlessConfig("requirements", defaultReqsGlobs);
    // requirements
    const reqs = [];

    // Check for additional packages from each package
    // and add them to the requirements array
    for (const pkgGlob of packageGlobs) {
        const items = await glob(pkgGlob);
        for (const item of items) {
            if (!reqs.includes(item)) {
                reqs.push(item);
            }
        }
    }

    // let's package the functions that have requirements
    for (const req of reqs) {
        console.log(">> Requirements:", req);
        const sp = req.split("/");
        const act = buildZip(sp[1], sp[2]);
        deployments.add(act);
        packages.add(sp[1]);
    }

    // => MAINS
    const defaultMainsGlobs = [
        "packages/*/*/index.js",
        "packages/*/*/__main__.py",
        "packages/*/*/index.php",
        "packages/*/*/main.go"
    ];
    // load user defined main functions or use `defaultMainsGlobs`
    const mainsGlobs = getOpenServerlessConfig("mains", defaultMainsGlobs);
    const mains = [];

    for (const mainGlob of mainsGlobs) {
        const items = await glob(mainGlob);
        for (const item of items) {
            if (!mains.includes(item)) {
                mains.push(item);
            }
        }
    }

    for (const main of mains) {
        console.log(">> Main:", main);
        const sp = main.split("/");
        const act = buildAction(sp[1], sp[2]);
        deployments.add(act);
        packages.add(sp[1]);
    }

    // => SINGLES
    const defaultSinglesGlobs = [
        "packages/*/*.py",
        "packages/*/*.js",
        "packages/*/*.php",
        "packages/*/*.go"
    ];
    const singlesGlobs = getOpenServerlessConfig("singles", defaultSinglesGlobs);
    const singles = [];

    for (const singleGlob of singlesGlobs) {
        const items = await glob(singleGlob);
        for (const item of items) {
            if (!singles.includes(item)) {
                singles.push(item);
            }
        }
    }

    for (const single of singles) {
        console.log(">> Action:", single);
        const sp = single.split("/");
        deployments.add(single);
        packages.add(sp[1]);
    }

    console.log("> Deploying:");
    for (const pkg of packages) {
        console.log(">> Package:", pkg);
        deployPackage(pkg);
    }

    for (const action of deployments) {
        console.log(">>> Action:", action);
        deployAction(action);
    }


    // => MANIFESTS
    const defaultProjectGlobs = [
        "packages/*.yaml",
        "packages/*/*.yaml",
    ];
    const manifestsGlobs = getOpenServerlessConfig("manifests", defaultProjectGlobs);
    const manifests = [];

    for (const manifestGlobs of manifestsGlobs) {
        const items = await glob(manifestGlobs);
        for (const item of items) {
            if (!manifests.includes(item)) {
                manifests.push(item);
            }
        }
        manifests.sort((a, b) => a.localeCompare(b));
    }
    if (manifests.length >0 ) {
        if (Bun.file('packeges/.env')) {
            console.log("Found packages .env file. Reading it");
            config({ path: "./package/.env" });
        }
        for (const manifest of manifests) {
            console.log(">>> Manifest:", manifest);
            deployProject(manifest);
        }
    }
}