Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,12 @@ permissions:
contents: read

jobs:
workflow:
name: Workflow syntax
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Проверить GitHub Actions
run: docker run --rm -v "$GITHUB_WORKSPACE:/repo" -w /repo rhysd/actionlint:1.7.12 -color
docs:
uses: ./.github/workflows/reusable-docs.yml
11 changes: 11 additions & 0 deletions .github/workflows/reusable-container.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,14 @@ jobs:
subject-name: ghcr.io/${{ github.repository_owner }}/${{ inputs.image-name }}
subject-digest: ${{ steps.build.outputs.digest }}
push-to-registry: true
- name: Установить Cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@v4.0.0
with:
cosign-release: v3.1.3
- name: Подписать образ через GitHub OIDC
if: github.event_name != 'pull_request'
env:
IMAGE: ghcr.io/${{ github.repository_owner }}/${{ inputs.image-name }}
DIGEST: ${{ steps.build.outputs.digest }}
run: cosign sign --yes "${IMAGE}@${DIGEST}"
30 changes: 30 additions & 0 deletions .github/workflows/reusable-security.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Reusable security

on:
workflow_call:

permissions:
contents: read

jobs:
security:
name: Security
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Найти случайно добавленные секреты
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Проверить файлы и IaC
uses: aquasecurity/trivy-action@v0.36.0
with:
scan-type: fs
scan-ref: .
scanners: vuln,secret,misconfig
severity: CRITICAL,HIGH
ignore-unfixed: true
exit-code: "1"

6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.idea/
.vscode/
site/
.tmp-site/
*.log

4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
- шаблоны issue и pull request;
- общие CI/CD-процессы;
- единые правила документации и проверки репозиториев.
- шаблоны CI для Java, Python и Node;
- каркас обязательной документации нового сервиса.

Код сервисов здесь не хранится. Каждый сервис находится в своей репе.

Expand All @@ -19,6 +21,8 @@
- `profile/README.md` — главная страница организации.
- `docs/` — правила и устройство этого репозитория.
- `scripts/check-docs.ps1` — простая проверка обязательной документации.
- `workflow-templates/` — короткие CI-шаблоны с test, security, SBOM и подписью.
- `service-template/` — README, карточка сервиса, CODEOWNERS и правила AI-агентов.

## Проверка

Expand Down
10 changes: 10 additions & 0 deletions docs/service-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Шаблон нового сервиса

GitHub показывает workflow templates при создании Actions workflow. Для Java, Python и Node есть
отдельные короткие файлы, но результат одинаков: тесты, поиск секретов, Trivy, сборка контейнера,
SBOM, provenance и keyless-подпись Cosign.

Папка `service-template` содержит обязательную документацию. `SERVICE.md` — быстрый индекс границ
сервиса. Он не генерируется из кода, потому что ответственность сервиса — архитектурное решение.
Технические API следует генерировать из OpenAPI и AsyncAPI отдельно.

1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ nav:
- Главная: index.md
- Архитектура: architecture.md
- Разработка: development.md
- Шаблон сервиса: service-template.md
- Эксплуатация: runbook.md
- Решения:
- Документация как код: decisions/0001-docs-as-code.md
6 changes: 6 additions & 0 deletions service-template/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Правила для AI-агентов

Сначала прочитай `SERVICE.md`, README и открытые ADR. Не меняй границы сервиса без нового ADR.
Пиши тест до поведения. Используй простые английские имена. Не храни секреты, настоящие данные и
адреса окружений. Обновляй `SERVICE.md`, контракт и runbook в том же pull request.

3 changes: 3 additions & 0 deletions service-template/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* @portable-agent/backend
.github/ @portable-agent/platform

23 changes: 23 additions & 0 deletions service-template/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Название сервиса

Одним предложением: что сервис делает и чего он не делает.

## Ответственность

- принимает: укажи тип входа;
- возвращает: укажи результат;
- хранит: укажи свои данные;
- не отвечает за: укажи соседнюю область.

## Локальный запуск

Запиши одну команду запуска и одну команду всех проверок.

## API и события

Ссылки на OpenAPI/AsyncAPI. Изменение контракта сначала получает тест.

## Зависимости

Перечисли только прямые сервисы и инфраструктуру. Секреты и настоящие адреса не добавляй.

14 changes: 14 additions & 0 deletions service-template/SERVICE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Карточка сервиса

Этот файл — короткая память для людей и AI-агентов. Обновляй его при изменении границ сервиса.

| Поле | Значение |
|---|---|
| Ответственность | change-me |
| Владелец | portable-agent/change-me |
| Язык | change-me |
| Входящие контракты | change-me |
| Исходящие контракты | change-me |
| Свои данные | change-me |
| SLO | не определён до бизнес-обсуждения |

2 changes: 2 additions & 0 deletions workflow-templates/java-service.properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{"name":"Portable Agent Java service","description":"Тесты, security scan, container, SBOM и подпись для Java-сервиса.","iconName":"octicon package","categories":["Java"]}

23 changes: 23 additions & 0 deletions workflow-templates/java-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: CI
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
test:
uses: portable-agent/.github/.github/workflows/reusable-java.yml@main
security:
uses: portable-agent/.github/.github/workflows/reusable-security.yml@main
container:
needs: [test, security]
permissions:
contents: read
packages: write
id-token: write
attestations: write
uses: portable-agent/.github/.github/workflows/reusable-container.yml@main
with:
image-name: ${{ github.event.repository.name }}

2 changes: 2 additions & 0 deletions workflow-templates/node-service.properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{"name":"Portable Agent Node service","description":"Тесты, security scan, container, SBOM и подпись для Node-сервиса.","iconName":"octicon package","categories":["JavaScript","TypeScript"]}

23 changes: 23 additions & 0 deletions workflow-templates/node-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: CI
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
test:
uses: portable-agent/.github/.github/workflows/reusable-node.yml@main
security:
uses: portable-agent/.github/.github/workflows/reusable-security.yml@main
container:
needs: [test, security]
permissions:
contents: read
packages: write
id-token: write
attestations: write
uses: portable-agent/.github/.github/workflows/reusable-container.yml@main
with:
image-name: ${{ github.event.repository.name }}

2 changes: 2 additions & 0 deletions workflow-templates/python-service.properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{"name":"Portable Agent Python service","description":"Тесты, security scan, container, SBOM и подпись для Python-сервиса.","iconName":"octicon package","categories":["Python"]}

23 changes: 23 additions & 0 deletions workflow-templates/python-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: CI
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
test:
uses: portable-agent/.github/.github/workflows/reusable-python.yml@main
security:
uses: portable-agent/.github/.github/workflows/reusable-security.yml@main
container:
needs: [test, security]
permissions:
contents: read
packages: write
id-token: write
attestations: write
uses: portable-agent/.github/.github/workflows/reusable-container.yml@main
with:
image-name: ${{ github.event.repository.name }}

Loading