mirror of
https://github.com/ivabus/pantry
synced 2024-11-23 17:05:07 +03:00
55 lines
1.3 KiB
TypeScript
Executable file
55 lines
1.3 KiB
TypeScript
Executable file
#!/usr/bin/env -S tea -E
|
||
|
||
/*---
|
||
args:
|
||
- deno
|
||
- run
|
||
- --allow-read
|
||
- --allow-env
|
||
- --import-map={{ srcroot }}/import-map.json
|
||
---*/
|
||
|
||
import { Package, PackageRequirement } from "types"
|
||
import { usePantry, useFlags } from "hooks"
|
||
import { hydrate } from "prefab"
|
||
import * as ARGV from "./utils/args.ts"
|
||
import { set_output } from "./utils/gha.ts"
|
||
import { pkg } from "utils"
|
||
|
||
const pantry = usePantry()
|
||
|
||
useFlags()
|
||
|
||
const mode: 'build' | 'install' = 'build' //Deno.args.includes("-b") ? 'build' : 'install'
|
||
|
||
const get_deps = async (pkg: Package | PackageRequirement) => {
|
||
const deps = await pantry.getDeps(pkg)
|
||
switch (mode) {
|
||
case 'build':
|
||
return [...deps.build, ...deps.runtime]
|
||
// case 'install':
|
||
// return deps.runtime
|
||
}
|
||
}
|
||
|
||
const bootstrap_required = new Set<string>()
|
||
const set = new Set<string>()
|
||
let rv: PackageRequirement[] = []
|
||
for await (const pkg of ARGV.pkgs()) {
|
||
const deps = await get_deps(pkg)
|
||
const wet = await hydrate(deps)
|
||
rv.push(...wet.pkgs)
|
||
set.add(pkg.project)
|
||
wet.bootstrap_required.forEach(x => bootstrap_required.add(x))
|
||
}
|
||
|
||
// we don’t want to pre-install packages we intend to build
|
||
rv = rv.filter(({ project }) => !set.has(project) || bootstrap_required.has(project))
|
||
|
||
const gas = rv.map(pkg.str)
|
||
|
||
if (Deno.env.get("GITHUB_ACTIONS")) {
|
||
set_output("pkgs", gas)
|
||
} else {
|
||
console.log(gas.join("\n"))
|
||
}
|