207 lines
8.5 KiB
YAML
207 lines
8.5 KiB
YAML
name: Build and Release
|
||
on:
|
||
push:
|
||
branches:
|
||
- master
|
||
- main
|
||
workflow_dispatch: # Ручной запуск
|
||
|
||
jobs:
|
||
build:
|
||
runs-on: tcl-tk-builder
|
||
steps:
|
||
- name: Клонирование
|
||
run: |
|
||
git clone "${{ vars.main_url }}${{ gitea.repository }}.git" .
|
||
|
||
- name: Получение версии
|
||
id: get_version
|
||
run: |
|
||
VERSION=$(grep "Version" projman.tcl | head -1 | grep -o '[0-9.]\+[a-zA-Z0-9]*' || echo "1.0.0")
|
||
RELEASE=$(grep "# Release" projman.tcl | tail -1 | awk '{print $NF}' || echo "$(date +%Y%m%d)")
|
||
|
||
# Создаем имя тега
|
||
TAG="v${VERSION}"
|
||
echo "TAG=$TAG" >> $GITEA_ENV
|
||
echo "VERSION=$VERSION" >> $GITEA_ENV
|
||
echo "RELEASE=$RELEASE" >> $GITEA_ENV
|
||
|
||
echo "Тег: $TAG"
|
||
echo "Версия: $VERSION"
|
||
echo "Ревизия: $RELEASE"
|
||
|
||
- name: Проверка существования тега
|
||
id: check_tag
|
||
run: |
|
||
echo "Проверяем тег: $TAG"
|
||
|
||
# Проверяем на удаленном сервере
|
||
if git ls-remote --tags origin "$TAG" 2>/dev/null | grep -q "$TAG"; then
|
||
echo "Тег $TAG уже существует на удаленном сервере"
|
||
echo "TAG_EXISTS_REMOTE=true" >> $GITEA_ENV
|
||
else
|
||
echo "Тег $TAG не существует на удаленном сервере"
|
||
echo "TAG_EXISTS_REMOTE=false" >> $GITEA_ENV
|
||
fi
|
||
|
||
- name: Создание тега (только если не существует)
|
||
if: env.TAG_EXISTS_REMOTE == 'false'
|
||
run: |
|
||
echo "Создаем новый тег: $TAG"
|
||
git config user.email "svk@nuk-svk.ru"
|
||
git config user.name "svk"
|
||
|
||
# Создаем тег локально
|
||
git tag -a "$TAG" -m "Release $TAG - $RELEASE"
|
||
|
||
# Настраиваем URL для push
|
||
git remote set-url origin "https://${{ secrets.USER }}:${{ secrets.API_TOKEN }}@git.nuk-svk.ru/${{ gitea.repository }}.git"
|
||
|
||
# Пушим тег на сервер
|
||
git push origin "$TAG"
|
||
|
||
- name: Сборка пакетов
|
||
run: |
|
||
echo "=== Сборка DEB пакета ==="
|
||
cd debian && ./build-deb-projman.sh
|
||
|
||
echo "=== Сборка OpenBSD пакета ==="
|
||
cd ../openbsd && ./build-package-bsd.sh
|
||
|
||
echo "=== Собранные файлы ==="
|
||
find . -maxdepth 1 -name "projman*" -type f | xargs ls -la 2>/dev/null || echo "Файлы не найдены"
|
||
|
||
- name: Проверка существования релиза
|
||
id: check_release
|
||
run: |
|
||
# Проверяем, существует ли уже релиз для этого тега
|
||
RESPONSE=$(curl -s -u "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
|
||
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/tags/$TAG" || echo "{}")
|
||
|
||
echo "Ответ API проверки релиза: $RESPONSE"
|
||
|
||
if echo "$RESPONSE" | grep -q '"id"'; then
|
||
REL_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | cut -d: -f2)
|
||
echo "Релиз уже существует. ID: $REL_ID"
|
||
echo "RELEASE_EXISTS=true" >> $GITEA_ENV
|
||
|
||
# Используем метод записи через echo без >> для числовых значений
|
||
echo "REL_ID=${REL_ID}" >> $GITEA_ENV
|
||
else
|
||
echo "Релиз не существует"
|
||
echo "RELEASE_EXISTS=false" >> $GITEA_ENV
|
||
echo "REL_ID=" >> $GITEA_ENV
|
||
fi
|
||
|
||
- name: Создание или обновление релиза
|
||
id: create_release
|
||
run: |
|
||
echo "=== Работа с релизом для тега $TAG ==="
|
||
|
||
RELEASE_BODY="## Projman $VERSION
|
||
|
||
**Ревизия:** $RELEASE
|
||
**Дата сборки:** $(date)
|
||
**Коммит:** $(git rev-parse --short HEAD)
|
||
|
||
### Собранные пакеты:
|
||
- DEB пакет для Debian/Ubuntu
|
||
- TGZ пакет для OpenBSD"
|
||
|
||
# Экранируем переносы строк для JSON
|
||
ESCAPED_BODY=$(echo "$RELEASE_BODY" | sed ':a;N;$!ba;s/\n/\\n/g')
|
||
|
||
if [ "$RELEASE_EXISTS" = "true" ]; then
|
||
echo "Обновляем существующий релиз ID: $REL_ID"
|
||
|
||
# Обновляем существующий релиз
|
||
RESPONSE=$(curl -s -X PATCH \
|
||
-u "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"name": "Projman '"$VERSION"'",
|
||
"body": "'"$ESCAPED_BODY"'",
|
||
"draft": false,
|
||
"prerelease": false
|
||
}' \
|
||
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/$REL_ID")
|
||
|
||
echo "Ответ обновления релиза: $RESPONSE"
|
||
|
||
else
|
||
echo "Создаем новый релиз"
|
||
|
||
# Создаем новый релиз
|
||
RESPONSE=$(curl -s -X POST \
|
||
-u "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"tag_name": "'"$TAG"'",
|
||
"name": "Projman '"$VERSION"'",
|
||
"body": "'"$ESCAPED_BODY"'",
|
||
"draft": false,
|
||
"prerelease": false
|
||
}' \
|
||
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases")
|
||
|
||
echo "Ответ создания релиза: $RESPONSE"
|
||
|
||
# Получаем ID нового релиза
|
||
if echo "$RESPONSE" | grep -q '"id"'; then
|
||
NEW_REL_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | cut -d: -f2)
|
||
echo "Новый ID релиза: $NEW_REL_ID"
|
||
echo "REL_ID=${NEW_REL_ID}" >> $GITEA_ENV
|
||
else
|
||
echo "ОШИБКА: Не удалось получить ID релиза из ответа"
|
||
echo "REL_ID=" >> $GITEA_ENV
|
||
fi
|
||
fi
|
||
|
||
- name: Загрузка файлов в релиз
|
||
if: env.REL_ID != ''
|
||
run: |
|
||
echo "=== Загрузка файлов в релиз ==="
|
||
echo "ID релиза для загрузки: $REL_ID"
|
||
|
||
# Находим все файлы projman
|
||
FILES=$(find ../ -maxdepth 1 \( -name "*projman*deb" -o -name "*projman*tgz" \) -type f)
|
||
if [ -z "$FILES" ]; then
|
||
echo "Нет файлов projman для загрузки"
|
||
exit 0
|
||
fi
|
||
|
||
echo "Найдены файлы:"
|
||
echo "$FILES"
|
||
|
||
# Загружаем каждый файл
|
||
for FILE in $FILES; do
|
||
FILENAME=$(basename "$FILE")
|
||
echo "Загружаем: $FILENAME"
|
||
|
||
curl -v --user "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
|
||
--upload-file "$FILE" \
|
||
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/$REL_ID/assets?name=$FILENAME"
|
||
|
||
echo "Файл загружен: $FILENAME"
|
||
done
|
||
|
||
- name: Финализация
|
||
run: |
|
||
echo "=== Сборка завершена ==="
|
||
echo "Тег: $TAG"
|
||
echo "Версия: $VERSION"
|
||
echo "Ревизия: $RELEASE"
|
||
echo "ID релиза: $REL_ID"
|
||
|
||
if [ -n "$REL_ID" ]; then
|
||
echo "Проверяем файлы в релизе..."
|
||
curl -s -u "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
|
||
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/$REL_ID/assets" | \
|
||
grep -o '"name":"[^"]*"' | cut -d'"' -f4 || echo "Не удалось получить список файлов"
|
||
else
|
||
echo "Релиз не был создан или ID не получен"
|
||
fi
|
||
|
||
echo "Собранные файлы:"
|
||
find ../ -maxdepth 1 \( -name "*projman*deb" -o -name "*projman*tgz" \) -type f | xargs ls -la 2>/dev/null || echo "Файлы не найдены"
|