|
1 | 1 | # Actions |
2 | | -# Composite actions for TerraFirmaGreg repos |
| 2 | +# Composite actions for TerraFirmaGreg |
3 | 3 |
|
4 | | -## Общая информация |
5 | | -Репозиторий содержит набор **composite actions** для сборки и релизов модпака `TerraFirmaGreg`. Каждое действие подключается на уровне шага (`uses`) внутри job целевого workflow. |
| 4 | +## Обзор |
| 5 | +Пакет готовых **composite actions** для автоматизации жизненного цикла модпака `TerraFirmaGreg`. Набор покрывает сборку, публикацию, создание PR и уведомления. Действия вызываются напрямую внутри job, обеспечивая единообразие между репозиториями модпаков. |
6 | 6 |
|
| 7 | +## Структура |
| 8 | +- `info/` — подготовка метаданных релиза (версия, changelog, diff). |
| 9 | +- `build/` — сборка артефактов (CurseForge, Modrinth, Serverpack, MultiMC). |
| 10 | +- `release/` — публикация на GitHub/CurseForge/Modrinth, закрытие задач. |
| 11 | +- `create-pr/` — создание релизного PR. |
| 12 | +- `message/` — отправка уведомления в Discord. |
| 13 | +- `tests/` — фикстуры для smoke-тестов. |
| 14 | +- `.github/workflows/ci.yml` — линтинг и smoke-тесты. |
| 15 | +- `.github/workflows/release.yml` — автогенерация релизов. |
| 16 | + |
| 17 | +## Сводка действий |
| 18 | +| Action | Назначение | Основные входы | Ключевые выходы | |
| 19 | +| --- | --- | --- | --- | |
| 20 | +| `info` | Подготовка метаданных, changelog, diff | `stable_branch`, `dev_branch`, `pakku_diff_enabled` | `project_*`, `changelog`, `diff`, `make_release`, `make_pr` | |
| 21 | +| `build` | Экспорт и упаковка артефактов | `project_*`, флаги `artifact_*` | `curseforge_name`, `modrinth_name`, `server_name`, `multimc_name` | |
| 22 | +| `release` | Публикация релиза и закрытие задач | `project_full_name`, `project_version`, `enable_release_*` | `github_release_url`, `curseforge_file_id`, `modrinth_release_id` | |
| 23 | +| `create-pr` | Создание релизного PR | `project_*`, `changelog` | `pr_number`, `pr_url` | |
| 24 | +| `message` | Discord уведомление | `webhook_secret`, `content` | – | |
| 25 | + |
| 26 | +## Базовое использование |
7 | 27 | ```yaml |
8 | 28 | jobs: |
9 | | - job-id: |
| 29 | + info: |
10 | 30 | runs-on: ubuntu-latest |
| 31 | + outputs: |
| 32 | + project_name: ${{ steps.collect.outputs.project_name }} |
| 33 | + project_version: ${{ steps.collect.outputs.project_version }} |
| 34 | + project_full_name: ${{ steps.collect.outputs.project_full_name }} |
| 35 | + release_type: ${{ steps.collect.outputs.release_type }} |
| 36 | + mc_version: ${{ steps.collect.outputs.mc_version }} |
| 37 | + changelog: ${{ steps.collect.outputs.changelog }} |
| 38 | + diff: ${{ steps.collect.outputs.diff }} |
| 39 | + make_release: ${{ steps.collect.outputs.make_release }} |
| 40 | + make_pr: ${{ steps.collect.outputs.make_pr }} |
11 | 41 | steps: |
12 | | - - name: Run action |
13 | | - id: step-id |
14 | | - uses: TerraFirmaGreg-Team/Actions/<action>@v1 |
| 42 | + - name: 🖥️ Collect info |
| 43 | + id: collect |
| 44 | + uses: TerraFirmaGreg-Team/Actions/info@1.0.0 |
15 | 45 | with: |
16 | | - # входные параметры |
17 | | - env: |
18 | | - # дополнительные переменные, если нужны |
19 | | -``` |
| 46 | + stable_branch: main |
| 47 | + dev_branch: dev |
20 | 48 |
|
21 | | -### `info` |
22 | | -- **Назначение**: Сбор метаданных модпака, подготовка changelog, diff, определение необходимости релиза и PR. |
23 | | -- **Входы**: `stable_branch`, `dev_branch`, `changelog_path`, `changelog_unreleased_label`, `pakku_diff_enabled`. |
24 | | -- **Выходы**: `project_*`, `release_type`, `mc_version`, `loader_*`, `changelog`, `diff`, `tag_exists`, `make_release`, `make_pr`. |
25 | | -- **Пример**: |
26 | | - ```yaml |
27 | | - jobs: |
28 | | - info: |
29 | | - runs-on: ubuntu-latest |
30 | | - outputs: |
31 | | - project_name: ${{ steps.collect.outputs.project_name }} |
32 | | - project_version: ${{ steps.collect.outputs.project_version }} |
33 | | - project_full_name: ${{ steps.collect.outputs.project_full_name }} |
34 | | - release_type: ${{ steps.collect.outputs.release_type }} |
35 | | - mc_version: ${{ steps.collect.outputs.mc_version }} |
36 | | - changelog: ${{ steps.collect.outputs.changelog }} |
37 | | - diff: ${{ steps.collect.outputs.diff }} |
38 | | - make_release: ${{ steps.collect.outputs.make_release }} |
39 | | - make_pr: ${{ steps.collect.outputs.make_pr }} |
40 | | - steps: |
41 | | - - name: Collect info |
42 | | - id: collect |
43 | | - uses: TerraFirmaGreg-Team/Actions/info@v1 |
44 | | - with: |
45 | | - stable_branch: main |
46 | | - dev_branch: dev |
47 | | - ``` |
| 49 | + build: |
| 50 | + needs: info |
| 51 | + runs-on: ubuntu-latest |
| 52 | + steps: |
| 53 | + - uses: TerraFirmaGreg-Team/Actions/build@1.0.0 |
| 54 | + with: |
| 55 | + project_name: ${{ needs.info.outputs.project_name }} |
| 56 | + project_version: ${{ needs.info.outputs.project_version }} |
| 57 | + project_full_name: ${{ needs.info.outputs.project_full_name }} |
48 | 58 |
|
49 | | -### `create-pr` |
50 | | -- **Назначение**: Создание релизного PR. |
51 | | -- **Входы**: `enabled`, `source_branch`, `target_branch`, `project_*`, `changelog`, шаблоны заголовка/тела. |
52 | | -- **Выходы**: `pr_number`, `pr_url`. **Секреты**: `GITHUB_TOKEN`. |
53 | | -- **Пример**: |
54 | | - ```yaml |
55 | | - jobs: |
56 | | - create_pr: |
57 | | - needs: info |
58 | | - if: needs.info.outputs.make_pr == 'true' |
59 | | - runs-on: ubuntu-latest |
60 | | - steps: |
61 | | - - uses: TerraFirmaGreg-Team/Actions/create-pr@v1 |
62 | | - with: |
63 | | - project_name: ${{ needs.info.outputs.project_name }} |
64 | | - project_version: ${{ needs.info.outputs.project_version }} |
65 | | - project_full_name: ${{ needs.info.outputs.project_full_name }} |
66 | | - changelog: ${{ needs.info.outputs.changelog }} |
67 | | - env: |
68 | | - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
69 | | - ``` |
| 59 | + release: |
| 60 | + needs: [info, build] |
| 61 | + if: needs.info.outputs.make_release == 'true' |
| 62 | + runs-on: ubuntu-latest |
| 63 | + steps: |
| 64 | + - uses: TerraFirmaGreg-Team/Actions/release@1.0.0 |
| 65 | + with: |
| 66 | + project_full_name: ${{ needs.info.outputs.project_full_name }} |
| 67 | + project_version: ${{ needs.info.outputs.project_version }} |
| 68 | + release_type: ${{ needs.info.outputs.release_type }} |
| 69 | + changelog: ${{ needs.info.outputs.changelog }} |
| 70 | + diff: ${{ needs.info.outputs.diff }} |
| 71 | + mc_version: ${{ needs.info.outputs.mc_version }} |
| 72 | + env: |
| 73 | + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 74 | + CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }} |
| 75 | + MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} |
70 | 76 |
|
71 | | -### `build` |
72 | | -- **Назначение**: Экспорт артефактов (CurseForge, Modrinth, serverpack, MultiMC). |
73 | | -- **Входы**: `project_*`, `release_type`, флаги `artifact_*`, `apply_version_overrides`, `pakku_arguments`. |
74 | | -- **Выходы**: `curseforge_name`, `modrinth_name`, `server_name`, `multimc_name`. |
75 | | -- **Пример**: |
76 | | - ```yaml |
77 | | - jobs: |
78 | | - build: |
79 | | - needs: info |
80 | | - runs-on: ubuntu-latest |
81 | | - steps: |
82 | | - - uses: TerraFirmaGreg-Team/Actions/build@v1 |
83 | | - with: |
84 | | - project_name: ${{ needs.info.outputs.project_name }} |
85 | | - project_version: ${{ needs.info.outputs.project_version }} |
86 | | - project_full_name: ${{ needs.info.outputs.project_full_name }} |
87 | | - ``` |
| 77 | + message: |
| 78 | + needs: [info, release] |
| 79 | + if: needs.info.outputs.make_release == 'true' |
| 80 | + runs-on: ubuntu-latest |
| 81 | + steps: |
| 82 | + - uses: TerraFirmaGreg-Team/Actions/message@1.0.0 |
| 83 | + with: |
| 84 | + webhook_secret: DISCORD_RELEASES |
| 85 | + content: | |
| 86 | + **Release**: `${{ needs.info.outputs.project_version }}` |
| 87 | + **Game Version**: `${{ needs.info.outputs.mc_version }}` |
| 88 | + mention_role_id: ${{ vars.DISCORD_ROLE_RELEASE }} |
| 89 | +``` |
88 | 90 |
|
89 | | -### `release` |
90 | | -- **Назначение**: Публикация релиза на GitHub, CurseForge, Modrinth, закрытие задач. |
91 | | -- **Входы**: `enabled`, `project_full_name`, `project_version`, `release_type`, `changelog`, `diff`, `mc_version`, флаги публикаций и дополнительные параметры. |
92 | | -- **Выходы**: `github_release_url`, `curseforge_file_id`, `modrinth_release_id`. |
93 | | -- **Секреты / Vars**: `GITHUB_TOKEN`, `CURSEFORGE_TOKEN`, `vars.CURSEFORGE_ID`, `MODRINTH_TOKEN`. |
94 | | -- **Пример**: |
95 | | - ```yaml |
96 | | - jobs: |
97 | | - release: |
98 | | - needs: [info, build] |
99 | | - if: needs.info.outputs.make_release == 'true' |
100 | | - runs-on: ubuntu-latest |
101 | | - steps: |
102 | | - - uses: TerraFirmaGreg-Team/Actions/release@v1 |
103 | | - with: |
104 | | - project_full_name: ${{ needs.info.outputs.project_full_name }} |
105 | | - project_version: ${{ needs.info.outputs.project_version }} |
106 | | - release_type: ${{ needs.info.outputs.release_type }} |
107 | | - changelog: ${{ needs.info.outputs.changelog }} |
108 | | - diff: ${{ needs.info.outputs.diff }} |
109 | | - mc_version: ${{ needs.info.outputs.mc_version }} |
110 | | - env: |
111 | | - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
112 | | - CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }} |
113 | | - MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} |
| 91 | +## Релизы |
| 92 | +- Workflow `release.yml` автоматически создаёт GitHub Release при изменениях в директориях action-ов и документации. |
| 93 | +- Версионирование — семантическое, теги формата `1.0.0`. |
| 94 | +- Для ручного тега: |
| 95 | + ```bash |
| 96 | + git tag 1.0.0 |
| 97 | + git push origin 1.0.0 |
114 | 98 | ``` |
| 99 | +- Для ручного запуска релизного workflow используйте `workflow_dispatch` с ветки `main`. |
| 100 | +- После релиза обновите внешние репозитории: |
| 101 | + - `info` → `TerraFirmaGreg-Team/Actions/info@1.0.0` |
| 102 | + - `build` → `TerraFirmaGreg-Team/Actions/build@1.0.0` |
| 103 | + - `release` → `TerraFirmaGreg-Team/Actions/release@1.0.0` |
| 104 | + - `create-pr` → `TerraFirmaGreg-Team/Actions/create-pr@1.0.0` |
| 105 | + - `message` → `TerraFirmaGreg-Team/Actions/message@1.0.0` |
115 | 106 |
|
116 | | -### `message` |
117 | | -- **Назначение**: Отправка уведомления в Discord. |
118 | | -- **Входы**: `enabled`, `webhook_secret`, `username`, `avatar_url`, `content`, `embed_title`, `embed_description`, `mention_role_id`, `truncate_length`. |
119 | | -- **Выходы**: отсутствуют. **Секреты**: `secrets[inputs.webhook_secret]`. |
120 | | -- **Пример**: |
121 | | - ```yaml |
122 | | - jobs: |
123 | | - message: |
124 | | - needs: [info, release] |
125 | | - if: needs.info.outputs.make_release == 'true' |
126 | | - runs-on: ubuntu-latest |
127 | | - steps: |
128 | | - - uses: TerraFirmaGreg-Team/Actions/message@v1 |
129 | | - with: |
130 | | - webhook_secret: DISCORD_RELEASES |
131 | | - content: | |
132 | | - **Release**: `${{ needs.info.outputs.project_version }}` |
133 | | - **Game Version**: `${{ needs.info.outputs.mc_version }}` |
134 | | - mention_role_id: ${{ vars.DISCORD_ROLE_RELEASE }} |
135 | | - ``` |
| 107 | +## Документация по действиям |
| 108 | +Подробности (включая примеры и таблицы входов/выходов) находятся в файлах: |
| 109 | +- `info/README.md` |
| 110 | +- `build/README.md` |
| 111 | +- `release/README.md` |
| 112 | +- `create-pr/README.md` |
| 113 | +- `message/README.md` |
0 commit comments