2022-08-17 15:22:22 +03:00
|
|
|
#!/usr/bin/env -S tea -E
|
|
|
|
|
2023-02-02 17:00:52 +03:00
|
|
|
/// returns all pantry entries as `[{ name, path }]`
|
2022-08-17 15:22:22 +03:00
|
|
|
|
|
|
|
/*---
|
|
|
|
args:
|
|
|
|
- deno
|
|
|
|
- run
|
|
|
|
- --allow-env
|
2022-09-08 23:40:35 +03:00
|
|
|
- --allow-read
|
2022-08-17 15:22:22 +03:00
|
|
|
---*/
|
|
|
|
|
2022-09-20 14:53:40 +03:00
|
|
|
import Path from "path"
|
2022-09-20 18:29:21 +03:00
|
|
|
import { useFlags, usePrefix } from "hooks"
|
2022-08-17 15:22:22 +03:00
|
|
|
|
2022-11-04 15:59:20 +03:00
|
|
|
//FIXME needs to get actual paths from usePantry
|
2022-09-20 18:29:21 +03:00
|
|
|
const prefix = new Path(`${usePrefix()}/tea.xyz/var/pantry/projects`)
|
2022-08-17 15:22:22 +03:00
|
|
|
|
2022-09-08 23:40:35 +03:00
|
|
|
interface Entry {
|
|
|
|
project: string
|
|
|
|
path: Path
|
|
|
|
}
|
2022-08-17 15:22:22 +03:00
|
|
|
|
|
|
|
|
2022-09-08 23:40:35 +03:00
|
|
|
//------------------------------------------------------------------------- funcs
|
2022-08-17 15:22:22 +03:00
|
|
|
export async function* ls(): AsyncGenerator<Entry> {
|
|
|
|
for await (const path of _ls_pantry(prefix)) {
|
|
|
|
yield {
|
2022-09-08 23:40:35 +03:00
|
|
|
project: path.parent().relative({ to: prefix }),
|
|
|
|
path
|
2022-08-17 15:22:22 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function* _ls_pantry(dir: Path): AsyncGenerator<Path> {
|
|
|
|
if (!dir.isDirectory()) throw new Error()
|
|
|
|
|
|
|
|
for await (const [path, { name, isDirectory }] of dir.ls()) {
|
|
|
|
if (isDirectory) {
|
|
|
|
for await (const x of _ls_pantry(path)) {
|
|
|
|
yield x
|
|
|
|
}
|
|
|
|
} else if (name === "package.yml") {
|
|
|
|
yield path
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-08 23:40:35 +03:00
|
|
|
//-------------------------------------------------------------------------- main
|
|
|
|
if (import.meta.main) {
|
|
|
|
const flags = useFlags()
|
2022-08-17 15:22:22 +03:00
|
|
|
|
2022-09-08 23:40:35 +03:00
|
|
|
const rv: Entry[] = []
|
|
|
|
for await (const item of ls()) {
|
|
|
|
rv.push(item)
|
|
|
|
}
|
2022-08-17 15:22:22 +03:00
|
|
|
|
2022-09-08 23:40:35 +03:00
|
|
|
if (Deno.env.get("GITHUB_ACTIONS")) {
|
|
|
|
const projects = rv.map(x => x.project).join(":")
|
|
|
|
console.log(`::set-output name=projects::${projects}`)
|
2023-01-14 23:57:43 +03:00
|
|
|
// } else if (flags.json) {
|
|
|
|
// const obj = rv.map(({ path, project }) => ({ path: path.string, project }))
|
|
|
|
// const out = JSON.stringify(obj, null, 2)
|
|
|
|
// console.log(out)
|
2022-09-08 23:40:35 +03:00
|
|
|
} else {
|
|
|
|
console.log(rv.map(x => x.project).join("\n"))
|
|
|
|
}
|
2022-08-17 15:22:22 +03:00
|
|
|
}
|