From f6093805b2d65acef81e745e105178ea982636a2 Mon Sep 17 00:00:00 2001 From: Andrew Babbitt Date: Sun, 7 Jul 2024 17:34:24 -0600 Subject: [PATCH] chore: initial commit --- .editorconfig | 159 +++++++ .gitattributes | 63 +++ .github/ISSUE_TEMPLATE/bug_report.yml | 65 +++ .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/design_proposal.yml | 59 +++ .github/ISSUE_TEMPLATE/feature_request.yml | 31 ++ .github/changelog.json | 71 +++ .github/dependabot.yml | 15 + .github/pull_request_template.md | 23 + .github/workflows/build-code.yml | 29 ++ .github/workflows/lint-code.yml | 29 ++ .github/workflows/lint-pr.yml | 20 + .github/workflows/release.yml | 47 ++ .github/workflows/scan-code.yml | 49 +++ .github/workflows/test-code.yml | 29 ++ .gitignore | 484 +++++++++++++++++++++ CODE_OF_CONDUCT.md | 116 +++++ CONTRIBUTING.md | 108 +++++ ChromaControl.SDK.sln | 13 + Directory.Build.props | 52 +++ LICENSE.txt | 21 + README.md | 8 + SECURITY.md | 13 + assets/nuget.png | Bin 0 -> 5039 bytes global.json | 7 + 25 files changed, 1512 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/design_proposal.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/changelog.json create mode 100644 .github/dependabot.yml create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/build-code.yml create mode 100644 .github/workflows/lint-code.yml create mode 100644 .github/workflows/lint-pr.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/scan-code.yml create mode 100644 .github/workflows/test-code.yml create mode 100644 .gitignore create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 ChromaControl.SDK.sln create mode 100644 Directory.Build.props create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 assets/nuget.png create mode 100644 global.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4e0aa9d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,159 @@ +############################### +# Core EditorConfig Options # +############################### + +root = true + +# All files +[*] +indent_style = space +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# XML project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# XML config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 + +# .NET code files +[*.{cs,csx,vb,vbx,razor,cshtml}] +indent_size = 4 +charset = utf-8-bom + +[*.json] +indent_size = 2 + +############################### +# .NET Coding Conventions # +############################### + +[*.{cs,vb}] + +# IDE0001: Simplify name +dotnet_diagnostic.IDE0001.severity = warning + +# IDE0002: Simplify member access +dotnet_diagnostic.IDE0002.severity = warning + +# IDE0003: this and Me preferences +dotnet_diagnostic.IDE0003.severity = warning + +# IDE0007-IDE0008: var preferences +csharp_style_var_for_built_in_types = true +csharp_style_var_when_type_is_apparent = true +csharp_style_var_elsewhere = true + +# IDE0009: this and Me preferences +dotnet_diagnostic.IDE0009.severity = warning + +# IDE0035: Remove unreachable code +dotnet_diagnostic.IDE0035.severity = warning + +# IDE0045: Use conditional expression for assignment +dotnet_style_prefer_conditional_expression_over_assignment = false + +# IDE0046: Use conditional expression for return +dotnet_style_prefer_conditional_expression_over_return = false + +# IDE0049: Use language keywords instead of framework type names for type references +dotnet_diagnostic.IDE0049.severity = warning + +# IDE0058: Remove unused expression value +dotnet_diagnostic.IDE0058.severity = silent + +# IDE0073: Use file header +file_header_template = Licensed to the Chroma Control Contributors under one or more agreements.\nThe Chroma Control Contributors licenses this file to you under the MIT license.\nSee the LICENSE file in the project root for more information. + +# IDE0079: Remove unnecessary suppression +dotnet_diagnostic.IDE0079.severity = warning + +# IDE0160-IDE0161: Namespace declaration preferences +csharp_style_namespace_declarations = file_scoped + +# IDE0130: Namespace does not match folder structure +dotnet_diagnostic.IDE0130.severity = warning + +# IDE0290: Use primary constructor +csharp_style_prefer_primary_constructors = false + +# IDE1006: Naming styles +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = warning +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case + +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = warning +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly +dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case + +dotnet_naming_rule.constants_should_be_pascal_case.severity = warning +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.required_modifiers = const +dotnet_naming_style.constant_style.capitalization = pascal_case + +dotnet_naming_rule.static_fields_should_be_camel_case.severity = warning +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static +dotnet_naming_style.static_field_style.capitalization = camel_case +dotnet_naming_style.static_field_style.required_prefix = s_ + +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = warning +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style +dotnet_naming_symbols.instance_fields.applicable_kinds = field +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + +dotnet_naming_rule.locals_should_be_camel_case.severity = warning +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local +dotnet_naming_style.camel_case_style.capitalization = camel_case + +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = warning +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style +dotnet_naming_symbols.local_functions.applicable_kinds = local_function +dotnet_naming_style.local_function_style.capitalization = pascal_case + +dotnet_naming_rule.members_should_be_pascal_case.severity = warning +dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members +dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style +dotnet_naming_symbols.all_members.applicable_kinds = * +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# IDE2000: Avoid multiple blank lines +dotnet_style_allow_multiple_blank_lines_experimental = false + +# IDE2001: Embedded statements must be on their own line +csharp_style_allow_embedded_statements_on_same_line_experimental = false + +# IDE2002: Consecutive braces must not have blank line between them +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false + +# IDE2003: Blank line required between block and subsequent statement +dotnet_style_allow_statement_immediately_after_block_experimental = false + +# IDE2004: Blank line not allowed after constructor initializer colon +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false + +# IDE2005: Blank line not allowed after conditional expression token +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false + +# IDE2006: Blank line not allowed after arrow expression clause token +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..eafe812 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,65 @@ +name: 🐞 Bug Report +description: Create a report about something that is not working +labels: + - bug +body: + - type: markdown + attributes: + value: | + Please keep in mind that the GitHub issue tracker is not intended as a general support forum, but for reporting **non-security** bugs and feature requests. + + If you believe you have an issue that affects the SECURITY of the project, please do NOT create an issue and instead follow the instructions in the [Security Policy](https://github.com/ChromaControl/SDK/security/policy). + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered ([issues](https://github.com/ChromaControl/SDK/issues?q=is%3Aissue)). + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + validations: + required: false + - type: textarea + attributes: + label: Steps to reproduce + description: | + Steps to reproduce the behavior. + + We will close this issue if: + - If we will not be able to repro the behavior you're reporting. + - There is an already known open issue for this bug. + validations: + required: false + - type: textarea + attributes: + label: Exceptions or error messages (if any) + description: Include the exception or error message you get when facing this issue. + validations: + required: false + - type: input + attributes: + label: Version number + description: Please specify the version number of the software you are using. + validations: + required: false + - type: textarea + attributes: + label: Anything else? + description: | + - OS version + - Dependent software versions + + Links? References? Anything that will give us more context about the issue you are encountering! + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/design_proposal.yml b/.github/ISSUE_TEMPLATE/design_proposal.yml new file mode 100644 index 0000000..6e45f27 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/design_proposal.yml @@ -0,0 +1,59 @@ +name: πŸ€” Design Proposal +description: Collaborate on a design for a feature/fix or other change +labels: + - enhancement +body: + - type: textarea + attributes: + label: Summary + description: 1-2 sentences. Say what this is about. + validations: + required: true + - type: textarea + attributes: + label: Motivation and goals + description: 1-2 paragraphs, or a bullet-pointed list. What existing pain points does this solve? What evidence shows it's valuable to solve this? + validations: + required: true + - type: textarea + attributes: + label: In scope + description: A list of major scenarios, perhaps in priority order. + validations: + required: true + - type: textarea + attributes: + label: Out of scope + description: Scenarios you explicitly want to exclude. + validations: + required: true + - type: textarea + attributes: + label: Risks / unknowns + description: How might others misinterpret/misuse this? How might implementing it restrict us from other enhancements in the future? Also list any perf/security/correctness concerns. + validations: + required: true + - type: textarea + attributes: + label: Examples + description: | + Give brief examples of possible developer and user experiences. + + Don't be deeply concerned with how it would be implemented yet. Your examples could even be from other technology stacks or applications. + validations: + required: true + - type: textarea + attributes: + label: Detailed design + description: | + It's often best not to fill this out until you get basic consensus about the above. When you do, consider adding an implementation proposal with the following headings: + + Detailed design + Drawbacks + Considered alternatives + Open questions + References + + If there's one clear design you have consensus on, you could do that directly in a PR. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..90b3031 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,31 @@ +name: πŸ’‘ Feature Request +description: Suggest an idea for this project +labels: + - enhancement +body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the feature you are requesting. ([issues](https://github.com/ChromaControl/SDK/issues)). + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Is your feature request related to a problem? Please describe the problem. + description: A clear and concise description of what the problem is. + placeholder: I am trying to do [...] but [...] + validations: + required: false + - type: textarea + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen. Include any alternative solutions you've considered. + validations: + required: true + - type: textarea + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + validations: + required: false diff --git a/.github/changelog.json b/.github/changelog.json new file mode 100644 index 0000000..4e1bcd7 --- /dev/null +++ b/.github/changelog.json @@ -0,0 +1,71 @@ +{ + "categories": [ + { + "title": "## πŸš€ Features", + "labels": [ + "feat" + ] + }, + { + "title": "## πŸͺ² Bug Fixes", + "labels": [ + "fix" + ] + }, + { + "title": "## πŸ“„ Documentation", + "labels": [ + "docs" + ] + }, + { + "title": "## πŸš… Performance Improvements", + "labels": [ + "perf" + ] + }, + { + "title": "## πŸ§ͺ Tests", + "labels": [ + "test" + ] + }, + { + "title": "## πŸ“¦ Builds", + "labels": [ + "build" + ] + }, + { + "title": "## ♾️ Continuous Integrations", + "labels": [ + "ci" + ] + }, + { + "title": "## ❌ Reverts", + "labels": [ + "revert" + ] + }, + { + "title": "## βœ”οΈ Other Changes", + "labels": [ + "style", + "refactor", + "chore" + ] + } + ], + "label_extractor": [ + { + "pattern": "^(feat|fix|docs|perf|test|build|ci|revert|style|refactor|chore){1}(\\([\\w\\-\\.]+\\))?(!)?: ([\\w ])+([\\s\\S]*)", + "target": "$1" + } + ], + "template": "${{CHANGELOG}}", + "pr_template": "- ${{TITLE}}", + "empty_template": "- No Changes", + "max_tags_to_fetch": 1000, + "max_back_track_time_days": 1000 +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f620a54 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + commit-message: + prefix: ci + + - package-ecosystem: "nuget" + directory: "/" + schedule: + interval: "daily" + commit-message: + prefix: build diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..ff0f82d --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,23 @@ +# {PR title} + + + + + +- [ ] You've read the [Contributor Guide](https://github.com/ChromaControl/SDK/blob/main/CONTRIBUTING.md) and [Code of Conduct](https://github.com/ChromaControl/SDK/blob/main/CODE_OF_CONDUCT.md). +- [ ] You've included unit or integration tests for your change, where applicable. +- [ ] You've included inline docs for your change, where applicable. +- [ ] There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue. + + + +## Summary of the changes + +{Summary} + +## Description + +{Detail} + +Fixes #{bug number} diff --git a/.github/workflows/build-code.yml b/.github/workflows/build-code.yml new file mode 100644 index 0000000..6a4c19b --- /dev/null +++ b/.github/workflows/build-code.yml @@ -0,0 +1,29 @@ +name: Build Code + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build-code: + name: Build Code + runs-on: windows-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + + - name: Set up .NET + uses: zyactions/dotnet-setup@v1 + with: + global-json-file: global.json + + - name: Restore .NET dependencies + uses: zyactions/dotnet-restore@v1 + + - name: Build solution + run: dotnet build diff --git a/.github/workflows/lint-code.yml b/.github/workflows/lint-code.yml new file mode 100644 index 0000000..59e1c2d --- /dev/null +++ b/.github/workflows/lint-code.yml @@ -0,0 +1,29 @@ +name: Lint Code + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + lint-code: + name: Lint Code + runs-on: windows-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + + - name: Set up .NET + uses: zyactions/dotnet-setup@v1 + with: + global-json-file: global.json + + - name: Restore .NET dependencies + uses: zyactions/dotnet-restore@v1 + + - name: Lint solution + uses: zyactions/dotnet-lint@v1 diff --git a/.github/workflows/lint-pr.yml b/.github/workflows/lint-pr.yml new file mode 100644 index 0000000..c4d8283 --- /dev/null +++ b/.github/workflows/lint-pr.yml @@ -0,0 +1,20 @@ +name: Lint PR + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + lint-pr: + name: Lint PR + runs-on: ubuntu-latest + + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + validateSingleCommit: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..364b31d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,47 @@ +name: Release Project + +on: + release: + types: [prereleased,released] + +jobs: + release: + name: Release Project + runs-on: windows-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + + - name: Build changelog + id: changelog + uses: mikepenz/release-changelog-builder-action@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + toTag: ${{ github.event.release.tag_name }} + commitMode: true + configuration: .github/changelog.json + + - name: Set up .NET + uses: zyactions/dotnet-setup@v1 + with: + global-json-file: global.json + + - name: Restore .NET dependencies + uses: zyactions/dotnet-restore@v1 + + - name: Pack solution + run: dotnet pack -c Release -p:Version=${{ github.event.release.tag_name }} -o bin/release + + - name: Push Packages + run: dotnet nuget push 'bin\release\*.*' --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate + + - name: Update release + uses: ncipollo/release-action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ github.event.release.tag_name }} + allowUpdates: true + prerelease: ${{ github.event.release.prerelease }} + body: ${{ steps.changelog.outputs.changelog }} + artifacts: bin/release/*.* diff --git a/.github/workflows/scan-code.yml b/.github/workflows/scan-code.yml new file mode 100644 index 0000000..4b791d8 --- /dev/null +++ b/.github/workflows/scan-code.yml @@ -0,0 +1,49 @@ +name: Scan Code + +on: + push: + branches: + - main + pull_request: + branches: + - main + schedule: + - cron: '22 7 * * 1' + +jobs: + scan-code: + name: Scan Code + runs-on: windows-latest + + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'csharp' ] + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + + - name: Set up .NET + uses: zyactions/dotnet-setup@v1 + with: + global-json-file: global.json + + - name: Restore .NET dependencies + uses: zyactions/dotnet-restore@v1 + + - name: Build solution + run: dotnet build + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/test-code.yml b/.github/workflows/test-code.yml new file mode 100644 index 0000000..d3d4674 --- /dev/null +++ b/.github/workflows/test-code.yml @@ -0,0 +1,29 @@ +name: Test Code + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + test-code: + name: Test Code + runs-on: windows-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + + - name: Set up .NET + uses: zyactions/dotnet-setup@v1 + with: + global-json-file: global.json + + - name: Restore .NET dependencies + uses: zyactions/dotnet-restore@v1 + + - name: Test solution + run: dotnet test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..104b544 --- /dev/null +++ b/.gitignore @@ -0,0 +1,484 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from `dotnet new gitignore` + +# dotenv files +.env + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# 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 + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml +.idea + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Vim temporary swap files +*.swp diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..e6be640 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,116 @@ +# Code of Conduct - Chroma Control + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## 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 +* 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 + +## Our Responsibilities + +Project maintainers 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. + +Project maintainers 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 e-mail 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 . +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](https://contributor-covenant.org/), version +[1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct/code_of_conduct.md) and +[2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct/code_of_conduct.md), +and was generated by [contributing-gen](https://github.com/bttger/contributing-gen). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..bc74922 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,108 @@ +# Contributing to Chroma Control + +First off, thanks for taking the time to contribute! ❀️ + +All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. πŸŽ‰ + +> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about: +> - Star the project +> - Tweet about it +> - Refer this project in your project's readme +> - Mention the project at local meetups and tell your friends/colleagues + +## Table of Contents + +- [Code of Conduct](#code-of-conduct) +- [I Have a Question](#i-have-a-question) + - [I Want To Contribute](#i-want-to-contribute) + - [Reporting Bugs](#reporting-bugs) + - [Suggesting Enhancements](#suggesting-enhancements) + - [Your First Code Contribution](#your-first-code-contribution) + - [Improving The Documentation](#improving-the-documentation) +- [Styleguides](#styleguides) + - [Commit Messages](#commit-messages) +- [Join The Project Team](#join-the-project-team) + +## Code of Conduct + +This project and everyone participating in it is governed by the +[Chroma Control Code of Conduct](https://github.com/ChromaControl/SDK/blob/main/CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. Please report unacceptable behavior +to . + +## I Have a Question + +> If you want to ask a question, we assume that you have read the available [Documentation](https://github.com/ChromaControl/SDK/tree/main/docs). + +Before you ask a question, it is best to search for existing [Issues](https://github.com/ChromaControl/SDK/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first. + +If you then still feel the need to ask a question and need clarification, we recommend the following: + +- Open an [Issue](https://github.com/ChromaControl/SDK/issues/new). +- Provide as much context as you can about what you're running into. +- Provide project and platform versions (nodejs, npm, etc), depending on what seems relevant. + +We will then take care of the issue as soon as possible. + +## I Want To Contribute + +> ### Legal Notice +> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license. + +### Reporting Bugs + +#### Before Submitting a Bug Report + +A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible. + +- Make sure that you are using the latest version. +- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](https://github.com/ChromaControl/SDK/tree/main/docs). If you are looking for support, you might want to check [this section](#i-have-a-question)). +- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/ChromaControl/SDK/issues?q=label%3Abug). +- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue. +- Collect information about the bug: + - Stack trace (Traceback) + - OS, Platform and Version (Windows, Linux, macOS, x86, ARM) + - Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant. + - Possibly your input and the output + - Can you reliably reproduce the issue? And can you also reproduce it with older versions? + +#### How Do I Submit a Good Bug Report? + +> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to . + +We use GitHub issues to track bugs and errors. If you run into an issue with the project: + +- Open an [Issue](https://github.com/ChromaControl/SDK/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.) +- Explain the behavior you would expect and the actual behavior. +- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case. +- Provide the information you collected in the previous section. + +Once it's filed: + +- The project team will label the issue accordingly. +- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced. +- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be [implemented by someone](#your-first-code-contribution). + +### Suggesting Enhancements + +This section guides you through submitting an enhancement suggestion for Chroma Control, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions. + +#### Before Submitting an Enhancement + +- Make sure that you are using the latest version. +- Read the [documentation](https://github.com/ChromaControl/SDK/tree/main/docs) carefully and find out if the functionality is already covered, maybe by an individual configuration. +- Perform a [search](https://github.com/ChromaControl/SDK/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one. +- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library. + +#### How Do I Submit a Good Enhancement Suggestion? + +Enhancement suggestions are tracked as [GitHub issues](https://github.com/ChromaControl/SDK/issues). + +- Use a **clear and descriptive title** for the issue to identify the suggestion. +- Provide a **step-by-step description of the suggested enhancement** in as many details as possible. +- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you. +- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. +- **Explain why this enhancement would be useful** to most Chroma Control users. You may also want to point out the other projects that solved it better and which could serve as inspiration. + +## Attribution +This guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)! diff --git a/ChromaControl.SDK.sln b/ChromaControl.SDK.sln new file mode 100644 index 0000000..01a63c0 --- /dev/null +++ b/ChromaControl.SDK.sln @@ -0,0 +1,13 @@ +ο»Ώ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35017.193 +MinimumVisualStudioVersion = 10.0.40219.1 +Global + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DC256AF5-D9FA-479E-85C0-60315B5F189E} + EndGlobalSection +EndGlobal diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..5c74700 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,52 @@ + + + + Chroma Control + 1.0.0 + Chroma Control Contributors + Device SDK for Chroma Control. + https://github.com/ChromaControl/SDK + https://github.com/ChromaControl/SDK + https://github.com/ChromaControl/SDK/releases + ChromaControl + + + + latest-recommended + latest-recommended + latest-minimum + latest-recommended + latest-recommended + latest-recommended + latest-recommended + latest-recommended + latest-recommended + latest-recommended + latest-recommended + latest-all + + + + enable + enable + true + true + true + $(MSBuildThisFileDirectory)bin/$(MSBuildProjectName) + Β© $(Authors). All rights reserved. + git + true + snupkg + true + LICENSE.txt + nuget.png + README.md + + + + + + + + + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..49245bc --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Chroma Control Contributors + +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..ac5c4ba --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +[![GitHub license](https://img.shields.io/github/license/ChromaControl/SDK?style=for-the-badge&color=00bb00)](https://github.com/ChromaControl/SDK/blob/main/LICENSE.txt) +[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa?style=for-the-badge)](CODE_OF_CONDUCT.md) +[![GitHub issues](https://img.shields.io/github/issues/ChromaControl/SDK?style=for-the-badge)](https://github.com/ChromaControl/SDK/issues) + +# Chroma Control SDKs +This repository contains device SDKs used as a part of Chroma Control. + +The packages are available on [NuGet](https://www.nuget.org/packages?q=ChromaControl.SDK&includeComputedFrameworks=true&prerel=true&sortby=relevance) under the `ChromaControl.SDK.*` namespace. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..32da800 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,13 @@ +# Security Policy + +## Supported Versions + +This is the list versions being supported with security updates. + +| Version | Supported | +| ------- | ------------------ | +| 1.x.x | :white_check_mark: | + +## Reporting a Vulnerability + +To report a vulnerability please email [andrew.babbitt@outlook.com](mailto:andrew.babbitt@outlook.com). We will asses the risk and take the neccessary steps. diff --git a/assets/nuget.png b/assets/nuget.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa5809d6f85bbfab86294edc11a66623c49ad32 GIT binary patch literal 5039 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