Add extension templates, create-kunkun and cli package (#26)

* chore: add extension templates

* feat: add create-kunkun and cli package

* fix: cli and create-kunkun package location

* fix: cli package test

* ci: run test for CI pipeline only on Linux

The most important E2E test is run with docker, Linux anyways, no need to run on Mac and Windows
This commit is contained in:
Huakun Shen 2024-11-15 18:15:17 -05:00 committed by GitHub
parent e9609cf8ee
commit 5ead38bf71
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
159 changed files with 6214 additions and 9 deletions

50
apps/cli/cli.ts Normal file
View file

@ -0,0 +1,50 @@
#!/usr/bin/env node
import fs from "fs"
import path from "path"
import { buildCmd, verifyCmd } from "@/commands"
import { getDockerFolder, NODE_ENV } from "@/constants"
import logger from "@/logger"
import { program } from "commander"
import { version } from "./package.json"
const cwd = process.cwd()
console.log("Environment:", NODE_ENV)
program.name("Kunkun CLI").description("CLI for Kunkun Extension Development").version(version)
function computeProjectDir(projectPath: string | undefined) {
if (!projectPath) {
projectPath = cwd
} else if (fs.existsSync(projectPath)) {
projectPath = path.resolve(projectPath)
} else if (fs.existsSync(path.join(cwd, projectPath))) {
projectPath = path.join(cwd, projectPath)
} else {
logger.error("Invalid project path")
process.exit(1)
}
return projectPath
}
program
.command("verify [project_path]")
.description("Verify the validity of a Kunkun extension")
.option("-b, --batch", "Batch mode", false)
.option("-p, --publish", "Publish Mode. Will exit with 1 if invalid", false)
.action((projectPath: string | undefined, opts: { batch: boolean; publish: boolean }) => {
logger.info("cwd:", cwd)
const valid = verifyCmd(computeProjectDir(projectPath), opts.batch)
if (opts.publish && !valid) {
process.exit(1)
}
})
program
.command("build [project_path]")
.description("Build extension with docker and validate (You must have docker installed)")
.action((projectPath: string | undefined) => {
logger.info("cwd:", cwd)
buildCmd(computeProjectDir(projectPath))
})
program.parse()