140 lines
No EOL
4.8 KiB
YAML
140 lines
No EOL
4.8 KiB
YAML
name: Dotnet Build
|
|
|
|
on: [push]
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: win11
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
|
|
- name: MSBuild version
|
|
run: |
|
|
msbuild -version
|
|
|
|
- name: Extract project version
|
|
run: |
|
|
$version = Select-String -Path "WeeXnes/WeeXnes.csproj" -Pattern "<Version>(.+?)</Version>" | ForEach-Object {
|
|
($_ -match "<Version>(.+?)</Version>") | Out-Null
|
|
$matches[1]
|
|
}
|
|
Write-Output "Version extracted: $version"
|
|
"PROJECT_VERSION=$version" | Out-File -FilePath $Env:GITHUB_ENV -Encoding ASCII -Append
|
|
|
|
|
|
|
|
- name: Test exported version variable
|
|
run: |
|
|
Write-Output "The extracted project version is: $env:PROJECT_VERSION"
|
|
if (-not $env:PROJECT_VERSION) {
|
|
Write-Error "PROJECT_VERSION variable is not set!"
|
|
exit 1
|
|
}
|
|
|
|
|
|
|
|
|
|
- name: Restore Packages
|
|
run: nuget restore WeeXnes.sln
|
|
|
|
- name: Build Solution
|
|
run: |
|
|
msbuild WeeXnes.sln /p:DeleteExistingFiles=True /p:platform="Any CPU" /p:configuration="Release"
|
|
|
|
|
|
- name: Packing Zip
|
|
run: |
|
|
$zipName = "currentRelease_$env:PROJECT_VERSION.zip"
|
|
Compress-Archive -Path `
|
|
WeeXnes\bin\Release\WeeXnes.exe, `
|
|
WeeXnes\bin\Release\System.Drawing.Common.dll, `
|
|
WeeXnes\bin\Release\Wpf.Ui.dll, `
|
|
WeeXnes_UAC\bin\Release\WeeXnes_UAC.exe, `
|
|
WeeXnes\bin\Release\DiscordRPC.dll, `
|
|
WeeXnes\bin\Release\Newtonsoft.Json.dll, `
|
|
Autostart\bin\Release\Autostart.exe, `
|
|
WXPlugin\bin\Release\WXPlugin.dll, `
|
|
Update\bin\Release\Update.exe `
|
|
-CompressionLevel Optimal `
|
|
-DestinationPath $zipName
|
|
Write-Output "Created zip: $zipName"
|
|
|
|
- name: Prepare release directory
|
|
run: |
|
|
mkdir release
|
|
move currentRelease_$env:PROJECT_VERSION.zip release\
|
|
|
|
|
|
- name: Create Git tag
|
|
run: |
|
|
git config user.name "WeeXnes"
|
|
git config user.email "weexnes@weexnes.dev"
|
|
git tag $env:PROJECT_VERSION
|
|
git push origin $env:PROJECT_VERSION
|
|
|
|
- name: Upload Release Asset to Forgejo
|
|
env:
|
|
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
|
PROJECT_VERSION: ${{ env.PROJECT_VERSION }}
|
|
run: |
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$owner = "WeeXnes"
|
|
$repo = "WeeXnesSuite"
|
|
$tag = "$env:PROJECT_VERSION"
|
|
$token = $env:RELEASE_TOKEN
|
|
$fileName = "currentRelease_$tag.zip"
|
|
$filePath = "release/$fileName"
|
|
|
|
$releaseUrl = "https://git.weexnes.dev/api/v1/repos/$owner/$repo/releases/tags/$tag"
|
|
try {
|
|
$release = Invoke-RestMethod -Uri $releaseUrl -Headers @{ Authorization = "token $token" }
|
|
Write-Host "Found existing release for tag $tag"
|
|
} catch {
|
|
Write-Host "Release for tag $tag not found, creating..."
|
|
$createReleaseUrl = "https://git.weexnes.dev/api/v1/repos/$owner/$repo/releases"
|
|
$body = @{
|
|
tag_name = $tag
|
|
name = $tag
|
|
draft = $false
|
|
prerelease = $false
|
|
} | ConvertTo-Json -Depth 3
|
|
$release = Invoke-RestMethod -Uri $createReleaseUrl -Headers @{ Authorization = "token $token"; "Content-Type" = "application/json" } -Method Post -Body $body
|
|
}
|
|
|
|
$releaseId = $release.id
|
|
Write-Host "Release ID: $releaseId"
|
|
|
|
$uploadUrl = "https://git.weexnes.dev/api/v1/repos/$owner/$repo/releases/$releaseId/assets?name=$fileName"
|
|
Write-Host "Uploading asset to $uploadUrl"
|
|
|
|
Add-Type -AssemblyName "System.Net.Http"
|
|
|
|
$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
|
|
|
|
# Use static method to correctly instantiate ByteArrayContent
|
|
$byteContent = [System.Net.Http.ByteArrayContent]::new($fileBytes)
|
|
$byteContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::new("application/zip")
|
|
|
|
$form = [System.Net.Http.MultipartFormDataContent]::new()
|
|
$form.Add($byteContent, "attachment", $fileName)
|
|
|
|
$client = [System.Net.Http.HttpClient]::new()
|
|
$client.DefaultRequestHeaders.Authorization = [System.Net.Http.Headers.AuthenticationHeaderValue]::new("token", $token)
|
|
|
|
$response = $client.PostAsync($uploadUrl, $form).Result
|
|
$responseContent = $response.Content.ReadAsStringAsync().Result
|
|
|
|
if ($response.IsSuccessStatusCode) {
|
|
Write-Host "✅ Upload succeeded"
|
|
} else {
|
|
Write-Host "❌ Upload failed with status $($response.StatusCode)"
|
|
Write-Host "Response: $responseContent"
|
|
exit 1
|
|
}
|
|
|
|
|
|
|