> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Commit 与上传

> 上传新应用到 Square Cloud，或将新文件 commit 到现有应用。

```go theme={null}
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
```

## 上传新应用

`api.PostApplications(reader)` 从任意 `io.Reader` 上传一个 zip 并创建一个全新的应用，返回 `*squarecloud.ApplicationUploaded`。

```go theme={null}
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)               // newly created application ID
fmt.Println(uploaded.Name)             // display name
fmt.Println(uploaded.RAM)              // allocated RAM in MB
fmt.Println(uploaded.CPU)              // allocated CPU shares
fmt.Println(uploaded.Language.Name)    // e.g. "go"
fmt.Println(uploaded.Language.Version) // e.g. "1.24"
```

`Description` 和 `Subdomain` 仅在配置文件中设置了它们时才会出现。

<Note>
  该 zip 必须包含应用的入口点、依赖文件以及 `squarecloud.app`/`squarecloud.config` 配置文件。参见[配置文件指南](/zh/getting-started/config-file)。
</Note>

## 将文件 commit 到现有应用

`api.PostApplicationCommit(appID, reader)` 将一个 zip 上传到已部署的应用中，替换匹配的文件。

```go theme={null}
file, err := os.Open("dist.zip")
if err != nil {
	panic(err)
}
defer file.Close()

err = api.PostApplicationCommit("abc123def456abc123def456", file)
if err != nil {
	panic(err)
}
```

要 commit 到子目录而非应用根目录，使用 `rest.WithQueryParam` 传入 `path` 查询参数：

```go theme={null}
err = api.PostApplicationCommit(
	"abc123def456abc123def456",
	file,
	rest.WithQueryParam("path", "src"),
)
```

Commit 不会重启应用 —— 如果你的变更需要重启，请在之后发送重启信号：

```go theme={null}
err = api.PostApplicationSignal("abc123def456abc123def456", squarecloud.ApplicationSignalRestart)
```
