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)
 | |
| 	}
 | |
| }
 |