Pular para o conteúdo principal
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)

Fazendo upload de uma nova aplicação

api.PostApplications(reader) faz upload de um zip a partir de qualquer io.Reader e cria uma aplicação totalmente nova, retornando um *squarecloud.ApplicationUploaded.
file, err := os.Open("app.zip")
if err != nil {
	panic(err)
}
defer file.Close()

uploaded, err := api.PostApplications(file)
if err != nil {
	panic(err)
}

fmt.Println(uploaded.ID)               // ID da aplicação recém-criada
fmt.Println(uploaded.Name)             // nome de exibição
fmt.Println(uploaded.RAM)              // RAM alocada em MB
fmt.Println(uploaded.CPU)              // shares de CPU alocados
fmt.Println(uploaded.Language.Name)    // ex.: "go"
fmt.Println(uploaded.Language.Version) // ex.: "1.24"
Description e Subdomain só estão presentes quando definidos no arquivo de configuração.
O zip deve conter o ponto de entrada da sua aplicação, o arquivo de dependências e o arquivo de configuração squarecloud.app/squarecloud.config. Veja o guia do arquivo de configuração.

Fazendo commit de arquivos em uma aplicação existente

api.PostApplicationCommit(appID, reader) faz upload de um zip para uma aplicação já implantada, substituindo os arquivos correspondentes.
file, err := os.Open("dist.zip")
if err != nil {
	panic(err)
}
defer file.Close()

err = api.PostApplicationCommit("abc123def456abc123def456", file)
if err != nil {
	panic(err)
}
Para fazer commit em um subdiretório em vez da raiz da aplicação, passe o parâmetro de query path com rest.WithQueryParam:
err = api.PostApplicationCommit(
	"abc123def456abc123def456",
	file,
	rest.WithQueryParam("path", "src"),
)
O commit não reinicia a aplicação — envie um sinal de restart em seguida se a sua mudança exigir:
err = api.PostApplicationSignal("abc123def456abc123def456", squarecloud.ApplicationSignalRestart)