Add Google Cloud Build deployment configuration and AGENTS.md instructions

Co-authored-by: end8cl01g <122174271+end8cl01g@users.noreply.github.com>
This commit is contained in:
google-labs-jules[bot] 2026-02-11 21:14:17 +00:00
parent 6ccd9d0a99
commit 93427f26a6
3 changed files with 112 additions and 0 deletions

40
AGENTS.md Normal file
View file

@ -0,0 +1,40 @@
# AGENTS.md
## 專案部署與自動化 (Project Deployment and Automation)
本專案支持使用 Google Cloud Build 進行自動化部署。
### 1. 關鍵部署文件 (Key Deployment Files)
- `Dockerfile`: 使用多階段構建Multi-stage build的 Go 1.24 環境,最終鏡像基於 Alpine Linux。
- `cloudbuild.yaml`: 配置了 Google Cloud Build 的步驟,包括構建鏡像並推送到 Google Artifact Registry。
### 2. 代理人維護任務 (Agent Maintenance Tasks)
身為開發代理人,在維護此專案時應遵守以下原則:
- **同步更新**:
- 當修改 `Makefile` 中的編譯參數(如 `LDFLAGS`)時,必須同步更新 `Dockerfile` 中的 `go build` 命令。
- 當新增系統級依賴(如 C 庫)時,需在 `Dockerfile` 的構建或運行階段安裝對應的 `apk` 包。
- **構建驗證**:
- 在提交涉及構建邏輯的代碼前,建議先在本地嘗試構建 Docker 鏡像:
```bash
docker build -t picoclaw-local .
```
- **部署配置**:
- 如果部署環境發生變化(例如從 GCR 遷移到 Artifact Registry或更改區域請更新 `cloudbuild.yaml` 中的 `substitutions`
- 默認配置:
- `_LOCATION`: `us-central1`
- `_REPOSITORY`: `picoclaw`
- `_IMAGE_NAME`: `picoclaw`
### 3. 手動觸發構建 (Manual Build Trigger)
如果自動觸發失效或需要即時部署,請執行:
```bash
gcloud builds submit --config cloudbuild.yaml .
```
### 4. 運行時注意事項 (Runtime Notes)
- 鏡像默認工作目錄為 `/app`
- `PICOCLAW_HOME` 環境變量設為 `/app/.picoclaw`
- 內置 Skills 已打包進 `/app/skills`,但在運行時程序會優先查找工作目錄下的 `skills``WORKSPACE_DIR/skills`

44
Dockerfile Normal file
View file

@ -0,0 +1,44 @@
# Build stage
FROM golang:1.24-alpine AS builder
WORKDIR /app
# Install build dependencies
RUN apk add --no-cache make git
# Copy go mod and sum files
COPY go.mod go.sum ./
RUN go mod download
# Copy source code
COPY . .
# Build the application
# We manually set LDFLAGS to ensure they are correct in the container
RUN VERSION=$(git describe --tags --always --dirty 2>/dev/null || echo "dev") && \
BUILD_TIME=$(date +%FT%T%z) && \
go build -ldflags "-X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}" -o picoclaw ./cmd/picoclaw
# Runtime stage
FROM alpine:latest
WORKDIR /app
# Install runtime dependencies
RUN apk add --no-cache ca-certificates tzdata
# Copy binary from builder
COPY --from=builder /app/picoclaw /usr/local/bin/picoclaw
# Copy builtin skills
COPY --from=builder /app/skills /app/skills
# Set environment variables
ENV PICOCLAW_HOME=/app/.picoclaw
# Create workspace directory
RUN mkdir -p /app/.picoclaw/workspace
# Set the entrypoint
ENTRYPOINT ["picoclaw"]
CMD ["gateway"]

28
cloudbuild.yaml Normal file
View file

@ -0,0 +1,28 @@
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: [
'build',
'-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE_NAME}:$COMMIT_SHA',
'-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE_NAME}:latest',
'.'
]
# Push the container image to Artifact Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE_NAME}:$COMMIT_SHA']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE_NAME}:latest']
images:
- '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE_NAME}:$COMMIT_SHA'
- '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE_NAME}:latest'
substitutions:
_LOCATION: us-central1
_REPOSITORY: picoclaw
_IMAGE_NAME: picoclaw
options:
logging: CLOUD_LOGGING_ONLY