Skip to content

Автоматическая сборка раз в три дня #35

Автоматическая сборка раз в три дня

Автоматическая сборка раз в три дня #35

Workflow file for this run

name: Автоматическая сборка раз в три дня
on:
schedule:
- cron: '0 0 */3 * *' # Запуск каждые 3 дня в 00:00 UTC
workflow_dispatch: # Возможность ручного запуска
# Добавляем права для корректной работы GITHUB_TOKEN (создание релизов и запись пакетов)
permissions:
contents: write
jobs:
build:
name: Сборка проекта
runs-on: windows-latest
env:
PYTHONUTF8: 1
steps:
- name: Копирование кода
uses: actions/checkout@v4
# Шаг для генерации точной даты и времени сборки
- name: Получение даты и времени
id: datetime
shell: powershell
run: |
# Форматируем дату и время (например: 25.05.2026 21:15)
$current_time = Get-Date -Format "dd.MM.yyyy HH:mm"
echo "build_time=$current_time" >> $env:GITHUB_OUTPUT
- name: Установка Python 3.13
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Запуск скрипта сборки (build.py)
run: python build.py
- name: Установка Node.js (для сборки VS Code расширения)
uses: actions/setup-node@v4
with:
node-version: 20
- name: Сборка расширения VS Code (.vsix)
shell: powershell
run: |
# Настройка кодировки вывода консоли
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
npm install -g @vscode/vsce
cd rus-python
# Читаем package.json
$json = Get-Content package.json -Raw | ConvertFrom-Json
# АВТОПОВЫШЕНИЕ ВЕРСИИ
if ($json.version) {
$versionParts = $json.version.Split('.')
if ($versionParts.Count -eq 3) {
$major = [int]$versionParts[0]
$minor = [int]$versionParts[1]
$patch = [int]$versionParts[2] + 1
$json.version = "${major}.${minor}.${patch}"
Write-Host "Новая версия расширения: $($json.version)"
}
} else {
$json | Add-Member -NotePropertyName "version" -NotePropertyValue "1.0.0"
}
# Автоматически добавляем обязательные поля
if (-not $json.publisher) { $json | Add-Member -NotePropertyName "publisher" -NotePropertyValue "suscersal" }
if (-not $json.repository) { $json | Add-Member -NotePropertyName "repository" -NotePropertyValue @{ type = "git"; url = "https://github.com" } }
# Преобразуем в JSON строку
$jsonString = $json | ConvertTo-Json -Depth 10
# Жесткое сохранение в UTF-8 БЕЗ BOM с помощью .NET
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText((Get-Item package.json).FullName, $jsonString, $utf8NoBom)
[System.IO.File]::WriteAllText((Join-Path (Get-Location) "LICENSE"), "MIT License", $utf8NoBom)
# Сборка расширения
vsce package --no-dependencies
# Компиляция инсталлятора Inno Setup
- name: Компиляция инсталлятора (Inno Setup)
run: |
iscc setup.iss
- name: Сохранение готовых файлов в артефакты
if: always()
uses: actions/upload-artifact@v4
with:
name: rupython-artifacts
path: |
dist/
Setup_Build/rupyInstaller.exe
*.exe
*.log
rus-python/*.vsix
if-no-files-found: warn
# Создание релиза по тегу, расписанию или вручную с выводом даты и времени
- name: Создать Релиз и загрузить файлы
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
with:
tag_name: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || format('auto-{0}', github.sha) }}
# Добавили дату и время прямо в название релиза
name: ${{ startsWith(github.ref, 'refs/tags/') && format('Релиз {0}', github.ref_name) || format('Автосборка от {0}', steps.datetime.outputs.build_time) }}
generate_release_notes: true
body: |
### Автоматическая сборка проекта
**Информация о сборке:**
- **Дата и время:** ${{ steps.datetime.outputs.build_time }} (UTC раннера)
- **Триггер:** ${{ github.event_name }}
- **Коммит:** ${{ github.sha }}
---
### Что нового:
draft: false
prerelease: ${{ github.event_name != 'create' }} # Автосборки помечаются как Pre-release
files: |
dist/*.exe
Setup_Build/rupyInstaller.exe
*.exe
rus-python/*.vsix
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}