Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.devin.ai/llms.txt

Use this file to discover all available pages before exploring further.

你无需编写 shell 脚本来安装工具,而是可以直接在蓝图的 initializemaintenance 部分引用 GitHub Actions。Devin 会在快照构建期间下载并运行该 action,方式与 GitHub 的 CI 运行器执行 action 步骤相同。 这对于 setup-pythonsetup-nodesetup-go 这类用于设置语言环境的 action 尤其有用,它们会自动处理版本管理和 PATH 配置。

语法

在蓝图的任意部分添加 uses 步骤:
initialize:
  - name: Install Python 3.12
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"
FieldTypeDescription
namestring (optional)在构建日志中显示的可读标签
usesstringGitHub Action 引用 (参见下方的格式)
withmap (optional)传递给该 Action 的输入参数
envmap (optional)该步骤的附加环境变量
一个步骤必须指定 run (shell 命令) uses (Action) ,二者不能同时指定。

操作引用格式

github.com/<owner>/<repo>@<ref>
github.com/<owner>/<repo>/<subpath>@<ref>
github.com/ 前缀和 @<ref> 后缀都必不可少。ref 通常是类似 v5 这样的版本标签。 示例:
Reference解析结果
github.com/actions/setup-python@v5标签 v5actions/setup-python
github.com/actions/setup-node@v4标签 v4actions/setup-node
github.com/gradle/actions/setup-gradle@v4gradle/actions repo、setup-gradle 子目录和标签 v4

传递输入

使用 with 字段向此 action 传入输入。所有值都会按字符串处理,与 GitHub Actions 的行为一致:
initialize:
  - uses: github.com/actions/setup-java@v4
    with:
      java-version: "21"
      distribution: "temurin"
始终在 with 的值中用引号括起版本号。YAML 会将未加引号的 3.10 解释为浮点数 3.1,这并不是你想要的结果。请改写为 python-version: "3.10"

设置环境变量

使用 env 字段设置仅作用于单个action步骤的环境变量:
initialize:
  - uses: github.com/actions/setup-node@v4
    with:
      node-version: "20"
    env:
      RUNNER_DEBUG: "1"
由某个action设置的环境变量 (通过 GITHUB_ENVGITHUB_PATH) 会自动传递到蓝图中的后续步骤。

示例

使用特定 Python 版本的项目

initialize:
  - name: Install Python 3.12
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"

maintenance: |
  pip install -r requirements.txt

knowledge:
  - name: test
    contents: pytest

多语言项目

initialize:
  - name: Install Node.js
    uses: github.com/actions/setup-node@v4
    with:
      node-version: "20"
  - name: Install Python
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"
  - name: Install Go
    uses: github.com/actions/setup-go@v5
    with:
      go-version: "1.22"

将操作与 shell 命令混合使用

操作和 shell 命令可以在同一部分中混合使用:
initialize:
  - name: Install Python
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"
  - name: Install project tools
    run: pip install ruff pytest
  - name: Install Node.js
    uses: github.com/actions/setup-node@v4
    with:
      node-version: "20"
  - name: Install frontend deps
    run: npm install -g pnpm

使用 Gradle 的 Java 项目

initialize:
  - name: Install JDK 21
    uses: github.com/actions/setup-java@v4
    with:
      java-version: "21"
      distribution: "temurin"
  - name: Install Gradle
    uses: github.com/gradle/actions/setup-gradle@v4

maintenance: |
  ./gradlew dependencies

knowledge:
  - name: build
    contents: ./gradlew build
  - name: test
    contents: ./gradlew test

Actions 与 shell 脚本

你不一定要使用 Actions——直接写 shell 命令也完全可行。只有在等效的 shell 脚本会很长或容易出错时,Actions 才更省事。
initialize:
  - uses: github.com/actions/setup-go@v5
    with:
      go-version: "1.23"

工作原理

当 Devin 在快照构建期间遇到 uses 步骤时:
  1. 下载 action 代码仓库 (在固定 ref 上进行浅克隆)
  2. 读取 action 的 action.yml 元数据,以确定运行时和入口点
  3. 构建包含 INPUT_*GITHUB_*RUNNER_* 变量的执行环境
  4. 运行 action 的 pre 步骤 (如果已定义) ,然后运行 main 入口点
  5. 传递副作用——action 写入 GITHUB_PATHGITHUB_ENV 的任何条目都会应用到后续的蓝图步骤中
Actions 在真实的 GitHub 工作流程之外运行。像 github.repository 这样的上下文变量会被填入占位值。需要实时访问 GitHub API 的 action (例如在 PR 上评论、创建发布) 在蓝图中将无法运行。

限制

  • 仅支持 Node.js Action — 仅支持使用 Node.js 运行时 (node16node20node24) 的 GitHub Actions。不支持基于 Docker 的 Action 和复合 Action。
  • 不支持 post 生命周期 — Devin 会运行 premain 步骤,但会跳过 post 清理步骤,因为构建是在一次性 VM 中运行的。
  • GitHub 上下文为占位内容 — 依赖 GitHub API 调用、工作流程事件数据或代码仓库上下文的 Action 可能无法正常工作,因为这些值在构建环境中只是占位内容。
  • 固定版本 — 始终引用特定版本标签 (例如 @v5) ,而不是分支名称,以确保构建可复现。