pantry/scripts/sort.ts

53 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-08-05 04:19:01 +03:00
#!/usr/bin/env -S tea -E
/*---
args:
- deno
- run
2022-09-08 23:40:35 +03:00
- --allow-read
2022-08-05 04:19:01 +03:00
- --allow-env
- --import-map={{ srcroot }}/import-map.json
env:
TEA_PANTRY_PATH: "{{srcroot}}"
2022-08-05 04:19:01 +03:00
---*/
2022-09-01 20:49:14 +03:00
// sorts input for building
// does a full hydration, but only returns ordered, dry packages
2022-09-21 10:46:24 +03:00
import { pkg } from "utils"
2022-09-20 14:53:40 +03:00
import { usePantry, useFlags } from "hooks"
import { hydrate } from "prefab"
import { PackageRequirement } from "types"
2022-09-30 16:03:03 +03:00
import * as ARGV from "./utils/args.ts"
2022-08-10 21:58:22 +03:00
2022-08-17 15:22:22 +03:00
const flags = useFlags()
2022-09-01 20:49:14 +03:00
const pantry = usePantry()
2022-08-05 04:19:01 +03:00
2022-09-30 16:03:03 +03:00
const dry = await ARGV.toArray(ARGV.pkgs())
2022-08-05 04:19:01 +03:00
2022-09-01 20:49:14 +03:00
const wet = await hydrate(dry, async (pkg, dry) => {
const deps = await pantry.getDeps(pkg)
return dry ? [...deps.build, ...deps.runtime] : deps.runtime
})
2022-08-05 04:19:01 +03:00
2022-08-17 15:22:22 +03:00
if (Deno.env.get("GITHUB_ACTIONS")) {
const massage = (input: PackageRequirement[]) =>
input.map(p => {
let out = pkg.str(p)
// shell quoting via GHA is weird and we dont fully understand it
if (/[<>]/.test(out)) out = `"${out}"`
return out
}).join(" ")
console.log(`::set-output name=pkgs::${massage(wet.dry)}`)
console.log(`::set-output name=pre-install::${massage(wet.wet)}`)
2022-08-17 15:22:22 +03:00
} else {
const gas = wet.dry.map(x => pkg.str(x))
if (flags.json) {
console.log(gas)
} else {
console.log(gas.join("\n"))
}
2022-08-17 15:22:22 +03:00
}