GitHub Actions 통합

Archyl은 아키텍처 거버넌스를 CI/CD 파이프라인에 직접 통합하는 여섯 가지 공식 GitHub Actions를 제공합니다.
| Action | 트리거 | 목적 |
|---|---|---|
| Conformance Check | 풀 리퀘스트 | 아키텍처 규칙에 대해 코드 변경 검증 |
| Drift Score | 풀 리퀘스트 | 드리프트 점수 계산 및 품질 게이트 적용 |
| Generate Context | main으로 푸시 | AI 에이전트용 archyl.txt 생성 |
| Auto CR | main으로 푸시 | 머지 시 아키텍처 변경 요청 생성 |
| Release | 푸시 / 태그 | Archyl에서 릴리스 추적 |
| Sync | main으로 푸시 | archyl.yaml DSL을 Archyl에 동기화 |
모든 Action은 archyl-com/actions에 게시되며 @v1로 버전이 관리됩니다.
사전 요구사항
Actions를 사용하기 전에 다음이 필요합니다:
- Archyl API 키 — 프로필 > API 키에서 쓰기 범위의 키를 생성합니다
- 조직 ID — 조직 설정 페이지에서 확인할 수 있습니다
- 프로젝트 ID — 프로젝트 URL 또는 설정 페이지에서 확인할 수 있습니다
- 이 값들을 GitHub 시크릿과 변수로 저장합니다:
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 |
파일당 전송할 최대 줄 수 (토큰 사용량 절감) |
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
AI 에이전트와 LLM에 최적화된 아키텍처 컨텍스트를 담은 archyl.txt 파일을 생성합니다. 파일이 변경되면 자동으로 커밋할 수 있습니다.
- 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 |
출력 형식: LLM에 최적화된 브리핑은 markdown, 구조화된 JSON + 마크다운은 full |
commit |
아니오 | false |
생성된 파일이 변경되면 자동 커밋 |
commit-message |
아니오 | chore: update archyl.txt architecture context |
자동 커밋 시 사용할 커밋 메시지 |
출력
| 출력 | 설명 |
|---|---|
file-path |
생성된 컨텍스트 파일 경로 |
changed |
파일 내용 변경 여부 (true 또는 false) |
token-count |
생성된 파일의 대략적인 토큰 수 |
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 |
아니오 | (자동 감지) | 비교 기준이 되는 base 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은 자주 쓰는 시나리오에 맞춰 여러 Action을 묶은 두 가지 재사용 가능한 워크플로우를 제공합니다.
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를 실행합니다. 각 job은 개별적으로 켜고 끌 수 있습니다.
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에서 include해 쓸 수 있는 CI 템플릿을 제공합니다. 머지 리퀘스트에서는 적합성 검사와 드리프트 점수를 실행하고, 기본 브랜치로 푸시할 때는 컨텍스트를 생성합니다.
설정:
Settings > CI/CD > Variables에서 필요한 CI/CD 변수를 추가합니다:
ARCHYL_API_KEY(masked, protected로 설정)ARCHYL_ORG_IDARCHYL_PROJECT_ID
.gitlab-ci.yml에 템플릿을 include합니다:
include:
- remote: 'https://raw.githubusercontent.com/archyl-com/actions/main/ci-templates/gitlab/.archyl-ci.yml'
이렇게 하면 파이프라인에 세 개의 job이 추가됩니다:
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에서 확인할 수 있습니다.
결합 예제
여섯 가지 Action을 모두 함께 사용하는 전체 워크플로우입니다:
# .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"
모든 Action의 기본값은 https://api.archyl.com입니다.