Skip to content

Update main.yml #GITBUILD #119

Update main.yml #GITBUILD

Update main.yml #GITBUILD #119

Workflow file for this run

name: CI
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: windows-2022
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Step to check if the commit message contains #GITBUILD
- name: Check Commit Message
shell: powershell
run: |
# Get the commit message
$strVal = '${{ github.event.commits[0].message }}'
# Convert commit message to a single line if multiline
$singleLineStrVal = $strVal -replace "`r`n", " " -replace "`n", " "
if ($singleLineStrVal -match '#GITBUILD') {
Write-Host 'Build commit detected. Proceeding with build...'
echo "build_trigger=true" >> $env:GITHUB_ENV
} else {
Write-Host 'No build commit. Skipping build steps...'
echo "build_trigger=false" >> $env:GITHUB_ENV
}
# Step to ensure the repository is checked out
- uses: actions/checkout@v2
# Inform if build steps are skipped
- name: Inform Skipped Build Steps
if: env.build_trigger != 'true'
shell: powershell
run: |
Write-Host "Skipping build steps because the commit message does not contain #GITBUILD."
# Install 7Zip PowerShell module
- name: Install 7Zip PowerShell Module
if: env.build_trigger == 'true'
shell: powershell
run: Install-Module 7Zip4PowerShell -Force -Verbose
# Restore NuGet packages
- name: Restore NuGet packages
if: env.build_trigger == 'true'
run: nuget restore UnityLauncherPro.sln
# Build the binary
- name: Build Binary
if: env.build_trigger == 'true'
shell: cmd
run: call .\Build.cmd
# Build the artifact
- name: Build Artifact
if: env.build_trigger == 'true'
shell: cmd
run: call .\ArtifactBuild.cmd
# Check that output exists
- name: Validate UnityLauncherPro.exe exists
if: env.build_trigger == 'true'
shell: cmd
run: |
if not exist "UnityLauncherPro\bin\Release\UnityLauncherPro.exe" (
echo ERROR: UnityLauncherPro.exe not found.
exit /b 1
)
echo Found UnityLauncherPro.exe
# 1) Compute a wrapped major.minor.build from the run number
- name: Compute installer version
if: env.build_trigger == 'true'
shell: bash
run: |
TOTAL=${{ github.run_number }}
BUILD=$(( TOTAL % 65536 ))
MINOR_TOTAL=$(( TOTAL / 65536 ))
MINOR=$(( MINOR_TOTAL % 256 ))
MAJOR=$(( MINOR_TOTAL / 256 ))
echo "INSTALLER_MAJOR=$MAJOR" >> $GITHUB_ENV
echo "INSTALLER_MINOR=$MINOR" >> $GITHUB_ENV
echo "INSTALLER_BUILD=$BUILD" >> $GITHUB_ENV
echo "INSTALLER_VER=$MAJOR.$MINOR.$BUILD" >> $GITHUB_ENV
echo "Computed installer version → $MAJOR.$MINOR.$BUILD (run #${{ github.run_number }})"
# 2) Patch your .vdproj in place (inject ProductVersion and a new GUID)
- name: Patch .vdproj ProductVersion & ProductCode
if: env.build_trigger == 'true'
shell: pwsh
run: |
$proj = 'UnityLauncherProInstaller\UnityLauncherProInstaller.vdproj'
$ver = "${{ env.INSTALLER_VER }}" # e.g. 0.0.118
$guid = [Guid]::NewGuid().ToString("B").ToUpper() # e.g. {E821A3F5-1F84-4A4B-BE9D-115D93E9E6F0}
# Read & rewrite line-by-line
$fixed = Get-Content $proj | ForEach-Object {
if ($_ -match '^(\s*)"ProductVersion"') {
# preserve indentation, then inject exactly one pair of braces
"$($Matches[1])""ProductVersion"" = ""8:$ver"""
}
elseif ($_ -match '^(\s*)"ProductCode"') {
"$($Matches[1])""ProductCode"" = ""8:$guid"""
}
else {
$_
}
}
# Overwrite the project
Set-Content -Path $proj -Value $fixed
Write-Host "→ ProductVersion patched to 8:$ver"
Write-Host "→ ProductCode patched to 8:$guid"
# 3) **DEBUG**: print out the patched .vdproj so you can inspect it
- name: Show patched .vdproj
if: env.build_trigger == 'true'
shell: pwsh
run: |
$proj = 'UnityLauncherProInstaller\UnityLauncherProInstaller.vdproj'
Write-Host "=== BEGIN .vdproj CONTENT ==="
Get-Content $proj
Write-Host "=== END .vdproj CONTENT ==="
# locate VS 2022
- name: Locate Visual Studio 2022
id: vswhere
shell: pwsh
run: |
$installPath = vswhere -latest -products * -requires Microsoft.Component.MSBuild `
-property installationPath
if (-not $installPath) { throw 'VS 2022 not found' }
Write-Host "##[set-output name=installPath]$installPath"
# download vs installer builder (v2.0.1)
- name: Download Installer-Projects VSIX
shell: pwsh
run: |
$vsixUrl = "https://marketplace.visualstudio.com/_apis/public/gallery/publishers/VisualStudioClient/vsextensions/MicrosoftVisualStudio2022InstallerProjects/2.0.1/vspackage"
Invoke-WebRequest $vsixUrl -OutFile installerprojects.vsix
# install vs installer builder
- name: Install Installer-Projects extension
shell: pwsh
run: |
$vsixInstaller = Join-Path "${{ steps.vswhere.outputs.installPath }}" 'Common7\IDE\VSIXInstaller.exe'
Write-Host "Running: $vsixInstaller installerprojects.vsix /quiet"
& $vsixInstaller installerprojects.vsix /quiet
# Build MSI installer project using Visual Studio 2022 workaround
- name: Build Installer MSI
if: env.build_trigger == 'true'
shell: cmd
run: |
echo === Running BuildInstaller.bat ===
call .\BuildInstaller.bat || echo WARNING: BuildInstaller.bat exited with %ERRORLEVEL%, continuing...
echo === Verifying MSI ===
if exist "UnityLauncherProInstaller\Release\UnityLauncherPro-Installer.msi" (
echo Success: MSI found at UnityLauncherProInstaller\Release\UnityLauncherPro-Installer.msi
exit /b 0
) else (
echo ERROR: MSI not found in UnityLauncherProInstaller\Release
exit /b 1
)
# Get the current date and time
- name: Get current date and time
id: datetime
if: env.build_trigger == 'true' # Only run if build was triggered
run: |
# Save the current date and time to an environment variable
echo "current_datetime=$(date +'%d/%m/%Y %H:%M')" >> $GITHUB_ENV
# Step to get previous tag and commits
- name: Get commits since last release
id: get_commits
if: env.build_trigger == 'true' # Only run if build was triggered
shell: bash
run: |
# Get the most recent tag
PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "none")
if [ "$PREV_TAG" = "none" ]; then
echo "No previous tag found, listing all commits"
COMMITS=$(git log --pretty=format:"* %s" --no-merges)
else
echo "Previous tag: $PREV_TAG"
# List commits since last tag
COMMITS=$(git log $PREV_TAG..HEAD --pretty=format:"* %s" --no-merges)
fi
# Save commits to the environment
echo "commits=$COMMITS" >> $GITHUB_ENV
# Create a release
- name: Create Release
id: create_release
if: env.build_trigger == 'true' # Execute only if build was triggered
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{github.run_number}}
release_name: ${{ env.current_datetime }} (${{ github.run_number }})
body: |
Automated Release by GitHub Action CI
### Commits in this release:
${{ env.commits }}
draft: false
prerelease: false
# Upload the release asset
- name: Upload Release Asset
id: upload-release-asset
if: env.build_trigger == 'true' # Execute only if build was triggered
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./UnityLauncherPro.zip
asset_name: UnityLauncherPro.zip
asset_content_type: application/zip
# Upload MSI installer to release
- name: Upload MSI Installer
if: env.build_trigger == 'true'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./UnityLauncherProInstaller/Release/UnityLauncherPro-Installer.msi
asset_name: UnityLauncherPro-Installer.msi
asset_content_type: application/x-msi