Skip to content

Commit 5a0e6a3

Browse files
Develop (#89)
* Merge dependabot updates to develop (#30) * Feature/cicd pipeline (#6) * ci(workflows): Enhance CI/CD pipeline configuration and build processes - Add comprehensive build workflow with multi-platform support - Update integration tests workflow to improve test execution - Expand .gitignore with additional test and artifact exclusions - Add CICD pipeline setup specification documents - Remove legacy debug and test generator projects - Configure GitHub Actions for consistent build and test environments - Implement caching for NuGet packages to improve build performance - Standardize build and test commands across workflows Resolves project infrastructure and CI/CD configuration improvements to streamline development and testing processes. * docs(github): Add comprehensive branch protection and workflow documentation - Add detailed branch protection setup and quick reference markdown files - Create CONTRIBUTING.md to outline project contribution guidelines - Update README.md with new documentation references - Add GitHub workflow configurations for CI/CD processes - Remove outdated integration-tests workflow - Add new PR validation, release, and test workflows - Configure Dependabot for automated dependency management - Enhance project documentation and setup instructions Rationale: Improve project onboarding, contribution guidelines, and CI/CD infrastructure with clear, comprehensive documentation and workflow configurations. * chore(deps): Bump actions/setup-java from 4 to 5 (#7) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4 to 5. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/github-script from 7 to 8 (#8) Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8. - [Release notes](https://github.com/actions/github-script/releases) - [Commits](https://github.com/actions/github-script/compare/v7...v8) --- updated-dependencies: - dependency-name: actions/github-script dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/download-artifact from 4 to 6 (#9) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 6. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v4...v6) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/upload-artifact from 4 to 5 (#10) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/setup-dotnet from 4 to 5 (#11) Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 4 to 5. - [Release notes](https://github.com/actions/setup-dotnet/releases) - [Commits](https://github.com/actions/setup-dotnet/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-dotnet dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Feature/cicd pipeline (#31) * ci(workflows): Enhance CI/CD pipeline configuration and build processes - Add comprehensive build workflow with multi-platform support - Update integration tests workflow to improve test execution - Expand .gitignore with additional test and artifact exclusions - Add CICD pipeline setup specification documents - Remove legacy debug and test generator projects - Configure GitHub Actions for consistent build and test environments - Implement caching for NuGet packages to improve build performance - Standardize build and test commands across workflows Resolves project infrastructure and CI/CD configuration improvements to streamline development and testing processes. * docs(github): Add comprehensive branch protection and workflow documentation - Add detailed branch protection setup and quick reference markdown files - Create CONTRIBUTING.md to outline project contribution guidelines - Update README.md with new documentation references - Add GitHub workflow configurations for CI/CD processes - Remove outdated integration-tests workflow - Add new PR validation, release, and test workflows - Configure Dependabot for automated dependency management - Enhance project documentation and setup instructions Rationale: Improve project onboarding, contribution guidelines, and CI/CD infrastructure with clear, comprehensive documentation and workflow configurations. * chore(dependabot): Refactor Dependabot configuration for library maintenance - Disable NuGet package ecosystem updates to preserve version compatibility - Add comment explaining rationale for disabling automatic NuGet updates - Set open-pull-requests-limit to 0 for NuGet ecosystem - Add target-branch configuration for GitHub Actions updates - Maintain existing labels and scheduling for GitHub Actions ecosystem * Feature/cicd pipeline (#32) * ci(workflows): Enhance CI/CD pipeline configuration and build processes - Add comprehensive build workflow with multi-platform support - Update integration tests workflow to improve test execution - Expand .gitignore with additional test and artifact exclusions - Add CICD pipeline setup specification documents - Remove legacy debug and test generator projects - Configure GitHub Actions for consistent build and test environments - Implement caching for NuGet packages to improve build performance - Standardize build and test commands across workflows Resolves project infrastructure and CI/CD configuration improvements to streamline development and testing processes. * docs(github): Add comprehensive branch protection and workflow documentation - Add detailed branch protection setup and quick reference markdown files - Create CONTRIBUTING.md to outline project contribution guidelines - Update README.md with new documentation references - Add GitHub workflow configurations for CI/CD processes - Remove outdated integration-tests workflow - Add new PR validation, release, and test workflows - Configure Dependabot for automated dependency management - Enhance project documentation and setup instructions Rationale: Improve project onboarding, contribution guidelines, and CI/CD infrastructure with clear, comprehensive documentation and workflow configurations. * chore(dependabot): Refactor Dependabot configuration for library maintenance - Disable NuGet package ecosystem updates to preserve version compatibility - Add comment explaining rationale for disabling automatic NuGet updates - Set open-pull-requests-limit to 0 for NuGet ecosystem - Add target-branch configuration for GitHub Actions updates - Maintain existing labels and scheduling for GitHub Actions ecosystem * chore(build): Enhance release workflow and standardize project configuration - Add Directory.Build.props for centralized project configuration - Update release.yml workflow to improve package versioning and validation - Remove hardcoded version numbers from individual project files - Add package dependency validation step in release workflow - Configure common build settings across all projects - Standardize version, assembly, and package version generation - Enable trimming and AOT compatibility for all projects - Improve package metadata and symbol generation This change ensures consistent versioning, build configuration, and package generation across the entire project ecosystem. * chore(project): Update project configuration and testing infrastructure (#33) - Add Kiro specification documents for migrating to Awesome Assertions - Update multiple unit test project configurations across solution - Add KNOWN_ISSUES.md documentation file - Modify GitHub workflow and documentation files - Update global usings and test project references - Refactor and standardize unit test project configurations - Prepare infrastructure for potential testing framework migration * refactor(source-generator): Restructure source generator code generation (#34) * refactor(source-generator): Restructure source generator code generation - Remove deprecated KNOWN_ISSUES.md file - Update multiple generator classes to improve code generation logic - Add new FileHeaderGenerator to centralize file header generation - Remove TableIndexGenerator in favor of more integrated index generation - Update unit tests to validate new generation approach - Consolidate index and field generation strategies - Improve overall source generator maintainability and consistency Resolves long-standing issue with duplicate index property generation by refactoring generation approach. * docs(changelog): Update changelog with source generation and table index changes - Add note about source generation using nested classes - Document fix for duplicate index generation on tables - Maintain consistent changelog formatting - Prepare for upcoming release documentation * feat(streams): Add comprehensive DynamoDB Streams processing support (#35) - Introduce new Oproto.FluentDynamoDb.Streams package for advanced stream processing - Implement type-safe stream record processing with strongly-typed deserialization - Add source generator support for stream conversion method generation - Create new attributes, processors, and extensions for stream handling - Implement discriminator-based stream routing and filtering mechanisms - Enhance integration tests and project configuration for streams support - Remove legacy stream processing implementations from core library - Add comprehensive unit and integration test coverage for new stream features Rationale: Improve DynamoDB stream processing capabilities with a modular, type-safe, and extensible architecture that separates concerns and provides flexible stream handling options. * Fixed a ton of broken integration tests (#36) * feat(updates): Add comprehensive expression-based updates support - Implement core infrastructure for expression-based DynamoDB updates - Add source generator support for creating UpdateExpression classes - Introduce new expression translation mechanisms for complex update scenarios - Create new exception types for update-related validation - Add new extension methods for update expression property handling - Enhance documentation with new core feature explanation - Add integration and unit tests for new update expression functionality - Prepare groundwork for advanced update scenarios including nullable support - Introduce initial phase of expression-based update design Resolves limitations discovered during initial implementation of update expression features, providing a robust foundation for flexible DynamoDB update operations. * Feature/update expression pt2 (#37) * feat(updates): Implement comprehensive expression-based updates for Phase 2 - Add nullable type support for extension methods - Implement format string application in UpdateExpressionTranslator - Support arithmetic operations in SET clauses - Improve mixing of update expression approaches - Write comprehensive integration tests for new features - Update documentation to reflect Phase 2 capabilities - Add new integration test suite for complex update scenarios - Enhance error handling and type constraints for update expressions Closes #Phase2 of expression-based updates implementation, introducing advanced DynamoDB update expression capabilities with improved type safety, formatting, and arithmetic support. * test(source-generator): Update unit tests to reflect new generated source files - Modify test assertions to expect 4 generated sources for single entity tests - Update test cases to expect 7 generated sources for multi-entity tests - Adjust expected generated file count to include new UpdateExpressions and UpdateExpressionsExtensions files - Ensure test coverage reflects expanded source generation capabilities - Maintain existing test validation and compilation checks * feat(serialization): Add comprehensive data serialization and formatting support (#49) - Enhance source generator to support DateTime Kind preservation - Add format string support for serialization and deserialization - Implement encryption handling in update expressions - Extend DynamoDbAttribute with DateTimeKind and Format parameters - Add new integration and unit tests for complex serialization scenarios - Create documentation guides for DateTime Kind, encryption, and format strings - Improve source generator metadata extraction and code generation - Update UpdateExpressionTranslator to handle formatted values This change introduces robust data serialization features to improve type safety, timezone handling, and data transformation capabilities in the FluentDynamoDb library. * feat(update-builders): Add comprehensive entity-specific update builder support (#50) - Introduce entity-specific update builders for simplified DynamoDB updates - Generate type-specific update builder classes via source generator - Add new `GenerateWrapperAttribute` to support builder generation - Create new API consistency and integration tests for update builders - Update documentation with examples of new entity-specific update builder usage - Enhance source generator to support more flexible update expression generation - Improve overall developer experience for DynamoDB update operations - Maintain backward compatibility with existing update request builders * feat(transaction-batch-api): Redesign transaction and batch APIs with… (#51) * feat(transaction-batch-api): Redesign transaction and batch APIs with unified builder pattern - Add static entry points `DynamoDbTransactions` and `DynamoDbBatch` for cleaner API surface - Introduce marker interfaces (`ITransactableGetBuilder`, `ITransactablePutBuilder`, etc.) to enable builder reuse across transaction and batch contexts - Replace parallel transaction-specific builders with unified `TransactionGetBuilder` and `TransactionWriteBuilder` - Rename batch builders from `BatchGetItemBuilder`/`BatchWriteItemBuilder` to `BatchGetBuilder`/`BatchWriteBuilder` for consistency - Add `ConditionCheckBuilder<T>` for transaction condition checks without code duplication - Add `BatchGetResponse` and `TransactionGetResponse` types for structured response handling - Reorganize API consistency tests into dedicated `Batch/` and `Transactions/` directories - Update integration tests to validate new transaction and batch API patterns - Add comprehensive design specification and requirements documentation in `.kiro/specs/` - Eliminate code duplication by reusing existing request builders through typed `Add()` method overloads - Maintain compile-time safety and fluent API ergonomics across all operation types * docs(changelog): Document transaction and batch API redesign with unified builder pattern * feat(geospatial): Add comprehensive geospatial query support with GeoHash encoding (#62) - Add new Oproto.FluentDynamoDb.Geospatial package with GeoHash-based location queries - Implement GeoLocation struct with Haversine distance calculations (meters, kilometers, miles) - Implement GeoBoundingBox struct for rectangular geographic area queries - Add GeoHashEncoder with configurable precision levels (1-12) for coordinate encoding - Add GeoHashCell struct representing individual geohash cells with neighbor calculations - Implement GeoHashExtensions for encoding/decoding coordinates to/from geohash strings - Implement GeoHashBoundingBoxExtensions for calculating geohash ranges from bounding boxes - Add GeoHashQueryExtensions for fluent lambda-based geospatial query API - Add comprehensive unit test suite covering error handling, encoding, and query scenarios - Extend source generator to detect geospatial package and generate GeoHash serialization - Update EntityAnalyzer, MapperGenerator, and PropertyModel for geospatial property support - Add DynamoDbAttributeAttribute.GeoHashPrecision property for per-property precision control - Add integration tests with StoreEntity demonstrating real-world geospatial usage - Include detailed documentation: README, EXAMPLES, PRECISION_GUIDE, and LIMITATIONS - Add design specifications and requirements documentation in .kiro/specs - Update CHANGELOG with geospatial feature details - Enables efficient geographic queries on DynamoDB using GeoHash-based range queries with AOT compatibility * fix(request-builders): Fix empty ExpressionAttributeNames and paralle… (#63) * fix(request-builders): Fix empty ExpressionAttributeNames and parallel build issues - Remove unnecessary empty ExpressionAttributeNames dictionary initialization in GetItemRequestBuilder, DeleteItemRequestBuilder, and ScanRequestBuilder that caused DynamoDB to reject requests - Add `/maxcpucount:1` flag to all dotnet build commands in GitHub Actions workflows to prevent file locking conflicts from source generator parallel builds - Update unit test assertion to use `BeNullOrEmpty()` instead of `BeEmpty()` to match corrected behavior - DynamoDB API rejects requests when ExpressionAttributeNames is set but empty; only set when attribute names are actually used * ci: Update DynamoDB Local download URL and add to gitignore - Update DynamoDB Local download URL from S3 to CloudFront CDN endpoint in test workflow - Change URL from https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz to https://d1ni2b6xgvw0s0.cloudfront.net/v2.x/dynamodb_local_latest.tar.gz for both Linux and Windows test jobs - Add dynamodb-local/ directory to .gitignore to prevent committing downloaded DynamoDB Local artifacts - Improves CI/CD reliability by using the official CloudFront distribution and prevents accidental commits of test dependencies * test(performance): Relax parallel execution performance assertion for CI environments - Update parallel performance test to allow 50% tolerance for parallel execution time - Replace strict sequential/parallel comparison with more realistic threshold accounting for CI overhead - Add clarifying comments explaining tolerance for resource contention in CI environments - Improve test reliability by reducing false negatives from infrastructure variability * ci: Improve CI workflow robustness and relax performance test assertions - Add coverage directory existence check in test.yml to prevent failures when coverage artifacts are missing - Suppress find command errors with 2>/dev/null to handle missing coverage directories gracefully - Add continue-on-error: true to coverage report generation step for better CI resilience - Update performance test assertions to verify operation completion rather than timing relationships - Remove strict parallel execution speedup assertion that was unreliable in CI environments with variable resource availability - Add diagnostic logging for sequential and parallel execution times for troubleshooting purposes - Improve error messages and comments to clarify CI environment limitations and test intent * Feature/geo s2 h3 (#75) * test(geospatial): Add comprehensive S2 and H3 spatial indexing tests - Add extensive H3 encoder unit tests covering all resolution levels (0-4) - Add S2 encoder unit tests with property-based and reference validation - Add H3 coordinate system and data integrity verification tests - Add S2 component verification and cross-validation tests - Add property test arbitraries for geospatial coordinate generation - Update geospatial unit test project configuration and global usings - Add design specifications and requirements documentation for S2/H3 support - Add SpatialIndexType enumeration for pluggable spatial index selection - Update DynamoDbAttributeAttribute to support S2 and H3 configuration - Add THIRD-PARTY-NOTICES.md for spatial indexing library attributions - Comprehensive test coverage ensures correctness of spatial encoding algorithms across multiple resolutions and edge cases * test(geospatial): Expand H3 encoder test coverage and fix coordinate consistency tests - Add H3CoordinateRoundTripTest for internal coordinate transformation debugging - Add H3DateLineDiagnosticTest for date line encoding edge case diagnostics - Add H3EncodingVerificationTest for comprehensive encoding validation - Add H3EquatorDebugTest for equatorial region encoding verification - Add H3FaceOverageDebugTest for face coverage boundary testing - Add H3PentagonEncodingTests for pentagon cell encoding validation - Update H3DataIntegrityTests to verify H3 guarantees (deterministic encode/decode, logical containment) rather than incorrect round-trip assumption - Update H3EncoderPropertyTests with improved test coverage - Update H3DetailedDebugTest with additional diagnostic cases - Update H3FailingCaseTest with new edge cases - Update H3Encoder implementation to support new test scenarios - Update task tracking to mark 15.7f complete and document pentagon encoding issue in 15.8 - Clarify that H3 does not guarantee encode→decode→encode produces same index per H3 specification * feat(geospatial): Expand spatial indexing with S2/H3 cell covering and query API - Add comprehensive cell covering computation for S2 and H3 spatial indexes - Implement SpatialQueryAsync API for multi-cell proximity and bounding box queries - Add SpatialQueryResponse and SpatialContinuationToken for pagination support - Create S2Cell, S2CellCovering, H3Cell, and H3CellCovering classes for spatial operations - Add GeoLocationExtensions and S2/H3Extensions for coordinate manipulation - Implement GeoHashCellCovering for consistent cell covering across all index types - Add StoreCoordinatesAttribute for automatic coordinate storage configuration - Expand test coverage with CellCoveringPropertyTests, DatelineCellCoveringTests, PoleHandlingTests, and S2/H3-specific tests - Add comprehensive documentation: COORDINATE_STORAGE_GUIDE.md, PERFORMANCE_GUIDE.md, S2_H3_USAGE_GUIDE.md - Update source generator to support spatial index code generation and diagnostics - Remove H3ReferenceDataTests in favor of property-based testing approach - Update specification documents with finalized design and implementation details * test(geospatial): Expand spatial indexing test coverage and fix H3 cell covering algorithm - Add comprehensive H3 unit tests including pentagon encoding, neighbor analysis, and base cell lookups - Add S2 and H3 integration tests covering spatial queries, edge cases, and performance benchmarks - Add cross-index comparison tests to validate S2 and H3 behavior consistency - Fix H3Encoder.GetNeighbors() to return correct adjacent cell indices instead of unrelated cells - Fix H3 cell covering algorithm to properly expand rings and return complete result sets - Add diagnostic test cases for H3 encoding/decoding edge cases and coordinate consistency - Add test entities for S2 and H3 spatial indexing with various storage patterns (GSI, sort keys, computed properties) - Update source generator deserialization tests for spatial index support - Add expression translator tests for GeoLocation and GSI key validation - Update design and requirements documentation for cell covering algorithm fixes - Add known limitations documentation for source generator - Improve coordinate storage guide and S2/H3 usage guide documentation * test(geospatial): Fix integration tests and refactor spatial query test entities - Rename reserved keyword attributes in test entities (location→loc, status→store_status) - Fix test code bugs generating invalid coordinate values in H3/S2 edge case tests - Reorganize integration tests with GSI-specific test classes for S2 and H3 spatial queries - Add new test entities with GSI low precision variants for comprehensive coverage - Update cell covering property tests with improved edge case handling - Add diagnostic test utilities for spatial indexing validation - Add GeoHash API consistency tests for query surface validation - Refactor spatial query architecture tests with improved test infrastructure - Update S2/H3 encoder tests with enhanced cross-validation coverage - Improve pole handling and dateline cell covering test coverage - Update specification documents reflecting completed integration test fixes * docs(changelog): Add S2 and H3 geospatial indexing features and documentation - Document S2 cell encoding/decoding with configurable precision levels (0-30) - Document H3 hexagonal cell encoding/decoding with configurable resolutions (0-15) - Add cell covering algorithms for radius and bounding box queries - Document spiral-ordered results and neighbor cell calculation features - Add parent/child cell navigation and International Date Line crossing support - Document polar region handling and cell count estimation capabilities - Add hard limits on cell counts to prevent expensive queries (default: 100, max: 500) - Document S2Cell and H3Cell value types with bounds, neighbors, parent, and children - Add S2CellCovering and H3CellCovering for computing cell coverings - Document S2Encoder and H3Encoder for coordinate-to-cell conversion - Add extension methods: ToS2Cell(), ToS2Token(), ToH3Cell(), ToH3Index() - Document GSI-based spatial query support for efficient DynamoDB queries - Add fluent query extensions: WithinRadiusS2(), WithinRadiusH3(), WithinBoundingBoxS2(), WithinBoundingBoxH3() - Document continuation token support for paginated spatial queries - Add full AOT compatibility for Native AOT deployments - Include S2 vs H3 comparison and usage examples - Add references to new documentation guides for S2, H3, and spatial query patterns * feat(code-cleanup): Remove reflection and eliminate compiler warnings (#76) - Add IEntityMetadataProvider interface for compile-time entity metadata discovery - Add IProjectionModel and IDiscriminatedProjection interfaces for projection support - Add IHasDynamoDbClient interface to replace reflection-based client access - Refactor MetadataResolver to use interface-based metadata instead of reflection - Remove WithClientExtensions.cs and integrate client access through builder interfaces - Update ProjectionExtensions to use IProjectionModel interface instead of reflection - Add DynamicCompilationHelper for test infrastructure without reflection - Add ReflectionReductionPropertyTests to verify no-reflection code paths - Add NoReflectionPropertyTests and WithClientPropertyTests for interface validation - Update all request builders to implement IHasDynamoDbClient interface - Suppress remaining compiler warnings in test projects with documentation - Update CHANGELOG.md with breaking changes and migration guidance - Add design specification for code cleanup and reflection removal strategy - Improve AOT compatibility and trimmer safety across the library * Feature/service registration (#77) * feat(aot-service-registration): Implement AOT-compatible service registration pattern - Add FluentDynamoDbOptions configuration object for instance-based service registration - Introduce IGeospatialProvider, IEntityHydratorRegistry, and related provider interfaces - Implement DefaultGeospatialProvider and DefaultEntityHydratorRegistry for default behavior - Add HydratorGenerator source generator for compile-time entity hydration code generation - Create GeospatialOptionsExtensions for fluent configuration of geospatial features - Update ExpressionTranslator and UpdateExpressionTranslator to use injected providers - Modify all request builders to accept and use FluentDynamoDbOptions - Add comprehensive unit tests for options, providers, and source-generated code - Update DynamoDbTableBase to pass options through constructor injection - Add AOT-compatible service registration design and requirements specifications - Update documentation with Configuration and Geospatial advanced topics - Eliminate remaining reflection-based type discovery and instantiation - Ensure test isolation through instance-based configuration instead of global state * refactor(request-builders): Consolidate constructor overloads with optional parameters - Merge duplicate constructors into single constructor with optional FluentDynamoDbOptions parameter - Remove separate logger-based constructor overloads from all request builders - Update ConditionCheckBuilder, DeleteItemRequestBuilder, GetItemRequestBuilder, PutItemRequestBuilder, QueryRequestBuilder, ScanRequestBuilder, and UpdateItemRequestBuilder - Simplify API surface by using default parameter values instead of multiple overloads - Maintain backward compatibility through optional parameters with sensible defaults - Reduce code duplication and improve maintainability across request builder classes * fix(sensitive-data-redaction): Fix sensitive data redaction in logs and source generator (#78) - Added `IsSensitive` property to `PropertyMetadata` for runtime sensitivity detection - Updated `ExpressionTranslator.CaptureValue()` to check `PropertyMetadata.IsSensitive` for redaction decisions - Updated `MapperGenerator` to populate `IsSensitive = true` in generated `PropertyMetadata` for sensitive properties - Sensitive property values now correctly show as `[REDACTED]` in debug logs while actual values are used in DynamoDB queries - Added missing `using Oproto.FluentDynamoDb;` directive to `TableGenerator.cs` and `EntitySpecificUpdateBuilderGenerator.cs` - Generated table classes and update builders now correctly resolve `FluentDynamoDbOptions` type - Updated integration tests to use `FluentDynamoDbOptions` for logger configuration - Updated CHANGELOG.md with fixes for sensitive data redaction and source generator compilation errors * docs(compile-warnings): Add specification for systematic warning reduction initiative (#79) - Add design document outlining phased approach to reduce 1,182 compile warnings - Add requirements specification for warning reduction across all projects - Add task breakdown for implementation phases 1-6 - Update CHANGELOG.md with warning reduction initiative details - Update project files to enable nullable reference types and stricter analysis - Fix nullable reference type warnings across test projects and main library - Update API surface tests to reflect nullable annotation changes - Add AnalyzerReleases tracking files for source generator diagnostics - Update diagnostic descriptors to document all analyzer rules - Restructure code to eliminate reflection-based warnings in main library - Add proper nullable annotations to generated code and examples - Suppress AOT/trimming warnings in test projects where appropriate - This systematic approach prioritizes fixing root causes over blanket suppressions * Feature/documentation validation and updates (#80) * docs(documentation-overhaul): Establish comprehensive documentation standards and guidelines - Add design specification for documentation overhaul initiative with layered architecture approach - Add requirements document defining scope, success criteria, and deliverables for documentation improvements - Add task breakdown and implementation roadmap for documentation overhaul phases - Add steering document establishing API style priority (Lambda > Format String > Manual) and documentation standards - Update all unit and integration tests with improved code comments and documentation clarity - Update geospatial module (H3, S2) with enhanced inline documentation and architectural comments - Update source generator tests with clarified test purposes and expected behaviors - Update README.md with organization attribution and improved project overview - Update THIRD-PARTY-NOTICES.md with comprehensive attribution for S2 and H3 geospatial libraries - Update docs/README.md with navigation structure and documentation hub organization - Establish documentation standards for code examples, method verification, and attribution requirements - Improve code comment quality across test suites and core modules for maintainability * docs(documentation-overhaul): Complete comprehensive documentation updates and accuracy improvements - Create internal architecture documentation covering IDynamoDbEntity interface, source generation, and request builder integration - Add new API reference documentation with organized method listings by operation category - Update core feature guides with API style ordering (lambda expressions, format strings, manual approaches) - Verify and audit all code examples across getting-started, core-features, and advanced-topics sections - Restore Keys.Pk()/Keys.Sk() usage patterns and document key builder functionality with prefix formatting - Document entity accessors on generated tables and their type-safe benefits - Add lambda expression SET operation examples (Add, Remove, Delete, IfNotExists, ListAppend) - Document manual field name usage with compile-time validation trade-offs - Update documentation index and navigation with new pages - Update CHANGELOG.md with all documentation improvements - Mark all documentation overhaul tasks as complete in task tracking * Feature/example projects (#81) * feat(examples): Add comprehensive example applications demonstrating library capabilities - Add Examples.Shared project with DynamoDbSetup and ConsoleHelpers utilities for shared infrastructure - Add TodoList example application demonstrating basic CRUD operations with single-entity design - Add InvoiceManager example application showcasing single-table multi-entity design patterns - Add TransactionDemo example application comparing transaction approaches and atomicity guarantees - Add StoreLocator example application demonstrating geospatial queries with GeoHash, S2, and H3 encoding - Add Examples.Tests project with property-based tests for all example applications - Update CHANGELOG.md and QUICK_REFERENCE.md documentation - Add comprehensive design and requirements specifications in .kiro/specs for example applications and storelocator-adaptive-precision - Reorganize solution structure with examples folder containing all example projects - Remove legacy BasicUsage example and replace with new structured examples - All examples configured to use DynamoDB Local and direct project references to latest source code * feat(storelocator): Fix GeoHash queries and add GSI validation - Replace incorrect SpatialQueryAsync with lambda-based Query using WithinDistanceKilometers for GeoHash searches - Add post-filtering by exact distance to handle rectangular approximation from BETWEEN queries - Implement GSI validation in Program.cs to detect missing Global Secondary Indexes at startup - Add table recreation capability to recreate tables with correct index definitions - Update StoreGeoHashTable.FindStoresNearbyAsync to use proper query approach for GeoHash precision 7 index - Add design specification documenting GeoHash query fix and GSI validation architecture - Update project dependencies and build configuration across all packages - Enhance ConsoleHelpers with improved output formatting for warnings and validation messages - Add comprehensive requirements and task documentation for storelocator query fixes This fixes the issue where GeoHash queries were incorrectly using SpatialQueryAsync (designed for S2/H3 cell hierarchies) instead of the proper lambda expression approach that translates to DynamoDB BETWEEN queries. * docs(api-corrections): Correct outdated API patterns and add documentation changelog (#82) - Add design specification for systematic documentation API corrections initiative - Add requirements document for documentation validation and updates - Add tasks document outlining correction workflow and tracking - Create docs/DOCUMENTATION_CHANGELOG.md to track documentation changes separately from main CHANGELOG - Update .kiro/steering/documentation.md to include changelog maintenance requirements - Correct ExecuteAsync() method references to proper API methods (GetItemAsync, PutAsync, UpdateAsync, DeleteAsync, ToListAsync) across all documentation files - Update return value access patterns in code examples to use correct APIs (ToDynamoDbResponseAsync or DynamoDbOperationContext) - Add AsyncLocal caveats to documentation where context-based patterns are used - Update XML documentation comments in request builders to reflect current API - Correct code examples in core features, advanced topics, getting started, and reference sections - Add documentation changelog entries to track all corrections made - Update main CHANGELOG.md with documentation correction initiative entry This systematic approach ensures all outdated API patterns are identified and corrected while maintaining a separate changelog for documentation changes to facilitate synchronization with derived documentation maintained by other teams. * Feature/sample operations (#83) * feat(operation-samples): Add comprehensive DynamoDB operation samples showcase - Add OperationSamples project with compilable code examples demonstrating FluentDynamoDb API usage - Create Order and OrderLine domain models with single-table design pattern - Implement sample files for all DynamoDB operations: Get, Put, Update, Delete, Query, Scan, BatchGet, BatchWrite, TransactionGet, TransactionWrite - Each operation sample includes four implementation patterns: Raw AWS SDK, FluentDynamoDb manual builder, formatted strings, and lambda expressions - Add design specification and requirements documentation for the operation samples showcase - Provide side-by-side comparisons showing verbosity reduction and API improvements over raw AWS SDK - Enable use of samples for screenshots and video presentations demonstrating FluentDynamoDb capabilities * feat(operation-samples): Refine samples for full equivalency with domain model conversions - Update RawSdk methods to manually convert AWS SDK responses to domain models - Add manual conversion from AttributeValue dictionaries in BatchGetSamples - Implement ReturnValues in DeleteSamples to return deleted Order entity - Add manual conversion from AttributeValue dictionaries in GetSamples - Implement ReturnValues in PutSamples to return created Order entity - Add manual conversion from AttributeValue dictionaries in QuerySamples - Add manual conversion from AttributeValue dictionaries in ScanSamples - Implement ReturnValues in TransactionGetSamples for domain model returns - Implement ReturnValues in TransactionWriteSamples for domain model returns - Create OrderUpdateModel class for lambda expression Set() operations - Update FluentLambdaUpdateAsync to use Set(x => new OrderUpdateModel { ... }) syntax - Update FluentLambdaTransactionWriteAsync to use proper lambda expressions with conditions - Verify express-route methods are used in FluentLambda samples - Mark task 7 and all subtasks as complete in operation-samples-showcase specification - Ensures full equivalency between RawSdk and Fluent approaches for demonstration purposes * feat(lambda-expression-api-gaps): Add lambda expression support and scan opt-in pattern (#84) - Add lambda expression `Where()` overloads for `PutItemRequestBuilder<TEntity>` and `DeleteItemRequestBuilder<TEntity>` to enable type-safe condition expressions - Implement `GenerateAccessorScanMethods` in source generator to create `Scan()` methods for entity accessors - Introduce `[Scannable]` attribute requirement for Scan operations to prevent accidental expensive table scans - Remove generic `Scan<TEntity>()` method from `DynamoDbTableBase` and enforce opt-in pattern via attribute - Add comprehensive unit tests for lambda expression API gaps in `LambdaExpressionApiGapsPropertyTests.cs` - Update integration tests to use `[Scannable]` attribute on entities that support scanning - Add design specification and requirements documentation for lambda expression API gaps feature - Update CHANGELOG.md and DOCUMENTATION_CHANGELOG.md with new features and breaking changes - Ensure condition expressions use `ExpressionValidationMode.None` to allow referencing any property, not just keys * feat(example-entity-cleanup): Clean up entity definitions and documentation (#85) - Remove redundant [DynamoDbEntity] attributes from table entities (only needed for nested types) - Remove IDynamoDbEntity interface implementations auto-generated by source generator - Remove duplicate CreatePk() and CreateSk() methods that conflict with source-generated Keys - Add Prefix configuration to [PartitionKey] and [SortKey] attributes for key formatting - Update OperationSamples Order and OrderLine entities with proper key prefixes - Update InvoiceManager Customer, Invoice, and InvoiceLine entities - Update StoreLocator GeoHash, H3, and S2 entities - Update TransactionDemo Account and TransactionRecord entities - Update TodoList TodoItem entity - Update documentation examples in ProjectionModels, FieldLevelSecurity, and DOCUMENTATION_CHANGELOG - Add design specification and requirements for entity cleanup initiative - Add entity patterns steering document for future reference - Refactor entities to rely on source-generated implementations instead of manual code * feat(nuget-package-polish): Add comprehensive NuGet package polish across all packages (#86) - Add design specification, requirements, and task documentation for NuGet package polish initiative - Create missing README.md files for Oproto.FluentDynamoDb, Logging.Extensions, NewtonsoftJson, and SystemTextJson packages - Update existing README files for consistency and quality across all packages - Add shared package icon (128x128 PNG) in docs/assets directory - Configure all package .csproj files to reference shared icon and include README files in NuGet packages - Update Directory.Build.props with common package metadata (Authors, Copyright, URLs) - Add FluentDynamoDB logo SVG asset for documentation - Update root README.md with comprehensive project overview and package descriptions - Ensure consistent package descriptions and metadata across all 10 packages - Standardize README structure with installation, usage, features, and links sections * Feature/json refactor (#87) * feat(nuget-package-polish): Add comprehensive NuGet package polish across all packages - Add design specification, requirements, and task documentation for NuGet package polish initiative - Create missing README.md files for Oproto.FluentDynamoDb, Logging.Extensions, NewtonsoftJson, and SystemTextJson packages - Update existing README files for consistency and quality across all packages - Add shared package icon (128x128 PNG) in docs/assets directory - Configure all package .csproj files to reference shared icon and include README files in NuGet packages - Update Directory.Build.props with common package metadata (Authors, Copyright, URLs) - Add FluentDynamoDB logo SVG asset for documentation - Update root README.md with comprehensive project overview and package descriptions - Ensure consistent package descriptions and metadata across all 10 packages - Standardize README structure with installation, usage, features, and links sections * feat(json-serializer-refactor): Refactor JSON serialization to runtime configuration - Add IJsonBlobSerializer interface for pluggable JSON serialization in core library - Create SystemTextJsonBlobSerializer and SystemTextJsonOptionsExtensions for System.Text.Json support - Create NewtonsoftJsonBlobSerializer and NewtonsoftJsonOptionsExtensions for Newtonsoft.Json support - Remove compile-time DynamoDbJsonSerializerAttribute and JsonSerializerType enum - Update FluentDynamoDbOptions to accept IJsonBlobSerializer configuration - Refactor source generator to detect and use runtime serializer configuration - Update JsonSerializerContextGenerator to work with runtime configuration - Add comprehensive integration tests for JsonBlob advanced type handling - Update all unit tests to use new runtime serializer configuration - Add design specification and requirements documentation for refactor initiative - Update CHANGELOG and documentation with new serializer configuration patterns - Enable flexible JSON serializer selection at runtime instead of compile-time attributes * feat(options-propagation-fixes): Fix options propagation in batch/transaction responses and documentation - Add options propagation to BatchGetResponse, BatchGetBuilder, TransactionGetResponse, and TransactionGetBuilder to ensure serializer configuration is available during hydration - Update IAsyncEntityHydrator interface to accept FluentDynamoDbOptions parameter for consistent options handling - Fix HydratorGenerator to pass options through generated hydration code - Correct API usage patterns in documentation: replace `.ExecuteAsync()` with `.PutAsync()` and `.ToListAsync()` for Put and Query operations - Update README files in Oproto.FluentDynamoDb.NewtonsoftJson and Oproto.FluentDynamoDb.SystemTextJson packages with corrected API examples - Add comprehensive design specification for options propagation architecture in `.kiro/specs/options-propagation-fixes/` - Update integration test build fixes specification with corrected API patterns - Update CHANGELOG.md and DOCUMENTATION_CHANGELOG.md with changes and corrections - Update GenerateAccessorsAttribute documentation and advanced topics guides with correct API usage - Fixes issue where [JsonBlob] properties would fail during batch/transaction response hydration due to missing serializer configuration * Feature/merge main into dev (#88) * Feature/cicd pipeline (#6) * ci(workflows): Enhance CI/CD pipeline configuration and build processes - Add comprehensive build workflow with multi-platform support - Update integration tests workflow to improve test execution - Expand .gitignore with additional test and artifact exclusions - Add CICD pipeline setup specification documents - Remove legacy debug and test generator projects - Configure GitHub Actions for consistent build and test environments - Implement caching for NuGet packages to improve build performance - Standardize build and test commands across workflows Resolves project infrastructure and CI/CD configuration improvements to streamline development and testing processes. * docs(github): Add comprehensive branch protection and workflow documentation - Add detailed branch protection setup and quick reference markdown files - Create CONTRIBUTING.md to outline project contribution guidelines - Update README.md with new documentation references - Add GitHub workflow configurations for CI/CD processes - Remove outdated integration-tests workflow - Add new PR validation, release, and test workflows - Configure Dependabot for automated dependency management - Enhance project documentation and setup instructions Rationale: Improve project onboarding, contribution guidelines, and CI/CD infrastructure with clear, comprehensive documentation and workflow configurations. * chore(deps): Bump actions/setup-java from 4 to 5 (#7) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4 to 5. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/github-script from 7 to 8 (#8) Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8. - [Release notes](https://github.com/actions/github-script/releases) - [Commits](https://github.com/actions/github-script/compare/v7...v8) --- updated-dependencies: - dependency-name: actions/github-script dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/download-artifact from 4 to 6 (#9) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 6. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v4...v6) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/upload-artifact from 4 to 5 (#10) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/setup-dotnet from 4 to 5 (#11) Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 4 to 5. - [Release notes](https://github.com/actions/setup-dotnet/releases) - [Commits](https://github.com/actions/setup-dotnet/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-dotnet dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): Bump actions/checkout from 4 to 5 (#38) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent d9854ce commit 5a0e6a3

File tree

704 files changed

+129596
-15992
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

704 files changed

+129596
-15992
lines changed

.github/INDEX.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ This directory contains all CI/CD workflows and configuration documentation for
55
## 📋 Quick Start
66

77
**New to the CI/CD setup?** Start here:
8-
1. Read [README.md](./README.md) for an overview
8+
1. Read [WORKFLOWS.md](./WORKFLOWS.md) for an overview
99
2. Review [SETUP_COMPLETION_CHECKLIST.md](./SETUP_COMPLETION_CHECKLIST.md) to see what's done
1010
3. Follow [BRANCH_PROTECTION_SETUP.md](./BRANCH_PROTECTION_SETUP.md) to complete manual setup
1111

1212
## 📚 Documentation Files
1313

1414
### Overview and Status
15-
- **[README.md](./README.md)** - Overview of all workflows and configuration
15+
- **[WORKFLOWS.md](./WORKFLOWS.md)** - Overview of all workflows and configuration
1616
- **[SETUP_COMPLETION_CHECKLIST.md](./SETUP_COMPLETION_CHECKLIST.md)** - Track setup progress and completion
1717

1818
### Manual Setup Required

.github/SETUP_COMPLETION_CHECKLIST.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ git push origin v0.5.1-test.1
162162

163163
- **Branch Protection Setup**: [BRANCH_PROTECTION_SETUP.md](./BRANCH_PROTECTION_SETUP.md)
164164
- **Manual Setup Overview**: [MANUAL_SETUP_REQUIRED.md](./MANUAL_SETUP_REQUIRED.md)
165-
- **Workflows Documentation**: [README.md](./README.md)
165+
- **Workflows Documentation**: [WORKFLOWS.md](./WORKFLOWS.md)
166166
- **GitHub Documentation**: https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches
167167

168168
## Troubleshooting

.github/WORKFLOWS.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# GitHub Workflows and Configuration
2+
3+
This directory contains the CI/CD workflows and configuration for the Oproto.FluentDynamoDb project.
4+
5+
## Workflows
6+
7+
### Automated Workflows
8+
9+
- **`build.yml`** - Build validation across multiple platforms (Linux, Windows, macOS)
10+
- **`test.yml`** - Unit and integration tests with code coverage
11+
- **`release.yml`** - Automated package building and GitHub release creation
12+
- **`pr-validation.yml`** - Comprehensive PR validation including changelog checks
13+
- **`failure-notification.yml`** - Automatic issue creation for workflow failures
14+
15+
### Manual Configuration Required
16+
17+
⚠️ **Branch Protection Rules** must be configured manually through GitHub's web interface.
18+
19+
See [BRANCH_PROTECTION_SETUP.md](./BRANCH_PROTECTION_SETUP.md) for detailed setup instructions.
20+
21+
Quick link: Navigate to **Settings → Branches** in your repository.
22+
23+
## Setup Checklist
24+
25+
- [x] Build workflow configured
26+
- [x] Test workflow configured
27+
- [x] Release workflow configured
28+
- [x] PR validation workflow configured
29+
- [x] Failure notification workflow configured
30+
- [ ] **Branch protection rules configured** (requires manual setup)
31+
- [ ] Dependabot configured (optional)
32+
- [ ] Status badges added to README (optional)
33+
34+
## Documentation
35+
36+
- [BRANCH_PROTECTION_SETUP.md](./BRANCH_PROTECTION_SETUP.md) - Step-by-step guide for configuring branch protection
37+
- [MANUAL_SETUP_REQUIRED.md](./MANUAL_SETUP_REQUIRED.md) - Overview of manual configuration steps
38+
39+
## Workflow Triggers
40+
41+
### Build Workflow
42+
- Push to `main` or `develop`
43+
- Pull requests to `main` or `develop`
44+
- Manual dispatch
45+
46+
### Test Workflow
47+
- Push to `main` or `develop`
48+
- Pull requests to `main` or `develop`
49+
- Called by PR validation workflow
50+
- Manual dispatch
51+
52+
### Release Workflow
53+
- Push of version tags matching `v*.*.*` (e.g., `v1.0.0`, `v1.2.3-beta.1`)
54+
55+
### PR Validation Workflow
56+
- Pull request opened, synchronized, or reopened
57+
- Targets `main` or `develop`
58+
59+
### Failure Notification Workflow
60+
- Any workflow failure on `main` or `develop` branches
61+
62+
## Status Checks
63+
64+
The following status checks are configured in the workflows:
65+
66+
**Build:**
67+
- `build (ubuntu-latest)`
68+
- `build (windows-latest)`
69+
- `build (macos-latest)`
70+
71+
**Unit Tests:**
72+
- `unit-tests (ubuntu-latest)`
73+
- `unit-tests (windows-latest)`
74+
- `unit-tests (macos-latest)`
75+
76+
**Integration Tests:**
77+
- `integration-tests (ubuntu-latest)`
78+
- `integration-tests (windows-latest)`
79+
- `integration-tests (macos-latest)`
80+
81+
**PR Validation:**
82+
- `validate-pr`
83+
84+
These status check names must be added to branch protection rules for enforcement.
85+
86+
## Release Process
87+
88+
1. Update CHANGELOG.md with version changes
89+
2. Commit changelog updates
90+
3. Create and push version tag: `git tag v1.0.0 && git push origin v1.0.0`
91+
4. Release workflow automatically:
92+
- Validates tag format
93+
- Builds NuGet packages
94+
- Creates GitHub Release
95+
- Attaches packages to release
96+
5. Manually publish packages to NuGet.org (future: automate)
97+
98+
## Troubleshooting
99+
100+
### Workflows Not Running
101+
102+
- Check that workflows are enabled in repository settings
103+
- Verify trigger conditions match your branch/tag names
104+
- Check workflow run history for errors
105+
106+
### Status Checks Not Appearing
107+
108+
- Workflows must run at least once before status checks appear
109+
- Create a test PR to trigger workflows
110+
- Wait for completion, then check branch protection settings
111+
112+
### Test Failures
113+
114+
- Review workflow logs for detailed error messages
115+
- Check DynamoDB Local logs for integration test failures
116+
- Verify all dependencies are properly installed
117+
118+
## Support
119+
120+
For issues with workflows or CI/CD setup:
121+
122+
1. Check the troubleshooting sections in workflow documentation
123+
2. Review GitHub Actions logs for detailed error messages
124+
3. Create an issue in the repository with workflow run links

.github/dependabot.yml

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
11
version: 2
22
updates:
3-
# NuGet package ecosystem
3+
# NuGet package ecosystem - DISABLED
4+
# This is a library that uses version ranges to maintain compatibility with user environments.
5+
# Dependabot's automatic updates would force minimum version bumps that reduce compatibility.
6+
# Dependency updates are managed manually during release planning.
47
- package-ecosystem: "nuget"
58
directory: "/"
69
schedule:
710
interval: "weekly"
8-
day: "monday"
9-
time: "09:00"
10-
open-pull-requests-limit: 10
11-
labels:
12-
- "dependencies"
13-
- "nuget"
14-
commit-message:
15-
prefix: "chore"
16-
include: "scope"
17-
reviewers:
18-
- "oproto/maintainers"
19-
assignees:
20-
- "oproto/maintainers"
11+
open-pull-requests-limit: 0 # Disabled
2112

2213
# GitHub Actions ecosystem
2314
- package-ecosystem: "github-actions"
@@ -26,6 +17,7 @@ updates:
2617
interval: "weekly"
2718
day: "monday"
2819
time: "09:00"
20+
target-branch: "develop" # Target develop branch for Git Flow workflow
2921
open-pull-requests-limit: 5
3022
labels:
3123
- "dependencies"

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
run: dotnet restore
4545

4646
- name: Build solution
47-
run: dotnet build --configuration Release --no-restore
47+
run: dotnet build --configuration Release --no-restore /maxcpucount:1
4848

4949
- name: Upload build artifacts
5050
uses: actions/upload-artifact@v5

.github/workflows/release.yml

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,14 @@ jobs:
116116
VERSION="${{ needs.validate-tag.outputs.version }}"
117117
echo "Building with version: $VERSION"
118118
119+
# Build all projects with the same version
120+
# This ensures ProjectReferences will use the correct version when packed
119121
dotnet build \
120122
--configuration Release \
121123
--no-restore \
124+
/maxcpucount:1 \
122125
-p:Version=$VERSION \
126+
-p:PackageVersion=$VERSION \
123127
-p:AssemblyVersion=$VERSION \
124128
-p:FileVersion=$VERSION \
125129
-p:InformationalVersion=$VERSION
@@ -130,55 +134,75 @@ jobs:
130134
echo "Packing version: $VERSION"
131135
132136
# Pack all packable projects
137+
# Don't use --no-build to ensure version is applied correctly
138+
# ProjectReferences will automatically become PackageReferences with matching versions
133139
dotnet pack Oproto.FluentDynamoDb/Oproto.FluentDynamoDb.csproj \
134140
--configuration Release \
135-
--no-build \
136141
--output ./packages \
137-
-p:PackageVersion=$VERSION \
138142
-p:Version=$VERSION
139143
140144
dotnet pack Oproto.FluentDynamoDb.BlobStorage.S3/Oproto.FluentDynamoDb.BlobStorage.S3.csproj \
141145
--configuration Release \
142-
--no-build \
143146
--output ./packages \
144-
-p:PackageVersion=$VERSION \
145147
-p:Version=$VERSION
146148
147149
dotnet pack Oproto.FluentDynamoDb.Encryption.Kms/Oproto.FluentDynamoDb.Encryption.Kms.csproj \
148150
--configuration Release \
149-
--no-build \
150151
--output ./packages \
151-
-p:PackageVersion=$VERSION \
152152
-p:Version=$VERSION
153153
154154
dotnet pack Oproto.FluentDynamoDb.FluentResults/Oproto.FluentDynamoDb.FluentResults.csproj \
155155
--configuration Release \
156-
--no-build \
157156
--output ./packages \
158-
-p:PackageVersion=$VERSION \
159157
-p:Version=$VERSION
160158
161159
dotnet pack Oproto.FluentDynamoDb.Logging.Extensions/Oproto.FluentDynamoDb.Logging.Extensions.csproj \
162160
--configuration Release \
163-
--no-build \
164161
--output ./packages \
165-
-p:PackageVersion=$VERSION \
166162
-p:Version=$VERSION
167163
168164
dotnet pack Oproto.FluentDynamoDb.NewtonsoftJson/Oproto.FluentDynamoDb.NewtonsoftJson.csproj \
169165
--configuration Release \
170-
--no-build \
171166
--output ./packages \
172-
-p:PackageVersion=$VERSION \
173167
-p:Version=$VERSION
174168
175169
dotnet pack Oproto.FluentDynamoDb.SystemTextJson/Oproto.FluentDynamoDb.SystemTextJson.csproj \
176170
--configuration Release \
177-
--no-build \
178171
--output ./packages \
179-
-p:PackageVersion=$VERSION \
180172
-p:Version=$VERSION
181173
174+
- name: Validate package dependencies
175+
run: |
176+
VERSION="${{ needs.validate-tag.outputs.version }}"
177+
echo "📦 Validating package dependencies for version: $VERSION"
178+
179+
# Check packages with dependencies on Oproto.FluentDynamoDb
180+
for pkg in BlobStorage.S3 Encryption.Kms FluentResults Logging.Extensions; do
181+
PACKAGE_FILE="./packages/Oproto.FluentDynamoDb.${pkg}.${VERSION}.nupkg"
182+
if [ -f "$PACKAGE_FILE" ]; then
183+
echo "Checking $pkg package..."
184+
unzip -q -o "$PACKAGE_FILE" -d "./temp-${pkg}"
185+
186+
# Extract and check the nuspec file for dependency version
187+
NUSPEC_FILE="./temp-${pkg}/Oproto.FluentDynamoDb.${pkg}.nuspec"
188+
if [ -f "$NUSPEC_FILE" ] && grep -q "Oproto.FluentDynamoDb" "$NUSPEC_FILE"; then
189+
DEP_VERSION=$(grep -A 1 'id="Oproto.FluentDynamoDb"' "$NUSPEC_FILE" | grep version | sed 's/.*version="\([^"]*\)".*/\1/' || echo "not-found")
190+
echo " Found dependency: Oproto.FluentDynamoDb version $DEP_VERSION"
191+
192+
if [ "$DEP_VERSION" != "$VERSION" ] && [ "$DEP_VERSION" != "not-found" ]; then
193+
echo " ❌ ERROR: Dependency version mismatch! Expected $VERSION but got $DEP_VERSION"
194+
exit 1
195+
elif [ "$DEP_VERSION" = "$VERSION" ]; then
196+
echo " ✅ Dependency version matches: $VERSION"
197+
fi
198+
fi
199+
200+
rm -rf "./temp-${pkg}"
201+
fi
202+
done
203+
204+
echo "✅ All package dependencies validated"
205+
182206
- name: Validate package contents
183207
run: |
184208
echo "📦 Validating package contents..."

.github/workflows/test.yml

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ jobs:
5454
run: dotnet restore
5555

5656
- name: Build solution (if artifacts not available)
57-
run: dotnet build --configuration Release --no-restore
57+
run: dotnet build --configuration Release --no-restore /maxcpucount:1
5858

5959
- name: Run Unit Tests with Coverage
6060
run: dotnet test --configuration Release --filter "Category=Unit" --logger "trx;LogFileName=unit-test-results.trx" --results-directory ./TestResults/Unit --collect:"XPlat Code Coverage" --settings coverlet.runsettings
@@ -108,7 +108,7 @@ jobs:
108108
echo "Downloading DynamoDB Local..."
109109
mkdir -p dynamodb-local
110110
cd dynamodb-local
111-
wget -q https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz
111+
wget -q https://d1ni2b6xgvw0s0.cloudfront.net/v2.x/dynamodb_local_latest.tar.gz
112112
tar -xzf dynamodb_local_latest.tar.gz
113113
rm dynamodb_local_latest.tar.gz
114114
ls -la
@@ -121,7 +121,7 @@ jobs:
121121
Write-Host "Downloading DynamoDB Local..."
122122
New-Item -ItemType Directory -Force -Path dynamodb-local
123123
Set-Location dynamodb-local
124-
Invoke-WebRequest -Uri "https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz" -OutFile "dynamodb_local_latest.tar.gz"
124+
Invoke-WebRequest -Uri "https://d1ni2b6xgvw0s0.cloudfront.net/v2.x/dynamodb_local_latest.tar.gz" -OutFile "dynamodb_local_latest.tar.gz"
125125
tar -xzf dynamodb_local_latest.tar.gz
126126
Remove-Item dynamodb_local_latest.tar.gz
127127
Get-ChildItem
@@ -157,10 +157,10 @@ jobs:
157157
run: dotnet restore
158158

159159
- name: Build solution (if artifacts not available)
160-
run: dotnet build --configuration Release --no-restore
160+
run: dotnet build --configuration Release --no-restore /maxcpucount:1
161161

162162
- name: Build integration test project explicitly
163-
run: dotnet build Oproto.FluentDynamoDb.IntegrationTests/Oproto.FluentDynamoDb.IntegrationTests.csproj --configuration Release --no-restore
163+
run: dotnet build Oproto.FluentDynamoDb.IntegrationTests/Oproto.FluentDynamoDb.IntegrationTests.csproj --configuration Release --no-restore /maxcpucount:1
164164

165165
- name: Run Integration Tests with Coverage
166166
run: dotnet test Oproto.FluentDynamoDb.IntegrationTests/Oproto.FluentDynamoDb.IntegrationTests.csproj --configuration Release --no-build --logger "trx;LogFileName=integration-test-results.trx" --results-directory ./TestResults/Integration --verbosity normal --collect:"XPlat Code Coverage" --settings coverlet.runsettings
@@ -297,8 +297,14 @@ jobs:
297297
run: |
298298
mkdir -p ./coverage-report
299299
300+
# Check if coverage directory exists
301+
if [ ! -d "./coverage" ]; then
302+
echo "Coverage directory not found - no coverage artifacts were downloaded"
303+
exit 0
304+
fi
305+
300306
# Find all coverage files
301-
COVERAGE_FILES=$(find ./coverage -name "coverage.cobertura.xml" -type f | tr '\n' ';')
307+
COVERAGE_FILES=$(find ./coverage -name "coverage.cobertura.xml" -type f 2>/dev/null | tr '\n' ';')
302308
303309
if [ ! -z "$COVERAGE_FILES" ]; then
304310
echo "Found coverage files, generating combined report..."
@@ -311,8 +317,9 @@ jobs:
311317
312318
echo "Coverage report generated successfully"
313319
else
314-
echo "No coverage files found"
320+
echo "No coverage files found in ./coverage directory"
315321
fi
322+
continue-on-error: true
316323

317324
- name: Upload Combined Coverage Report
318325
if: always()

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,3 +295,6 @@ __pycache__/
295295
# OS files
296296
.DS_Store
297297
Thumbs.db
298+
299+
# DynamoDB Local (downloaded by integration tests)
300+
dynamodb-local/

0 commit comments

Comments
 (0)