code maybe confusing, but now using Packet.lua format
This commit is contained in:
72
internal/build/complete.go
Normal file
72
internal/build/complete.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package build
|
||||
|
||||
import (
|
||||
"packets/internal/packet"
|
||||
utils_lua "packets/internal/utils/lua"
|
||||
|
||||
lua "github.com/yuin/gopher-lua"
|
||||
)
|
||||
|
||||
func (container Container) ExecutePrepare(packetLua packet.PacketLua, L *lua.LState) error {
|
||||
|
||||
gitTable := L.NewTable()
|
||||
|
||||
gitTable.RawSetString("clone", L.NewFunction(utils_lua.LGitClone))
|
||||
gitTable.RawSetString("checkout", L.NewFunction(utils_lua.LGitCheckout))
|
||||
gitTable.RawSetString("pull", L.NewFunction(utils_lua.LGitPUll))
|
||||
|
||||
containerTable := L.NewTable()
|
||||
|
||||
containerTable.RawSetString("dir", L.NewFunction(container.lDir))
|
||||
|
||||
L.SetGlobal("git", gitTable)
|
||||
L.Push(packetLua.Prepare)
|
||||
L.Push(containerTable)
|
||||
|
||||
return L.PCall(1, 0, nil)
|
||||
|
||||
}
|
||||
|
||||
func (container Container) ExecuteBuild(packetLua packet.PacketLua, L *lua.LState) error {
|
||||
|
||||
osObject := L.GetGlobal("os").(*lua.LTable)
|
||||
ioObject := L.GetGlobal("io").(*lua.LTable)
|
||||
|
||||
OnlyContainerOS := L.NewTable()
|
||||
|
||||
OnlyContainerOS.RawSetString("copy", L.NewFunction(container.lCopy))
|
||||
OnlyContainerOS.RawSetString("mkdir", L.NewFunction(container.lMkdir))
|
||||
OnlyContainerOS.RawSetString("rename", L.NewFunction(container.lRename))
|
||||
OnlyContainerOS.RawSetString("remove", L.NewFunction(container.lRemove))
|
||||
OnlyContainerOS.RawSetString("execute", L.NewFunction(container.lexecute))
|
||||
OnlyContainerOS.RawSetString("open", L.NewFunction(container.lOpen))
|
||||
|
||||
OnlyContainerIO := L.NewTable()
|
||||
|
||||
OnlyContainerIO.RawSetString("popen", L.NewFunction(container.lpopen))
|
||||
|
||||
L.SetGlobal("io", OnlyContainerIO)
|
||||
L.SetGlobal("os", OnlyContainerOS)
|
||||
|
||||
L.Push(packetLua.Build)
|
||||
err := L.PCall(0, 0, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
L.SetGlobal("os", osObject)
|
||||
L.SetGlobal("io", ioObject)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (container Container) ExecuteInstall(packetLua packet.PacketLua, L *lua.LState) error {
|
||||
|
||||
containerTable := L.NewTable()
|
||||
|
||||
containerTable.RawSetString("dir", L.NewFunction(container.lDir))
|
||||
|
||||
L.Push(packetLua.Install)
|
||||
L.Push(containerTable)
|
||||
|
||||
return L.PCall(1, 0, nil)
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"packets/internal/packet"
|
||||
"packets/internal/utils"
|
||||
utils_lua "packets/internal/utils/lua"
|
||||
"path/filepath"
|
||||
@@ -14,11 +15,10 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/klauspost/compress/zstd"
|
||||
lua "github.com/yuin/gopher-lua"
|
||||
)
|
||||
|
||||
func (container Container) installPackage(file []byte, destDir string) error {
|
||||
manifest, err := utils.ReadManifest(bytes.NewReader(file))
|
||||
manifest, err := packet.ReadPacketFromFile(bytes.NewReader(file))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -95,7 +95,7 @@ func (container Container) installPackage(file []byte, destDir string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if filepath.Base(hdr.Name) == "manifest.toml" || filepath.Base(hdr.Name) == manifest.Hooks.Install || filepath.Base(hdr.Name) == manifest.Hooks.Remove {
|
||||
if filepath.Base(hdr.Name) == "Packet.lua" {
|
||||
err = os.Chmod(absPath, os.FileMode(0755))
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -113,34 +113,34 @@ func (container Container) installPackage(file []byte, destDir string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
L.SetGlobal("DATA_DIR", lua.LString(filepath.Join(destDir, "data")))
|
||||
L.SetGlobal("script", lua.LString(manifest.Hooks.Build))
|
||||
|
||||
bootstrapcontainer, err := NewContainer(filepath.Join(container.Root, destDir, "data"), manifest)
|
||||
bootstrapcontainer, err := NewContainer(manifest)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bootstrapcontainer.LuaState.DoFile(manifest.Hooks.Build)
|
||||
if err := bootstrapcontainer.ExecutePrepare(manifest, &L); err != nil {
|
||||
return fmt.Errorf("error executing prepare: %s", err)
|
||||
}
|
||||
|
||||
L.SetGlobal("DATA_DIR", lua.LString(filepath.Join(destDir, "data")))
|
||||
L.SetGlobal("script", lua.LString(manifest.Hooks.Install))
|
||||
if err := bootstrapcontainer.ExecuteBuild(manifest, &L); err != nil {
|
||||
return fmt.Errorf("error executing build: %s", err)
|
||||
}
|
||||
|
||||
if err := utils.ChangeToNoPermission(); err != nil {
|
||||
return err
|
||||
return fmt.Errorf("error changing to packet user: %s", err)
|
||||
}
|
||||
if err := L.DoFile(filepath.Join(destDir, manifest.Hooks.Install)); err != nil {
|
||||
return err
|
||||
if err := bootstrapcontainer.ExecuteInstall(manifest, &L); err != nil {
|
||||
return fmt.Errorf("error executing build: %s", err)
|
||||
}
|
||||
|
||||
if err := utils.ElevatePermission(); err != nil {
|
||||
return err
|
||||
return fmt.Errorf("error changing to root: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (container Container) asyncFullInstallDependencie(dep string, storePackages bool, installPath string, wg *sync.WaitGroup, mu *sync.Mutex) {
|
||||
func (container Container) asyncFullInstallDependencie(dep string, storePackages bool, installPath string, wg *sync.WaitGroup) {
|
||||
defer wg.Done()
|
||||
|
||||
fmt.Printf(" downloading %s \n", dep)
|
||||
|
||||
@@ -32,10 +32,9 @@ func (container Container) createNew() error {
|
||||
return err
|
||||
}
|
||||
var wg sync.WaitGroup
|
||||
var mu sync.Mutex
|
||||
for _, depn := range dependencies {
|
||||
wg.Add(1)
|
||||
go container.asyncFullInstallDependencie(depn, cfg.Config.StorePackages, depn, &wg, &mu)
|
||||
go container.asyncFullInstallDependencie(depn, cfg.Config.StorePackages, depn, &wg)
|
||||
}
|
||||
wg.Wait()
|
||||
|
||||
|
||||
@@ -16,13 +16,10 @@ func GetSandBox() (lua.LState, error) {
|
||||
osObject := L.GetGlobal("os").(*lua.LTable)
|
||||
L.SetGlobal("SAFE_MODE", lua.LTrue)
|
||||
|
||||
L.SetGlobal("PACKETS_DATADIR", lua.LString(cfg.Config.Data_d))
|
||||
L.SetGlobal("packets_bin_dir", lua.LString(cfg.Config.Bin_d))
|
||||
L.SetGlobal("BIN_DIR", lua.LString(cfg.Config.Bin_d))
|
||||
|
||||
L.SetGlobal("path_join", L.NewFunction(Ljoin))
|
||||
|
||||
// Packets build functions
|
||||
|
||||
osObject.RawSetString("remove", L.NewFunction(LSafeRemove))
|
||||
osObject.RawSetString("rename", L.NewFunction(LSafeRename))
|
||||
osObject.RawSetString("copy", L.NewFunction(LSafeCopy))
|
||||
|
||||
Reference in New Issue
Block a user