Автоматическая сборка раз в три дня #35
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |