Files
bg3-dnd55e-russian-localiza…/.gitea/workflows/build.yml
Shahovalov MIkhail a60aa56477
All checks were successful
Build Mod Package / build (push) Successful in 18s
Run CI only for tags and manual dispatch
2026-04-08 01:16:56 +03:00

161 lines
5.9 KiB
YAML

name: Build Mod Package
on:
push:
tags:
- "v*"
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on:
- win11
defaults:
run:
shell: powershell
steps:
- name: Prepare workspace
run: |
$ErrorActionPreference = "Stop"
$workspace = "${{ gitea.workspace }}"
$repoUrl = "${{ gitea.server_url }}/${{ gitea.repository }}.git"
$repoRef = "${{ gitea.ref }}"
$authPair = "${{ gitea.actor }}:${{ secrets.GITEA_TOKEN }}"
$authBytes = [System.Text.Encoding]::ASCII.GetBytes($authPair)
$authBasic = [Convert]::ToBase64String($authBytes)
New-Item -ItemType Directory -Path $workspace -Force | Out-Null
Set-Location $workspace
if (-not (Test-Path -LiteralPath ".git")) {
git init | Out-Null
git remote add origin $repoUrl
} else {
git remote set-url origin $repoUrl
}
git -c "http.extraHeader=Authorization: Basic $authBasic" fetch --depth 1 origin $repoRef
git checkout --force FETCH_HEAD
if (-not (Test-Path -LiteralPath "Mods\\DnD 5.5e AIO Russian\\Localization\\Russian\\russian.xml")) {
throw "Repository sources are not available in the runner workspace."
}
New-Item -ItemType Directory -Path ".tools\\lslib" -Force | Out-Null
New-Item -ItemType Directory -Path "build" -Force | Out-Null
- name: Download latest LSLib release
run: |
$ErrorActionPreference = "Stop"
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/Norbyte/lslib/releases/latest"
$asset = $release.assets | Where-Object { $_.name -match '\.zip$' } | Select-Object -First 1
if (-not $asset) {
throw "Could not find a downloadable LSLib zip asset in the latest release."
}
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile ".tools/lslib/lslib.zip"
Expand-Archive -LiteralPath ".tools/lslib/lslib.zip" -DestinationPath ".tools/lslib" -Force
- name: Build .pak
run: |
$ErrorActionPreference = "Stop"
$divine = Get-ChildItem -Path ".tools/lslib" -Recurse -File |
Where-Object { $_.Name -ieq "Divine.exe" } |
Select-Object -First 1
if (-not $divine) {
throw "Divine.exe was not found in the downloaded LSLib release."
}
& ".\\scripts\\build.ps1" -DivinePath $divine.FullName -Workspace "${{ gitea.workspace }}" -VersionTag "${{ gitea.ref_name }}"
- name: Show build result
run: |
$ErrorActionPreference = "Stop"
$workspace = "${{ gitea.workspace }}"
$refName = "${{ gitea.ref_name }}"
$archiveBaseName = "DnD 5.5e AIO Russian"
if ($refName -and $refName -like "v*") {
$archiveBaseName = "DnD 5.5e AIO Russian $refName"
}
$zipPath = [System.IO.Path]::GetFullPath((Join-Path $workspace "build/$archiveBaseName.zip"))
Get-ChildItem "build/DnD 5.5e AIO Russian.pak", "build/info.json", $zipPath |
Select-Object FullName, Length, LastWriteTime
- name: Publish archive to release
if: startsWith(gitea.ref, 'refs/tags/v')
run: |
$ErrorActionPreference = "Stop"
$workspace = "${{ gitea.workspace }}"
$serverUrl = "${{ gitea.server_url }}"
$repository = "${{ gitea.repository }}"
$tagName = "${{ gitea.ref_name }}"
$zipPath = [System.IO.Path]::GetFullPath((Join-Path $workspace "build/DnD 5.5e AIO Russian $tagName.zip"))
$assetName = [System.IO.Path]::GetFileName($zipPath)
$repoParts = $repository.Split("/", 2)
if ($repoParts.Length -ne 2) {
throw "Could not parse repository owner and name from '$repository'."
}
if (-not (Test-Path -LiteralPath $zipPath)) {
throw "Release archive was not found at '$zipPath'."
}
$owner = $repoParts[0]
$repo = $repoParts[1]
$apiBase = "$serverUrl/api/v1/repos/$owner/$repo"
$headers = @{
Authorization = "token ${{ secrets.GITEA_TOKEN }}"
Accept = "application/json"
}
$release = $null
try {
$release = Invoke-RestMethod -Method Get -Uri "$apiBase/releases/tags/$tagName" -Headers $headers
} catch {
$statusCode = $null
if ($_.Exception.Response) {
$statusCode = [int]$_.Exception.Response.StatusCode
}
if ($statusCode -ne 404) {
throw
}
}
if (-not $release) {
$releaseBody = @{
tag_name = $tagName
name = $tagName
target_commitish = "${{ gitea.sha }}"
draft = $false
prerelease = $false
} | ConvertTo-Json
$release = Invoke-RestMethod -Method Post -Uri "$apiBase/releases" -Headers $headers -ContentType "application/json" -Body $releaseBody
}
$existingAsset = $null
if ($release.assets) {
$existingAsset = $release.assets | Where-Object { $_.name -eq $assetName } | Select-Object -First 1
}
if ($existingAsset) {
Invoke-RestMethod -Method Delete -Uri "$apiBase/releases/$($release.id)/assets/$($existingAsset.id)" -Headers $headers
}
$uploadHeaders = @{
Authorization = "token ${{ secrets.GITEA_TOKEN }}"
Accept = "application/json"
}
Invoke-WebRequest -Method Post -Uri "$apiBase/releases/$($release.id)/assets?name=$([uri]::EscapeDataString($assetName))" -Headers $uploadHeaders -ContentType "application/octet-stream" -InFile $zipPath