Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
321e42c
build: exclude bin/obj/Cache from template-content pack glob (fixes N…
xen2 Jun 13, 2026
88434fa
build: gettext to net10 (Stride.GNU.Gettext 3.0.0; rebuilt deps/Gette…
xen2 Jun 13, 2026
ab13e4b
build: package version via inline git task + 3-part semver; remove de…
xen2 Jun 13, 2026
1003721
build: release + VSIX packaging via dotnet build (macOS platform wiri…
xen2 Jun 13, 2026
fd51516
build: fix GraphicsApiDependentBuildAll leaking D3D onto single-API T…
xen2 Jun 13, 2026
4652d37
ci: nightly VS MSBuild build of Stride.sln (desktop engine + MSVC nat…
xen2 Jun 13, 2026
d0a968f
ci: skip all jobs on comment-only PRs (whole-line // and # changes; G…
xen2 Jun 13, 2026
a529f99
build: centralize signing (one _SignFiles target + one _BuildAdvanced…
xen2 Jun 13, 2026
d8d8ce9
build: remove dead targets (BuildUWP, RunTestsWindows/Mobile with har…
xen2 Jun 13, 2026
c382957
build: portable Clean (RemoveDir), drop ToolsVersion + stale VS2013/M…
xen2 Jun 13, 2026
651ec3f
build: add BuildPackages seam (build phase split from SignPackage; Pa…
xen2 Jun 13, 2026
f9aba72
build: factor BuildXxx through _BuildPlatform, real Help target, move…
xen2 Jun 13, 2026
17e90d1
sdk: make test-project compile-skip take effect in package builds
xen2 Jun 13, 2026
4df1f0f
build: optional prerelease version suffix via release.yml input
xen2 Jun 14, 2026
1b32a8c
build: derive version patch from ancestor-scoped release tags
xen2 Jun 14, 2026
e465018
ci: surface package version in release run UI even when not deploying
xen2 Jun 14, 2026
a327df7
ci: add published-packages summary with nuget.org links to release run
xen2 Jun 14, 2026
42c56b6
ci: fetch tags for tag-based versioning; full clone for sample-loadin…
xen2 Jun 14, 2026
6cfe148
ci: run Android game tests on any sources/sdk/** change (match ios-te…
xen2 Jun 14, 2026
e6bea40
build: dedupe macOS down-resolution graphics-API builds (route refs b…
xen2 Jun 14, 2026
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
7 changes: 2 additions & 5 deletions .github/workflows/build-vs-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,10 @@ jobs:
with:
ref: ${{ github.event.client_payload.pr_number && format('refs/pull/{0}/merge', github.event.client_payload.pr_number) || github.ref }}
exclude: samples
- uses: microsoft/setup-msbuild@v3
with:
vs-version: '[18.0,19.0)'
- name: Build
run: |
msbuild build\Stride.VisualStudio.sln `
-restore -nr:false `
dotnet build build\Stride.VisualStudio.sln `
-nr:false `
-v:m -p:WarningLevel=0 `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StrideSkipUnitTests=true `
Expand Down
67 changes: 67 additions & 0 deletions .github/workflows/build-windows-full-msbuild.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Build Windows (Full, VS MSBuild)

# Desktop-MSBuild fidelity check: builds Stride.sln the way Visual Studio does —
# .NET Framework MSBuild engine, separate restore (no dotnet-build sugar), VS dev
# environment so VCINSTALLDIR selects the MSVC native build mode (the
# WindowsDesktop.vcxproj link path VS users get with the C++ workload). Everything
# else in CI uses dotnet build (core MSBuild), so without this job the engine that
# all VS users run would be exercised only at release time.

on:
schedule:
- cron: '52 4 * * *'
workflow_dispatch:
inputs:
build-type:
description: Build Configuration
default: Debug
type: choice
options:
- Debug
- Release
pull_request:
# Build-logic paths only: the places engine-compat regressions actually come from.
paths:
- 'sources/sdk/**'
- 'sources/targets/**'
- 'sources/native/**'
- '.github/workflows/build-windows-full-msbuild.yml'

concurrency:
group: build-windows-full-msbuild-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
Windows-MSBuild:
name: Build (${{ github.event.inputs.build-type || 'Debug' }}, VS MSBuild)
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
runs-on: windows-2025-vs2026
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
lfs: true
submodules: true
# VsDevCmd environment (VCINSTALLDIR etc.), exported for the following steps.
- uses: ilammy/msvc-dev-cmd@v1
- name: Restore
# VS restores via its NuGet integration before building; bare /t:Restore is the
# CLI equivalent. Same properties as Build so the TFM graph matches.
run: |
msbuild build\Stride.sln `
/t:Restore `
/m /nr:false /v:m /p:WarningLevel=0 `
/p:Configuration=${{ github.event.inputs.build-type || 'Debug' }} `
/p:StridePlatforms=Windows `
/p:StrideGraphicsApiDependentBuildAll=true `
/p:StrideSkipUnitTests=true `
/p:StrideSkipAutoPack=true
- name: Build
run: |
msbuild build\Stride.sln `
/m /nr:false /v:m /p:WarningLevel=0 `
/p:Configuration=${{ github.event.inputs.build-type || 'Debug' }} `
/p:StridePlatforms=Windows `
/p:StrideGraphicsApiDependentBuildAll=true `
/p:StrideSkipUnitTests=true `
/p:StrideSkipAutoPack=true
51 changes: 44 additions & 7 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,53 @@ jobs:
|| github.repository == 'stride3d/stride'
|| vars.STRIDE_ENABLE_PUSH_CI == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
outputs:
runtime: ${{ steps.filter.outputs.runtime || 'true' }}
ios: ${{ steps.filter.outputs.ios || 'true' }}
ios-tests: ${{ steps.filter.outputs.ios-tests || 'true' }}
android: ${{ steps.filter.outputs.android || 'true' }}
full: ${{ steps.filter.outputs.full || 'true' }}
runtime: ${{ steps.comments.outputs.comment_only == 'true' && 'false' || steps.filter.outputs.runtime || 'true' }}
ios: ${{ steps.comments.outputs.comment_only == 'true' && 'false' || steps.filter.outputs.ios || 'true' }}
ios-tests: ${{ steps.comments.outputs.comment_only == 'true' && 'false' || steps.filter.outputs.ios-tests || 'true' }}
android: ${{ steps.comments.outputs.comment_only == 'true' && 'false' || steps.filter.outputs.android || 'true' }}
full: ${{ steps.comments.outputs.comment_only == 'true' && 'false' || steps.filter.outputs.full || 'true' }}
steps:
- uses: actions/checkout@v4
if: github.event_name == 'pull_request'
# Comment-only PRs skip everything (Gate stays green via skipped jobs). Conservative:
# only whole-line comments/blanks in known file types count; anything else (inline
# comment edits, unknown extensions, huge/binary patches) runs CI normally. Known
# hole: comment-looking lines inside multi-line string literals.
- name: Detect comment-only changes
id: comments
if: github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ github.token }}
run: |
gh api "repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files" --paginate --slurp > /tmp/pr-files.json
python3 - <<'EOF' >> "$GITHUB_OUTPUT"
import json, os
markers = {'.cs': '//', '.yml': '#', '.yaml': '#'}
files = [f for page in json.load(open('/tmp/pr-files.json')) for f in page]
def comment_only():
if len(files) >= 3000: # API truncates the file list there
return False
for f in files:
marker = markers.get(os.path.splitext(f['filename'])[1].lower())
patch = f.get('patch') # absent for binary/oversized diffs
if marker is None or patch is None:
return False
for line in patch.split('\n'):
if line[:1] in ('+', '-'):
body = line[1:].strip()
# U+2028/29: line terminators to the C# compiler but not to diff;
# code could hide behind a comment marker on the same diff line.
if '\u2028' in body or '\u2029' in body:
return False
if body and not body.startswith(marker):
return False
return bool(files)
print('comment_only=' + str(comment_only()).lower())
EOF
- uses: dorny/paths-filter@v3
if: github.event_name == 'pull_request'
id: filter
Expand Down Expand Up @@ -95,8 +133,7 @@ jobs:
- 'sources/**/*.Android.*'
- 'sources/**/Platforms/Android/**'
- 'sources/native/**'
- 'sources/sdk/**/Android*'
- 'sources/sdk/**/*.Android.*'
- 'sources/sdk/**'
- 'tests/android/**'
- 'tests/**/Android.Vulkan/**'
- 'build/Stride.Tests.Game.Android.slnf'
Expand Down
14 changes: 13 additions & 1 deletion .github/workflows/release-launcher.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ on:
description: Deploy to NuGet.org
default: false
type: boolean
upload-binlog:
description: Capture and upload an MSBuild binlog (diagnostics). Ignored on signed builds — a binlog records env vars/task params and would leak signing secrets.
default: false
type: boolean

concurrency:
group: release-launcher-${{ github.ref }}
Expand Down Expand Up @@ -82,7 +86,7 @@ jobs:
run: |
msbuild build\Stride.build `
/t:FullBuildLauncher `
/bl /m /nr:false `
${{ inputs.upload-binlog && !inputs.sign && '/bl' || '' }} /m /nr:false `
/p:StrideSign=${{ inputs.sign }}
env:
StrideSignTenantId: ${{ secrets.STRIDE_SIGN_TENANT_ID }}
Expand All @@ -109,6 +113,14 @@ jobs:
bin/launcher/*.exe
retention-days: 30

- name: Upload build log
uses: actions/upload-artifact@v4
if: ${{ always() && inputs.upload-binlog && !inputs.sign }}
with:
name: build-log
path: msbuild.binlog
if-no-files-found: ignore

Deploy:
name: Deploy Launcher
if: ${{ inputs.deploy && inputs.sign }}
Expand Down
24 changes: 18 additions & 6 deletions .github/workflows/release-vspackage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ on:
description: Deploy to NuGet.org
default: false
type: boolean
upload-binlog:
description: Capture and upload an MSBuild binlog (diagnostics). Ignored on signed builds — a binlog records env vars/task params and would leak signing secrets.
default: false
type: boolean

concurrency:
group: release-vspackage-${{ github.ref }}
Expand Down Expand Up @@ -60,14 +64,14 @@ jobs:
6.0.x
10.0.x

- uses: microsoft/setup-msbuild@v2

- name: Build VS Package
run: |
msbuild build\Stride.build `
/t:VSIXPlugin `
/bl /m /nr:false `
/p:StrideSign=${{ inputs.sign }}
# --no-restore: the VSIXPlugin target restores its solution itself.
dotnet build build\Stride.build `
-t:VSIXPlugin `
--no-restore `
${{ inputs.upload-binlog && !inputs.sign && '-bl' || '' }} -m -nr:false `
-p:StrideSign=${{ inputs.sign }}
env:
StrideSignTenantId: ${{ secrets.STRIDE_SIGN_TENANT_ID }}
StrideSignClientId: ${{ secrets.STRIDE_SIGN_CLIENT_ID }}
Expand All @@ -92,6 +96,14 @@ jobs:
if-no-files-found: error
retention-days: 30

- name: Upload build log
uses: actions/upload-artifact@v4
if: ${{ always() && inputs.upload-binlog && !inputs.sign }}
with:
name: build-log
path: msbuild.binlog
if-no-files-found: ignore

Deploy:
name: Deploy VS Package
if: ${{ inputs.deploy && inputs.sign }}
Expand Down
Loading
Loading