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

187 lines
7.9 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}"
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: |
# Проверяем, существует ли тег локально
if git show-ref --tags --quiet --verify -- "refs/tags/$TAG"; then
echo "Тег $TAG уже существует локально"
echo "TAG_EXISTS=true" >> $GITEA_ENV
else
echo "Тег $TAG не существует локально"
echo "TAG_EXISTS=false" >> $GITEA_ENV
fi
# Проверяем на удаленном сервере
git ls-remote --tags origin "$TAG" && echo "TAG_EXISTS_REMOTE=true" >> $GITEA_ENV || echo "TAG_EXISTS_REMOTE=false" >> $GITEA_ENV
- 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"
git remote set-url origin "https://${{ secrets.USER }}:${{ secrets.API_TOKEN }}@git.nuk-svk.ru/${{ gitea.repository }}.git"
# Пушим тег на сервер
git push origin "$TAG"
env:
GIT_ASKPASS: "echo ${{ secrets.API_TOKEN }}"
- name: Сборка пакетов
run: |
echo "=== Сборка DEB пакета ==="
cd debian && ./build-deb-projman.sh
echo "=== Сборка OpenBSD пакета ==="
cd ../openbsd && ./build-package-bsd.sh
echo "=== Собранные файлы ==="
find . -name "projman*" -type f | xargs ls -la
- 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 "{}")
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
fi
- name: Создание или обновление релиза
run: |
echo "=== Работа с релизом для тега $TAG ==="
RELEASE_BODY="## Projman $VERSION
**Ревизия:** $RELEASE
**Дата сборки:** $(date)
**Коммит:** $(git rev-parse --short HEAD)
### Собранные пакеты:
- DEB пакет для Debian/Ubuntu
- TGZ пакет для OpenBSD"
if [ "$RELEASE_EXISTS" = "true" ]; then
echo "Обновляем существующий релиз ID: $REL_ID"
# Обновляем существующий релиз
curl -X PATCH \
-u "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"name": "Projman '"$VERSION"'",
"body": "'"$(echo "$RELEASE_BODY" | sed ':a;N;$!ba;s/\n/\\n/g')"'",
"draft": false,
"prerelease": false
}' \
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/$REL_ID"
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": "'"$(echo "$RELEASE_BODY" | sed ':a;N;$!ba;s/\n/\\n/g')"'",
"draft": false,
"prerelease": false
}' \
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases")
# Получаем ID нового релиза
REL_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | cut -d: -f2)
echo "REL_ID=$REL_ID" >> $GITEA_ENV
fi
echo "ID релиза: $REL_ID"
- name: Загрузка файлов в релиз
if: env.REL_ID != ''
run: |
echo "=== Загрузка файлов в релиз ==="
# Сначала удаляем старые файлы с таким же именем (если есть)
echo "Проверяем существующие файлы в релизе..."
EXISTING_ASSETS=$(curl -s -u "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/$REL_ID/assets")
# Загружаем все новые файлы
for FILE in $(find . -maxdepth 1 -name "projman*" -type f); do
FILENAME=$(basename "$FILE")
echo "Обрабатываем файл: $FILENAME"
# Проверяем, существует ли файл с таким именем
ASSET_ID=$(echo "$EXISTING_ASSETS" | grep -o "\"name\":\"$FILENAME\".*\"id\":[0-9]*" | grep -o '"id":[0-9]*' | cut -d: -f2)
if [ -n "$ASSET_ID" ]; then
echo " Файл уже существует (ID: $ASSET_ID), удаляем..."
curl -X DELETE \
-u "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/assets/$ASSET_ID"
fi
echo " Загружаем новый файл..."
curl --user "${{ secrets.USER }}:${{ secrets.API_TOKEN }}" \
--upload-file "$FILE" \
"${{ vars.main_url }}api/v1/repos/${{ gitea.repository }}/releases/$REL_ID/assets?name=$FILENAME"
echo " Готово!"
done
- name: Финализация
run: |
echo "=== Сборка завершена ==="
echo "Тег: $TAG"
echo "ID релиза: $REL_ID"
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