Merge pull request #370 from trheyi/main

[add] load application from the package file
This commit is contained in:
Max 2023-04-20 19:49:38 +08:00 committed by GitHub
commit 7b312c79c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 76 additions and 17 deletions

View file

@ -14,6 +14,7 @@ import (
var appPath string
var envFile string
var yazFile string
var lang = os.Getenv("YAO_LANG")
var langs = map[string]string{
@ -128,6 +129,7 @@ func init() {
)
// rootCmd.SetHelpCommand(helpCmd)
rootCmd.PersistentFlags().StringVarP(&appPath, "app", "a", "", L("Application directory"))
rootCmd.PersistentFlags().StringVarP(&yazFile, "file", "f", "", L("Application package file"))
rootCmd.PersistentFlags().StringVarP(&envFile, "env", "e", "", L("Environment file"))
}
@ -142,6 +144,7 @@ func Execute() {
// Boot 设定配置
func Boot() {
root := config.Conf.Root
if appPath != "" {
r, err := filepath.Abs(appPath)
if err != nil {
@ -149,12 +152,17 @@ func Boot() {
}
root = r
}
if envFile != "" {
config.Conf = config.LoadFrom(envFile)
} else {
config.Conf = config.LoadFrom(filepath.Join(root, ".env"))
}
if yazFile != "" {
config.Conf.AppSource = yazFile
}
if config.Conf.Mode == "production" {
config.Production()
} else if config.Conf.Mode == "development" {

View file

@ -225,29 +225,28 @@ func loadApp(root string) error {
var err error
var app application.Application
if root == "bin:application.pkg" {
app, err = application.OpenFromBin(root, &share.Pack{}) // Load app from Bin
if root == "bin:application.yaz" {
app, err = application.OpenFromYaz(root, &share.Pack{}) // Load app from Bin
if err != nil {
return err
}
application.Load(app)
} else if strings.HasSuffix(root, ".pkg") {
} else if strings.HasSuffix(root, ".yaz") {
app, err = application.OpenFromYaz(root, &share.Pack{}) // Load app from .yaz file
if err != nil {
return err
}
application.Load(app)
app, err = application.OpenFromPkg(root, &share.Pack{}) // Load app from .pkg file
} else {
app, err = application.OpenFromDisk(root) // Load app from Disk
if err != nil {
return err
}
application.Load(app)
}
app, err = application.OpenFromDisk(root) // Load app from Disk
if err != nil {
return err
}
application.Load(app)
var info []byte
// Read app setting

View file

@ -1,11 +1,14 @@
package engine
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/gou/api"
"github.com/yaoapp/gou/application/yaz"
"github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/share"
)
func TestLoad(t *testing.T) {
@ -24,3 +27,48 @@ func TestReload(t *testing.T) {
assert.Nil(t, err)
assert.Greater(t, len(api.APIs), 0)
}
func TestLoadYaz(t *testing.T) {
defer Unload()
// package yaz
file, err := yaz.Pack(config.Conf.Root, &share.Pack{})
if err != nil {
t.Fatal(err)
}
defer os.Remove(file)
cfg := config.Conf
cfg.AppSource = file
err = Load(cfg)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(api.APIs), 0)
}
func TestReoadYaz(t *testing.T) {
defer Unload()
// package yaz
file, err := yaz.Pack(config.Conf.Root, &share.Pack{})
if err != nil {
t.Fatal(err)
}
defer os.Remove(file)
cfg := config.Conf
cfg.AppSource = file
err = Load(cfg)
if err != nil {
t.Fatal(err)
}
assert.Greater(t, len(api.APIs), 0)
Reload(cfg)
assert.Nil(t, err)
assert.Greater(t, len(api.APIs), 0)
}

View file

@ -1,5 +1,7 @@
package share
import "io"
// ********************************************************************************
// WARNING: DO NOT MODIFY THIS FILE. IT WILL BE REPLACED BY THE APPLICATION CODE.
// *********************************************************************************
@ -7,12 +9,14 @@ package share
// Pack the yao app package
type Pack struct{}
// Decode the package decode method
func (pkg *Pack) Decode(data []byte) ([]byte, error) {
return data, nil
// Encrypt encrypt
func (pkg *Pack) Encrypt(reader io.Reader, writer io.Writer) error {
_, err := io.Copy(writer, reader)
return err
}
// Encode the package encode method
func (pkg *Pack) Encode(data []byte) ([]byte, error) {
return data, nil
// Decrypt decrypt
func (pkg *Pack) Decrypt(reader io.Reader, writer io.Writer) error {
_, err := io.Copy(writer, reader)
return err
}