5.2 KiB
TODO
Items ordered by priority.
High priority
-
Add
concurrency:guard tobuild-and-release.yml— two rapid pushes tomain(e.g. a merge immediately followed by a Dependabot merge) will race and both attempt to create a release, corrupting or duplicating assets. Add:concurrency: group: release cancel-in-progress: trueat the top-level of the workflow so only one release job runs at a time.
-
Add
msi/**tobuild-and-release.ymlpath filter — changes tomsi/RDPWInst.wxs,msi/RDPWInst.wixproj, ormsi/global.jsoncurrently do not trigger a release. A WiX fix merged tomainwould silently produce no new release. Add'msi/**'to thepaths:list. -
Add NuGet / dotnet package cache — every
build-and-release.ymlandbuild-csharp.ymlrun re-downloads all NuGet packages from scratch (~30–60 s penalty per run). Add anactions/cachestep keyed on**/packages.lock.jsonor the project files hash before thedotnet publishsteps to restore/save the~/.nuget/packagesdirectory. -
Add PR check for MSI build — there is no CI validation that
msi/RDPWInst.wxs/msi/RDPWInst.wixprojcompiles when a PR changes them, only at release time. Create a lightweightbuild-msi-check.yml(or add apull_requesttrigger to covermsi/**) that builds the WiX project without publishing a release. -
Code-sign release binaries — set repository variable
USE_CERT_SIGNING=true(Settings → Variables → Actions) and addCODESIGN_CERT_BASE64(PFX as base64) andCODESIGN_CERT_PASSWORDas repository secrets; both CI workflows with signing steps (build-and-release.yml,build-csharp.yml) already have the signing step wired up, gated onvars.USE_CERT_SIGNING == 'true'. Seedocs/CODE-SIGNING.mdfor the full certificate acquisition, PFX export, and secret upload procedure.
Medium priority
-
Add
CODEOWNERSfile — create.github/CODEOWNERSmappingsrc-x86-x64-Fusix/andsrc-csharp/to@sjackson0109so PRs automatically request review from the maintainer. Optionally require approval before merging via branch protection rules. -
Dynamic version in banner —
Program.csbanner hardcodes"v1.6.2". Replace with a runtime read of the assembly version so released binaries automatically display the correctyyyy.M.dstamp:var v = Assembly.GetExecutingAssembly().GetName().Version; string version = v is null ? "unknown" : $"{v.Major}.{v.Minor}.{v.Build}"; -
Update
Directory.Build.propsdefault version — the fallback<Version>2026.3.30</Version>is already stale and will mislead developers who build locally without passing/p:Version=. Either update it to the current date periodically, or derive it dynamically:<Version>$([System.DateTime]::Now.ToString("yyyy.M.d"))</Version> -
Split
build-and-release.ymlinto parallel jobs — the ~500-line single job runs everything sequentially (DLL builds → C# publishes → self-contained publishes → OffsetFinder → sergiye download → MSI → release). Split into 6 jobs:build-dll,build-offsetfinder,download-sergiye(all parallel), thenbuild-csharp(waits for DLLs),build-msi(waits for C#), andrelease(waits for all). Makes failures easy to identify at a glance. -
Pin
softprops/action-gh-releaseto a SHA — Dependabot coversactions/*and NuGet packages but not third-party actions likesoftprops/action-gh-release@v2. Pinned to153bb8e04406b158c6c84fc1615b65b24149a1fe(v2) with# v2comment so Dependabot can track it via the existingactions-minorgroup. -
Add in-repo screenshots —
docs/images/directory and README scaffold are in place; five PNGs are committed but three additional shots would improve coverage. Capture the files described indocs/images/README.mdon a Windows 10/11 machine with a working install and commit them.
Low priority
-
Add a GitHub Environment for releases — configured
environment: releaseon thereleasejob inbuild-and-release.yml. The environment is created automatically if absent (no gates). To require a reviewer: Settings → Environments → release → Required reviewers → add@sjackson0109. -
Dependabot for submodules —
dependabot.ymlcoversgithub-actionsandnugetbut not git submodules (src-csharp/RDPOffsetFinder/zydis). Added agitsubmoduleecosystem entry (Dependabot beta); activate once the feature is publicly available or monitor submodule versions manually. -
Add
packages.lock.jsonfor reproducible NuGet restores — enabled<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>inDirectory.Build.props. Rundotnet restorelocally insrc-csharp/and commit the generatedpackages.lock.jsonfiles so CI restores become deterministic. -
Lint
msi/rdpwrap.iniin CI — the existing INI validation step inbuild-and-release.ymlchecks for three required sections. Extended to also parse every[x.x.xxxxx.xxxxx]section and assert it containsLocalOnlyPatchandSLInitHook, reporting all failures at once before aborting.