Skip to content

Fix broken readme references and modernize build configuration#562

Merged
StevenTCramer merged 27 commits into
masterfrom
Cramer/2025-08-12/032migrate-from-mediatr-to-timewarp-mediator
Oct 16, 2025
Merged

Fix broken readme references and modernize build configuration#562
StevenTCramer merged 27 commits into
masterfrom
Cramer/2025-08-12/032migrate-from-mediatr-to-timewarp-mediator

Conversation

@StevenTCramer
Copy link
Copy Markdown
Collaborator

Summary

  • Standardize readme file naming from read-me.md to readme.md
  • Replace custom build metadata with TimeWarp.Build.Tasks package
  • Fix broken readme references in NuGet packages

Changes

Readme Standardization

  • Renamed read-me.mdreadme.md (root and project directories)
  • Renamed read-me.mdoverview.md (kanban and scripts directories)
  • Updated all .csproj files to reference readme.md
  • Updated Directory.Build.props PackageReadmeFile property

Build Configuration Modernization

  • Added TimeWarp.Build.Tasks package for automated git metadata injection
  • Removed custom SetAssemblyMetaData MSBuild target
  • Removed dependency on convert-timestamp tool
  • Removed Microsoft.SourceLink.GitHub package (included in Build.Tasks)
  • Removed CI build configuration (handled by Build.Tasks)
  • Added .agent/workspace/ to .gitignore

Test plan

  • Verify NuGet packages build successfully
  • Confirm readme displays correctly in NuGet package metadata
  • Validate git commit metadata is injected into assemblies
  • Check that all readme links work correctly

🤖 Generated with Claude Code

StevenTCramer and others added 27 commits August 22, 2025 12:05
- Update TimeWarpStateVersion from beta.2 to beta.3 in Directory.Build.props
- Move task 033 (migrate-to-kebab-case-naming-convention) from in-progress to done folder

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This task plans the refactoring of TimeWarp.State to separate core state
management from Blazor-specific features, enabling use in console applications.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
…scripts

- Created comprehensive analysis report of all PowerShell scripts in repository
- Identified 11 scripts requiring migration, 8 Playwright-generated to exclude
- Updated Task 035 to include critical GitHub workflow scripts missing from original list
- Added phased migration approach prioritizing CI/CD infrastructure
- Elevated priority from Medium to HIGH due to workflow script criticality

Key findings:
- GitHub workflow scripts (.github/workflows/*.ps1) were missing from Task 035
- These scripts are actively used in CI/CD and must be migrated first
- run-e2e-tests.ps1 is the most complex script (376 lines)
- sync-configurable-files.ps1 requires careful GitHub API handling (444 lines)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Created comprehensive comparison showing Nuru/Amuru approach is definitively cleaner:
- TimeWarp.State: 8 workflows + 13 PowerShell scripts = ~20 files
- Nuru/Amuru: 1 unified workflow + 3 C# scripts = 4 files

Key findings:
- ci-build.yml and master-build.yml are 99% duplicates in TimeWarp.State
- PowerShell scripts have 70-80% overlap between root and workflow versions
- Nuru/Amuru use C# scripts with TimeWarp.Amuru (self-bootstrapping)
- Single ci-cd.yml handles all scenarios (PR, push, release, manual)

Recommendations:
1. Merge duplicate workflows immediately
2. Migrate to C# scripts as per Task 035
3. Adopt Nuru/Amuru's single workflow pattern
4. Eliminate PowerShell script redundancy

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Build C# scripts alongside PowerShell (don't break anything)
- Create single ci-cd.yml to replace 8 workflows
- Test both side by side
- Delete old stuff only after new stuff works

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Only source libraries need reproducible builds. Tests and samples
regenerate lock files in CI/CD. This reduces commit noise and
unnecessary version pinning for non-production code.

- Added packages.lock.json to .gitignore (except source/)
- Removed tracking for all sample lock files
- Removed tracking for all test lock files
- Kept tracking for source library lock files

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Migrating from PowerShell to .NET 10 single-file C# apps (Task 035 Phase 1):

scripts/build.cs:
- Replaces build-nugets.ps1 and .github/workflows/build.ps1
- Uses Nuru for CLI routing (build, pack, clean commands)
- Uses Amuru for executing dotnet commands
- ScriptContext manages directory changes
- Includes auto-help via Nuru

scripts/test.cs:
- Replaces run-tests.ps1 and .github/workflows/test.ps1
- Builds and runs each test suite individually
- Uses Fixie as test runner
- Single default route with auto-help

Both scripts use .NET 10 file-based app features with #:package directives.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
… file apps

- Add 5 new .NET 10 C# single file apps using TimeWarp.Amuru:
  * scripts/clean.cs - Clean solution and caches
  * scripts/build.cs - Build projects with NuGet packaging
  * scripts/test.cs - Run all test suites
  * scripts/e2e.cs - Complex E2E test runner
  * scripts/package.cs - NuGet packaging workflow

- Create consolidated CI/CD workflow (.github/workflows/ci-cd.yml)
  replacing 8 separate workflow files

- Delete 13 legacy PowerShell scripts
- Delete 7 duplicate workflow YAMLs
- Move task to kanban/done/

Benefits:
- Cross-platform compatibility without PowerShell dependency
- Better performance and startup times
- Type safety with compile-time checking
- Strongly typed shell commands via TimeWarp.Amuru
- Easier debugging and testing
- Consistent C#/.NET technology stack
- Better IDE support and IntelliSense
Simplified render mode handling by removing unnecessary caching and reflection-based detection.
Kept only the essential render count tracking functionality.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Migrated e2e.cs and added run-test-app.cs to use the new TimeWarp.Amuru Shell
builder pattern instead of the deprecated Execute methods.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Replaced PowerShell script execution with direct convert-timestamp command
and properly set LastCommitDate property.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Removed standalone test-app.sln as test projects are already included
in the main solution.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated the kanban task to reflect completed render mode simplification
and script migrations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Remove references to deprecated ConfiguredRenderMode property and reflection-based
render mode detection. Document the use of .NET 9's RendererInfo.Name,
RendererInfo.IsInteractive, and AssignedRenderMode APIs.

Completes task 036 - Remove redundant render mode tracking logic.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Task completed with all items checked off:
- Removed custom CurrentRenderMode and ConfiguredRenderMode properties
- Migrated to .NET 9's RendererInfo.Name, RendererInfo.IsInteractive, and AssignedRenderMode
- Updated documentation to reflect the new approach
- All tests passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Group package references by category (TimeWarp, Microsoft ASP.NET Core, Code Analysis, Extensions, Testing, etc.) with clear section comments for better maintainability and easier version updates.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Use explicit type declaration for NuruApp variable
- Fix trailing whitespace on route definitions
- Convert to collection expressions for project arrays
- Add explicit type annotations to foreach variables
- Standardize indentation (2 spaces)
- Improve code consistency throughout

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Disable RestorePackagesWithLockFile in Directory.Build.props
- Delete all packages.lock.json files from source projects
- Remove obsolete package.json.does-not-work file

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Update Microsoft.AspNetCore packages from 9.0.8 to 9.0.9
- Add System.Collections.Immutable 9.0.9
- Update Microsoft.Extensions.Logging packages from 9.0.8 to 9.0.9
- Update Microsoft.NET.Test.Sdk from 17.14.1 to 18.0.0
- Update Microsoft.Playwright.MSTest from 1.54.0 to 1.55.0
- Update Microsoft.TypeScript.MSBuild from 5.9.2 to 5.9.3
- Update MSTest packages from 3.10.2 to 4.0.0
- Update JetBrains.Annotations from 2025.2.0 to 2025.2.2
- Update System.Net.Http.Json from 9.0.8 to 9.0.9

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Organize properties into logical groups following TimeWarp.Nuru structure:
- Package Metadata: NuGet package information
- MSBuild/NuGet Configuration: Build behavior settings
- Continuous Integration: CI-specific properties
- Project Defaults: Framework and language settings
- Code Quality and Analysis: Warning and documentation configuration
- Source Link Configuration: Debugging support
- Code Analyzers: Analyzer package references

Improves readability and maintainability by grouping related settings.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Define reusable MSBuild variables for repository structure:
- RepositoryName, RepositoryRoot for base paths
- SourceDirectory, TestsDirectory, SamplesDirectory for project organization
- ArtifactsDirectory, SolutionFile for build outputs
- LocalNuGetFeed, LocalNuGetCache for package management

Matches TimeWarp.Nuru structure for consistency across TimeWarp projects.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Reorganize Directory.Build.props and project files to use centralized path
variables, eliminating hardcoded paths and custom MSBuild targets.

## Directory.Build.props Changes

Root Directory.Build.props:
- Add custom repository variables (RepositoryRoot, ArtifactsDirectory, etc.)
- Keep TimeWarpStateVersion at root for cross-directory access

Source Directory.Build.props (new file):
- Package metadata (moved from root, scoped to source projects)
- Source Link configuration (moved from root, needed only for packages)
- PackageOutputPath=$(LocalNuGetFeed) for automatic package output

## Project File Updates

Analyzer/Generator projects:
- Set OutputPath=$(ArtifactsDirectory)analyzers\$(Configuration)\
- Outputs to artifacts/analyzers/Debug/ instead of bin/

Package projects (timewarp-state, timewarp-state-plus, timewarp-state-policies):
- Use $(RepositoryRoot) for asset paths (logo.png, read-me.md)
- Remove custom CopyPackage MSBuild targets (use PackageOutputPath instead)
- timewarp-state: Add ProjectReference to analyzers for build order
- timewarp-state: Update analyzer DLL paths to use $(ArtifactsDirectory)

## CI/CD Workflow Updates

.github/workflows/ci-cd.yml:
- Update version extraction path to source/Directory.Build.props
- Update package paths from ./LocalNugetFeed/ to ./artifacts/packages/

## Build Script Updates

scripts/build.cs:
- Add path constants (artifactsDirectory, packagesDirectory, analyzersDirectory)
- Remove redundant pack route (GeneratePackageOnBuild handles it)
- Update clean to remove artifacts directory
- Remove manual directory creation (MSBuild creates automatically)

## Results

Clean artifact structure:
artifacts/
├── analyzers/Debug/netstandard2.0/
│   ├── timewarp-state-analyzer.dll
│   └── timewarp-state-source-generator.dll
└── packages/
    ├── TimeWarp.State.*.nupkg
    ├── TimeWarp.State.Plus.*.nupkg
    └── TimeWarp.State.Policies.*.nupkg

Benefits:
- Centralized path management via MSBuild variables
- Standard MSBuild properties (PackageOutputPath, OutputPath)
- Proper build order with ProjectReference
- Eliminated custom MSBuild targets
- Consistent with TimeWarp.Nuru structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…ation

- Suppress NU1701 warnings in analyzer tests from legacy MEF dependencies
- Remove non-existent package versions from Directory.Packages.props
- Add MSTest Parallelize attribute to end-to-end tests

The Microsoft.CodeAnalysis.CSharp.Analyzer.Testing 1.1.2 package (latest version) has transitive dependencies on deprecated Microsoft.Composition packages that trigger .NET Framework compatibility warnings. These are harmless compatibility warnings - the packages work correctly on net9.0.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Renamed documentation files from hyphenated to standard naming:
- read-me.md → readme.md (root level)
- read-me.md → overview.md (kanban and scripts directories)
- read-me.md → readme.md (project directories)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add TimeWarp.Build.Tasks package for automated git commit metadata injection
- Remove custom SetAssemblyMetaData target and convert-timestamp dependency
- Remove Microsoft.SourceLink.GitHub package (functionality included in Build.Tasks)
- Remove CI build configuration (handled by Build.Tasks)
- Update all package readme references from read-me.md to readme.md
- Add .agent/workspace/ to .gitignore

This simplifies the build configuration by delegating git metadata handling
to a dedicated package, eliminating custom MSBuild targets and external tools.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@StevenTCramer StevenTCramer merged commit a59a80c into master Oct 16, 2025
2 of 3 checks passed
@StevenTCramer StevenTCramer deleted the Cramer/2025-08-12/032migrate-from-mediatr-to-timewarp-mediator branch October 16, 2025 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant