pikapika/ci/cmd/upload_asset/main.go

131 lines
3.3 KiB
Go
Raw Permalink Normal View History

2022-03-22 09:12:48 +00:00
package main
import (
"ci/commons"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"path"
)
func main() {
// get ghToken
ghToken := os.Getenv("GH_TOKEN")
if ghToken == "" {
println("Env ${GH_TOKEN} is not set")
os.Exit(1)
}
// get version
version := commons.LoadVersion()
2023-07-07 06:27:02 +00:00
// get TARGET
2022-03-22 09:12:48 +00:00
target := os.Getenv("TARGET")
2022-05-18 03:49:21 +00:00
if target == "" {
2022-03-22 09:12:48 +00:00
println("Env ${TARGET} is not set")
os.Exit(1)
}
2023-07-07 06:27:02 +00:00
// get FLUTTER_VERSION
flutterVersion := os.Getenv("FLUTTER_VERSION")
2022-05-18 03:49:21 +00:00
if target == "" {
2023-07-07 06:27:02 +00:00
println("Env ${FLUTTER_VERSION} is not set")
2022-05-18 03:49:21 +00:00
os.Exit(1)
}
2023-07-07 06:27:02 +00:00
// get BRANCH
branch := os.Getenv("BRANCH")
if target == "" {
println("Env ${BRANCH} is not set")
os.Exit(1)
2023-02-03 03:20:24 +00:00
}
//
2023-07-07 06:27:02 +00:00
var releaseFileName = commons.AssetName(version, flutterVersion, target, branch)
//
2023-02-03 03:20:24 +00:00
var releaseFilePath string
2022-03-22 09:12:48 +00:00
var contentType string
var contentLength int64
switch target {
case "macos":
releaseFilePath = "build/build.dmg"
contentType = "application/octet-stream"
case "ios":
releaseFilePath = "build/nosign.ipa"
contentType = "application/octet-stream"
case "windows":
releaseFilePath = "build/build.zip"
contentType = "application/octet-stream"
case "linux":
releaseFilePath = "build/build.AppImage"
contentType = "application/octet-stream"
case "android-arm32":
releaseFilePath = "build/app/outputs/flutter-apk/app-release.apk"
contentType = "application/octet-stream"
case "android-arm64":
releaseFilePath = "build/app/outputs/flutter-apk/app-release.apk"
contentType = "application/octet-stream"
case "android-x86_64":
releaseFilePath = "build/app/outputs/flutter-apk/app-release.apk"
contentType = "application/octet-stream"
}
releaseFilePath = path.Join("..", releaseFilePath)
info, err := os.Stat(releaseFilePath)
if err != nil {
panic(err)
}
contentLength = info.Size()
// get version
getReleaseRequest, err := http.NewRequest(
"GET",
fmt.Sprintf("https://api.github.com/repos/%v/%v/releases/tags/%v", commons.Owner, commons.Repo, version.Code),
2022-03-22 09:12:48 +00:00
nil,
)
if err != nil {
panic(err)
}
getReleaseRequest.Header.Set("User-Agent", commons.Ua)
2022-04-15 16:53:37 +00:00
getReleaseRequest.Header.Set("Authorization", "token "+ghToken)
2022-03-22 09:12:48 +00:00
getReleaseResponse, err := http.DefaultClient.Do(getReleaseRequest)
if err != nil {
panic(err)
}
defer getReleaseResponse.Body.Close()
if getReleaseResponse.StatusCode == 404 {
panic("NOT FOUND RELEASE")
}
buff, err := ioutil.ReadAll(getReleaseResponse.Body)
if err != nil {
panic(err)
}
var release commons.Release
err = json.Unmarshal(buff, &release)
if err != nil {
println(string(buff))
panic(err)
}
file, err := os.Open(releaseFilePath)
if err != nil {
panic(err)
}
defer file.Close()
uploadUrl := fmt.Sprintf("https://uploads.github.com/repos/%v/%v/releases/%v/assets?name=%v", commons.Owner, commons.Repo, release.Id, releaseFileName)
2022-03-22 09:12:48 +00:00
uploadRequest, err := http.NewRequest("POST", uploadUrl, file)
if err != nil {
panic(err)
}
uploadRequest.Header.Set("User-Agent", commons.Ua)
2022-04-15 16:53:37 +00:00
uploadRequest.Header.Set("Authorization", "token "+ghToken)
2022-03-22 09:12:48 +00:00
uploadRequest.Header.Set("Content-Type", contentType)
uploadRequest.ContentLength = contentLength
uploadResponse, err := http.DefaultClient.Do(uploadRequest)
if err != nil {
panic(err)
}
if uploadResponse.StatusCode != 201 {
buff, err = ioutil.ReadAll(uploadResponse.Body)
if err != nil {
panic(err)
}
println(string(buff))
panic("NOT 201")
}
}