All checks were successful
Find and Upload Minecraft Server versions / build (push) Successful in 1m9s
Signed-off-by: Matheus Sampaio Queiroga <srherobrine20@gmail.com>
144 lines
3.5 KiB
Go
144 lines
3.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
|
|
"sirherobrine23.com.br/go-bds/go-bds/bedrock"
|
|
"sirherobrine23.com.br/go-bds/go-bds/utils/semver"
|
|
"sirherobrine23.com.br/go-bds/request/gitea"
|
|
gitea_api "sirherobrine23.com.br/go-bds/request/gitea/structs"
|
|
)
|
|
|
|
var (
|
|
RootURL = "https://sirherobrine23.com.br/api"
|
|
Token string = (func() string {
|
|
if giteaToken := os.Getenv("GITEA_TOKEN"); len(giteaToken) > 0 {
|
|
return giteaToken
|
|
} else if ghToken := os.Getenv("GH_TOKEN"); len(ghToken) > 0 {
|
|
return ghToken
|
|
} else if githubToken := os.Getenv("GITHUB_TOKEN"); len(githubToken) > 0 {
|
|
return githubToken
|
|
}
|
|
return ""
|
|
})()
|
|
)
|
|
|
|
func processVersion() error {
|
|
var versions, localVersions bedrock.Versions
|
|
localFile, err := os.OpenFile("./versions.json", os.O_RDWR, 0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer localFile.Close()
|
|
|
|
// Load versions to slice
|
|
if err := json.NewDecoder(localFile).Decode(&localVersions); err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Loaded %d versions\n", len(localVersions))
|
|
|
|
fmt.Println("Fetcing versions from minecraft.net")
|
|
if err := versions.FetchFromMinecraftDotNet(); err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Versions located: %d\n", len(versions))
|
|
if len(versions) == 0 {
|
|
return fmt.Errorf("no versions found")
|
|
}
|
|
|
|
teaClient, err := gitea.NewClient(RootURL, "go-bds", "BedrockFetch", Token)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, version := range versions {
|
|
if localVersions.HasVersion(version.Version) {
|
|
fmt.Printf("Version aredy published: %s\n", version.Version)
|
|
continue
|
|
}
|
|
fmt.Printf("Publishing version %s to Releaser\n", version.Version)
|
|
release, err := teaClient.CreateRelease(&gitea_api.CreateReleaseOption{
|
|
TagName: version.Version,
|
|
IsPrerelease: version.IsPreview,
|
|
Title: fmt.Sprintf("Bedrock server %s", version.Version),
|
|
})
|
|
if err != nil {
|
|
fmt.Printf("cannot make release to %s, error: %s", version.Version, err.Error())
|
|
return err
|
|
}
|
|
|
|
newVersion := &bedrock.Version{
|
|
Version: version.Version,
|
|
IsPreview: version.IsPreview,
|
|
Docker: nil,
|
|
Plaforms: map[string]*bedrock.PlatformVersion{},
|
|
}
|
|
localVersions = append(localVersions, newVersion)
|
|
|
|
for platform, info := range version.Plaforms {
|
|
fmt.Printf("Uploading server from %s\n", platform)
|
|
name := strings.ReplaceAll(platform, "/", "_") + ".tgz"
|
|
|
|
r, w := io.Pipe()
|
|
var fileInfo *gitea_api.Attachment
|
|
var err2 error
|
|
|
|
wait := &sync.WaitGroup{}
|
|
wait.Add(1)
|
|
go func() {
|
|
defer wait.Done()
|
|
fileInfo, err2 = teaClient.UploadAsset(release.ID, name, r)
|
|
if err2 != nil {
|
|
fmt.Printf("Error on upload: %s\n", err2)
|
|
r.Close()
|
|
}
|
|
}()
|
|
|
|
fmt.Printf("Converting %s %s to tar.gz...\n", version.Version, platform)
|
|
defer w.Close()
|
|
sha1, err := info.ConvertTar(w)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
w.Close()
|
|
wait.Wait()
|
|
if err2 != nil {
|
|
return err2
|
|
}
|
|
|
|
fmt.Printf("Server (%s %s) release, Sha1: %s\n", version.Version, platform, sha1)
|
|
newVersion.Plaforms[platform] = &bedrock.PlatformVersion{
|
|
ReleaseDate: info.ReleaseDate,
|
|
ZipSHA1: info.ZipSHA1,
|
|
ZipFile: info.ZipFile,
|
|
TarSHA1: sha1,
|
|
TarFile: fileInfo.DownloadURL,
|
|
}
|
|
}
|
|
}
|
|
|
|
semver.Sort(localVersions)
|
|
if _, err = localFile.Seek(0, 0); err != nil {
|
|
return err
|
|
} else if err = localFile.Truncate(0); err != nil {
|
|
return err
|
|
}
|
|
|
|
enc := json.NewEncoder(localFile)
|
|
enc.SetIndent("", " ")
|
|
return enc.Encode(localVersions)
|
|
}
|
|
|
|
func main() {
|
|
if err := processVersion(); err != nil {
|
|
fmt.Println(err.Error())
|
|
os.Exit(1)
|
|
}
|
|
}
|