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 shell: pwsh 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 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: Read 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 } } else { if (Test-Path $notesSource) { $body = Get-Content -Raw -Path $notesSource if ([string]::IsNullOrWhiteSpace($body)) { $body = $fallback } } else { $body = $fallback } } "description<