diff --git a/.editorconfig b/.editorconfig index 24e419b8..51a03d5d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,227 +1,148 @@ -# Remove the line below if you want to inherit .editorconfig settings from higher directories +# Remove the line below if you want to inherit .editorconfig settings from higher directories. root = true -# C# files +[*] +end_of_line = lf +insert_final_newline = true + +[*.{cmd,ps1}] +end_of_line = crlf + [*.cs] -guidelines = 120, 140 +guidelines = 120 +max_line_length = 100 -#### Core EditorConfig Options #### +csharp_style_namespace_declarations = file_scoped +dotnet_code_quality.CA1062.null_check_validation_methods = Werecodent.CreateAndFake.Design.ArgumentGuard.ThrowIfNull -# Indentation and spacing -indent_size = 4 -indent_style = space -tab_width = 4 +#### Naming styles: #### -# New line preferences -end_of_line = crlf -insert_final_newline = false - -#### .NET Coding Conventions #### - -# Organize usings -dotnet_separate_import_directive_groups = false -dotnet_sort_system_directives_first = true - -# this. and Me. preferences -dotnet_style_qualification_for_event = false:silent -dotnet_style_qualification_for_field = false:silent -dotnet_style_qualification_for_method = false:silent -dotnet_style_qualification_for_property = false:silent - -# Language keywords vs BCL types preferences -dotnet_style_predefined_type_for_locals_parameters_members = true:silent -dotnet_style_predefined_type_for_member_access = true:silent - -# Parentheses preferences -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent - -# Modifier preferences -dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent - -# Expression-level preferences -csharp_style_deconstructed_variable_declaration = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion -csharp_style_throw_expression = true:suggestion -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_null_propagation = true:suggestion -dotnet_style_object_initializer = true:suggestion -dotnet_style_prefer_auto_properties = true:silent -dotnet_style_prefer_compound_assignment = true:suggestion -dotnet_style_prefer_conditional_expression_over_assignment = true:silent -dotnet_style_prefer_conditional_expression_over_return = true:silent -dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion -dotnet_style_prefer_inferred_tuple_names = true:suggestion -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion - -# Field preferences -dotnet_style_readonly_field = true:suggestion - -# Parameter preferences -dotnet_code_quality_unused_parameters = all:suggestion - -#### C# Coding Conventions #### - -# var preferences -csharp_style_var_elsewhere = false:silent -csharp_style_var_for_built_in_types = false:silent -csharp_style_var_when_type_is_apparent = false:silent - -# Expression-bodied members -csharp_style_expression_bodied_accessors = true:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_indexers = true:silent -csharp_style_expression_bodied_lambdas = true:silent -csharp_style_expression_bodied_local_functions = false:silent -csharp_style_expression_bodied_methods = false:silent -csharp_style_expression_bodied_operators = false:silent -csharp_style_expression_bodied_properties = true:silent - -# Pattern matching preferences -csharp_style_pattern_matching_over_as_with_null_check = true:suggestion -csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion -csharp_style_prefer_switch_expression = true:suggestion - -# Null-checking preferences -csharp_style_conditional_delegate_call = true:suggestion - -# Modifier preferences -csharp_prefer_static_local_function = true:suggestion -csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async - -# Code-block preferences -csharp_prefer_braces = true:silent -csharp_prefer_simple_using_statement = true:suggestion - -# Expression-level preferences -csharp_prefer_simple_default_expression = true:suggestion -csharp_style_pattern_local_over_anonymous_function = true:suggestion -csharp_style_prefer_index_operator = true:suggestion -csharp_style_prefer_range_operator = true:suggestion -csharp_style_unused_value_assignment_preference = discard_variable:suggestion -csharp_style_unused_value_expression_statement_preference = discard_variable:silent - -# 'using' directive preferences -csharp_using_directive_placement = outside_namespace:silent - -#### C# Formatting Rules #### - -# New line preferences -csharp_new_line_before_catch = true -csharp_new_line_before_else = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_open_brace = all -csharp_new_line_between_query_expression_clauses = true - -# Indentation preferences -csharp_indent_block_contents = true -csharp_indent_braces = false -csharp_indent_case_contents = true -csharp_indent_case_contents_when_block = true -csharp_indent_labels = one_less_than_current -csharp_indent_switch_labels = true - -# Space preferences -csharp_space_after_cast = false -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_after_comma = true -csharp_space_after_dot = false -csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_semicolon_in_for_statement = true -csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_before_comma = false -csharp_space_before_dot = false -csharp_space_before_open_square_brackets = false -csharp_space_before_semicolon_in_for_statement = false -csharp_space_between_empty_square_brackets = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_parameter_list_parentheses = false -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = false -csharp_space_between_square_brackets = false - -# Wrapping preferences -csharp_preserve_single_line_blocks = true -csharp_preserve_single_line_statements = true - -#### Naming styles #### - -# Naming rules - -dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion -dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface -dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i - -dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion -dotnet_naming_rule.types_should_be_pascal_case.symbols = types -dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case - -dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion -dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members -dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case - -dotnet_naming_rule.private_or_internal_static_field_should_be_begins_with__pascal.severity = warning -dotnet_naming_rule.private_or_internal_static_field_should_be_begins_with__pascal.symbols = private_or_internal_static_field -dotnet_naming_rule.private_or_internal_static_field_should_be_begins_with__pascal.style = begins_with__pascal - -dotnet_naming_rule.private_or_internal_field_should_be_begins_with__camel.severity = warning -dotnet_naming_rule.private_or_internal_field_should_be_begins_with__camel.symbols = private_or_internal_field -dotnet_naming_rule.private_or_internal_field_should_be_begins_with__camel.style = begins_with__camel - -# Symbol specifications - -dotnet_naming_symbols.interface.applicable_kinds = interface -dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal -dotnet_naming_symbols.interface.required_modifiers = - -dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field -dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private -dotnet_naming_symbols.private_or_internal_field.required_modifiers = - -dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field -dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private -dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static - -dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum -dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal -dotnet_naming_symbols.types.required_modifiers = - -dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method -dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal -dotnet_naming_symbols.non_field_members.required_modifiers = - -# Naming styles - -dotnet_naming_style.pascal_case.required_prefix = -dotnet_naming_style.pascal_case.required_suffix = -dotnet_naming_style.pascal_case.word_separator = -dotnet_naming_style.pascal_case.capitalization = pascal_case +# Define naming styles: +dotnet_naming_style.underscored_camel.required_prefix = _ +dotnet_naming_style.underscored_camel.capitalization = camel_case -dotnet_naming_style.begins_with_i.required_prefix = I -dotnet_naming_style.begins_with_i.required_suffix = -dotnet_naming_style.begins_with_i.word_separator = -dotnet_naming_style.begins_with_i.capitalization = pascal_case +dotnet_naming_style.underscored_pascal.required_prefix = _ +dotnet_naming_style.underscored_pascal.capitalization = pascal_case -dotnet_naming_style.begins_with__camel.required_prefix = _ -dotnet_naming_style.begins_with__camel.required_suffix = -dotnet_naming_style.begins_with__camel.word_separator = -dotnet_naming_style.begins_with__camel.capitalization = camel_case +dotnet_naming_style.underscored_i.required_prefix = I +dotnet_naming_style.underscored_i.capitalization = pascal_case -dotnet_naming_style.begins_with__pascal.required_prefix = _ -dotnet_naming_style.begins_with__pascal.required_suffix = -dotnet_naming_style.begins_with__pascal.word_separator = -dotnet_naming_style.begins_with__pascal.capitalization = pascal_case +dotnet_naming_style.pascal_case.capitalization = pascal_case -csharp_style_namespace_declarations = file_scoped -dotnet_code_quality.CA1062.null_check_validation_methods = CreateAndFake.Design.ArgumentGuard.ThrowIfNull \ No newline at end of file +dotnet_naming_style.camel_case.capitalization = camel_case + +# Define symbol groups: +dotnet_naming_symbols.private_fields.applicable_kinds = field +dotnet_naming_symbols.private_fields.applicable_accessibilities = private + +dotnet_naming_symbols.private_static_fields.applicable_kinds = field +dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private +dotnet_naming_symbols.private_static_fields.required_modifiers = static + +dotnet_naming_symbols.interfaces.applicable_kinds = interface + +dotnet_naming_symbols.structures.applicable_kinds = class, struct, interface, enum, property, event, method, type_parameter + +dotnet_naming_symbols.locals.applicable_kinds = parameters, local, local_function + +# Define naming rules: +dotnet_naming_rule.private_fields_prefix.symbols = private_fields +dotnet_naming_rule.private_fields_prefix.style = underscored_camel +dotnet_naming_rule.private_fields_prefix.severity = warning + +dotnet_naming_rule.private_static_fields_prefix.symbols = private_static_fields +dotnet_naming_rule.private_static_fields_prefix.style = underscored_pascal +dotnet_naming_rule.private_static_fields_prefix.severity = warning + +dotnet_naming_rule.interfaces_prefix.symbols = interfaces +dotnet_naming_rule.interfaces_prefix.style = begins_with_i +dotnet_naming_rule.interfaces_prefix.severity = warning + +dotnet_naming_rule.structures_casing.symbols = structures +dotnet_naming_rule.structures_casing.style = pascal_case +dotnet_naming_rule.structures_casing.severity = warning + +dotnet_naming_rule.locals_casing.symbols = locals +dotnet_naming_rule.locals_casing.style = camel_case +dotnet_naming_rule.locals_casing.severity = warning + +#### Analyzer Overrides #### + +dotnet_analyzer_diagnostic.severity = warning + +# Controlled by CSharpier. +dotnet_diagnostic.IDE0055.severity = None +dotnet_diagnostic.MA0051.severity = None + +# Bad warnings that can create bugs or are clearly intended behavior. +dotnet_diagnostic.CA1000.severity = None +dotnet_diagnostic.CA1040.severity = None +dotnet_diagnostic.MA0018.severity = None +dotnet_diagnostic.MA0165.severity = None +dotnet_diagnostic.RCS1241.severity = None +dotnet_diagnostic.S1133.severity = None +dotnet_diagnostic.S1694.severity = None +dotnet_diagnostic.S1994.severity = None +dotnet_diagnostic.S3011.severity = None +dotnet_diagnostic.S3220.severity = None +dotnet_diagnostic.S3453.severity = None +dotnet_diagnostic.S3878.severity = None + +# Redundancy that's good for clarity. +dotnet_diagnostic.CA1805.severity = None +dotnet_diagnostic.RCS1033.severity = None +dotnet_diagnostic.RCS1034.severity = None +dotnet_diagnostic.RCS1071.severity = None +dotnet_diagnostic.RCS1129.severity = None +dotnet_diagnostic.RCS1188.severity = None +dotnet_diagnostic.S108.severity = None +dotnet_diagnostic.S1125.severity = None +dotnet_diagnostic.S1199.severity = None +dotnet_diagnostic.S3626.severity = None + +# Unnecessary overcaution against default behavior that hurts readability. +dotnet_diagnostic.IDE0045.severity = None +dotnet_diagnostic.IDE0046.severity = None +dotnet_diagnostic.IDE0048.severity = None +dotnet_diagnostic.MA0002.severity = None +dotnet_diagnostic.MA0003.severity = None +dotnet_diagnostic.MA0006.severity = None +dotnet_diagnostic.MA0076.severity = None +dotnet_diagnostic.MA0169.severity = None +dotnet_diagnostic.RCS1089.severity = None +dotnet_diagnostic.RCS1123.severity = None +dotnet_diagnostic.S1751.severity = None +dotnet_diagnostic.S2743.severity = None +dotnet_diagnostic.S3993.severity = None + +# Design choice. +dotnet_diagnostic.MA0029.severity = None +dotnet_diagnostic.MA0071.severity = None +dotnet_diagnostic.RCS1112.severity = None +dotnet_diagnostic.RCS1211.severity = None +dotnet_diagnostic.S3267.severity = None + +# Unavoidable for handling anything thrown at the libary. +dotnet_diagnostic.CA1031.severity = None +dotnet_diagnostic.RCS1075.severity = None + +# Deprecated. +dotnet_diagnostic.MA0038.severity = None +dotnet_diagnostic.MA0041.severity = None + +# Not supported in all .NET versions. +dotnet_diagnostic.CA1865.severity = None +dotnet_diagnostic.CA2249.severity = None +dotnet_diagnostic.IDE0057.severity = None +dotnet_diagnostic.IDE0370.severity = None +dotnet_diagnostic.MA0001.severity = None +dotnet_diagnostic.MA0089.severity = None + +# Specifically for Visual Studio extensions and don't apply to this library. +dotnet_diagnostic.VSTHRD003.severity = None + +# TODO: Documentation work. +dotnet_diagnostic.RCS1228.severity = None + +# TODO: Remove commented out code. +dotnet_diagnostic.S125.severity = None diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..1f43934a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto eol=lf +*.cmd text eol=crlf +*.ps1 text eol=crlf diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md deleted file mode 100644 index 399e74cc..00000000 --- a/.github/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,132 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, caste, color, religion, or sexual -identity and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the overall - community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or advances of - any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email address, - without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official email address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -[createandfaketeam@gmail.com](mailto:createandfaketeam@gmail.com). -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series of -actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or permanent -ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within the -community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.1, available at -[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - -Community Impact Guidelines were inspired by -[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. - -For answers to common questions about this code of conduct, see the FAQ at -[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at -[https://www.contributor-covenant.org/translations][translations]. - -[homepage]: https://www.contributor-covenant.org -[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html -[Mozilla CoC]: https://github.com/mozilla/diversity -[FAQ]: https://www.contributor-covenant.org/faq -[translations]: https://www.contributor-covenant.org/translations diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index 7ca0bd9b..00000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,114 +0,0 @@ -# Contributing - -Thank you for your interest in contributing. - -Please first discuss the change you wish to make via issue/request, email, or any other method with the owners of this repository before making changes. Failure to do so will likely lead to a declined pull request regardless of quality. - -Make sure to refer to and follow the [code of conduct](CODE_OF_CONDUCT.md). - -## Quality Requirements - -* No external dependencies. -* 100% test coverage. -* Proper comments. -* Updated documentation. -* Follow the project code style. -* No #region. - -Pull requests will be reviewed thoroughly to maintain project quality. - -## Windows Environment Recommended Setup - -1) Install [VS Community](https://visualstudio.microsoft.com/vs/community/). -2) Clone the repository locally. -3) To see build options, run from cmd prompt: "./build/run.cmd --help" -4) Verify project state by running from cmd prompt: "./build/run.cmd test" - -May optionally use VS Code installs from other setups instead. - -## Linux Environment Recommended Setup - -1) Install packages for: - A) [.NET frameworks](https://dotnet.microsoft.com/download/) - B) [Mono](https://www.mono-project.com/download/stable/#download-lin/) - C) [VS Code](https://code.visualstudio.com/download/) -2) Install VS Code extensions: - A) C# Dev Kit - B) EditorConfig for VS Code - C) Code Spell Checker - D) GitHub Pull Request and Issues - E) GitHub Actions -3) Clone the repository in the editor, then: - A) Run from terminal: "chmod +x ./build/run.sh" - B) To see build options, run from terminal: "./build/run.sh --help" - C) Verify project state by running from terminal: "./build/run.sh test" - -## Mac Dev Environment Recommended Setup - -1) Install Command Line Developer Tools via the Terminal: - A) Check if installed: ‘xcode-select -p’ - B) If not, run: ‘code-select —install’ - C) Verify git works: ‘git —version’ -2) Install VS Code: https://code.visualstudio.com/download -3) Install VS Code extensions: - A) C# Dev Kit - B) EditorConfig for VS Code - C) Code Spell Checker - D) GitHub Pull Request and Issues - E) GitHub Actions -4) Clone the repository in the editor, then: - A) Follow all prompts for signing in/downloads. - B) To see build options, run from terminal: "./build/run.sh --help" - C) Verify project state by running from terminal: "./build/run.sh test" - -# Git & GPG Quick Setup Example - -Set the following git configuration settings, replacing [xxx] with valid personal values: - -1) git config --global user.name "[xxx]" -2) git config --global user.email "[xxx]@users.noreply.github.com" -3) git config --global user.signingKey [XXX] -4) git config --global tag.gpgSign true -5) git config --global commit.gpgSign true -6) git config --global push.gpgSign "if-asked" - -Read more about GPG keys in the following section. - -## Developer Certificate of Origin (DCO) - -To allow contributions to be used by the project, developers must declare that they can and do give rights to use that code. This is done by signing off on commits by appending a message at the end of the commit for all owners in the format: - -``` -Signed-off-by: FirstName LastName -``` - -This can be accomplished manually or by using -s or --signoff when committing. Github can verify this signature with your GPG key, which you can learn about [here](https://help.github.com/articles/signing-commits-with-gpg/). By signing off your commits to this repository, you're confirming that you've read DCO and agree with it, which can be found at https://developercertificate.org/ or read below: - - -``` -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. -``` diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index b4cbf53d..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: Report a bug -about: Ask for something to be fixed -title: '' -labels: 'bug' -assignees: '' - ---- - - - - -## Expected Behavior - - -## Current Behavior - - -## Possible Solution - - -## Steps to Reproduce - -1. -2. - -## Additional Information - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index a1a9ed10..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -blank_issues_enabled: true -contact_links: - - name: Ask a question - url: ../../../discussions - about: Get help using discussions - - name: Contact us via email - url: mailto:createandfaketeam@gmail.com - about: Communicate privately if necessary \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 51decced..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Request a feature -about: Suggest an idea or want -title: '' -labels: 'enhancement' -assignees: '' - ---- - - - - -## Wanted Behavior - - -## Possible Solution - - -## Additional Information - diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 94a94f12..00000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,12 +0,0 @@ - - - - -## Summary - - -## Fulfills - - -* Closes #xx -* Closes #xx diff --git a/.github/SECURITY.md b/.github/SECURITY.md deleted file mode 100644 index 6d87b5bd..00000000 --- a/.github/SECURITY.md +++ /dev/null @@ -1,15 +0,0 @@ -# Security Policy - -## Overview - -Create & Fake is a completely self-contained test framework and should not pose any risk for users. The source code itself should contain no passwords or user information. - -## Supported Versions - -| Version | Supported | -| ------- | ------------------ | -| Latest | :white_check_mark: | - -## Reporting a Vulnerability - -As a testing solution Create & Fake is not released with production code and any potential vulnerabilities pose little to no risk for users. Thus vulnerabilities can be posted as regular issues and will be worked on as normal. If you feel there is an actual risk, you may instead email [createandfaketeam@gmail.com](mailto:createandfaketeam@gmail.com). diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index ad370816..b89acd08 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -2,51 +2,48 @@ name: Integration on: push: - branches: [ master ] + branches: [ master, main ] pull_request: - branches: [ master ] + branches: [ master, main ] jobs: - ubuntu: - runs-on: ubuntu-latest + testing: + strategy: + matrix: + os: [ubuntu-latest, macOS-latest, windows-latest] + fail-fast: false + runs-on: ${{ matrix.os }} + environment: staging + timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | - 8.0.x - 7.0.x + 10.0.x + 9.0.x - name: Build & Test run: ./build/run.sh test - - mac: - runs-on: macOS-latest - steps: - - uses: actions/checkout@v4 - - name: Setup .NET - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 8.0.x - 7.0.x - - name: Build & Test - run: bash build/run.sh test - - windows: - runs-on: windows-2019 + shell: bash + + coverage: + runs-on: windows-2025 + environment: staging + timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | - 8.0.x - 7.0.x - - name: Build & Test & Coverage - run: ./build/run.cmd test coverage - - name: Upload coverage - uses: codecov/codecov-action@v4 + 10.0.x + 9.0.x + - name: Build & Check Test Coverage + shell: cmd + run: ./build/run.cmd coverage + - name: Upload Coverage + uses: codecov/codecov-action@v6 with: directory: ./artifacts/coverage - token: ${{ secrets.CODECOV_TOKEN }} + token: ${{ Secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0d19fb32..f036fef0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,16 +7,18 @@ on: jobs: nuget: runs-on: ubuntu-latest + environment: production steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: - fetch-depth: 0 + fetch-depth: 0 # All history to ensure proper tagging. - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | - 8.0.x + 10.0.x + 9.0.x - name: Build & Pack run: ./build/run.sh pack - name: Publish to NuGet - run: dotnet nuget push ./artifacts/releases/*.nupkg -k ${{ secrets.NUGET_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate + run: dotnet nuget push ./artifacts/releases/*.nupkg -k ${{ Secrets.NUGET_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate diff --git a/.gitignore b/.gitignore index f628d0ad..ea1a12cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,6 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore # User-specific files @@ -23,6 +9,7 @@ *.user *.userosscache *.sln.docstates +*.env # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs @@ -35,17 +22,37 @@ mono_crash.* [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ -x64/ -x86/ + +[Dd]ebug/x64/ +[Dd]ebugPublic/x64/ +[Rr]elease/x64/ +[Rr]eleases/x64/ +bin/x64/ +obj/x64/ + +[Dd]ebug/x86/ +[Dd]ebugPublic/x86/ +[Rr]elease/x86/ +[Rr]eleases/x86/ +bin/x86/ +obj/x86/ + [Ww][Ii][Nn]32/ [Aa][Rr][Mm]/ [Aa][Rr][Mm]64/ +[Aa][Rr][Mm]64[Ee][Cc]/ bld/ -[Bb]in/ [Oo]bj/ +[Oo]ut/ [Ll]og/ [Ll]ogs/ +# Build results on 'Bin' directories +**/[Bb]in/* +# Uncomment if you have tasks that rely on *.refresh files to move binaries +# (https://github.com/github/gitignore/pull/3736) +#!**/[Bb]in/*.refresh + # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot @@ -57,12 +64,16 @@ Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* +*.trx # NUnit *.VisualState.xml TestResult.xml nunit-*.xml +# Approval Tests result files +*.received.* + # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ @@ -75,6 +86,7 @@ BenchmarkDotNet.Artifacts/ project.lock.json project.fragment.lock.json artifacts/ +.artifacts/ # ASP.NET Scaffolding ScaffoldingReadMe.txt @@ -89,6 +101,7 @@ StyleCopReport.xml *.ilk *.meta *.obj +*.idb *.iobj *.pch *.pdb @@ -96,6 +109,8 @@ StyleCopReport.xml *.pgc *.pgd *.rsp +# but not Directory.Build.rsp, as it configures directory-level build defaults +!Directory.Build.rsp *.sbr *.tlb *.tli @@ -167,6 +182,7 @@ coverage*.info # NCrunch _NCrunch_* +.NCrunch_* .*crunch*.local.xml nCrunchTemp_* @@ -308,9 +324,6 @@ node_modules/ # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - # Visual Studio 6 workspace and project file (working project files containing files to include in project) *.dsw *.dsp @@ -328,22 +341,22 @@ node_modules/ _Pvt_Extensions # Paket dependency manager -.paket/paket.exe +**/.paket/paket.exe paket-files/ # FAKE - F# Make -.fake/ +**/.fake/ # CodeRush personal settings -.cr/personal +**/.cr/personal # Python Tools for Visual Studio (PTVS) -__pycache__/ +**/__pycache__/ *.pyc # Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config +#tools/** +#!tools/packages.config # Tabs Studio *.tss @@ -365,15 +378,19 @@ ASALocalRun/ # MSBuild Binary and Structured Log *.binlog +MSBuild_Logs/ + +# AWS SAM Build and Temporary Artifacts folder +.aws-sam # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder -.mfractor/ +**/.mfractor/ # Local History for Visual Studio -.localhistory/ +**/.localhistory/ # Visual Studio History (VSHistory) files .vshistory/ @@ -385,17 +402,25 @@ healthchecksdb MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder -.ionide/ +**/.ionide/ # Fody - auto-generated XML schema FodyWeavers.xsd # VS Code files for those working on multiple tools -*.code-workspace +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets # Local History for Visual Studio Code .history/ +# Built Visual Studio Code Extensions +*.vsix + # Windows Installer files from build outputs *.cab *.msi @@ -407,4 +432,4 @@ FodyWeavers.xsd *.sln.iml # Mac -*.DS_Store \ No newline at end of file +*.DS_Store diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..8b12dbfb --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "ms-dotnettools.csdevkit", + "editorconfig.editorconfig", + "streetsidesoftware.code-spell-checker", + "csharpier.csharpier-vscode" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 19898a06..cc1b55cd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,10 @@ -// Extension: EditorConfig for VS Code { "omnisharp.enableEditorConfigSupport": true, - "omnisharp.organizeImportsOnFormat": true, + "dotnet.formatting.organizeImportsOnFormat": true, + "dotnet.testWindow.enableTestExplorerDiff": false, + "dotnet.testWindow.skipTargetFrameworkCompatibilityCheck": true, + "dotnet.unitTests.runSettingsPath": "./tests/TestSettings.runsettings", + "dotnet.defaultSolution": "CreateAndFakeCode.slnx", "git.enableSmartCommit": true, "git.enableCommitSigning": true, "editor.formatOnSave": true, @@ -9,16 +12,17 @@ "source.organizeImports": "explicit" }, "editor.rulers": [ - 120, - 140 + 120 ], "[csharp]": { - "editor.defaultFormatter": "ms-dotnettools.csharp" + "editor.defaultFormatter": "csharpier.csharpier-vscode" + }, + "[xml]": { + "editor.defaultFormatter": "csharpier.csharpier-vscode" }, - // Extension: Code Spell Checker "cSpell.words": [ - "Assem", - "autobuild", + "Analyser", + "ASPNETCORE", "Browsable", "Callvirt", "Castclass", @@ -27,23 +31,26 @@ "cloneables", "cloner", "cobertura", - "codacy", "codecov", - "codeql", "comparables", + "cooldown", + "cref", + "datacollector", "Delegators", - "dotnettools", "Duplicatable", - "duplicatables", "enumerables", "equatables", "finalizer", "FIRSTNAME", "FULLNAME", + "Generatable", "globaltool", "gpgsign", "hasher", "Hashtable", + "inheritdoc", + "Initializable", + "LASTEXITCODE", "LASTNAME", "Ldarg", "Ldelem", @@ -52,22 +59,30 @@ "Ldloc", "Ldstr", "Ldtoken", + "Lindhart", + "Linq", "Memberwise", + "Meziantou", "MIDDLENAME", "Mutatable", + "nameof", "NETCOREAPP", "NETFRAMEWORK", + "netstandard", "Newarr", "Newobj", "noreply", "nuget", + "nunit", "nupkg", - "omnisharp", - "outofbounds", + "paramref", + "Pkgcoverlet", + "Randomizable", "Randomizer", "Reflectable", "reportgenerator", - "serializables", + "Roslynator", + "runsettings", "signoff", "Stelem", "Stfld", @@ -76,10 +91,24 @@ "Subclasser", "SYSLIB", "targetdir", + "testsettings", + "Unconfigured", "Uninstantiated", + "Unwrapper", + "VSTHRD", + "Werecodent", "Xunit" ], "cSpell.ignorePaths": [ - "src/CreateAndFake/Design/Data/" - ] -} \ No newline at end of file + "**/usr/local/share/dotnet", + "**/var/folders/", + ".gitignore", + ".editorconfig", + ".vscode/", + "nuget.config", + "artifacts/", + "src/Design/Data/" + ], + "editor.inlineSuggest.enabled": false, + "explorer.autoReveal": "focusNoScroll" +} diff --git a/CreateAndFakeCode.sln b/CreateAndFakeCode.sln deleted file mode 100644 index 2181c3e6..00000000 --- a/CreateAndFakeCode.sln +++ /dev/null @@ -1,40 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29306.81 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateAndFake", "src\CreateAndFake\CreateAndFake.csproj", "{F77EEEB8-3D72-4BF9-A8FA-A2A0D136169B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateAndFakeTests", "tests\CreateAndFakeTests\CreateAndFakeTests.csproj", "{FDB610D5-22AD-41F1-8E10-DFD3F0C7E7B5}" - ProjectSection(ProjectDependencies) = postProject - {F77EEEB8-3D72-4BF9-A8FA-A2A0D136169B} = {F77EEEB8-3D72-4BF9-A8FA-A2A0D136169B} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Build", "src\Build\Build.csproj", "{8A9DE4F2-4FA4-4201-AC52-5A5FEB52BCCF}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F77EEEB8-3D72-4BF9-A8FA-A2A0D136169B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F77EEEB8-3D72-4BF9-A8FA-A2A0D136169B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F77EEEB8-3D72-4BF9-A8FA-A2A0D136169B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F77EEEB8-3D72-4BF9-A8FA-A2A0D136169B}.Release|Any CPU.Build.0 = Release|Any CPU - {FDB610D5-22AD-41F1-8E10-DFD3F0C7E7B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDB610D5-22AD-41F1-8E10-DFD3F0C7E7B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDB610D5-22AD-41F1-8E10-DFD3F0C7E7B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDB610D5-22AD-41F1-8E10-DFD3F0C7E7B5}.Release|Any CPU.Build.0 = Release|Any CPU - {8A9DE4F2-4FA4-4201-AC52-5A5FEB52BCCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A9DE4F2-4FA4-4201-AC52-5A5FEB52BCCF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A9DE4F2-4FA4-4201-AC52-5A5FEB52BCCF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A9DE4F2-4FA4-4201-AC52-5A5FEB52BCCF}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {2E04E3CC-869E-469A-BE61-FE8C557D937F} - EndGlobalSection -EndGlobal diff --git a/CreateAndFakeCode.slnx b/CreateAndFakeCode.slnx new file mode 100644 index 00000000..b6c58c9c --- /dev/null +++ b/CreateAndFakeCode.slnx @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index a707e949..ea1d370c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Create & Fake -[![NuGet](https://img.shields.io/nuget/v/CreateAndFake)](https://www.nuget.org/packages/CreateAndFake) [![Build](https://github.com/CreateAndFake/CreateAndFake/workflows/Integration/badge.svg)](../../actions?query=workflow%3AIntegration) [![CodeCov Coverage](https://codecov.io/gh/CreateAndFake/CreateAndFake/branch/master/graph/badge.svg)](https://codecov.io/gh/CreateAndFake/CreateAndFake/branch/master) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md) +[![NuGet](https://img.shields.io/nuget/v/CreateAndFake)](https://www.nuget.org/packages/CreateAndFake) [![Build](https://github.com/Werecodent/CreateAndFake/actions/workflows/integration.yml/badge.svg?branch=main)](https://github.com/Werecodent/CreateAndFake/actions/workflows/integration.yml) [![CodeCov Coverage](https://codecov.io/gh/Werecodent/CreateAndFake/branch/main/graph/badge.svg)](https://codecov.io/gh/Werecodent/CreateAndFake/branch/main) A C# class library that handles mocking, test data generation, and validation. Designed to handle the bulk of test setup quickly and easily so that developers can focus on the behavior to test, making tests easier to develop and maintain: @@ -17,7 +17,7 @@ internal static void TestGetMovieDirectors( api.GetDirectors(movies[0].Name, movies[0].Year).Assert().Is(movies[0].Directors); // Optionally check all behavior called as expected. - db.VerifyAllCalls(); + db.Verify(); } ``` @@ -51,7 +51,7 @@ A key benefit of the library is in how the tools are logically integrated with e * `Valuer` - Compares objects by value. * `Tester` - Automates common tests. -Visit the [documentation site](https://createandfake.github.io/CreateAndFake/) for more information and how to get started. +Visit the [documentation site](https://werecodent.github.io/CreateAndFake/) for more information and how to get started. ## Installation @@ -64,19 +64,19 @@ dotnet add package CreateAndFake * Use in a class by adding: ``` -using CreateAndFake; -using CreateAndFake.Fluent; +using Werecodent.CreateAndFake; +using Werecodent.CreateAndFake.Fluent; ``` ## Documentation -The documentation site is located here: https://createandfake.github.io/CreateAndFake/ +The documentation site is located here: https://werecodent.github.io/CreateAndFake/ The raw files can be viewed from the doc folder or built into a local site using Jekyll. ## Contributing -If you're looking to contribute, thanks for your interest. Feel free to submit reports for any issues you can find, or request potential features you'd like to see [here](../../issues). If you wish to contribute code to the project, refer to the contributing guidelines [here](.github/CONTRIBUTING.md) which includes dev environment setup. Please follow the [code of conduct](.github/CODE_OF_CONDUCT.md) when contributing. +If you're looking to contribute, thanks for your interest. Feel free to submit reports for any issues you can find, or request potential features you'd like to see [here](../../issues). If you wish to contribute code to the project, refer to the [contributing](https://github.com/Werecodent/.github/blob/main/CONTRIBUTING.md) requirements and the [support](https://github.com/Werecodent/.github/blob/main/SUPPORT.md) guide for environment setup. Please follow the [code of conduct](https://github.com/Werecodent/.github/blob/main/CODE_OF_CONDUCT.md) when contributing. ## License @@ -86,8 +86,10 @@ View the [license](LICENSE.txt) file for more details. ## Acknowledgments -* [xUnit](https://xunit.github.io/): For running tests. -* [Coverlet](https://github.com/tonerdo/coverlet) + [ReportGenerator](https://danielpalme.github.io/ReportGenerator/) + [CodeCov](https://codecov.io/): For test coverage. +* [xUnit](https://github.com/xunit/xunit) + [NUnit](https://github.com/nunit/nunit) + [MSTest](https://github.com/microsoft/testfx): For running tests. +* [Coverlet](https://github.com/tonerdo/coverlet) + [ReportGenerator](https://danielpalme.github.io/ReportGenerator) + [CodeCov](https://codecov.io): For test coverage. * [Bullseye](https://github.com/adamralph/bullseye) + [SimpleExec](https://github.com/adamralph/simple-exec) + [MinVer](https://github.com/adamralph/minver): For project building. -* [GitHub](https://github.com/): For hosting code. -* [Microsoft](https://visualstudio.microsoft.com/vs/features/net-development/): For C# and editors. +* [AsyncFixer](https://github.com/semihokur/AsyncFixer) + [MissingAwaitWarning](https://github.com/ykoksen/unused-task-warning) + [Meziantou.Analyzer](https://github.com/meziantou/Meziantou.Analyzer) + [Sonar](https://github.com/SonarSource/sonar-dotnet): For code analyzers. +* [CSharpier](https://github.com/belav/csharpier): For formatting code. +* [GitHub](https://github.com): For hosting code. +* [Microsoft](https://visualstudio.microsoft.com/vs/features/net-development): For C# and editors. diff --git a/build/run.ps1 b/build/run.ps1 index bf206bbd..437d538d 100644 --- a/build/run.ps1 +++ b/build/run.ps1 @@ -1,6 +1,6 @@ -$ErrorActionPreference = "Stop"; - $ScriptDir = Split-Path $MyInvocation.MyCommand.Path -Parent Set-Location "$ScriptDir\.." dotnet run --project "$ScriptDir\..\src\Build" -- $args + +exit $LASTEXITCODE diff --git a/docs/_includes/nav.html b/docs/_includes/nav.html index f558963d..b2b75d25 100644 --- a/docs/_includes/nav.html +++ b/docs/_includes/nav.html @@ -35,4 +35,4 @@

{% endif %} {% endfor %} - + \ No newline at end of file diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index cfee0fe2..30cb4493 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -6,8 +6,8 @@ - +