GitHub Actions 集成

Archyl 提供六个官方 GitHub Actions,将架构治理直接集成到您的 CI/CD 管道中。
| Action | 触发条件 | 用途 |
|---|---|---|
| Conformance Check | 拉取请求 | 根据架构规则验证代码变更 |
| Drift Score | 拉取请求 | 计算漂移评分并执行质量门禁 |
| Generate Context | 推送到 main | 为 AI Agent 生成 archyl.txt |
| Auto CR | 推送到 main | 合并时创建架构变更请求 |
| Release | 推送 / 标签 | 在 Archyl 中跟踪发布 |
| Sync | 推送到 main | 将 archyl.yaml DSL 同步到 Archyl |
所有 Actions 均发布在 archyl-com/actions,并以 @v1 进行版本管理。
前提条件
使用 Actions 之前,您需要:
- Archyl API 密钥 —— 前往 个人资料 > API 密钥 创建一个具有写入范围的密钥
- 组织 ID —— 可在组织设置页面中找到
- 项目 ID —— 可在项目的 URL 或设置页面中找到
- 将它们存储为 GitHub Secret 和变量:
Settings > Secrets > Actions:
ARCHYL_API_KEY # Your API key (secret)
Settings > Variables > Actions:
ARCHYL_ORG_ID # Organization UUID
ARCHYL_PROJECT_ID # Project UUID
快速开始
最快的上手方式是使用 Archyl 的可复用工作流:一个用于 PR,一个用于推送到 main 分支:
# .github/workflows/archyl.yml
name: Archyl Architecture
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
# Conformance check + drift score on PRs (run in parallel)
pr-checks:
if: github.event_name == 'pull_request'
uses: archyl-com/actions/.github/workflows/archyl-pr.yml@v1
with:
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
drift-threshold: 70
secrets:
api-key: ${{ secrets.ARCHYL_API_KEY }}
# Generate context + sync + release on merge to main
main-sync:
if: github.event_name == 'push'
uses: archyl-com/actions/.github/workflows/archyl-main.yml@v1
with:
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
sync: true
release: true
release-environment: 'production'
secrets:
api-key: ${{ secrets.ARCHYL_API_KEY }}
这为您提供了完整的架构治理闭环:合规规则验证每个 PR,漂移评分跟踪代码与模型的吻合程度,合并后模型会自动保持同步。
单个 Actions
Conformance Check
针对拉取请求中变更的文件运行您的合规规则。违规会以内联注释标出,并在 PR 中发布摘要评论。
- uses: archyl-com/actions/conformance-check@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
输入
| 输入 | 必需 | 默认值 | 描述 |
|---|---|---|---|
api-key |
是 | -- | 具有写入范围的 Archyl API 密钥 |
organization-id |
是 | -- | Archyl 组织 UUID |
project-id |
是 | -- | Archyl 项目 UUID |
api-url |
否 | https://api.archyl.com |
自定义 API URL(用于自托管) |
fail-on |
否 | error |
导致检查失败的最低严重级别:error、warning 或 none |
comment-on-pr |
否 | true |
在拉取请求上发布摘要评论 |
github-token |
否 | ${{ github.token }} |
用于 PR 评论的 GitHub 令牌 |
max-file-lines |
否 | 200 |
每个文件发送的最大行数(减少 token 用量) |
chunk-size |
否 | 20 |
每次 API 调用发送的文件数(适用于大型 diff) |
输出
| 输出 | 描述 |
|---|---|
check-id |
合规检查的 UUID |
total-violations |
发现的违规总数 |
errors |
error 级别的违规数量 |
warnings |
warning 级别的违规数量 |
infos |
info 级别的违规数量 |
status |
检查结果:pass 或 fail |
使用输出
- uses: archyl-com/actions/conformance-check@v1
id: conformance
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
fail-on: none # Don't fail, handle manually
- name: Custom handling
if: steps.conformance.outputs.status == 'fail'
run: |
echo "Found ${{ steps.conformance.outputs.total-violations }} violations"
echo "Errors: ${{ steps.conformance.outputs.errors }}"
echo "Warnings: ${{ steps.conformance.outputs.warnings }}"
Drift Score
计算架构漂移评分,即您的代码库与 C4 模型的吻合程度。还可以选择执行质量门禁:当评分低于阈值时使构建失败。
- uses: archyl-com/actions/drift-score@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
threshold: 70
输入
| 输入 | 必需 | 默认值 | 描述 |
|---|---|---|---|
api-key |
是 | -- | 具有写入范围的 Archyl API 密钥 |
organization-id |
是 | -- | Archyl 组织 UUID |
project-id |
是 | -- | Archyl 项目 UUID |
api-url |
否 | https://api.archyl.com |
自定义 API URL(用于自托管) |
threshold |
否 | 0 |
可接受的最低漂移评分(0-100)。评分低于该值时失败。设为 0 则永不失败。 |
poll-interval |
否 | 5 |
等待计算期间两次状态轮询之间的秒数 |
poll-timeout |
否 | 300 |
等待计算完成的最长秒数 |
comment-on-pr |
否 | false |
在拉取请求上发布摘要评论 |
github-token |
否 | ${{ github.token }} |
用于 PR 评论的 GitHub 令牌 |
输出
| 输出 | 描述 |
|---|---|
score |
漂移评分(0-100) |
score-id |
漂移评分记录的 UUID |
total-elements |
参与比对的元素总数 |
matched-count |
匹配的元素数量 |
missing-in-code |
代码中缺失的元素数量 |
new-in-code |
在代码中新发现的元素数量 |
status |
计算状态:completed 或 failed |
Generate Context
生成包含您架构上下文的 archyl.txt 文件,针对 AI Agent 和 LLM 进行了优化。文件发生变化时可自动提交。
- uses: archyl-com/actions/generate-context@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
commit: 'true'
输入
| 输入 | 必需 | 默认值 | 描述 |
|---|---|---|---|
api-key |
是 | -- | 具有读取范围的 Archyl API 密钥 |
organization-id |
是 | -- | Archyl 组织 UUID |
project-id |
是 | -- | Archyl 项目 UUID |
api-url |
否 | https://api.archyl.com |
自定义 API URL(用于自托管) |
output-file |
否 | archyl.txt |
生成的上下文文件的写入路径 |
format |
否 | markdown |
输出格式:markdown 为针对 LLM 优化的简报,full 为结构化 JSON + markdown |
commit |
否 | false |
生成的文件有变化时自动提交 |
commit-message |
否 | chore: update archyl.txt architecture context |
自动提交时使用的提交信息 |
输出
| 输出 | 描述 |
|---|---|
file-path |
生成的上下文文件路径 |
changed |
文件内容是否发生变化(true 或 false) |
token-count |
生成文件的大致 token 数 |
Auto CR
代码合并到 main 时,自动在 Archyl 中创建架构变更请求。它会分析 diff,识别与架构相关的变更,并跟踪这些变更以供评审。
- uses: archyl-com/actions/auto-cr@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
输入
| 输入 | 必需 | 默认值 | 描述 |
|---|---|---|---|
api-key |
是 | -- | 具有写入范围的 Archyl API 密钥 |
organization-id |
是 | -- | Archyl 组织 UUID |
project-id |
是 | -- | Archyl 项目 UUID |
api-url |
否 | https://api.archyl.com |
自定义 API URL(用于自托管) |
github-token |
否 | ${{ github.token }} |
用于提交评论和访问 diff 的 GitHub 令牌 |
base-ref |
否 | (自动检测) | 用于比较的基准 ref |
comment-on-commit |
否 | false |
在合并提交上发布附带变更请求链接的评论 |
输出
| 输出 | 描述 |
|---|---|
request-id |
所创建变更请求的 UUID |
changes-detected |
发现的与架构相关的变更数量 |
status |
created、skipped(无变更)或 failed |
Release
从您的 CI 管道在 Archyl 中创建或更新发布。跟踪部署,将其与环境和 C4 元素关联,并为您的 DORA 指标提供数据。
- uses: archyl-com/actions/release@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
status: deployed
environment: production
输入
| 输入 | 必需 | 默认值 | 描述 |
|---|---|---|---|
api-key |
是 | -- | 具有写入范围的 Archyl API 密钥 |
project-id |
是 | -- | Archyl 项目 UUID |
api-url |
否 | https://api.archyl.com |
自定义 API URL(用于自托管) |
version |
否 | $GITHUB_REF_NAME |
发布版本 |
status |
否 | deployed |
发布状态:planned、in_progress、deployed、rolled_back、failed |
changelog |
否 | -- | 发布的变更日志或描述 |
environment |
否 | -- | 目标环境名称(例如 production、staging)。不存在时自动创建。 |
container-id |
否 | -- | 与此发布关联的 Archyl 容器 UUID |
system-id |
否 | -- | 与此发布关联的 Archyl 系统 UUID |
source-url |
否 | -- | 指回来源的 URL(提交、发布页面等) |
输出
| 输出 | 描述 |
|---|---|
release-id |
所创建或更新的发布的 UUID |
Sync
将您的 archyl.yaml DSL 文件同步到 Archyl。以代码形式声明您的架构,并在每次提交时推送变更。
- uses: archyl-com/actions/sync@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
输入
| 输入 | 必需 | 默认值 | 描述 |
|---|---|---|---|
api-key |
是 | -- | 具有写入范围的 Archyl API 密钥 |
project-id |
是 | -- | Archyl 项目 UUID |
api-url |
否 | https://api.archyl.com |
自定义 API URL(用于自托管) |
file |
否 | archyl.yaml |
archyl.yaml 文件相对于代码仓库根目录的路径 |
输出
| 输出 | 描述 |
|---|---|
systems-created |
创建的系统数量 |
containers-created |
创建的容器数量 |
components-created |
创建的组件数量 |
relationships-created |
创建的关系数量 |
summary |
便于阅读的同步结果摘要 |
可复用工作流
Archyl 提供两个可复用工作流,将多个 Actions 组合起来,覆盖常见场景。
archyl-pr.yml
在每个拉取请求上并行运行合规检查和漂移评分。
jobs:
archyl:
uses: archyl-com/actions/.github/workflows/archyl-pr.yml@v1
with:
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
drift-threshold: 70 # Fail if drift score drops below 70
fail-on: error # Fail on error-level conformance violations
comment-on-pr: true # Post PR comments with results
secrets:
api-key: ${{ secrets.ARCHYL_API_KEY }}
除 organization-id、project-id 和 api-key 外,所有输入均为可选。
archyl-main.yml
推送到 main 时运行 generate-context、sync 和 release。每个任务都可以单独开启或关闭。
jobs:
archyl:
uses: archyl-com/actions/.github/workflows/archyl-main.yml@v1
with:
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
generate-context: true # Generate and auto-commit archyl.txt
context-format: markdown # LLM-optimized format
sync: true # Sync archyl.yaml to Archyl
sync-file: archyl.yaml # Path to your archyl.yaml
release: true # Create a release record
release-status: deployed
release-environment: production
secrets:
api-key: ${{ secrets.ARCHYL_API_KEY }}
其他 CI 平台
GitLab CI
Archyl 为 GitLab 提供了一个可引入的 CI 模板。它会在合并请求上运行合规检查和漂移评分,并在推送到默认分支时生成上下文。
设置:
在 Settings > CI/CD > Variables 中添加所需的 CI/CD 变量:
ARCHYL_API_KEY(masked、protected)ARCHYL_ORG_IDARCHYL_PROJECT_ID
在您的
.gitlab-ci.yml中引入该模板:
include:
- remote: 'https://raw.githubusercontent.com/archyl-com/actions/main/ci-templates/gitlab/.archyl-ci.yml'
这会向您的管道添加三个任务:
archyl:conformance—— 在合并请求上运行archyl:drift-score—— 在合并请求上运行archyl:generate-context—— 在推送到默认分支时运行
可选变量:ARCHYL_API_URL、ARCHYL_DRIFT_THRESHOLD。
Bitbucket Pipelines
将 Archyl 管道模板复制到您的 bitbucket-pipelines.yml 中。
设置:
在 Settings > Repository variables 中添加所需的代码仓库变量:
ARCHYL_API_KEY(secured)ARCHYL_ORG_IDARCHYL_PROJECT_ID
添加管道步骤:
pipelines:
pull-requests:
'**':
- step:
name: "Archyl Conformance Check"
image: alpine:3.20
script:
- apk add --no-cache curl jq git
- # ... conformance check script
- step:
name: "Archyl Drift Score"
image: alpine:3.20
script:
- apk add --no-cache curl jq
- # ... drift score script
branches:
main:
- step:
name: "Archyl Generate Context"
image: alpine:3.20
script:
- apk add --no-cache curl jq git
- # ... generate context script
完整模板位于 archyl-com/actions/ci-templates/bitbucket/archyl-pipelines.yml。
组合示例
一个同时使用全部六个 Actions 的完整工作流:
# .github/workflows/architecture.yml
name: Archyl Architecture
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
# --- PR checks (parallel) ---
conformance:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: archyl-com/actions/conformance-check@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
drift:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: archyl-com/actions/drift-score@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
threshold: 70
comment-on-pr: 'true'
# --- Main branch (after merge) ---
generate-context:
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: archyl-com/actions/generate-context@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
commit: 'true'
sync:
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: archyl-com/actions/sync@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
auto-cr:
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: archyl-com/actions/auto-cr@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
release:
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: archyl-com/actions/release@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
status: deployed
environment: production
source-url: ${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}
查看结果
所有由 CI 触发的检查结果都会显示在 Archyl 中:
- 合规检查 —— 显示在合规仪表板中(代理中心 > 仪表板 选项卡)。点击任一检查即可查看按文件分组的违规。
- 漂移评分 —— 显示在项目的漂移部分。可跟踪评分随时间变化的历史。
- 变更请求 —— 显示在请求部分。在接受架构变更之前先进行评审。
- 发布 —— 显示在发布部分和环境页面。为您的 DORA 指标提供数据。
- 同步结果 —— 立即反映在您的 C4 模型中。
有关合规仪表板的更多详情,请参阅合规规则。
自托管 Archyl
如果您在本地部署 Archyl,请在任一 Action 上设置 api-url 输入,使其指向您的实例:
- uses: archyl-com/actions/conformance-check@v1
with:
api-key: ${{ secrets.ARCHYL_API_KEY }}
organization-id: ${{ vars.ARCHYL_ORG_ID }}
project-id: ${{ vars.ARCHYL_PROJECT_ID }}
api-url: "https://archyl.internal.company.com"
所有 Actions 的默认值均为 https://api.archyl.com。