mirror of https://gitee.com/answerdev/answer.git
fix(build): replace cp command by copy function
This commit is contained in:
parent
7d2f53a283
commit
3a21a000c4
|
@ -2,7 +2,6 @@ package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"embed"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
|
@ -106,7 +105,6 @@ func BuildNewAnswer(outputPath string, plugins []string, originalAnswerInfo Orig
|
||||||
builder.DoTask(copyUIFiles)
|
builder.DoTask(copyUIFiles)
|
||||||
builder.DoTask(overwriteIndexTs)
|
builder.DoTask(overwriteIndexTs)
|
||||||
builder.DoTask(buildUI)
|
builder.DoTask(buildUI)
|
||||||
builder.DoTask(buildBinary)
|
|
||||||
builder.DoTask(mergeI18nFiles)
|
builder.DoTask(mergeI18nFiles)
|
||||||
builder.DoTask(buildBinary)
|
builder.DoTask(buildBinary)
|
||||||
builder.DoTask(cleanByproduct)
|
builder.DoTask(cleanByproduct)
|
||||||
|
@ -125,6 +123,7 @@ func formatPlugins(plugins []string) (formatted []*pluginInfo) {
|
||||||
return formatted
|
return formatted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// createMainGoFile creates main.go file in tmp dir that content is mainGoTpl
|
||||||
func createMainGoFile(b *buildingMaterial) (err error) {
|
func createMainGoFile(b *buildingMaterial) (err error) {
|
||||||
fmt.Printf("[build] tmp dir: %s\n", b.tmpDir)
|
fmt.Printf("[build] tmp dir: %s\n", b.tmpDir)
|
||||||
err = dir.CreateDirIfNotExist(b.tmpDir)
|
err = dir.CreateDirIfNotExist(b.tmpDir)
|
||||||
|
@ -174,6 +173,7 @@ func createMainGoFile(b *buildingMaterial) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// downloadGoModFile run go mod commands to download dependencies
|
||||||
func downloadGoModFile(b *buildingMaterial) (err error) {
|
func downloadGoModFile(b *buildingMaterial) (err error) {
|
||||||
// If user specify a module replacement, use it. Otherwise, use the latest version.
|
// If user specify a module replacement, use it. Otherwise, use the latest version.
|
||||||
if len(b.answerModuleReplacement) > 0 {
|
if len(b.answerModuleReplacement) > 0 {
|
||||||
|
@ -196,6 +196,7 @@ func downloadGoModFile(b *buildingMaterial) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// copyUIFiles copy ui files from answer module to tmp dir
|
||||||
func copyUIFiles(b *buildingMaterial) (err error) {
|
func copyUIFiles(b *buildingMaterial) (err error) {
|
||||||
goListCmd := b.newExecCmd("go", "list", "-mod=mod", "-m", "-f", "{{.Dir}}", "github.com/answerdev/answer")
|
goListCmd := b.newExecCmd("go", "list", "-mod=mod", "-m", "-f", "{{.Dir}}", "github.com/answerdev/answer")
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
|
@ -205,15 +206,14 @@ func copyUIFiles(b *buildingMaterial) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
goModUIDir := filepath.Join(strings.TrimSpace(buf.String()), "ui")
|
goModUIDir := filepath.Join(strings.TrimSpace(buf.String()), "ui")
|
||||||
localUIBuildDir := filepath.Join(b.tmpDir, "vendor/github.com/answerdev/answer")
|
localUIBuildDir := filepath.Join(b.tmpDir, "vendor/github.com/answerdev/answer/ui/")
|
||||||
|
if err = copyDirEntries(os.DirFS(goModUIDir), ".", localUIBuildDir); err != nil {
|
||||||
err = b.newExecCmd("cp", "-rf", goModUIDir, localUIBuildDir).Run()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to copy ui files: %w", err)
|
return fmt.Errorf("failed to copy ui files: %w", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// overwriteIndexTs overwrites index.ts file in ui/src/plugins/ dir
|
||||||
func overwriteIndexTs(b *buildingMaterial) (err error) {
|
func overwriteIndexTs(b *buildingMaterial) (err error) {
|
||||||
localUIPluginDir := filepath.Join(b.tmpDir, "vendor/github.com/answerdev/answer/ui/src/plugins/")
|
localUIPluginDir := filepath.Join(b.tmpDir, "vendor/github.com/answerdev/answer/ui/src/plugins/")
|
||||||
|
|
||||||
|
@ -253,6 +253,7 @@ func generateIndexTsContent(folders []string) string {
|
||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// buildUI run pnpm install and pnpm build commands to build ui
|
||||||
func buildUI(b *buildingMaterial) (err error) {
|
func buildUI(b *buildingMaterial) (err error) {
|
||||||
localUIBuildDir := filepath.Join(b.tmpDir, "vendor/github.com/answerdev/answer/ui")
|
localUIBuildDir := filepath.Join(b.tmpDir, "vendor/github.com/answerdev/answer/ui")
|
||||||
|
|
||||||
|
@ -277,6 +278,7 @@ func replaceNecessaryFile(b *buildingMaterial) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mergeI18nFiles merge i18n files
|
||||||
func mergeI18nFiles(b *buildingMaterial) (err error) {
|
func mergeI18nFiles(b *buildingMaterial) (err error) {
|
||||||
fmt.Printf("try to merge i18n files\n")
|
fmt.Printf("try to merge i18n files\n")
|
||||||
|
|
||||||
|
@ -364,7 +366,7 @@ func mergeI18nFiles(b *buildingMaterial) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func copyDirEntries(sourceFs embed.FS, sourceDir string, targetDir string) (err error) {
|
func copyDirEntries(sourceFs fs.FS, sourceDir string, targetDir string) (err error) {
|
||||||
err = dir.CreateDirIfNotExist(targetDir)
|
err = dir.CreateDirIfNotExist(targetDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -385,29 +387,29 @@ func copyDirEntries(sourceFs embed.FS, sourceDir string, targetDir string) (err
|
||||||
|
|
||||||
if d.IsDir() {
|
if d.IsDir() {
|
||||||
// Create the directory in the destination
|
// Create the directory in the destination
|
||||||
err := os.MkdirAll(dstPath, d.Type())
|
err := os.MkdirAll(dstPath, os.ModePerm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("failed to create directory %s: %w", dstPath, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Open the source file
|
// Open the source file
|
||||||
srcFile, err := sourceFs.Open(srcPath)
|
srcFile, err := sourceFs.Open(srcPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("failed to open source file %s: %w", srcPath, err)
|
||||||
}
|
}
|
||||||
defer srcFile.Close()
|
defer srcFile.Close()
|
||||||
|
|
||||||
// Create the destination file
|
// Create the destination file
|
||||||
dstFile, err := os.Create(dstPath)
|
dstFile, err := os.Create(dstPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("failed to create destination file %s: %w", dstPath, err)
|
||||||
}
|
}
|
||||||
defer dstFile.Close()
|
defer dstFile.Close()
|
||||||
|
|
||||||
// Copy the file contents
|
// Copy the file contents
|
||||||
_, err = io.Copy(dstFile, srcFile)
|
_, err = io.Copy(dstFile, srcFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("failed to copy file contents from %s to %s: %w", srcPath, dstPath, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,6 +419,7 @@ func copyDirEntries(sourceFs embed.FS, sourceDir string, targetDir string) (err
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// buildBinary build binary file
|
||||||
func buildBinary(b *buildingMaterial) (err error) {
|
func buildBinary(b *buildingMaterial) (err error) {
|
||||||
versionInfo := b.originalAnswerInfo
|
versionInfo := b.originalAnswerInfo
|
||||||
cmdPkg := "github.com/answerdev/answer/cmd"
|
cmdPkg := "github.com/answerdev/answer/cmd"
|
||||||
|
@ -430,6 +433,7 @@ func buildBinary(b *buildingMaterial) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cleanByproduct delete tmp dir
|
||||||
func cleanByproduct(b *buildingMaterial) (err error) {
|
func cleanByproduct(b *buildingMaterial) (err error) {
|
||||||
return os.RemoveAll(b.tmpDir)
|
return os.RemoveAll(b.tmpDir)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue