diff --git a/.azuredevops/pipelines/build-and-release.yml b/.azuredevops/pipelines/build-and-release.yml new file mode 100644 index 0000000..3ab8d61 --- /dev/null +++ b/.azuredevops/pipelines/build-and-release.yml @@ -0,0 +1,120 @@ +name: "$(Build.DefinitionName) #$(Build.BuildId)" + +trigger: none # Manual Publish +pr: none # GitHub Actions handle PRs + +parameters: + - name: AgentPoolName + displayName: Agent pool name + type: string + default: Default + + - name: AgentName + displayName: Agent name - single char for any + type: string + default: " " + +variables: + - name: SIGN_FILE + value: true + +stages: + - stage: Build + jobs: + - job: Build + displayName: Build, Sign, and Pack + + pool: + name: ${{ parameters.AgentPoolName }} + ${{ if ne(length(parameters.AgentName), 1) }}: + demands: + - Agent.Name -equals ${{ parameters.AgentName }} + + variables: + - group: 14.0 Authenticode signature parameters + + - name: Configuration + value: Release + + - name: ProjectPath + value: src/PROJECT_NAME/PROJECT_NAME.csproj + + steps: + - task: UseDotNet@2 + displayName: Select dotnet version + inputs: + packageType: sdk + useGlobalJson: true + + - task: DotNetCoreCLI@2 + displayName: Restore dependencies + inputs: + command: restore + projects: ${{ variables.ProjectPath }} + feedsToUse: select + restoreArguments: --locked-mode + + - task: DotNetCoreCLI@2 + displayName: Build + inputs: + command: build + projects: ${{ variables.ProjectPath }} + configuration: ${{ variables.Configuration }} + arguments: --no-restore + + - task: DotNetCoreCLI@2 + displayName: Create NuGet package + inputs: + command: pack + packagesToPack: ${{ variables.ProjectPath }} + configuration: ${{ variables.Configuration }} + packDirectory: $(System.DefaultWorkingDirectory)/packages + includesymbols: true + nobuild: true + versioningScheme: off + + - publish: $(System.DefaultWorkingDirectory)/packages + displayName: Publish NuGet package as artifact + artifact: artifact + + - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: + - stage: PublishNuGetPackages + displayName: Publish NuGet packages + dependsOn: Build + + jobs: + - deployment: PublishNuGetPackages + displayName: Publish NuGet packages + + pool: + name: ${{ parameters.AgentPoolName }} + ${{ if ne(length(parameters.AgentName), 1) }}: + demands: + - Agent.Name -equals ${{ parameters.AgentName }} + + environment: integrations-release-nuget + workspace: + clean: all + strategy: + runOnce: + deploy: + steps: + - checkout: none + + - task: NuGetToolInstaller@1 + displayName: Install latest nuget.exe + inputs: + versionSpec: ">=5.6" + checkLatest: true + + - task: NuGetAuthenticate@1 + displayName: NuGet Authenticate + + - task: NuGetCommand@2 + displayName: NuGet push + inputs: + command: push + packagesToPush: $(Pipeline.Workspace)/artifact/*.nupkg + nuGetFeedType: external + publishFeedCredentials: nuget.org + allowPackageConflicts: true diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..0d3f804 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,341 @@ +# Severity levels of analyzers https://docs.microsoft.com/en-us/visualstudio/code-quality/roslyn-analyzers-overview?view=vs-2019#severity-levels-of-analyzers + +root = true + +[*.cs] +end_of_line = crlf +indent_size = 4 +indent_style = space +insert_final_newline = true + +# Formatting Rules + +## IDE0055: Fix formatting +dotnet_diagnostic.IDE0055.severity = error + +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false + +## C# Formatting Rules https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/formatting-rules + +### Newline options +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +### Indentation options +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents_when_block = false + +### Spacing options +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_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_call_parameter_list_parentheses = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_after_comma = true +csharp_space_before_comma = false +csharp_space_after_dot = false +csharp_space_before_dot = false +csharp_space_after_semicolon_in_for_statement = true +csharp_space_before_semicolon_in_for_statement = false +csharp_space_around_declaration_statements = false +csharp_space_before_open_square_brackets = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_square_brackets = false + +### Wrap options +csharp_preserve_single_line_statements = false +csharp_preserve_single_line_blocks = true + +### Using directive options +csharp_using_directive_placement = outside_namespace : error +dotnet_diagnostic.IDE0065.severity = error + +# Code Style Rules + +## .NET Code Style + +dotnet_style_qualification_for_event = false : error +dotnet_style_qualification_for_field = false : error +dotnet_style_qualification_for_method = false : error +dotnet_style_qualification_for_property = false : error +dotnet_diagnostic.IDE0003.severity = error +dotnet_diagnostic.IDE0009.severity = error + +dotnet_style_predefined_type_for_locals_parameters_members = true : error +dotnet_style_predefined_type_for_member_access = true : error +dotnet_diagnostic.IDE0049.severity = error + +dotnet_style_require_accessibility_modifiers = always : error +dotnet_diagnostic.IDE0040.severity = error + +dotnet_style_readonly_field = true : error +dotnet_diagnostic.IDE0044.severity = error + +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity : warning +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity : warning +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity : warning +dotnet_style_parentheses_in_other_operators = always_for_clarity : warning +dotnet_diagnostic.IDE0047.severity = warning +dotnet_diagnostic.IDE0048.severity = warning + +dotnet_style_object_initializer = true : error +dotnet_diagnostic.IDE0017.severity = error + +dotnet_style_explicit_tuple_names = true : error +dotnet_diagnostic.IDE0033.severity = error + +csharp_prefer_simple_default_expression = true : error +dotnet_diagnostic.IDE0034.severity = error + +dotnet_style_prefer_inferred_tuple_names = true : error +dotnet_style_prefer_inferred_anonymous_type_member_names = true : error +dotnet_diagnostic.IDE0037.severity = error + +dotnet_style_prefer_conditional_expression_over_assignment = true : error +dotnet_diagnostic.IDE0045.severity = error + +dotnet_style_prefer_conditional_expression_over_return = true : silent +dotnet_diagnostic.IDE0046.severity = refactoring + +dotnet_style_prefer_compound_assignment = true : error +dotnet_diagnostic.IDE0054.severity = error +dotnet_diagnostic.IDE0074.severity = error + +dotnet_style_prefer_simplified_boolean_expressions = true : warning +dotnet_diagnostic.IDE0075.severity = warning + +dotnet_style_coalesce_expression = true : error +dotnet_diagnostic.IDE0029.severity = error +dotnet_diagnostic.IDE0030.severity = error + +dotnet_style_null_propagation = true : error +dotnet_diagnostic.IDE0031.severity = error + +dotnet_style_prefer_is_null_check_over_reference_equality_method = true : error +dotnet_diagnostic.IDE0041.severity = error + +dotnet_style_collection_initializer = true : error +dotnet_diagnostic.IDE0028.severity = error + +dotnet_style_prefer_auto_properties = true : warning +dotnet_diagnostic.IDE0032.severity = warning + +dotnet_code_quality_unused_parameters = all : error +dotnet_diagnostic.IDE0060.severity = error + +dotnet_remove_unnecessary_suppression_exclusions = none : warning +dotnet_diagnostic.IDE0079.severity = warning + +dotnet_style_prefer_simplified_interpolation = true : error +dotnet_diagnostic.IDE0071.severity = error + +## Rules without Style Options + +# IDE0010: Add missing cases +dotnet_diagnostic.IDE0010.severity = error + +# IDE0001: Simplify name +dotnet_diagnostic.IDE0001.severity = error + +# IDE0002: Simplify member access +dotnet_diagnostic.IDE0002.severity = error + +# IDE0004: Remove unnecessary cast +dotnet_diagnostic.IDE0004.severity = error + +# IDE0005: Using directive is unnecessary. +dotnet_diagnostic.IDE0005.severity = error + +# IDE0100: Remove redundant equality +dotnet_diagnostic.IDE0100.severity = error + +# IDE0035: Remove unreachable code +dotnet_diagnostic.IDE0035.severity = warning + +# IDE0051: Remove unused private member +dotnet_diagnostic.IDE0051.severity = warning + +# IDE0052: Remove unread private member +dotnet_diagnostic.IDE0052.severity = warning + +# IDE0058: Remove unnecessary expression value +dotnet_diagnostic.IDE0058.severity = refactoring + +# IDE0059: Remove unnecessary value assignment +dotnet_diagnostic.IDE0059.severity = warning + +# IDE0070: Use 'System.HashCode.Combine' +dotnet_diagnostic.IDE0070.severity = error + +## C# Code style + +csharp_style_pattern_local_over_anonymous_function = true : suggestion +dotnet_diagnostic.IDE0039.severity = refactoring + +csharp_style_deconstructed_variable_declaration = true : warning +dotnet_diagnostic.IDE0042.severity = warning + +csharp_style_implicit_object_creation_when_type_is_apparent = true +dotnet_diagnostic.IDE0090.severity = error + +csharp_style_conditional_delegate_call = true : error +dotnet_diagnostic.IDE1005.severity = error + +csharp_style_throw_expression = true : error +dotnet_diagnostic.IDE0016.severity = error + +csharp_preferred_modifier_order = public, private, protected, internal, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async : warning +dotnet_diagnostic.IDE0036.severity = warning + +csharp_prefer_static_local_function = true +dotnet_diagnostic.IDE0062.severity = warning + +csharp_style_inlined_variable_declaration = true : error +dotnet_diagnostic.IDE0018.severity = error + +csharp_style_var_elsewhere = true : error +csharp_style_var_for_built_in_types = false : error +csharp_style_var_when_type_is_apparent = true : error +dotnet_diagnostic.IDE0007.severity = error +dotnet_diagnostic.IDE0008.severity = error + +csharp_style_expression_bodied_constructors = true : error +dotnet_diagnostic.IDE0021.severity = error + +csharp_style_expression_bodied_methods = true : error +dotnet_diagnostic.IDE0022.severity = error + +csharp_style_expression_bodied_operators = true : error +dotnet_diagnostic.IDE0023.severity = error +dotnet_diagnostic.IDE0024.severity = error + +csharp_style_expression_bodied_properties = true : error +dotnet_diagnostic.IDE0025.severity = error + +csharp_style_expression_bodied_indexers = true : error +dotnet_diagnostic.IDE0026.severity = error + +csharp_style_expression_bodied_accessors = true : error +dotnet_diagnostic.IDE0027.severity = error + +csharp_style_expression_bodied_lambdas = true : error +dotnet_diagnostic.IDE0053.severity = error + +csharp_style_expression_bodied_local_functions = true : error +dotnet_diagnostic.IDE0061.severity = error + +csharp_style_pattern_matching_over_as_with_null_check = true : error +dotnet_diagnostic.IDE0019.severity = error + +csharp_style_pattern_matching_over_is_with_cast_check = true : error +dotnet_diagnostic.IDE0020.severity = error + +csharp_style_prefer_switch_expression = true : error +dotnet_diagnostic.IDE0066.severity = error + +csharp_style_prefer_pattern_matching = true : error +dotnet_diagnostic.IDE0078.severity = error + +csharp_style_prefer_not_pattern = true : error +dotnet_diagnostic.IDE0083.severity = error + +csharp_prefer_braces = true : error +dotnet_diagnostic.IDE0011.severity = error + +csharp_prefer_simple_using_statement = true : error +dotnet_diagnostic.IDE0063.severity = error + +csharp_style_prefer_index_operator = true : warning +dotnet_diagnostic.IDE0056.severity = warning + +csharp_style_prefer_range_operator = true : warning +dotnet_diagnostic.IDE0057.severity = warning + +## Rules without Style Options + +# IDE0050: Convert anonymous type to tuple +dotnet_diagnostic.IDE0050.severity = warning + +# IDE0064: Make readonly fields writable +dotnet_diagnostic.IDE0064.severity = error + +# IDE0072: Add missing cases to switch expression +dotnet_diagnostic.IDE0072.severity = error + +# IDE0082: Convert typeof to nameof +dotnet_diagnostic.IDE0082.severity = error + +# IDE0080: Remove unnecessary suppression operator +dotnet_diagnostic.IDE0080.severity = error + +# IDE0110: Remove unnecessary discard +dotnet_diagnostic.IDE0110.severity = warning + +# IDE1006: Naming Styles +dotnet_diagnostic.IDE1006.severity = error + +# Naming Conventions +dotnet_naming_symbols.const_field_symbols.applicable_kinds = field +dotnet_naming_symbols.const_field_symbols.required_modifiers = const +dotnet_naming_symbols.const_field_symbols.applicable_accessibilities = * +dotnet_naming_style.const_field_symbols.capitalization = pascal_case + +dotnet_naming_rule.const_fields_must_be_pascal_case.severity = error +dotnet_naming_rule.const_fields_must_be_pascal_case.symbols = const_field_symbols +dotnet_naming_rule.const_fields_must_be_pascal_case.style = const_field_symbols + +dotnet_naming_symbols.private_field_symbol.applicable_kinds = field +dotnet_naming_symbols.private_field_symbol.applicable_accessibilities = private +dotnet_naming_style.private_field_style.capitalization = camel_case +dotnet_naming_rule.private_fields_are_camel_case.severity = warning +dotnet_naming_rule.private_fields_are_camel_case.symbols = private_field_symbol +dotnet_naming_rule.private_fields_are_camel_case.style = private_field_style + +dotnet_naming_symbols.non_private_field_symbol.applicable_kinds = field +dotnet_naming_symbols.non_private_field_symbol.applicable_accessibilities = public,internal,friend,protected,protected_internal,protected_friend +dotnet_naming_style.non_private_field_style.capitalization = pascal_case +dotnet_naming_rule.non_private_fields_are_pascal_case.severity = warning +dotnet_naming_rule.non_private_fields_are_pascal_case.symbols = non_private_field_symbol +dotnet_naming_rule.non_private_fields_are_pascal_case.style = non_private_field_style + +dotnet_naming_symbols.parameter_symbol.applicable_kinds = parameter +dotnet_naming_style.parameter_style.capitalization = camel_case +dotnet_naming_rule.parameters_are_camel_case.severity = warning +dotnet_naming_rule.parameters_are_camel_case.symbols = parameter_symbol +dotnet_naming_rule.parameters_are_camel_case.style = parameter_style + +dotnet_naming_symbols.non_interface_type_symbol.applicable_kinds = class,struct,enum,delegate +dotnet_naming_style.non_interface_type_style.capitalization = pascal_case +dotnet_naming_rule.non_interface_types_are_pascal_case.severity = error +dotnet_naming_rule.non_interface_types_are_pascal_case.symbols = non_interface_type_symbol +dotnet_naming_rule.non_interface_types_are_pascal_case.style = non_interface_type_style + +dotnet_naming_symbols.interface_type_symbol.applicable_kinds = interface +dotnet_naming_style.interface_type_style.capitalization = pascal_case +dotnet_naming_style.interface_type_style.required_prefix = I +dotnet_naming_rule.interface_types_must_be_prefixed_with_I.severity = error +dotnet_naming_rule.interface_types_must_be_prefixed_with_I.symbols = interface_type_symbol +dotnet_naming_rule.interface_types_must_be_prefixed_with_I.style = interface_type_style + +dotnet_naming_symbols.member_symbol.applicable_kinds = method,property,event +dotnet_naming_style.member_style.capitalization = pascal_case +dotnet_naming_rule.members_are_pascal_case.severity = error +dotnet_naming_rule.members_are_pascal_case.symbols = member_symbol +dotnet_naming_rule.members_are_pascal_case.style = member_style diff --git a/.github/.CODEOWNERS b/.github/.CODEOWNERS new file mode 100644 index 0000000..381d973 --- /dev/null +++ b/.github/.CODEOWNERS @@ -0,0 +1,5 @@ +# Users referenced in this file will automatically be requested as reviewers for PRs that modify the given paths + +## See + +- @Kentico/community-relations diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6ea588b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,55 @@ +name: "CI: Build and Test" + +on: + pull_request: + branches: [main] + paths: + - "**.cs" + - "**.cshtml" + - "**.tsx" + - "**.js" + - "**.json" + - "**.csproj" + - "**.props" + - "**.targets" + - "**.sln" + +jobs: + build_and_test: + name: Build and Test + runs-on: ubuntu-latest + defaults: + run: + shell: pwsh + + env: + ASPNETCORE_ENVIRONMENT: CI + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + DOTNET_NOLOGO: 1 + + steps: + - uses: actions/checkout@v3 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + global-json-file: global.json + + - name: Install dependencies + run: | + dotnet restore ` + --locked-mode + + - name: Build Solution + run: | + dotnet build ` + --configuration Release ` + --no-restore + + - name: Test Solution + run: | + dotnet test ` + --configuration Release ` + --no-build ` + --no-restore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5fbe6ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,142 @@ +### XbK additions + +**/wwwroot/cache.json + +### Xbk additions end + +## 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 +*.suo +*.csproj.user +*.ReSharper.user +*.DotSettings.user +*.sln.docstates +.vs + +# Build results + +[Dd]ebug/ +[Rr]elease/ +# x64/ +[Bb]in/ +[Oo]bj/ +[Oo]utput/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.svclog +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc +*.jfm + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# DotCover is a Code Coverage Tool +*.dotCover + +# Publish Web Output +*.Publish.xml + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +# *.pfx +*.publishsettings + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +# Web.Common junction +*/Web.*/Common/ + +*.jfm +*.svclog +*.nupkg + +# nodejs +node_modules + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +#Exclude SmartSearch files +*.fdt +*.fdx +*.fnm +*.nrm +*.prx +*.frq +*.tii +*.tis +*.del +*.cfs +segments_2i + +# Generated files +**/Client/dist/* + +**/CMSModules/WebFarm/* + +# Files Generated by this integration +**/App_Data/RepoTemplate/* \ No newline at end of file diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..4b0a92f --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,5 @@ +{ + "MD013": false, + "MD024": false, + "no-inline-html": false +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..02f36ce --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + "recommendations": [ + "ms-dotnettools.csdevkit", + "k--kato.docomment", + "editorconfig.editorconfig", + "davidanson.vscode-markdownlint", + "tintoy.msbuild-project-tools", + "esbenp.prettier-vscode", + "dotjoshjohnson.xml", + "dbaeumer.vscode-eslint", + "ms-azure-devops.azure-pipelines" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..294fbcf --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (web)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/src/Kentico.Xperience.RepoTemplate.Sample/bin/Debug/net6.0/DancingGoat.dll", + "args": [], + "cwd": "${workspaceFolder}/src/Kentico.Xperience.RepoTemplate.Sample", + "stopAtEntry": false, + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "sourceFileMap": { + "/Views": "${workspaceFolder}/Views" + } + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d56fa36 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,45 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true, + "**/node_modules": true, + "**/bin": true, + "**/obj": true, + "**/packages.lock.json": true + }, + + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + + "[markdown]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + + "[xml]": { + "editor.defaultFormatter": "DotJoshJohnson.xml" + }, + + "[csharp]": { + "editor.defaultFormatter": "ms-dotnettools.csharp" + }, + + "dotnet.defaultSolution": "Kentico.Xperience.RepoTemplate.sln", + + "eslint.workingDirectories": [ + "./src/Kentico.Xperience.RepoTemplate/Admin/Client" + ], + "[aspnetcorerazor]": { + "editor.defaultFormatter": "ms-dotnettools.csharp" + }, + + "files.associations": { + ".azuredevops/**/*.yml": "azure-pipelines" + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..6e1b8af --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,82 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "install", + "path": "src/Kentico.Xperience.RepoTemplate/Admin/Client", + "group": "clean", + "problemMatcher": [], + "label": "npm: install - src/Kentico.Xperience.RepoTemplate/Admin/Client", + "detail": "install dependencies from package" + }, + { + "type": "dotnet", + "task": "build", + "problemMatcher": ["$msCompile"], + "group": "build", + "label": "dotnet: build" + }, + { + "type": "shell", + "command": "dotnet", + "args": ["format"], + "problemMatcher": ["$msCompile"], + "group": "none", + "options": { + "cwd": "${workspaceFolder}/src/Kentico.Xperience.RepoTemplate/" + }, + "label": "dotnet: format" + }, + { + "type": "dotnet", + "task": "clean", + "problemMatcher": ["$msCompile"], + "group": "clean", + "label": "dotnet: clean" + }, + { + "type": "npm", + "script": "build", + "path": "src/Kentico.Xperience.RepoTemplate/Admin/Client", + "group": "build", + "problemMatcher": [], + "label": "npm: build - src/Kentico.Xperience.RepoTemplate/Admin/Client", + "detail": "webpack --mode=production" + }, + { + "type": "npm", + "script": "build:dev", + "path": "src/Kentico.Xperience.RepoTemplate/Admin/Client", + "group": "build", + "problemMatcher": [], + "label": "npm: build:dev - src/Kentico.Xperience.RepoTemplate/Admin/Client", + "detail": "webpack --mode=development" + }, + { + "type": "npm", + "script": "start", + "path": "src/Kentico.Xperience.RepoTemplate/Admin/Client", + "problemMatcher": [], + "label": "npm: start - src/Kentico.Xperience.RepoTemplate/Admin/Client", + "detail": "webpack serve --mode development" + }, + { + "label": "dotnet: watch DancingGoat", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/src/Kentico.Xperience.RepoTemplate.Sample/DancingGoat.csproj" + ], + "options": { + "env": { + "DOTNET_WATCH_RESTART_ON_RUDE_EDIT": "true" + } + }, + "problemMatcher": "$msCompile" + } + ] +} diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..aac369d --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,53 @@ + + + + Kentico Software + $(Company) + Copyright © $(Company) $([System.DateTime]::Now.Year) + $(Company)™ + 1.0.0 + prerelease-1 + MIT + + https://github.com/Kentico/REPOSITORY_NAME + https://github.com/Kentico/REPOSITORY_NAME/releases + logo.png + README.md + xperience;kentico;aspnetcore + + + + + + + + + net8.0 + enable + enable + nullable + true + true + true + $(NoWarn);1591 + Kentico.Xperience.RepoTemplate + + false + + + + true + true + true + true + snupkg + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..69e7ca0 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,16 @@ + + + true + false + true + true + + + + + + + + + + \ No newline at end of file diff --git a/Directory.build.targets b/Directory.build.targets new file mode 100644 index 0000000..89c3c2e --- /dev/null +++ b/Directory.build.targets @@ -0,0 +1,14 @@ + + + + $(TargetDir)$(TargetName).XmlSerializers.dll + + + + + + + + + + \ No newline at end of file diff --git a/Kentico.Xperience.RepoTemplate.sln b/Kentico.Xperience.RepoTemplate.sln new file mode 100644 index 0000000..d7f6689 --- /dev/null +++ b/Kentico.Xperience.RepoTemplate.sln @@ -0,0 +1,19 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33516.290 +MinimumVisualStudioVersion = 10.0.40219.1 +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1B2A20BC-F57B-4AAE-B1C2-E4DC52EFCAC5} + EndGlobalSection +EndGlobal diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..4449a29 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2023 Kentico + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9f8bdbe --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# ---Package Name--- + +---Select the correct badge for the support policy and update the GitHub Action pipeline badge to point to this repository (replace `repo-template`)--- + +[![7-day bug-fix policy](https://img.shields.io/badge/-7--days_bug--fixing_policy-grey?labelColor=orange&logo=data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3ZnLWljb24iIHN0eWxlPSJ3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2ZpbGw6IGN1cnJlbnRDb2xvcjtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04ODguNDkgMjIyLjY4NnYtMzEuNTRsLTY1LjY3Mi0wLjk1NWgtMC4yMDVhNDY1LjcxNSA0NjUuNzE1IDAgMCAxLTE0NC4zMTUtMzEuMzM0Yy03Ny4wMDUtMzEuMTk4LTEyNi4yOTQtNjYuNzY1LTEyNi43MDMtNjcuMTA3bC0zOS44LTI4LjY3Mi0zOS4xODUgMjguNDY4Yy0yLjA0OCAxLjUwMS00OS45MDMgMzYuMDQ0LTEyNi45MDggNjcuMzFhNDQ3LjQyIDQ0Ny40MiAwIDAgMS0xNDQuNTIgMzEuMzM1bC02NS44NzcgMC45NTZ2Mzc4Ljg4YzAgODcuMDQgNDkuODM0IDE4NC42NjEgMTM3LjAxIDI2Ny44MSAzNy41NDcgMzUuODQgNzkuMjU4IDY2LjM1NSAxMjAuODMzIDg4LjIgNDMuMjggMjIuNzMzIDg0LjI0IDM0LjYxMiAxMTguODUyIDM0LjYxMiAzNC40MDYgMCA3NS43NzYtMTIuMTUyIDExOS42MDMtMzUuMTU4YTU0Ny45NzcgNTQ3Ljk3NyAwIDAgMCAxMjAuMDEzLTg3LjY1NCA1MTUuMjA5IDUxNS4yMDkgMCAwIDAgOTYuMTg4LTEyMi44OGMyNy4xMDItNDkuNTYyIDQwLjgyMy05OC4zMDQgNDAuODIzLTE0NC45OTlsLTAuMTM2LTM0Ny4yMDR6TTUxMC4wOSAxNDMuNDI4bDEuNzA2LTEuMzY1IDEuNzc1IDEuMzY1YzUuODAzIDQuMTY1IDU5LjUyOSA0MS44NDggMTQwLjM1NiA3NC43NTIgNzkuMTkgMzIuMDg2IDE1My42IDM1LjYzNSAxNjcuNjYzIDM2LjA0NWwyLjU5NCAwLjA2OCAwLjIwNSAzMTUuNzM0YzAuMTM3IDY5LjQ5NS00Mi41OTggMTUwLjE4Ni0xMTcuMDc3IDIyMS40NTdDNjQxLjU3IDg1NC4yODkgNTYzLjEzIDg5Ni40NzggNTEyIDg5Ni40NzhjLTIzLjY4OSAwLTU1LjU3LTkuODk5LTg5LjcwMi0yNy43ODVhNDc4LjgyMiA0NzguODIyIDAgMCAxLTEwNS42MDktNzcuMjc4QzI0Mi4yMSA3MjAuMjEzIDE5OS40NzUgNjM5LjUyMiAxOTkuNDc1IDU2OS44OVYyNTQuMjI1bDIuNzMtMC4xMzZjMy4yNzggMCA4Mi42MDQtMS41MDIgMTY3LjY2NC0zNS45NzdhNzM5Ljk0MiA3MzkuOTQyIDAgMCAwIDE0MC4yMi03NC42MTV2LTAuMDY5eiIgIC8+PHBhdGggZD0iTTcxMy4zMTggMzY4LjY0YTMyLjIyMiAzMi4yMjIgMCAwIDAtNDUuMzI5IDBMNDQ5LjE5NSA1ODcuNDM1bC05My4xODQtOTMuMTE2YTMyLjIyMiAzMi4yMjIgMCAwIDAtNDUuMzMgMCAzMi4yMjIgMzIuMjIyIDAgMCAwIDAgNDUuMjZsMTE1Ljg1IDExNS44NWEzMi4yOSAzMi4yOSAwIDAgMCA0NS4zMjggMEw3MTMuMzIgNDEzLjlhMzIuMjIyIDMyLjIyMiAwIDAgMCAwLTQ1LjMzeiIgIC8+PC9zdmc+)](https://github.com/Kentico/.github/blob/main/SUPPORT.md#full-support) [![Kentico Labs](https://img.shields.io/badge/Kentico_Labs-grey?labelColor=orange&logo=data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3ZnLWljb24iIHN0eWxlPSJ3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2ZpbGw6IGN1cnJlbnRDb2xvcjtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NTYuMjg4IDgwNC40OEw2NDAgMjc3LjQ0VjY0aDMyYzE3LjYgMCAzMi0xNC40IDMyLTMycy0xNC40LTMyLTMyLTMyaC0zMjBjLTE3LjYgMC0zMiAxNC40LTMyIDMyczE0LjQgMzIgMzIgMzJIMzg0djIxMy40NEw2Ny43MTIgODA0LjQ4Qy00LjczNiA5MjUuMTg0IDUxLjIgMTAyNCAxOTIgMTAyNGg2NDBjMTQwLjggMCAxOTYuNzM2LTk4Ljc1MiAxMjQuMjg4LTIxOS41MnpNMjQxLjAyNCA2NDBMNDQ4IDI5NS4wNFY2NGgxMjh2MjMxLjA0TDc4Mi45NzYgNjQwSDI0MS4wMjR6IiAgLz48L3N2Zz4=)](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) [![CI: Build and Test](https://github.com/Kentico/repo-template/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/Kentico/repo-template/actions/workflows/ci.yml) + +---Remove/replace all lines surrounded by 3 dashes--- + +## Description + +---Please put here some general information about your Intergration / App / Solution.--- + +## Screenshots + +---If the integration has Administration UI or an impact on the UX/design of the live site, include some compelling screenshots here--- + +## Library Version Matrix + +---This matrix explains which versions of the library are compatible with different versions of Xperience by Kentico--- + +| Xperience Version | Library Version | +| ----------------- | --------------- | +| >= 28.1.0 | 1.0.0 | + +### Dependencies + +---These are all the dependencies required to use (not build) the library--- + +- [ASP.NET Core 8.0](https://dotnet.microsoft.com/en-us/download) +- [Xperience by Kentico](https://docs.xperience.io/xp/changelog) + +## Package Installation + +---This details the steps required to add the library to a solution. This could include multiple packages (NuGet and/or npm)--- + +Add the package to your application using the .NET CLI + +```powershell +dotnet add package Kentico.Xperience.Lucene +``` + +## Quick Start + +---This section shows how to quickly get started with the library. The minimum number of steps (without all the details) should be listed +to give a developer a general idea of what is involved--- + +## Full Instructions + +---Add the full instructions, guidance, and tips to the Usage-Guide.md file--- + +View the [Usage Guide](./docs/Usage-Guide.md) for more detailed instructions. + +## Contributing + +To see the guidelines for Contributing to Kentico open source software, please see [Kentico's `CONTRIBUTING.md`](https://github.com/Kentico/.github/blob/main/CONTRIBUTING.md) for more information and follow the [Kentico's `CODE_OF_CONDUCT`](https://github.com/Kentico/.github/blob/main/CODE_OF_CONDUCT.md). + +Instructions and technical details for contributing to **this** project can be found in [Contributing Setup](./docs/Contributing-Setup.md). + +## License + +Distributed under the MIT License. See [`LICENSE.md`](./LICENSE.md) for more information. + +## Support + +---Select the correct badge for the support policy--- + +[![7-day bug-fix policy](https://img.shields.io/badge/-7--days_bug--fixing_policy-grey?labelColor=orange&logo=data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3ZnLWljb24iIHN0eWxlPSJ3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2ZpbGw6IGN1cnJlbnRDb2xvcjtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04ODguNDkgMjIyLjY4NnYtMzEuNTRsLTY1LjY3Mi0wLjk1NWgtMC4yMDVhNDY1LjcxNSA0NjUuNzE1IDAgMCAxLTE0NC4zMTUtMzEuMzM0Yy03Ny4wMDUtMzEuMTk4LTEyNi4yOTQtNjYuNzY1LTEyNi43MDMtNjcuMTA3bC0zOS44LTI4LjY3Mi0zOS4xODUgMjguNDY4Yy0yLjA0OCAxLjUwMS00OS45MDMgMzYuMDQ0LTEyNi45MDggNjcuMzFhNDQ3LjQyIDQ0Ny40MiAwIDAgMS0xNDQuNTIgMzEuMzM1bC02NS44NzcgMC45NTZ2Mzc4Ljg4YzAgODcuMDQgNDkuODM0IDE4NC42NjEgMTM3LjAxIDI2Ny44MSAzNy41NDcgMzUuODQgNzkuMjU4IDY2LjM1NSAxMjAuODMzIDg4LjIgNDMuMjggMjIuNzMzIDg0LjI0IDM0LjYxMiAxMTguODUyIDM0LjYxMiAzNC40MDYgMCA3NS43NzYtMTIuMTUyIDExOS42MDMtMzUuMTU4YTU0Ny45NzcgNTQ3Ljk3NyAwIDAgMCAxMjAuMDEzLTg3LjY1NCA1MTUuMjA5IDUxNS4yMDkgMCAwIDAgOTYuMTg4LTEyMi44OGMyNy4xMDItNDkuNTYyIDQwLjgyMy05OC4zMDQgNDAuODIzLTE0NC45OTlsLTAuMTM2LTM0Ny4yMDR6TTUxMC4wOSAxNDMuNDI4bDEuNzA2LTEuMzY1IDEuNzc1IDEuMzY1YzUuODAzIDQuMTY1IDU5LjUyOSA0MS44NDggMTQwLjM1NiA3NC43NTIgNzkuMTkgMzIuMDg2IDE1My42IDM1LjYzNSAxNjcuNjYzIDM2LjA0NWwyLjU5NCAwLjA2OCAwLjIwNSAzMTUuNzM0YzAuMTM3IDY5LjQ5NS00Mi41OTggMTUwLjE4Ni0xMTcuMDc3IDIyMS40NTdDNjQxLjU3IDg1NC4yODkgNTYzLjEzIDg5Ni40NzggNTEyIDg5Ni40NzhjLTIzLjY4OSAwLTU1LjU3LTkuODk5LTg5LjcwMi0yNy43ODVhNDc4LjgyMiA0NzguODIyIDAgMCAxLTEwNS42MDktNzcuMjc4QzI0Mi4yMSA3MjAuMjEzIDE5OS40NzUgNjM5LjUyMiAxOTkuNDc1IDU2OS44OVYyNTQuMjI1bDIuNzMtMC4xMzZjMy4yNzggMCA4Mi42MDQtMS41MDIgMTY3LjY2NC0zNS45NzdhNzM5Ljk0MiA3MzkuOTQyIDAgMCAwIDE0MC4yMi03NC42MTV2LTAuMDY5eiIgIC8+PHBhdGggZD0iTTcxMy4zMTggMzY4LjY0YTMyLjIyMiAzMi4yMjIgMCAwIDAtNDUuMzI5IDBMNDQ5LjE5NSA1ODcuNDM1bC05My4xODQtOTMuMTE2YTMyLjIyMiAzMi4yMjIgMCAwIDAtNDUuMzMgMCAzMi4yMjIgMzIuMjIyIDAgMCAwIDAgNDUuMjZsMTE1Ljg1IDExNS44NWEzMi4yOSAzMi4yOSAwIDAgMCA0NS4zMjggMEw3MTMuMzIgNDEzLjlhMzIuMjIyIDMyLjIyMiAwIDAgMCAwLTQ1LjMzeiIgIC8+PC9zdmc+)](https://github.com/Kentico/.github/blob/main/SUPPORT.md#full-support) [![Kentico Labs](https://img.shields.io/badge/Kentico_Labs-grey?labelColor=orange&logo=data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3ZnLWljb24iIHN0eWxlPSJ3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2ZpbGw6IGN1cnJlbnRDb2xvcjtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NTYuMjg4IDgwNC40OEw2NDAgMjc3LjQ0VjY0aDMyYzE3LjYgMCAzMi0xNC40IDMyLTMycy0xNC40LTMyLTMyLTMyaC0zMjBjLTE3LjYgMC0zMiAxNC40LTMyIDMyczE0LjQgMzIgMzIgMzJIMzg0djIxMy40NEw2Ny43MTIgODA0LjQ4Qy00LjczNiA5MjUuMTg0IDUxLjIgMTAyNCAxOTIgMTAyNGg2NDBjMTQwLjggMCAxOTYuNzM2LTk4Ljc1MiAxMjQuMjg4LTIxOS41MnpNMjQxLjAyNCA2NDBMNDQ4IDI5NS4wNFY2NGgxMjh2MjMxLjA0TDc4Mi45NzYgNjQwSDI0MS4wMjR6IiAgLz48L3N2Zz4=)](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) + +---Select the correct name for the support policy--- + +This project has **Full support by 7-day bug-fix policy** / **Kentico Labs limited support**. + +See [`SUPPORT.md`](https://github.com/Kentico/.github/blob/main/SUPPORT.md#full-support) for more information. + +For any security issues see [`SECURITY.md`](https://github.com/Kentico/.github/blob/main/SECURITY.md). diff --git a/docs/Contributing-Setup.md b/docs/Contributing-Setup.md new file mode 100644 index 0000000..474e7ef --- /dev/null +++ b/docs/Contributing-Setup.md @@ -0,0 +1,81 @@ +# Contributing Setup + +---This documents the steps a maintainer or developer would follow to work on the library in their development environment--- +---Update the details for this project, replacing "repotemplate" and anything else that needs changed--- + +## Required Software + +The requirements to setup, develop, and build this project are listed below. + +### .NET Runtime + +.NET SDK 7.0 or newer + +- +- See `global.json` file for specific SDK requirements + +### Node.js Runtime + +- [Node.js](https://nodejs.org/en/download) 20.10.0 or newer +- [NVM for Windows](https://github.com/coreybutler/nvm-windows) to manage multiple installed versions of Node.js +- See `engines` in the solution `package.json` for specific version requirements + +### C# Editor + +- VS Code +- Visual Studio +- Rider + +### Database + +SQL Server 2019 or newer compatible database + +- [SQL Server Linux](https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-ver15) +- [Azure SQL Edge](https://learn.microsoft.com/en-us/azure/azure-sql-edge/disconnected-deployment) + +### SQL Editor + +- MS SQL Server Management Studio +- Azure Data Studio + +## Sample Project + +### Database Setup + +Running the sample project requires creating a new Xperience by Kentico database using the included template. + +Change directory in your console to `./examples/DancingGoat` and follow the instructions in the Xperience +documentation on [creating a new database](https://docs.xperience.io/xp26/developers-and-admins/installation#Installation-CreatetheprojectdatabaseCreateProjectDatabase). + +### Admin Customization + +To run the Sample app Admin customization in development mode, add the following to your [User Secrets](https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-7.0&tabs=windows#secret-manager) for the application. + +```json +"CMSAdminClientModuleSettings": { + "kentico-xperience-integrations-repotemplate": { + "Mode": "Proxy", + "Port": 3009 + } +} +``` + +## Development Workflow + +1. Create a new branch with one of the following prefixes + + - `feat/` - for new functionality + - `refactor/` - for restructuring of existing features + - `fix/` - for bugfixes + +1. Run `dotnet format` against the `src/Kentico.Xperience.RepoTemplate` project + + > use `dotnet: format` VS Code task. + +1. Commit changes, with a commit message preferably following the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#summary) convention. + +1. Once ready, create a PR on GitHub. The PR will need to have all comments resolved and all tests passing before it will be merged. + + - The PR should have a helpful description of the scope of changes being contributed. + - Include screenshots or video to reflect UX or UI updates + - Indicate if new settings need to be applied when the changes are merged - locally or in other environments diff --git a/docs/Usage-Guide.md b/docs/Usage-Guide.md new file mode 100644 index 0000000..b487aae --- /dev/null +++ b/docs/Usage-Guide.md @@ -0,0 +1,3 @@ +# Usage Guide + +---Organize the Usage Guide into sections using Markdown Headings. This guide should mirror the steps in the Quick Start but with far more details and include any optional steps.--- diff --git a/examples/.gitkeep b/examples/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/global.json b/global.json new file mode 100644 index 0000000..1e05653 --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "8.0.100", + "rollForward": "latestMajor", + "allowPrerelease": false + } +} diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000..5d03455 Binary files /dev/null and b/images/logo.png differ diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..3f0577b --- /dev/null +++ b/nuget.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/.gitkeep b/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/.gitkeep b/tests/.gitkeep new file mode 100644 index 0000000..e69de29