Files
projman/.gitea/workflows/build.yml
svk a6ad7c7720
Some checks failed
Build and Release / build (push) Failing after 18s
Тесты сборки
2026-01-22 21:31:13 +03:00

223 lines
9.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}"
# Правильный формат для Gitea - в кавычках
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 == 'true'
run: |
echo "Тег уже существует, пропускаем создание"
- 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 '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 ==="
# Проверяем, что тег существует перед созданием релиза
if ! git ls-remote --tags origin "${TAG}" 2>/dev/null | grep -q "${TAG}"; then
echo "ОШИБКА: Тег ${TAG} не существует на сервере!"
exit 1
fi
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" ] && [ -n "$REL_ID" ]; 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 "Ответ сервера: $RESPONSE"
echo 'REL_ID=""' >> $GITEA_ENV
exit 1
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 -s --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 "Файлы не найдены"