You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GitHub Codespace配置关闭钩子以清理Postgres.ai快照?

在GitHub Codespaces删除前触发清理Postgres.ai快照的方案

关于devcontainer.json的shutdownAction

你说得对,shutdownAction确实不满足需求——它仅控制Codespace停止时的容器状态(暂停或删除),无法触发自定义的清理脚本。

两种可行的实现方案

方案1:利用Dev Container的生命周期脚本

在devcontainer.json中配置postStopCommand,这个命令会在容器停止时自动执行,而Codespace删除前会先停止容器,因此可以借此触发清理逻辑:

{
  "postStopCommand": "./scripts/cleanup-postgres-snapshot.sh"
}
  • 编写cleanup-postgres-snapshot.sh脚本,实现Postgres.ai快照的删除逻辑,建议用环境变量CODESPACE_NAME关联当前Codespace专属的快照(创建快照时就用这个命名)。
  • 确保脚本有执行权限(可以在postCreateCommand里加chmod +x ./scripts/cleanup-postgres-snapshot.sh)。
  • 注意:如果用户直接强制删除Codespace(未先停止容器),这个脚本可能不会执行,需要结合方案2做兜底。

方案2:通过GitHub Workflow监听删除事件

配置GitHub Actions工作流,监听codespace_delete事件,一旦Codespace被删除就自动触发清理:

name: Cleanup Postgres.ai Snapshot
on:
  codespace_delete:

jobs:
  cleanup:
    runs-on: ubuntu-latest
    steps:
      - name: Delete Codespace-specific Snapshot
        env:
          CODESPACE_NAME: ${{ github.event.codespace.name }}
          POSTGRES_AI_TOKEN: ${{ secrets.POSTGRES_AI_TOKEN }}
        run: |
          # 替换为实际的Postgres.ai API调用逻辑
          curl -X DELETE "https://api.postgres.ai/v1/snapshots?name=${CODESPACE_NAME}" \
            -H "Authorization: Bearer ${POSTGRES_AI_TOKEN}"
  • 优势:无论用户通过哪种方式删除Codespace,只要事件触发就能执行清理。
  • 注意事项:将Postgres.ai的访问令牌存入仓库Secrets(POSTGRES_AI_TOKEN),确保快照命名与CODESPACE_NAME一致,以便精准定位删除。

建议组合使用

优先用方案1做实时清理(容器停止时触发),再用方案2做兜底(覆盖强制删除场景),这样能最大限度保证快照被及时清理。

内容的提问来源于stack exchange,提问作者tftd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:52:10