diff --git a/.gitea/workflows/release-windows64.yaml b/.gitea/workflows/release-windows64.yaml new file mode 100644 index 00000000..9e7749fe --- /dev/null +++ b/.gitea/workflows/release-windows64.yaml @@ -0,0 +1,113 @@ +name: Build & Release Windows64 + +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: + needs: validate + strategy: + matrix: + configuration: [Release] + platform: [Windows64] + include: + - platform: Windows64 + sdk_label: windows-2022 # str1k3r - can run on any runner + + runs-on: [windows-2022, "${{ matrix.sdk_label }}"] + + steps: + - name: Checkout Repository + uses: https://github.com/actions/checkout@v4 + with: + fetch-depth: 1 + clean: false + lfs: false + + - 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 + run: | + 7z a -r "LCEWindows64.zip" "./x64/${{ matrix.configuration }}/*" "-x!*.pdb" "-x!*.pch" "-x!*.ilk" "-x!*.lib" "-x!*.exp" + + - name: Stage artifacts + run: | + New-Item -ItemType Directory -Force -Path staging + Copy-Item "LCE${{ matrix.platform }}.zip" staging/ + Copy-Item "./x64/${{ matrix.configuration }}/Minecraft.Client.exe" staging/ + + - name: Upload artifacts + uses: https://github.com/christopherHX/gitea-upload-artifact@v4 + with: + name: build-${{ matrix.platform }} + path: staging/* + compression-level: 0 + + release: + needs: build + runs-on: windows-2022 + steps: + - name: Download all build artifacts + uses: https://github.com/christopherHX/gitea-download-artifact@v4 + 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 + } + } else { + $body = $fallback + } + + $delimiter = "EOF_$([System.Guid]::NewGuid().ToString('N'))" + $content = "description<<$delimiter`n$body`n$delimiter`n" + + $utf8NoBom = New-Object System.Text.UTF8Encoding($false) + [System.IO.File]::AppendAllText($env:GITHUB_OUTPUT, $content, $utf8NoBom) + + - 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 }} \ No newline at end of file