mirror of
https://github.com/kunkunsh/kunkun.git
synced 2025-04-11 17:29:44 +00:00

* 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
81 lines
2.7 KiB
TypeScript
81 lines
2.7 KiB
TypeScript
import os from "os"
|
|
import path from "path"
|
|
import { getRootDir } from "@/constants"
|
|
import type { BuildResult } from "@/types"
|
|
import { buildWithDockerAndValidate } from "@/utils"
|
|
import { $ } from "bun"
|
|
import { afterAll, expect, test } from "bun:test"
|
|
import fs from "fs-extra"
|
|
import { verifyCmd } from "../src/commands/verify"
|
|
|
|
const rootDir = getRootDir()
|
|
const createKKDir = path.join(rootDir, "../create-kunkun")
|
|
|
|
const createKKDistDir = path.join(createKKDir, "dist")
|
|
const createKKIndexjsPath = path.join(createKKDistDir, "index.mjs")
|
|
const testDir = path.join(os.tmpdir(), "kunkun-cli-test")
|
|
console.log("Test Dir: ", testDir)
|
|
const templateNames = ["react", "vue", "nuxt", "svelte", "sveltekit", "next", "template"]
|
|
|
|
fs.rmdirSync(testDir, { recursive: true })
|
|
fs.mkdirpSync(testDir)
|
|
const testTemplateDirs: string[] = []
|
|
await Promise.all(
|
|
templateNames.map(async (templateName) => {
|
|
const folderName = `${templateName}-ext`
|
|
await $`node ${createKKIndexjsPath} --outdir ${testDir} --name ${folderName} --template ${templateName}`
|
|
const templateDir = path.join(testDir, folderName)
|
|
console.log("templateDir", templateDir)
|
|
await $`pnpm install`.cwd(templateDir).quiet()
|
|
await $`pnpm build`.cwd(templateDir).quiet()
|
|
testTemplateDirs.push(templateDir)
|
|
})
|
|
)
|
|
|
|
test("Build And Verify", async () => {
|
|
for (const templateDir of testTemplateDirs) {
|
|
expect(verifyCmd(templateDir, false)).toBeTrue()
|
|
}
|
|
})
|
|
|
|
const testDirDocker = path.join(os.tmpdir(), "kunkun-cli-test-docker")
|
|
fs.rmdirSync(testDirDocker, { recursive: true })
|
|
fs.mkdirpSync(testDirDocker)
|
|
|
|
const templateData: Record<string, { dir: string; buildResult: BuildResult }> = {}
|
|
|
|
await Promise.all(
|
|
templateNames.map(async (templateName) => {
|
|
const folderName = `${templateName}-ext`
|
|
await $`node ${createKKIndexjsPath} --outdir ${testDirDocker} --name ${folderName} --template ${templateName}`
|
|
const templateDir = path.join(testDirDocker, folderName)
|
|
console.log("templateDir:", templateDir)
|
|
|
|
const buildResult = await buildWithDockerAndValidate(templateDir)
|
|
templateData[templateName] = {
|
|
dir: templateDir,
|
|
buildResult
|
|
}
|
|
})
|
|
)
|
|
console.log(templateData)
|
|
|
|
test("Template Exist", () => {
|
|
Object.entries(templateData).forEach(async ([templateName, { dir }]) => {
|
|
console.log("Expect dir exist: ", dir)
|
|
expect(fs.existsSync(dir)).toBeTrue()
|
|
})
|
|
})
|
|
|
|
test("Build Result Tarball Exist", () => {
|
|
Object.entries(templateData).forEach(async ([templateName, { buildResult, dir }]) => {
|
|
const expectedTarballPath = path.join(dir, buildResult.tarballFilename)
|
|
expect(fs.existsSync(expectedTarballPath)).toBeTrue()
|
|
})
|
|
})
|
|
|
|
afterAll(() => {
|
|
fs.rmdirSync(testDir, { recursive: true })
|
|
fs.rmdirSync(testDirDocker, { recursive: true })
|
|
})
|