Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,97 @@ jobs:

- name: Run tests (Release)
run: dotnet test SteamAPI.sln --configuration Release --no-build --no-restore

- name: Validate Desktop Packaging (Windows)
if: matrix.os == 'windows-latest'
shell: pwsh
run: |
./desktop/package-release.ps1
if (-not (Test-Path "artifacts/releases/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe")) {
throw "Expected installer artifacts/releases/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe was not found."
}
if (-not (Test-Path "artifacts/releases/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe.sha256")) {
throw "Expected checksum file artifacts/releases/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe.sha256 was not found."
}
if (-not (Test-Path "artifacts/releases/SteamAPI-Desktop-v0.1.0-win-x64.zip")) {
throw "Expected release archive artifacts/releases/SteamAPI-Desktop-v0.1.0-win-x64.zip was not found."
}
if (-not (Test-Path "artifacts/releases/SteamAPI-Desktop-v0.1.0-win-x64.zip.sha256")) {
throw "Expected checksum file artifacts/releases/SteamAPI-Desktop-v0.1.0-win-x64.zip.sha256 was not found."
}

- name: Upload Windows Desktop Artifacts
if: matrix.os == 'windows-latest'
uses: actions/upload-artifact@v4
with:
name: steamapi-desktop-v0.1.0-win-x64
path: |
artifacts/releases/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe
artifacts/releases/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe.sha256
artifacts/releases/SteamAPI-Desktop-v0.1.0-win-x64.zip
artifacts/releases/SteamAPI-Desktop-v0.1.0-win-x64.zip.sha256
if-no-files-found: error

publish-desktop-v0_1_0:
name: Publish SteamAPI Desktop v0.1.0
if: >-
github.event_name == 'push' &&
github.ref == 'refs/heads/master' &&
startsWith(github.event.head_commit.message, 'release(desktop): SteamAPI Desktop v0.1.0 (#4)')
needs: build-and-test
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: write
steps:
- name: Download verified Windows installation packages
uses: actions/download-artifact@v4
with:
name: steamapi-desktop-v0.1.0-win-x64
path: release-assets

- name: Validate checksums before publication
shell: bash
run: |
cd release-assets
for file in SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe SteamAPI-Desktop-v0.1.0-win-x64.zip; do
test -s "$file"
test -s "$file.sha256"
expected=$(head -c 64 "$file.sha256" | tr '[:upper:]' '[:lower:]')
actual=$(sha256sum "$file" | cut -d ' ' -f 1)
if [ "$expected" != "$actual" ]; then echo "Checksum mismatch: $file" >&2; exit 1; fi
done

- name: Create verified GitHub Release (draft then publish)
shell: bash
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: |
if git ls-remote --tags https://github.com/${{ github.repository }}.git refs/tags/steamapi-desktop-v0.1.0 | grep -q .; then
echo 'Release tag already exists; refusing to overwrite it.' >&2
exit 1
fi
cat > release-notes.md <<'EOF'
# SteamAPI Desktop v0.1.0

First Windows x64 desktop release. The installer is the recommended download.

**Recommended:** `SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe` — standard Windows per-user installation with shortcuts and uninstaller.

**Alternative:** `SteamAPI-Desktop-v0.1.0-win-x64.zip` — portable version without installation.

Includes game search using the existing six-field SteamAPI backend contract, API Inspector, local companion API management, Settings, offline Demo Mode and About. The v0.2.0 backend API remains unchanged.

The installer is unsigned; Windows SmartScreen may show an Unknown Publisher warning. Compatible with Windows x64 and includes the .NET 10 runtime.
EOF
gh release create steamapi-desktop-v0.1.0 \
release-assets/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe \
release-assets/SteamAPI-Desktop-Setup-v0.1.0-win-x64.exe.sha256 \
release-assets/SteamAPI-Desktop-v0.1.0-win-x64.zip \
release-assets/SteamAPI-Desktop-v0.1.0-win-x64.zip.sha256 \
--draft --latest=false --target "$GITHUB_SHA" \
--title 'SteamAPI Desktop v0.1.0' --notes-file release-notes.md
count=$(gh release view steamapi-desktop-v0.1.0 --json assets --jq '.assets | length')
if [ "$count" -ne 4 ]; then echo "Expected 4 release assets, found $count" >&2; exit 1; fi
gh release edit steamapi-desktop-v0.1.0 --draft=false
34 changes: 34 additions & 0 deletions SteamAPI.sln
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamAPI.Tests", "SteamAPI.
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructer", "Infrastructer", "{C5042FDC-E459-6CA1-E6FF-61BB0E5E0C16}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "desktop", "desktop", "{7A1224A0-F22D-34FF-DE0A-A058FAFFD90C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamAPI.Desktop", "desktop\SteamAPI.Desktop\SteamAPI.Desktop.csproj", "{B900B726-06CC-40F2-890A-DEE91FF6B7A4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamAPI.Desktop.Tests", "desktop\SteamAPI.Desktop.Tests\SteamAPI.Desktop.Tests.csproj", "{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -57,10 +63,38 @@ Global
{0BF7D4D2-7B2E-41D4-B8ED-868F26D9C397}.Release|x64.Build.0 = Release|Any CPU
{0BF7D4D2-7B2E-41D4-B8ED-868F26D9C397}.Release|x86.ActiveCfg = Release|Any CPU
{0BF7D4D2-7B2E-41D4-B8ED-868F26D9C397}.Release|x86.Build.0 = Release|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Debug|x64.ActiveCfg = Debug|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Debug|x64.Build.0 = Debug|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Debug|x86.ActiveCfg = Debug|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Debug|x86.Build.0 = Debug|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Release|Any CPU.Build.0 = Release|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Release|x64.ActiveCfg = Release|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Release|x64.Build.0 = Release|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Release|x86.ActiveCfg = Release|Any CPU
{B900B726-06CC-40F2-890A-DEE91FF6B7A4}.Release|x86.Build.0 = Release|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Debug|x64.ActiveCfg = Debug|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Debug|x64.Build.0 = Debug|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Debug|x86.ActiveCfg = Debug|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Debug|x86.Build.0 = Debug|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Release|Any CPU.Build.0 = Release|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Release|x64.ActiveCfg = Release|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Release|x64.Build.0 = Release|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Release|x86.ActiveCfg = Release|Any CPU
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{B900B726-06CC-40F2-890A-DEE91FF6B7A4} = {7A1224A0-F22D-34FF-DE0A-A058FAFFD90C}
{BB1BF26F-70A3-4AD5-BD40-A3D3D5DBEBE2} = {7A1224A0-F22D-34FF-DE0A-A058FAFFD90C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1EFCD427-1922-4A2C-88A9-5ACB3E0B75AD}
EndGlobalSection
Expand Down
Loading
Loading