109 lines
3.4 KiB
YAML
109 lines
3.4 KiB
YAML
name: Build & Release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: 'Version tag for release (e.g. v1.0.0).'
|
|
required: true
|
|
default: ''
|
|
notes:
|
|
description: 'URL to notes for release.'
|
|
required: false
|
|
default: ''
|
|
|
|
jobs:
|
|
validate:
|
|
runs-on: windows-2022
|
|
steps:
|
|
- name: Validate version format
|
|
run: |
|
|
if (-not ("${{ inputs.version }}" -match '^v\d+\.\d+\.\d+[a-zA-Z0-9.-]*$')) {
|
|
Write-Error "Version '${{ inputs.version }}' doesn't match expected format (e.g. v1.0.0)"
|
|
exit 1
|
|
}
|
|
|
|
build:
|
|
runs-on: windows-2022
|
|
|
|
strategy:
|
|
matrix:
|
|
configuration: [Release]
|
|
platform: [PS3, Windows64] #[PS3, PSVita, Xbox 360, ORBIS, Windows64]
|
|
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: https://github.com/actions/checkout@v4
|
|
|
|
- name: Build Cafeberry
|
|
run: |
|
|
& "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" MinecraftConsoles.sln `
|
|
/p:Configuration=${{ matrix.configuration }} `
|
|
/p:Platform=${{ matrix.platform }} `
|
|
/m
|
|
|
|
- name: Zip Build (Consoles)
|
|
if: matrix.platform != 'Windows64'
|
|
run: 7z a -r LCE${{ matrix.platform }}.zip ./${{ matrix.platform }}_${{ matrix.configuration }}/* "-x!*.ipdb" "-x!*.iobj"
|
|
|
|
- name: Zip Build (Windows64)
|
|
if: matrix.platform == 'Windows64'
|
|
run: 7z a -r LCE${{ matrix.platform }}.zip ./x64/${{ matrix.configuration }}/* "-x!*.ipdb" "-x!*.iobj"
|
|
|
|
- name: Stage artifacts
|
|
run: |
|
|
New-Item -ItemType Directory -Force -Path staging
|
|
Copy-Item LCE${{ matrix.platform }}.zip staging/
|
|
|
|
- name: Stage exe
|
|
if: matrix.platform == 'Windows64'
|
|
run: |
|
|
Copy-Item ./x64/${{ matrix.platform }}/Minecraft.Client.exe staging/
|
|
|
|
- name: Upload artifacts
|
|
uses: https://github.com/actions/upload-artifact@v3
|
|
with:
|
|
name: build-${{ matrix.platform }}
|
|
path: staging/*
|
|
|
|
release:
|
|
needs: build
|
|
runs-on: windows-2022
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: https://github.com/actions/checkout@v4
|
|
|
|
- name: Download all build artifacts
|
|
uses: https://github.com/actions/download-artifact@v3
|
|
with:
|
|
path: downloaded
|
|
|
|
- name: Fetch release notes
|
|
id: notes
|
|
run: |
|
|
$notesSource = "${{ inputs.notes }}"
|
|
$fallback = "## Cafeberry`n`n### Whoever made this release forgot to put notes, sorry!"
|
|
|
|
if ($notesSource -match '^https?://') {
|
|
try {
|
|
$body = (Invoke-WebRequest -Uri $notesSource -UseBasicParsing).Content
|
|
if ([string]::IsNullOrWhiteSpace($body)) { $body = $fallback }
|
|
} catch {
|
|
$body = $fallback
|
|
}
|
|
}
|
|
|
|
"description<<EOF`n$body`nEOF" | Out-File -Append -Encoding utf8 -NoNewline:$false $env:GITHUB_OUTPUT
|
|
|
|
- name: Publish Release
|
|
uses: akkuman/gitea-release-action@v1
|
|
with:
|
|
name: ${{ inputs.version }}
|
|
server_url: ${{ gitea.server_url }}
|
|
repository: ${{ gitea.repository }}
|
|
token: ${{ gitea.token }}
|
|
tag_name: ${{ inputs.version }}
|
|
prerelease: false
|
|
verbose: true
|
|
files: downloaded/**/*
|
|
body: ${{ steps.notes.outputs.description }} |