Files
PNGTuber-Plus/.github/workflows/build-windows.yml
2025-07-20 04:17:21 +10:00

170 lines
6.1 KiB
YAML

name: Build Windows
on:
push:
branches: [ master, main ]
pull_request:
branches: [ master, main ]
workflow_dispatch:
env:
GODOT_VERSION: 4.4.1
EXPORT_NAME: PNGTuber-Plus
jobs:
export-windows:
name: Windows Export
runs-on: self-hosted
if: contains(github.event.head_commit.message, '!build')
steps:
- name: Checkout
uses: actions/checkout@v4
with:
lfs: true
- name: Debug Environment
run: |
Write-Host "Current directory: $(Get-Location)"
Write-Host "Godot executable exists: $(Test-Path 'D:\Godot\Godot_v4.4.1-stable_win64.exe')"
Write-Host "Export name: $env:EXPORT_NAME"
Write-Host "Project file exists: $(Test-Path 'project.godot')"
Get-ChildItem -Path . -Filter "*.cfg" | Select-Object Name
- name: Verify Export Templates
run: |
$templateDir = "C:\WINDOWS\ServiceProfiles\NetworkService\AppData\Roaming\Godot\export_templates\4.4.1.stable"
Write-Host "Checking for export templates at: $templateDir"
if (Test-Path $templateDir) {
Write-Host "Export templates found. Contents:"
Get-ChildItem -Path $templateDir | Where-Object {$_.Name -like "*windows*"} | Select-Object Name, Length | Format-Table
# Verify the specific Windows templates we need
$debugTemplate = Join-Path $templateDir "windows_debug_x86_64.exe"
$releaseTemplate = Join-Path $templateDir "windows_release_x86_64.exe"
if ((Test-Path $debugTemplate) -and (Test-Path $releaseTemplate)) {
Write-Host "✅ Required Windows templates found"
} else {
Write-Host "❌ Required Windows templates missing"
exit 1
}
} else {
Write-Host "❌ Export template directory not found!"
exit 1
}
# Check if rcedit is available (it's already in the project)
Write-Host "Checking for rcedit..."
if (Test-Path "rcedit-x64.exe") {
Write-Host "✅ rcedit found in project directory"
} else {
Write-Host "rcedit not found - downloading..."
Invoke-WebRequest -Uri "https://github.com/electron/rcedit/releases/latest/download/rcedit-x64.exe" -OutFile "rcedit-x64.exe"
Write-Host "✅ rcedit downloaded"
}
- name: Windows Build
run: .\build-windows-ci.bat
shell: cmd
- name: Check Build Output
run: |
Write-Host "Build directory contents:"
if (Test-Path "build\windows") {
Get-ChildItem -Path "build\windows" -Recurse | Select-Object Name, Length
} else {
Write-Host "Build directory does not exist!"
}
if (Test-Path "build\windows\PNGTuber-Plus.exe") {
Write-Host "Build SUCCESS: PNGTuber-Plus.exe created"
$fileSize = (Get-Item "build\windows\PNGTuber-Plus.exe").Length
Write-Host "File size: $fileSize bytes"
} else {
Write-Host "Build FAILED: PNGTuber-Plus.exe not found"
exit 1
}
- name: Upload Windows Build
uses: actions/upload-artifact@v4
with:
name: windows-build
path: build/windows/
retention-days: 14
release:
name: Create Release
needs: export-windows
runs-on: self-hosted
if: github.ref == 'refs/heads/master' && github.event_name == 'push' && success()
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate Release Info
id: release_info
run: |
# Get current date and time
$date = Get-Date -Format "yyyy.MM.dd"
$time = Get-Date -Format "HHmm"
# Get short commit hash (first 7 characters)
$shortSha = "${{ github.sha }}".Substring(0, 7)
# Get commit count since last tag (for build number)
$buildNumber = & git rev-list --count HEAD
# Create version-like tag and release name
$tag = "v$date-build$buildNumber"
$releaseName = "PNGTuber+ v$date Build $buildNumber"
Write-Host "Generated tag: $tag"
Write-Host "Generated release name: $releaseName"
# Set outputs for use in next steps
echo "tag=$tag" >> $env:GITHUB_OUTPUT
echo "release_name=$releaseName" >> $env:GITHUB_OUTPUT
echo "short_sha=$shortSha" >> $env:GITHUB_OUTPUT
echo "build_number=$buildNumber" >> $env:GITHUB_OUTPUT
- name: Download Windows Build
uses: actions/download-artifact@v4
with:
name: windows-build
path: ./windows/
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.release_info.outputs.tag }}
release_name: ${{ steps.release_info.outputs.release_name }}
body: |
Automated build of PNGTuber Plus
## Installation
1. Download PNGTuber-Plus.exe from the assets below
2. Run the executable - no installation required!
3. For StreamDeck integration, download the plugin from [here](https://github.com/BoyneGames/streamdeck-godot-plugin/releases/tag/1.0.0)
## Credits
- Original project by [kaiakairos](https://github.com/kaiakairos/PNGTuber-Plus)
- Microphone improvements by [k0ffinz](https://github.com/k0ffinz/PNGTuber-Plus)
draft: false
prerelease: false
- name: Upload Windows Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./windows/PNGTuber-Plus.exe
asset_name: PNGTuber-Plus.exe
asset_content_type: application/octet-stream