-
-
Notifications
You must be signed in to change notification settings - Fork 0
188 lines (168 loc) · 7.84 KB
/
release.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
name: Выпуск
on:
workflow_dispatch:
inputs:
release_type:
description: 'Ветка выпуска'
required: true
default: 'beta'
type: choice
options:
- 'beta'
- 'release'
pull_request:
paths:
- 'ru-ru/**'
push:
paths:
- 'ru-ru/**'
env:
REPO_NAME: ${{ github.repository }}
BASE_DIR: ru-ru
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Клонирование репозитория
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Установка ветки выпуска
id: set-release-type
run: |
if [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" == "refs/heads/main" ]]; then
echo "release_type=beta" >> $GITHUB_ENV
echo "Event: Push to main branch. Set release_type to beta."
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "release_type=${{ github.event.inputs.release_type }}" >> $GITHUB_ENV
echo "Event: Workflow dispatch. Set release_type to ${{ github.event.inputs.release_type }}."
else
echo "release_type=release" >> $GITHUB_ENV
echo "Event: Other. Set release_type to release."
fi
- name: Определение следующей релизной версии
id: determine-next-release
run: |
last_release_tag=$(git tag --list | grep -E '^[0-9]+$' | sort -V | tail -n 1)
if [ -z "$last_release_tag" ]; then
echo "last_release_tag не найден. Используем 0."
last_release_tag=0
fi
next_release_number=$((last_release_tag + 1))
echo "next_release_number=$next_release_number" >> $GITHUB_ENV
echo "Следующий номер релизной версии: $next_release_number"
- name: Определение следующего тега
id: determine-tag
run: |
if [[ "${{ env.release_type }}" == "beta" ]]; then
base_release_number=${{ env.next_release_number }}
# Поиск существующих бета-тегов для базовой релизной версии
existing_beta_tags=$(git tag --list "${base_release_number}-B*" )
if [ -z "$existing_beta_tags" ]; then
beta_number=1
else
max_beta=$(echo "$existing_beta_tags" | sed -E "s/${base_release_number}-B([0-9]+)/\1/" | sort -n | tail -n1)
beta_number=$((max_beta + 1))
fi
next_tag="${base_release_number}-B${beta_number}"
echo "next_tag=${next_tag}" >> $GITHUB_ENV
echo "Следующий тег для бета-выпуска: $next_tag"
else
next_tag="${{ env.next_release_number }}"
echo "next_tag=${next_tag}" >> $GITHUB_ENV
echo "Следующий тег для релизного выпуска: $next_tag"
fi
- name: Проверка существующего выпуска с таким тегом
id: check-release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
tag="${{ env.next_tag }}"
echo "Проверка существования релиза с тегом: $tag"
release_exists=$(gh release view "$tag" --json tagName --jq '.tagName' || echo "not_found")
if [[ "$release_exists" != "not_found" ]]; then
echo "Релиз с тегом $release_exists уже существует. Увеличиваем тег."
if [[ "${{ env.release_type }}" == "beta" ]]; then
IFS='-' read -r base release_num <<< "$tag"
beta_num=$(echo "$release_num" | sed -E "s/B([0-9]+)/\1/")
new_beta_num=$((beta_num + 1))
new_tag="${base}-B${new_beta_num}"
echo "new_tag=${new_tag}" >> $GITHUB_ENV
echo "Новый тег после увеличения: $new_tag"
else
new_tag=$((tag + 1))
echo "new_tag=${new_tag}" >> $GITHUB_ENV
echo "Новый тег после увеличения: $new_tag"
fi
else
echo "Релиз с тегом $tag не найден."
fi
- name: Повторная проверка существования после увеличения тега
if: env.new_tag != ''
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
tag="${{ env.new_tag }}"
echo "Повторная проверка релиза с тегом: $tag"
release_exists=$(gh release view "$tag" --json tagName --jq '.tagName' || echo "not_found")
if [[ "$release_exists" != "not_found" ]]; then
echo "Релиз с тегом $release_exists уже существует. Увеличиваем тег снова."
if [[ "${{ env.release_type }}" == "beta" ]]; then
IFS='-' read -r base release_num <<< "$tag"
beta_num=$(echo "$release_num" | sed -E "s/B([0-9]+)/\1/")
new_beta_num=$((beta_num + 1))
new_tag="${base}-B${new_beta_num}"
echo "new_tag=${new_tag}" >> $GITHUB_ENV
echo "Новый тег после повторного увеличения: $new_tag"
else
new_tag=$((tag + 1))
echo "new_tag=${new_tag}" >> $GITHUB_ENV
echo "Новый тег после повторного увеличения: $new_tag"
fi
else
echo "Релиз с тегом $tag не найден после увеличения."
fi
- name: Установка окончательного тега
run: |
if [ -n "${{ env.new_tag }}" ]; then
echo "Используем тег: ${{ env.new_tag }}"
echo "final_tag=${{ env.new_tag }}" >> $GITHUB_ENV
else
echo "Используем тег: ${{ env.next_tag }}"
echo "final_tag=${{ env.next_tag }}" >> $GITHUB_ENV
fi
- name: Формирование названия релиза
id: release-name
run: |
if [[ "${{ env.release_type }}" == "beta" ]]; then
if [[ "${{ env.final_tag }}" =~ ^([0-9]+)-B([0-9]+)$ ]]; then
base_release=${BASH_REMATCH[1]}
beta_num=${BASH_REMATCH[2]}
release_name="${beta_num}-я бета ${base_release}-го релиза"
else
release_name="${{ env.final_tag }}-й бета-выпуск"
fi
else
release_name="${{ env.final_tag }}-й релиз"
fi
echo "release_name=$release_name" >> $GITHUB_ENV
echo "Название релиза: $release_name"
- name: Архивация ru-ru
run: |
if [[ "${{ env.release_type }}" == "beta" ]]; then
archive_name="Fusion-2.5-Russian-Language-${{ env.final_tag }}.zip"
else
archive_name="Fusion-2.5-Russian-Language-${{ env.final_tag }}.zip"
fi
echo "Создание архива: $archive_name"
zip -r "$archive_name" "$BASE_DIR"
- name: Создание выпуска
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.final_tag }}
files: Fusion-2.5-Russian-Language-${{ env.final_tag }}.zip
name: "${{ env.release_name }}"
body: "Автоматический ${{ env.release_type == 'beta' && 'бета-' || '' }}выпуск."
prerelease: ${{ env.release_type == 'beta' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}