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
8 changes: 8 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ jobs:
run: pwsh -NoProfile -File eng/Publish.ps1 -Configuration Debug
- name: Publish Release distribution
run: pwsh -NoProfile -File eng/Publish.ps1 -Configuration Release
- name: Package release assets
run: pwsh -NoProfile -File eng/Release.ps1 -DistributionPath artifacts/dist/release
- name: Upload Debug distribution
uses: actions/upload-artifact@v7.0.1
with:
Expand All @@ -50,3 +52,9 @@ jobs:
name: CheatEngine.Mcp-release
path: artifacts/dist/release/**
if-no-files-found: error
- name: Upload release assets
uses: actions/upload-artifact@v7.0.1
with:
name: CheatEngine.Mcp-release-assets
path: artifacts/releases/**
if-no-files-found: error
28 changes: 28 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,34 @@ Maintainers name the checks a change must pass with these gates:

A pull request needs V+ at least, and VN when it touches Lua.

## Releases

[`eng/Release.ps1`](eng/Release.ps1) is the maintained release entry point.
Every release contains exactly two uploaded assets: `CheatEngine.Mcp-<version>-win-x64.zip` and `SHA256SUMS.txt`.
The ZIP contains the complete `CheatEngine.Mcp/` plugin folder, including `CheatEngine.Mcp.Plugin.dll` and its dependencies, the gateway executable, installation instructions and licenses.
Operator guidance is served as MCP resources and prompts; there is no separate skill ZIP.

1. Set `Version` in `Directory.Build.props`, merge the change into `main`, and pass the required checks.
2. From the clean tested checkout, build and package with `pwsh -NoProfile -File eng/Release.ps1`.
This invokes `eng/Publish.ps1`, including its native gateway smoke check, then verifies every ZIP entry against the distribution and generates checksums.
3. Create and push the annotated `v<version>` tag at the binaries' source commit. The script validates that the plugin, product DLLs, gateway and remote tag agree; it never creates or moves tags.
4. Upload a draft, review its notes and files, then publish:

```powershell
pwsh -NoProfile -File eng/Release.ps1 -DistributionPath artifacts/dist/release -Upload
pwsh -NoProfile -File eng/Release.ps1 -DistributionPath artifacts/dist/release -Upload -Publish
```

Use `-NotesFile <path>` for reviewed release notes; existing notes are preserved when it is omitted.
Prerelease status follows the version suffix. Upload alone leaves new releases as drafts and preserves an existing release's published status.
`-WhatIf` performs no build, writes or GitHub changes.

Assets are staged under `artifacts/releases/<version>/`; `-OutputDirectory` selects another output folder.
The script reuses a valid existing ZIP, writes newly packaged ZIPs with stable ordering and timestamps, verifies uploaded SHA-256 digests and skips matching assets on repeat runs.
Changed binary assets are refused: issue a new version instead of replacing a published payload.
The checksum file can be updated, and known old standalone DLL, EXE, plugin ZIP and skill ZIP assets are removed only after the standard downloads have been verified on GitHub.
Unrecognized output files or release assets stop the operation for review.

## Packages and lock files

- Package versions are managed centrally in [`Directory.Packages.props`](Directory.Packages.props), with transitive pinning; a `PackageReference` never carries a `Version`.
Expand Down
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ Run the gateway and Cheat Engine under the same Windows user account.
### 1. Get the deployment files

Download and extract `CheatEngine.Mcp-2.0.0-beta.2-win-x64.zip` from the [beta release](https://github.com/CheatEngineNet/CheatEngine.Mcp/releases/tag/v2.0.0-beta.2).
The ZIP includes the complete plugin folder, gateway executable, installation instructions, and licenses.
The ZIP includes **`CheatEngine.Mcp/CheatEngine.Mcp.Plugin.dll`**, every plugin dependency, the gateway executable, installation instructions, and licenses.
Each release has one complete Windows x64 ZIP and `SHA256SUMS.txt`; separate plugin, skill, DLL, or EXE downloads are unnecessary.
When upgrading from beta.1, disable the plugin, close Cheat Engine and the gateway, and remove the old single-DLL plugin entry. Replace the complete plugin folder and gateway executable with the matching files from this release; do not mix versions. Then add `CheatEngine.Mcp.Plugin.dll` from the new folder as described below.

To build the same layout from source instead, run this from the repository root with .NET SDK **10.0.401**, PowerShell 7, and the Windows C++ build tools required by Native AOT:
Expand Down Expand Up @@ -270,6 +271,16 @@ Project dependencies are centrally versioned in [`Directory.Packages.props`](Dir
The plugin is framework-dependent inside Cheat Engine; the gateway is published as a self-contained Windows x64 Native AOT executable.
The [contributor guide](CONTRIBUTING.md#build-and-test) covers CI checks, formatting, contract snapshots, and packaging.

To build and package the standard release downloads, use:

```powershell
pwsh -NoProfile -File eng/Release.ps1
```

This runs the publish pipeline and writes one verified ZIP plus `SHA256SUMS.txt` under `artifacts/releases/<version>/`.
To package an already published distribution without rebuilding it, pass `-DistributionPath artifacts/dist/release`.
GitHub upload is explicit; see [Releases](CONTRIBUTING.md#releases).

## Verification

The portable xUnit v3 suite uses Client doubles and real local HTTP/stdio hosts; it does not require Cheat Engine.
Expand Down
Loading
Loading