mirror of
https://github.com/syumai/workers.git
synced 2025-03-10 17:29:11 +00:00
108 lines
1.9 KiB
Go
108 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"embed"
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
//go:embed assets
|
|
var assets embed.FS
|
|
|
|
const (
|
|
assetDirPath = "assets"
|
|
commonDirPath = "assets/common"
|
|
buildDirPath = "build"
|
|
)
|
|
|
|
func main() {
|
|
var mode string
|
|
flag.StringVar(&mode, "mode", string(ModeTinygo), `build mode: tinygo or go`)
|
|
flag.Parse()
|
|
if !Mode(mode).IsValid() {
|
|
flag.PrintDefaults()
|
|
os.Exit(1)
|
|
return
|
|
}
|
|
if err := runMain(Mode(mode)); err != nil {
|
|
fmt.Fprintf(os.Stderr, "err: %v", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func runMain(mode Mode) error {
|
|
if err := os.RemoveAll(buildDirPath); err != nil {
|
|
return err
|
|
}
|
|
if err := os.MkdirAll(buildDirPath, os.ModePerm); err != nil {
|
|
return err
|
|
}
|
|
if err := copyWasmExecJS(mode); err != nil {
|
|
return err
|
|
}
|
|
if err := copyCommonAssets(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func copyWasmExecJS(mode Mode) error {
|
|
var fileName string
|
|
switch mode {
|
|
case ModeTinygo:
|
|
fileName = "wasm_exec_tinygo.js"
|
|
case ModeGo:
|
|
fileName = "wasm_exec_tinygo.js"
|
|
default:
|
|
return fmt.Errorf("unexpected mode: %s", mode)
|
|
}
|
|
destPath := path.Join(buildDirPath, "wasm_exec.js")
|
|
originPath := path.Join(assetDirPath, fileName)
|
|
if err := copyFile(destPath, originPath); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func copyCommonAssets() error {
|
|
entries, err := assets.ReadDir(commonDirPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, entry := range entries {
|
|
destPath := path.Join(buildDirPath, entry.Name())
|
|
originPath := path.Join(commonDirPath, entry.Name())
|
|
if err := copyFile(destPath, originPath); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func copyFile(destPath, originPath string) error {
|
|
f, err := assets.ReadFile(originPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dest, err := os.Create(destPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer dest.Close()
|
|
_, err = io.Copy(dest, bytes.NewReader(f))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|