68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
type RepoResponse struct {
|
|
Message string `json:"message"`
|
|
Name string `json:"name"`
|
|
Repo string `json:"repo"`
|
|
}
|
|
|
|
type PackageVersion struct {
|
|
Author string `json:"author"`
|
|
Description string `json:"description"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
func installPackage(packageName, packageVersion string) {
|
|
fmt.Printf("Fetching %s\n", packageName)
|
|
repoURL, err := getRepoURL(packageName)
|
|
if err != nil {
|
|
fmt.Printf("Error getting repo URL: %s\n", err)
|
|
return
|
|
}
|
|
repoU, err := url.Parse(repoURL)
|
|
if err != nil {
|
|
fmt.Printf("Error parsing repo URL: %s\n", err)
|
|
}
|
|
if packageVersion == "" {
|
|
packageVersion = getLatestVersion(repoU.Path)
|
|
fmt.Printf("Found version %s\n", packageVersion)
|
|
}
|
|
fmt.Printf("Downloading %s %s\n", packageName, packageVersion)
|
|
downloadPackage(repoU.Path, packageVersion)
|
|
if err := os.Mkdir("wyst_tmp", os.ModePerm); err != nil {
|
|
ERR := fmt.Sprintf("%s", err)
|
|
if !strings.Contains(strings.ToLower(ERR), "file exists") {
|
|
panic(ERR)
|
|
}
|
|
}
|
|
fmt.Printf("Extracting %s %s\n", packageName, packageVersion)
|
|
Unzip("temp.zip", "wyst_tmp")
|
|
entries, err := os.ReadDir("./wyst_tmp")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if err := os.Mkdir("lib", os.ModePerm); err != nil {
|
|
ERR := fmt.Sprintf("%s", err)
|
|
if !strings.Contains(strings.ToLower(ERR), "file exists") {
|
|
panic(ERR)
|
|
}
|
|
}
|
|
for _, e := range entries {
|
|
os.Rename("wyst_tmp/"+e.Name(), "lib/"+packageName)
|
|
}
|
|
if err := os.RemoveAll("wyst_tmp"); err != nil {
|
|
panic(err)
|
|
}
|
|
if err := os.Remove("temp.zip"); err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Printf("%s %s Installed\n", packageName, packageVersion)
|
|
}
|