Skip to content

Commit

Permalink
Add initial state
Browse files Browse the repository at this point in the history
  • Loading branch information
tomas-pajurek committed Aug 9, 2024
1 parent 9103532 commit b87c3d0
Show file tree
Hide file tree
Showing 276 changed files with 20,702 additions and 2 deletions.
254 changes: 254 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
# http://EditorConfig.org

root = true

# Default settings -------------------------------------------------------------

[*]
insert_final_newline = true
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8

# C# files ---------------------------------------------------------------------

[*.cs]

# .NET code style settings -----------------------------------------------------

## "This." and "Me." qualifiers

dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion

## Language keywords instead of framework type names for type references

dotnet_style_predefined_type_for_locals_parameters_members = true:warning
dotnet_style_predefined_type_for_member_access = true:warning

## Modifier preferences

dotnet_style_require_accessibility_modifiers = always:suggestion
dotnet_style_readonly_field = true:warning

## Parentheses preferences

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 = never_if_unnecessary:silent

## Expression-level preferences

dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_auto_properties = true:warning
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning
dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
dotnet_style_prefer_conditional_expression_over_return = false:suggestion

## Null-checking preferences

dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:warning

## Formatting conventions

dotnet_sort_system_directives_first = true
dotnet_separate_import_directive_groups = true

# C# code style settings -------------------------------------------------------

## Using statements

csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
csharp_style_namespace_declarations = file_scoped:warning

## Expression-bodied members

csharp_style_expression_bodied_methods = unset
csharp_style_expression_bodied_constructors = false:suggestion
csharp_style_expression_bodied_operators = false:suggestion
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_expression_bodied_indexers = true:suggestion
csharp_style_expression_bodied_accessors = true:suggestion

## Pattern matching

csharp_style_pattern_matching_over_is_with_cast_check = true:warning
csharp_style_pattern_matching_over_as_with_null_check = true:warning
csharp_style_prefer_switch_expression = true:suggestion

## Inlined variable declarations

csharp_style_inlined_variable_declaration = true:suggestion

## Expression-level preferences

csharp_prefer_simple_default_expression = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion

## "Null" checking preferences

csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = false:suggestion

## Code block preferences

csharp_prefer_braces = true:error

## C# formatting settings

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
csharp_preferred_modifier_order = public, private, protected, internal, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async:warning

## Indentation options

csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = flush_left
csharp_indent_block_contents = true
csharp_indent_braces = false

## Spacing options

csharp_space_after_cast = true
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_call_parameter_list_parentheses = false
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_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_after_semicolon_in_for_statement = true
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_before_open_square_brackets = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false

## Wrapping options

csharp_preserve_single_line_statements = false
csharp_preserve_single_line_blocks = true


# Naming rules ------------------------------------------------------------------------------------
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-naming-conventions?view=vs-2019

## Private fields

dotnet_naming_rule.camel_case_for_private_fields.severity = warning
dotnet_naming_rule.camel_case_for_private_fields.symbols = private_fields_symbols
dotnet_naming_rule.camel_case_for_private_fields.style = private_fields_style

dotnet_naming_symbols.private_fields_symbols.applicable_kinds = field
dotnet_naming_symbols.private_fields_symbols.applicable_accessibilities = private
dotnet_naming_style.private_fields_style.required_prefix = _
dotnet_naming_style.private_fields_style.capitalization = camel_case

## Async methods

dotnet_naming_rule.async_method_name.severity = suggestion
dotnet_naming_rule.async_method_name.symbols = async_method_name_symbols
dotnet_naming_rule.async_method_name.style = async_method_name_style

dotnet_naming_symbols.async_method_name_symbols.applicable_kinds = method,delegate
dotnet_naming_symbols.async_method_name_symbols.applicable_accessibilities = *
dotnet_naming_symbols.async_method_name_symbols.required_modifiers = async

dotnet_naming_style.async_method_name_style.required_suffix = Async
dotnet_naming_style.async_method_name_style.capitalization = pascal_case

## Async local functions

dotnet_naming_rule.async_local_function_name.severity = warning
dotnet_naming_rule.async_local_function_name.symbols = async_local_function_name_symbols
dotnet_naming_rule.async_local_function_name.style = async_local_function_name_style

dotnet_naming_symbols.async_local_function_name_symbols.applicable_kinds = local_function
dotnet_naming_symbols.async_local_function_name_symbols.applicable_accessibilities = *
dotnet_naming_symbols.async_local_function_name_symbols.required_modifiers = async

dotnet_naming_style.async_local_function_name_style.required_suffix = Async
dotnet_naming_style.async_local_function_name_style.capitalization = camel_case

## Sync local functions

dotnet_naming_rule.sync_local_function_name.severity = warning
dotnet_naming_rule.sync_local_function_name.symbols = sync_local_function_name_symbols
dotnet_naming_rule.sync_local_function_name.style = sync_local_function_name_style

dotnet_naming_symbols.sync_local_function_name_symbols.applicable_kinds = local_function
dotnet_naming_symbols.sync_local_function_name_symbols.applicable_accessibilities = *

dotnet_naming_style.sync_local_function_name_style.capitalization = camel_case

## Internal data

dotnet_naming_rule.pascal_case_for_internal_data.severity = suggestion
dotnet_naming_rule.pascal_case_for_internal_data.symbols = internal_data_symbols
dotnet_naming_rule.pascal_case_for_internal_data.style = internal_data_style

dotnet_naming_symbols.internal_data_symbols.applicable_kinds = field, property
dotnet_naming_symbols.internal_data_symbols.applicable_accessibilities = internal
dotnet_naming_style.internal_data_style.capitalization = pascal_case


# Analyzers ----------------------------------------------------------------------

dotnet_diagnostic.ca1032.severity = none # Default exception constructors.
dotnet_diagnostic.ca1062.severity = none # Validate arguments of public methods.
dotnet_diagnostic.ca1303.severity = none # Do not pass literals as localized parameters.
dotnet_diagnostic.ca1308.severity = none # Normalize strings to uppercase.
dotnet_diagnostic.ca1707.severity = none # Identifiers should not contain underscores.
dotnet_diagnostic.ca1710.severity = none # Name of type must end with 'Collection'.
dotnet_diagnostic.ca1716.severity = none # Identifiers should not match keywords.
dotnet_diagnostic.ca1724.severity = none # Type names should not match namespaces.
dotnet_diagnostic.ca1812.severity = none # Class is an internal class that is apparently never instantiated.
dotnet_diagnostic.ca2007.severity = none # Consider calling ConfigureAwait on the awaited task.
dotnet_diagnostic.ca2016.severity = warning # Consider calling ConfigureAwait on the awaited task.
dotnet_diagnostic.ca5377.severity = none # Use Container Level Access Policy.
dotnet_diagnostic.ca1805.severity = none # Do not initialize unnecessarily.
dotnet_diagnostic.cs8509.severity = error # The switch expression does not handle all possible inputs.
dotnet_diagnostic.cs8524.severity = none # The switch expression does not handle some values of its input type.


# Visual Studio - Analyzer settings ---------------------------------------------------------

dotnet_diagnostic.ide0022.severity = none # Use expression body for methods
dotnet_diagnostic.ide0052.severity = warning # Remove unused members
# Rider/ReShaper - Inspections settings -----------------------------------------------------

resharper_csharp_max_line_length = 180
resharper_c_sharp_warnings_cs8509_highlighting = none
resharper_wrap_object_and_collection_initializer_style = chop_always
resharper_csharp_wrap_after_declaration_lpar = true
resharper_inconsistent_naming_highlighting = none

# Solution-specific settings/overrides ------------------------------------------------------

## TBD


131 changes: 131 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: CI

on:
push:
branches:
- main
tags:
- v*
paths-ignore:
- '*.md'
- 'docs/**'
- '.github/workflows/purge-packages.yml'
pull_request:
paths-ignore:
- '*.md'
- 'docs/**'
- '.github/workflows/purge-packages.yml'

jobs:
init:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.resolve-version.outputs.version }}
publish-nuget-org: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') }}
publish-github: ${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/v') }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install dotnet-gitversion
run: |
echo ":/github/home/.dotnet/tools" >> $GITHUB_PATH
dotnet tool install -g GitVersion.Tool --version "5.12.0" --ignore-failed-sources
shell: bash
- name: Resolve Version
id: resolve-version
shell: pwsh
working-directory: ./
run: |
$rawVersion = dotnet-gitversion | ConvertFrom-Json
Write-Output $rawVersion
$semVer = $rawVersion.SemVer
Write-Output "Resolved version $semVer"
Write-Output "version=$semVer" >> $env:GITHUB_OUTPUT
Write-Output "Version = $semVer" >> $env:GITHUB_STEP_SUMMARY
build:
runs-on: ubuntu-latest
needs: init
env:
Configuration: Release
TreatWarningsAsErrors: true
Version: ${{ needs.init.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Restore
run: dotnet restore
- name: Check Format
run: dotnet format --no-restore --verify-no-changes
- name: Build
run: dotnet build --no-restore
- name: Test
run: dotnet test --no-restore
working-directory: ./tests/Tests
- name: Pack
run: dotnet pack --no-build -o nugets/
- name: Validate NuGets
run: |
echo ':/github/home/.dotnet/tools' >> $env:GITHUB_PATH
dotnet tool install -g dotnet-validate --version '0.0.1-preview.304' --ignore-failed-sources
Get-ChildItem ./nugets -Filter '*.nupkg' | ForEach-Object { dotnet-validate package local $_ }
shell: pwsh
- name: Upload Nugets as Artifacts
uses: actions/upload-artifact@v4
if: ${{ needs.init.outputs.publish-nuget-org == 'true' || needs.init.outputs.publish-github == 'true'}}
with:
name: nugets
path: nugets

test-with-azure-infra:
runs-on: ubuntu-latest
environment: azure
permissions:
contents: read
id-token: write
env:
Configuration: Release
TreatWarningsAsErrors: true
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
client-id: ${{ secrets.AZURE_CLIENT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- run: dotnet test
env:
SPOTFLOW_USE_AZURE: true
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_RESOURCE_GROUP_NAME: ${{ secrets.AZURE_RESOURCE_GROUP_NAME }}
AZURE_STORAGE_ACCOUNT_NAME: ${{ secrets.AZURE_STORAGE_ACCOUNT_NAME }}
AZURE_SERVICE_BUS_NAMESPACE_NAME: ${{ secrets.AZURE_SERVICE_BUS_NAMESPACE_NAME }}
AZURE_KEY_VAULT_NAME: ${{ secrets.AZURE_KEY_VAULT_NAME }}

publish-nuget-org:
runs-on: ubuntu-latest
needs: [init, build, test-with-azure-infra]
if: ${{ needs.init.outputs.publish-nuget-org == 'true' }}
environment: nuget-org
steps:
- name: Download Nugets
uses: actions/download-artifact@v4
with:
name: nugets
- name: Push Nugets
run: dotnet nuget push '*.nupkg' --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json

publish-github:
runs-on: ubuntu-latest
needs: [init, build, test-with-azure-infra]
permissions:
packages: write
if: ${{ needs.init.outputs.publish-github == 'true' }}
steps:
- name: Download Nugets
uses: actions/download-artifact@v4
with:
name: nugets
- name: Push Nugets
run: dotnet nuget push '*.nupkg' --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/spotflow-io/index.json --skip-duplicate
Loading

0 comments on commit b87c3d0

Please sign in to comment.