Skip to content
Merged
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,5 @@

# Explicitly declare resource files as binary
*.pdb binary
*.png binary
*.spritefont binary
31 changes: 3 additions & 28 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ These instructions define how GitHub Copilot should assist with this project. Th

## File Structure

```txt
```plaintext
.azuredevops/ # Azure DevOps pipeline configuration and policy files.
.github/ # GitHub Actions workflow files and linter configuration files.
.nuget/ # NuGet package configuration files.
Expand All @@ -42,6 +42,7 @@ Src/ # Implementation header and source files.
Shaders/ # HLSL shader files.
MakeSpriteFont/ # C# CLI tool for capturing sprite fonts.
XWBTool/ # C++ CLI tool for creating XACT-style wave banks.
skills/ # Published CoPilot skills for use by developers.
Tests/ # Tests are designed to be cloned from a separate repository at this location.
wiki/ # Local clone of the GitHub wiki documentation repository.
```
Expand Down Expand Up @@ -320,30 +321,4 @@ When reviewing documentation, do the following:

## Release Process

1. Ensure all changes are merged into the `main` branch and that all tests pass.
2. Git pull the local repository to ensure it is up to date with the `main` branch.
3. Run the PowerShell script `build\preparerelease.ps1` which will generate a topic branch for the release, update the version number in `CMakeLists.txt`, the `README.md` file, the release notes in the nuspec files, and create a stub in the `CHANGELOG.md` file for the new release.
4. Edit the `CHANGELOG.md` file to update it with a summary of changes.
5. Submit the topic branch for review and merge into `main` once approved. Allow the GitHub Actions workflows and the Azure DevOps pipelines to complete successfully before proceeding.
6. Run the PowerShell script `build\completerelease.ps1` which will set a tag on the project repo and the test repo, and create a release on GitHub with the release notes from `CHANGELOG.md`. Ensure you have set up GPG signing for your GitHub account so that the tags will be verified.
7. Git pull the local repository to ensure it is up to date with the `main` branch. Be sure to include `--tags`.
8. Push the `main` branch to the MSCodeHub mirror repository. Be sure to include `--tags`.
9. Create a PR on MSCodeHub from the `main` branch to the `release` branch.
10. Merge the PR on MSCodeHub to update the release branch, which will trigger the Azure DevOps pipeline to build signed binaries and the NuGet packages.
11. Run the PowerShell script `build\downloadartifacts.ps1` to download the signed binaries from the Azure DevOps pipeline artifacts.
12. Edit the GitHub release and upload the signed binaries to the release assets.
13. Download the GitHub source .zip archive from the release. Unzip and compare to the local repo to ensure it matches — keep in mind there may be some CR/LF differences. Run minisign on the .zip to generate a signature file, and upload the signature file to the release assets.
14. Validate the NuGet packages with <https://github.com/walbourn/directxtk-tutorials> by pushing the NuGet packages to a local Packages Source folder, and refreshing the NuGet packages from that folder. Then build using BuildAllSolutions.targets.
15. Run the PowerShell script `build\promotenuget.ps1` with the `-Release` parameter to promote the version to the Release view on the project-scoped ADO feed.
16. Run the MSCodeHub pipeline to publish the NuGet packages to nuget.org. The pipeline will automatically push the most recent package promoted to the Release view to nuget.org.
17. Git pull a local repository of VCPKG to `d:\vcpkg` in sync with the `main` branch of the VCPKG repository.
18. Run the PowerShell script `build\updatevcpkg.ps1` to update the DirectXTK port in VCPKG with the new release version. This will edit the files in `ports\directxtk`.
19. Test the VCPKG port using all appropriate triplets and features.
20. Run `.\vcpkg --x-add-version directxtk` to update the VCPKG versioning history.
21. Submit a PR to the VCPKG repository to update the DirectXTK port back to the main GitHub repo. The PR will be reviewed and merged by the VCPKG maintainers.
22. If relevant changes were made to the `xwbtool` or `MakeSpriteFont` tools, update the winget manifests for those tools in the `winget` repository.
- Git pull a local repository to `D:\winget-pkgs` in sync with the `master` branch of the WinGet repository.
- Run the PowerShell script `build\updatewinget.ps1` to update the winget manifests for the tools with the new release version.
- Submit a PR to the `winget` repository to update the manifests for each tool — they must be done as distinct PRs. The PRs will be reviewed and merged by the winget maintainers.

> When fully completed, be sure to update the GitHub release with links to the matching NuGet packages, the VCPKG port, and the winget manifests for the tools.
The release process is documented in the [release skill](.github/skills/release/SKILL.md). Invoke the `release` skill for step-by-step guidance when performing a release.
83 changes: 83 additions & 0 deletions .github/skills/release/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
name: release
description: Guide for performing the DirectX Tool Kit for DirectX 11 release process. Use this skill when asked to help with releasing a new version, publishing packages, or updating ports.
---

# Release Process

## Prerequisites

- All changes merged into the `main` branch with all tests passing.
- GPG signing configured for your GitHub account (for verified tags).
- Access to the MSCodeHub mirror repository and Azure DevOps pipelines.
- Local repositories:
- VCPKG at `d:\vcpkg` (synced with `main` branch)
- WinGet at `D:\winget-pkgs` (synced with `master` branch, only if tool updates needed)
- PATs will be needed for scripts that access GitHub and ADO.

<!-- markdownlint-disable MD029 -->
## Steps

### Phase 1: Prepare Release

1. Git pull the local repository to ensure it is up to date with the `main` branch.
2. Run the PowerShell script `build\preparerelease.ps1` which will generate a topic branch for the release, update the version number in `CMakeLists.txt`, the `README.md` file, the release notes in the nuspec files, and create a stub in the `CHANGELOG.md` file for the new release.
3. Edit the `CHANGELOG.md` file to update it with a summary of changes.
4. Submit the topic branch for review and merge into `main` once approved. Allow the GitHub Actions workflows and the Azure DevOps pipelines to complete successfully before proceeding.

### Phase 2: Tag and Create GitHub Release

5. Run the PowerShell script `build\completerelease.ps1` which will set a tag on the project repo and the test repo, and create a release on GitHub with the release notes from `CHANGELOG.md`. Ensure you have set up GPG signing for your GitHub account so that the tags will be verified.
6. Git pull the local repository to ensure it is up to date with the `main` branch. Be sure to include `--tags`.

### Phase 3: MSCodeHub and Signed Binaries

7. Push the `main` branch to the MSCodeHub mirror repository. Be sure to include `--tags`.
8. Create a PR on MSCodeHub from the `main` branch to the `release` branch.
9. Merge the PR on MSCodeHub to update the release branch, which will trigger the Azure DevOps pipeline to build signed binaries and the NuGet packages.
10. Run the PowerShell script `build\downloadbuild.ps1` to download the signed binaries from the Azure DevOps pipeline artifacts.
11. Edit the GitHub release and upload the signed binaries to the release assets.

### Phase 4: Source Archive Signing

12. Download the GitHub source .zip archive from the release. Unzip and compare to the local repo to ensure it matches — keep in mind there may be some CR/LF differences.
13. Run minisign on the .zip to generate a signature file, and upload the signature file to the release assets.

### Phase 5: NuGet Validation and Publishing

14. Validate the NuGet packages with <https://github.com/walbourn/directxtk-tutorials> by pushing the NuGet packages to a local Packages Source folder, and refreshing the NuGet packages from that folder. Then build using BuildAllSolutions.targets.
15. Run the PowerShell script `build\promotenuget.ps1 -Version <version> -Release` to promote the version to the Release view on the project-scoped ADO feed. The `-Version` parameter is required and should match the NuGet package version (e.g., `2026.6.2.1`).
16. Run the MSCodeHub pipeline to publish the NuGet packages to nuget.org. The pipeline will automatically push the most recent package promoted to the Release view to nuget.org.

### Phase 6: VCPKG Port Update

17. Git pull a local repository of VCPKG to `d:\vcpkg` in sync with the `main` branch of the VCPKG repository.
18. Run the PowerShell script `build\updatevcpkg.ps1` to update the DirectXTK port in VCPKG with the new release version. This will edit the files in `ports\directxtk`.
If the port includes patches, review them to determine if they should be removed or updated for the new release (the `updatevcpkg.ps1` script will warn about this).
19. Test the VCPKG port using the script at `assets/vcpkgdxtk.cmd` (in this skill folder). Copy it to `d:\vcpkg` and run from there after bootstrapping VCPKG.
20. Run `.\vcpkg x-add-version directxtk` to update the VCPKG versioning history.
21. Submit a PR to the VCPKG repository to update the DirectXTK port back to the main GitHub repo. The PR will be reviewed and merged by the VCPKG maintainers.

### Phase 7: WinGet Manifests (Conditional)

If relevant changes were made to the `xwbtool` or `MakeSpriteFont` tools:

22. Git pull a local repository to `D:\winget-pkgs` in sync with the `master` branch of the WinGet repository.
23. Run the PowerShell script `build\updatewinget.ps1` to update the winget manifests for the tools with the new release version.
24. Submit a PR to the `winget` repository to update the manifests for each tool — they must be done as distinct PRs. The PRs will be reviewed and merged by the winget maintainers.

### Phase 8: Finalize

When fully completed, be sure to update the GitHub release with links to the matching NuGet packages, the VCPKG port, and the winget manifests for the tools.

## Key Scripts

| Script | Purpose |
| --- | --- |
| `build\preparerelease.ps1` | Creates topic branch, updates version numbers and changelog stub |
| `build\completerelease.ps1` | Sets tags, creates GitHub release from changelog |
| `build\downloadbuild.ps1` | Downloads signed binaries from Azure DevOps |
| `build\promotenuget.ps1` | Promotes NuGet package to Release view on ADO feed |
| `build\updatevcpkg.ps1` | Updates DirectXTK VCPKG port files |
| `assets\vcpkgdxtk.cmd` | Tests VCPKG port across all triplets and features |
| `build\updatewinget.ps1` | Updates winget manifests for CLI tools |
167 changes: 167 additions & 0 deletions .github/skills/release/assets/vcpkgdxtk.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
@set VCPKG_BINARY_SOURCES=clear
@set VCPKG_ROOT=%cd%
@if %1.==clang. goto clang
.\vcpkg install directxtk[core]:x86-windows
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:x86-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2-8]:x86-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2-9]:x86-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[windows-gaming-input]:x86-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x86-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[spectre]:x86-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:x86-windows-static
@if errorlevel 1 goto error
.\vcpkg install directxtk:x86-windows-static-md
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x86-windows-static-md --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[core]:x64-windows
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:x64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2-8]:x64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2-9]:x64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[windows-gaming-input]:x64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x64-windows-static-md --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[gameinput]:x64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[gameinput]:x64-windows-static-md --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[spectre]:x64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:x64-windows-static
@if errorlevel 1 goto error
.\vcpkg install directxtk:x64-windows-static-md
@if errorlevel 1 goto error
.\vcpkg install directxtk[core]:arm64-windows
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:arm64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[windows-gaming-input]:arm64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:arm64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[spectre]:arm64-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:arm64-windows-static
@if errorlevel 1 goto error
.\vcpkg install directxtk:arm64-windows-static-md
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:arm64-windows-static-md --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:arm64ec-windows
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:arm64ec-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[spectre]:arm64ec-windows --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:x86-uwp
@if errorlevel 1 goto error
.\vcpkg install directxtk:x64-uwp
@if errorlevel 1 goto error
.\vcpkg install directxtk:arm64-uwp
@if errorlevel 1 goto error
@where /Q x86_64-w64-mingw32-g++.exe
@if errorlevel 1 goto skipgcc64
.\vcpkg install directxtk:x64-mingw-dynamic
@if errorlevel 1 goto error
.\vcpkg install directxtk[core]:x64-mingw-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[gameinput]:x64-mingw-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x64-mingw-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:x64-mingw-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[core]:x64-mingw-static
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x64-mingw-static --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[gameinput]:x64-mingw-static --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:x64-mingw-static --recurse
@if errorlevel 1 goto error
:skipgcc64
@where /Q i686-w64-mingw32-g++.exe
@if errorlevel 1 goto finish
.\vcpkg install directxtk:x86-mingw-dynamic
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x86-mingw-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:x86-mingw-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:x86-mingw-static
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x86-mingw-static --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:x86-mingw-static --recurse
@if errorlevel 1 goto error
@goto finish
:clang
.\vcpkg install directxtk:x64-clangcl-dynamic
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:x64-clangcl-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2-8]:x64-clangcl-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2-9]:x64-clangcl-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:x64-clangcl-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:x64-clangcl-static
@if errorlevel 1 goto error
.\vcpkg install directxtk:arm64-clangcl-dynamic
@if errorlevel 1 goto error
.\vcpkg install directxtk[tools]:arm64-clangcl-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk[xaudio2redist]:arm64-clangcl-dynamic --recurse
@if errorlevel 1 goto error
.\vcpkg install directxtk:arm64-clangcl-static
@if errorlevel 1 goto error
.\vcpkg install directxtk:x64-clangcl-uwp
@if errorlevel 1 goto error
.\vcpkg install directxtk:arm64-clangcl-uwp
@if errorlevel 1 goto error
:finish
@echo SUCCEEDED
@if %1.==clang. goto eof
@where /Q x86_64-w64-mingw32-g++.exe
@if NOT errorlevel 1 goto gcc64
@echo .
@echo . Run for MinGW64
@echo . .\vcpkg install directxtk:x64-mingw-dynamic
@echo . .\vcpkg install directxtk[gameinput]:x64-mingw-dynamic --recurse
@echo . .\vcpkg install directxtk[xaudio2redist]:x64-mingw-dynamic --recurse
@echo . .\vcpkg install directxtk[tools]:x64-mingw-dynamic --recurse
@echo . .\vcpkg install directxtk:x64-mingw-static
@echo . .\vcpkg install directxtk[gameinput]:x64-mingw-static --recurse
@echo . .\vcpkg install directxtk[xaudio2redist]:x64-mingw-static --recurse
@echo . .\vcpkg install directxtk[tools]:x64-mingw-static --recurse
:gcc64
@where /Q i686-w64-mingw32-g++.exe
@if NOT errorlevel 1 goto gcc32
@echo .
@echo . Run for MinGW32
@echo . .\vcpkg install directxtk:x86-mingw-dynamic
@echo . .\vcpkg install directxtk[xaudio2redist]:x86-mingw-dynamic--recurse
@echo . .\vcpkg install directxtk[tools]:x86-mingw-dynamic --recurse
@echo . .\vcpkg install directxtk:x86-mingw-static
@echo . .\vcpkg install directxtk[xaudio2redist]:x86-mingw-static --recurse
@echo . .\vcpkg install directxtk[tools]:x86-mingw-static --recurse
:gcc32
@goto eof
:error
@echo FAILED
:eof
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ packages
/CMakeUserPresets.json
/build/vcpkg_installed
/build/*.exe
!**/skills/**
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,26 @@ These components are designed to work without requiring any content from the leg

* Contains miscellaneous build files and scripts.

* ``skills\``

* Contains published CoPilot skills for use by developers.

## Documentation

Documentation is available on the [GitHub wiki](https://github.com/Microsoft/DirectXTK/wiki).

## CoPilot Usage

For CoPilot CLI assistance with using DirectX Tool Kit, try:

```bash
winget install GitHub.Copilot
winget install GitHub.cli
gh skill install microsoft/directxtk
copilot
/skills list
```

## Notices

All content and source code for this package are subject to the terms of the [MIT License](https://github.com/microsoft/DirectXTK/blob/main/LICENSE).
Expand Down
Loading
Loading