diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 2f38f36..7720a5a 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -15,4 +15,4 @@ ] } } -} +} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig index fccb81d..819c8e1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,7 @@ -root = true # EditorConfig is awesome: https://EditorConfig.org +root = true + [*] charset = utf-8 end_of_line = lf @@ -11,128 +12,47 @@ indent_size = 4 # Microsoft .NET properties csharp_new_line_before_members_in_object_initializers = false csharp_preferred_modifier_order = public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion -csharp_style_var_elsewhere = false:suggestion -csharp_style_var_for_built_in_types = false:suggestion -csharp_style_var_when_type_is_apparent = true:suggestion +csharp_space_after_cast = false +csharp_style_var_elsewhere = false:hint +csharp_style_var_for_built_in_types = false:hint +csharp_style_var_when_type_is_apparent = true:hint csharp_preserve_single_line_statements = false -dotnet_naming_rule.event_rule.import_to_resharper = as_predefined -dotnet_naming_rule.event_rule.severity = warning -dotnet_naming_rule.event_rule.style = upper_camel_case_underscore_tolerant_style -dotnet_naming_rule.event_rule.symbols = event_symbols -dotnet_naming_rule.local_constants_rule.import_to_resharper = as_predefined -dotnet_naming_rule.local_constants_rule.severity = warning -dotnet_naming_rule.local_constants_rule.style = upper_camel_case_style -dotnet_naming_rule.local_constants_rule.symbols = local_constants_symbols -dotnet_naming_rule.private_constants_rule.import_to_resharper = as_predefined -dotnet_naming_rule.private_constants_rule.severity = warning -dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style -dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols -dotnet_naming_rule.private_instance_fields_rule.import_to_resharper = as_predefined -dotnet_naming_rule.private_instance_fields_rule.severity = warning -dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style -dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols -dotnet_naming_rule.private_static_fields_override_rule.import_to_resharper = False -dotnet_naming_rule.private_static_fields_override_rule.severity = warning -dotnet_naming_rule.private_static_fields_override_rule.style = upper_camel_case_style -dotnet_naming_rule.private_static_fields_override_rule.symbols = private_static_fields_override_symbols -dotnet_naming_rule.private_static_fields_rule.import_to_resharper = as_predefined -dotnet_naming_rule.private_static_fields_rule.resharper_style = AaBb, aaBb -dotnet_naming_rule.private_static_fields_rule.severity = warning -dotnet_naming_rule.private_static_fields_rule.style = upper_camel_case_style -dotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols -dotnet_naming_rule.private_static_fields_rule_1.import_to_resharper = True -dotnet_naming_rule.private_static_fields_rule_1.resharper_description = PrivateStaticFields -dotnet_naming_rule.private_static_fields_rule_1.resharper_guid = 2ec29786-2764-45cc-849e-7a476ce55db8 -dotnet_naming_rule.private_static_fields_rule_1.resharper_style = AaBb, aaBb -dotnet_naming_rule.private_static_fields_rule_1.severity = warning -dotnet_naming_rule.private_static_fields_rule_1.style = upper_camel_case_style -dotnet_naming_rule.private_static_fields_rule_1.symbols = private_static_fields_symbols_1 -dotnet_naming_rule.private_static_readonly_rule.import_to_resharper = as_predefined -dotnet_naming_rule.private_static_readonly_rule.severity = warning -dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style -dotnet_naming_rule.private_static_readonly_rule.symbols = private_static_readonly_symbols -dotnet_naming_style.lower_camel_case_style.capitalization = camel_case -dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case -dotnet_naming_style.upper_camel_case_underscore_tolerant_style.capitalization = pascal_case -dotnet_naming_style.upper_camel_case_underscore_tolerant_style.word_separator = _ -dotnet_naming_symbols.event_symbols.applicable_accessibilities = * -dotnet_naming_symbols.event_symbols.applicable_kinds = event -dotnet_naming_symbols.local_constants_symbols.applicable_accessibilities = * -dotnet_naming_symbols.local_constants_symbols.applicable_kinds = local -dotnet_naming_symbols.local_constants_symbols.required_modifiers = const -dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field -dotnet_naming_symbols.private_constants_symbols.required_modifiers = const -dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field -dotnet_naming_symbols.private_static_fields_override_symbols.applicable_accessibilities = local, private -dotnet_naming_symbols.private_static_fields_override_symbols.applicable_kinds = field -dotnet_naming_symbols.private_static_fields_override_symbols.required_modifiers = const, static -dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field -dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static -dotnet_naming_symbols.private_static_fields_symbols_1.applicable_accessibilities = local, private -dotnet_naming_symbols.private_static_fields_symbols_1.applicable_kinds = field -dotnet_naming_symbols.private_static_fields_symbols_1.required_modifiers = static -dotnet_naming_symbols.private_static_fields_symbols_1.resharper_applicable_kinds = field -dotnet_naming_symbols.private_static_fields_symbols_1.resharper_required_modifiers = static -dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field -dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static, readonly -dotnet_separate_import_directive_groups = true -dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none -dotnet_style_parentheses_in_other_binary_operators = never_if_unnecessary:none -dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none -dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion -dotnet_style_predefined_type_for_member_access = true:suggestion -dotnet_style_qualification_for_event = true:suggestion -dotnet_style_qualification_for_field = true:suggestion -dotnet_style_qualification_for_method = true:suggestion -dotnet_style_qualification_for_property = true:suggestion -dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion +csharp_preserve_single_line_blocks = true +dotnet_style_predefined_type_for_locals_parameters_members = true:hint +dotnet_style_predefined_type_for_member_access = true:hint +dotnet_style_qualification_for_event = true:hint +dotnet_style_qualification_for_field = true:hint +dotnet_style_qualification_for_method = true:hint +dotnet_style_qualification_for_property = true:hint +dotnet_style_require_accessibility_modifiers = for_non_interface_members:hint # ReSharper properties resharper_alignment_tab_fill_style = optimal_fill -resharper_align_multiline_binary_expressions_chain = false -resharper_align_multiline_statement_conditions = false resharper_apply_on_completion = true resharper_blank_lines_after_control_transfer_statements = 1 -resharper_blank_lines_after_multiline_statements = 1 resharper_blank_lines_around_single_line_auto_property = 1 resharper_blank_lines_around_single_line_property = 1 -resharper_blank_lines_before_control_transfer_statements = 1 -resharper_blank_lines_before_multiline_statements = 1 resharper_blank_lines_before_single_line_comment = 1 +resharper_blank_lines_between_using_groups = 1 resharper_braces_for_for = required resharper_braces_for_foreach = required resharper_braces_for_ifelse = required resharper_braces_for_while = required resharper_can_use_global_alias = false -resharper_continuous_indent_multiplier = 1 -resharper_cpp_alignment_tab_fill_style = optimal_fill -resharper_cpp_insert_final_newline = true -resharper_csharp_alignment_tab_fill_style = use_spaces resharper_csharp_blank_lines_around_single_line_field = 1 resharper_csharp_blank_lines_around_single_line_invocable = 1 -resharper_csharp_indent_style = space +resharper_csharp_indent_style = tab resharper_csharp_insert_final_newline = true resharper_csharp_keep_blank_lines_in_code = 1 resharper_csharp_keep_blank_lines_in_declarations = 1 -resharper_csharp_max_line_length = 120 -resharper_csharp_naming_rule.method_property_event = AaBb_AaBb -resharper_csharp_naming_rule.private_constants = AaBb -resharper_csharp_naming_rule.private_static_fields = AaBb, aaBb -resharper_csharp_naming_rule.private_static_readonly = AaBb -resharper_csharp_stick_comment = false +resharper_csharp_new_line_before_while = true +resharper_csharp_use_indent_from_vs = false resharper_csharp_wrap_arguments_style = chop_if_long -resharper_csharp_wrap_before_binary_opsign = true resharper_csharp_wrap_extends_list_style = chop_if_long resharper_csharp_wrap_parameters_style = chop_if_long -resharper_css_insert_final_newline = true -resharper_default_exception_variable_name = exception +resharper_css_insert_final_newline = false resharper_enforce_line_ending_style = true -resharper_event_handler_pattern_long = On$event$ -resharper_html_alignment_tab_fill_style = optimal_fill +resharper_html_insert_final_newline = false resharper_indent_nested_fixed_stmt = true resharper_js_indent_style = tab resharper_js_insert_final_newline = true @@ -142,51 +62,28 @@ resharper_js_use_indent_from_vs = false resharper_js_wrap_before_binary_opsign = true resharper_js_wrap_chained_method_calls = chop_if_long resharper_keep_blank_lines_between_declarations = 1 -resharper_keep_existing_declaration_block_arrangement = true -resharper_keep_existing_declaration_parens_arrangement = false -resharper_keep_existing_embedded_block_arrangement = true -resharper_keep_existing_enum_arrangement = true -resharper_keep_existing_linebreaks = true -resharper_keep_user_linebreaks = true resharper_min_blank_lines_after_imports = 1 -resharper_nested_ternary_style = expanded -resharper_new_line_before_while = true -resharper_place_attribute_on_same_line = false +resharper_place_attribute_on_same_line = False resharper_place_constructor_initializer_on_same_line = false resharper_place_type_constraints_on_same_line = false -resharper_protobuf_insert_final_newline = true +resharper_protobuf_insert_final_newline = false resharper_qualified_using_at_nested_scope = true -resharper_resx_alignment_tab_fill_style = optimal_fill -resharper_t4_alignment_tab_fill_style = optimal_fill -resharper_t4_insert_final_newline = true -resharper_use_continuous_indent_inside_initializer_braces = false +resharper_resx_insert_final_newline = false +resharper_space_within_single_line_array_initializer_braces = true resharper_use_indents_from_main_language_in_file = false -resharper_use_indent_from_vs = false -resharper_vb_alignment_tab_fill_style = optimal_fill +resharper_vb_insert_final_newline = false resharper_wrap_after_declaration_lpar = true resharper_wrap_after_invocation_lpar = true -resharper_wrap_array_initializer_style = chop_if_long resharper_wrap_before_extends_colon = true resharper_wrap_before_first_type_parameter_constraint = true resharper_wrap_before_type_parameter_langle = true -resharper_wrap_chained_binary_expressions = chop_if_long -resharper_wrap_chained_method_calls = chop_always -resharper_wrap_object_and_collection_initializer_style = chop_always -resharper_xmldoc_alignment_tab_fill_style = optimal_fill resharper_xmldoc_indent_child_elements = ZeroIndent resharper_xmldoc_indent_text = ZeroIndent -resharper_xmldoc_max_line_length = 80 -resharper_xml_alignment_tab_fill_style = optimal_fill +resharper_xmldoc_insert_final_newline = false +resharper_xml_insert_final_newline = false # ReSharper inspection severities -resharper_arrange_redundant_parentheses_highlighting = hint -resharper_arrange_this_qualifier_highlighting = hint -resharper_arrange_type_member_modifiers_highlighting = hint -resharper_arrange_type_modifiers_highlighting = hint -resharper_built_in_type_reference_style_for_member_access_highlighting = hint -resharper_built_in_type_reference_style_highlighting = hint resharper_check_namespace_highlighting = none -resharper_class_never_instantiated_global_highlighting = none resharper_convert_to_auto_property_highlighting = none resharper_localizable_element_highlighting = none resharper_redundant_comma_in_attribute_list_highlighting = none @@ -194,16 +91,9 @@ resharper_redundant_comma_in_enum_declaration_highlighting = none resharper_redundant_comma_in_initializer_highlighting = none resharper_string_compare_to_is_culture_specific_highlighting = none resharper_string_index_of_is_culture_specific_1_highlighting = none -resharper_suggest_var_or_type_built_in_types_highlighting = hint -resharper_suggest_var_or_type_elsewhere_highlighting = hint -resharper_suggest_var_or_type_simple_types_highlighting = hint resharper_use_null_propagation_highlighting = none resharper_use_object_or_collection_initializer_highlighting = hint resharper_use_string_interpolation_highlighting = hint -resharper_web_config_module_not_resolved_highlighting = warning -resharper_web_config_type_not_resolved_highlighting = warning -resharper_web_config_wrong_module_highlighting = warning -trim_trailing_whitespace = false # Matches the exact files either package.json or .travis.yml [{package.json,.travis.yml}] @@ -211,6 +101,16 @@ indent_style = space indent_size = 2 tab_width = 2 +[*.{cs,js,json,jsx,proto,resjson,ts,tsx}] +indent_style = space +indent_size = 4 +tab_width = 4 + +[*.{asax,ascx,aspx,cshtml,css,htm,html,master,razor,skin,vb,xaml,xamlx,xoml}] +indent_style = space +indent_size = 4 +tab_width = 4 + [*.{appxmanifest,build,config,csproj,dbml,discomap,dtd,jsproj,lsproj,njsproj,nuspec,proj,props,resw,resx,StyleCop,targets,tasks,vbproj,xml,xsd}] indent_style = space indent_size = 2 @@ -220,18 +120,3 @@ tab_width = 2 indent_style = space indent_size = 2 tab_width = 2 - -[*.cs] -indent_style = space -indent_size = 4 -tab_width = 4 - -[*.{appxmanifest,asax,ascx,aspx,axaml,build,cg,cginc,compute,cs,cshtml,dtd,hlsl,hlsli,hlslinc,master,nuspec,paml,razor,resw,resx,skin,usf,ush,vb,xaml,xamlx,xoml,xsd}] -indent_style = space -indent_size = 4 -tab_width = 4 - -[*.{appxmanifest,asax,ascx,aspx,axaml,build,c,c++,cc,cginc,compute,cp,cpp,cs,cshtml,cu,cuh,cxx,dtd,fx,fxh,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,master,mpp,mq4,mq5,mqh,nuspec,paml,razor,resw,resx,skin,tpp,usf,ush,vb,xaml,xamlx,xoml,xsd}] -indent_style = space -indent_size = 4 -tab_width = 4 \ No newline at end of file diff --git a/.envrc b/.envrc index 1b5f158..5816063 100644 --- a/.envrc +++ b/.envrc @@ -1,5 +1,2 @@ -# Insert our scripts into the path. export PATH=$PWD/scripts:$PATH - -# Nix flakes are awesome. -use flake +use flake || use nix diff --git a/.gitignore b/.gitignore index f7ff559..53987a3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,8 +11,15 @@ obj/ .idea/ _ReSharper.Caches/ node_modules/ + +# NixOS .direnv/ + +# Tests and Coverage coverage TestResults/ tests/artifacts/ -.lefthook* + +# Lefthook +.lefthook-local/ +lefthook-local.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index e4623ab..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,46 +0,0 @@ -include: - - template: Security/SAST.gitlab-ci.yml - -stages: - - build - - test - - release - -default: - image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest - -build: - stage: build - script: - - nix develop --command scripts/build.sh - rules: - - if: $CI_COMMIT_BRANCH - -test: - stage: test - script: - - nix develop --command scripts/test.sh - artifacts: - when: always - paths: - - ./**/*test-result.xml - - ./coverage/Cobertura.xml - - ./coverage/Summary.* - - ./**/*.nupkg - reports: - coverage_report: - coverage_format: cobertura - path: ./coverage/Cobertura.xml - junit: - - ./**/*test-result.xml - -publish: - stage: release - before_script: - # Set it up so we can push the tag - - project_url=$(echo $CI_PROJECT_URL | sed 's/https:\/\///') - - git remote set-url origin https://oauth2:$GITLAB_TOKEN@$project_url - script: - - nix develop --command scripts/release.sh - rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..3f25d63 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,36 @@ +clone: + git: + image: woodpeckerci/plugin-git + settings: + tags: true + +pipeline: + build: + image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest + commands: + - nix develop --command scripts/build.sh + when: + event: [push, pull_request, tag] + tag: v* + + test: + image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest + commands: + - nix develop --command scripts/test.sh + when: + event: [push, pull_request] + #paths: + # - ./**/*test-result.xml + # - ./coverage/Cobertura.xml + # - ./coverage/Summary.* + # - ./**/*.nupkg + + release-main: + image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest + commands: + - nix develop --command scripts/release.sh + secrets: + - gitea_token + when: + event: push + branch: main diff --git a/NuGet.Config b/NuGet.Config index af8eac9..ff47af7 100644 --- a/NuGet.Config +++ b/NuGet.Config @@ -1,7 +1,16 @@ - + - + + - + + + + + + + + + diff --git a/flake.lock b/flake.lock index 1146b23..b67b61d 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1649676176, - "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", "owner": "numtide", "repo": "flake-utils", - "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1651558728, - "narHash": "sha256-8HzyRnWlgZluUrVFNOfZAOlA1fghpOSezXvxhalGMUo=", + "lastModified": 1662019588, + "narHash": "sha256-oPEjHKGGVbBXqwwL+UjsveJzghWiWV0n9ogo1X6l4cw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "cbe587c735b734405f56803e267820ee1559e6c1", + "rev": "2da64a81275b68fdad38af669afeda43d401e94b", "type": "github" }, "original": { diff --git a/lefthook.yml b/lefthook.yml index dbc1c63..43a0f2b 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -1,13 +1,22 @@ -pre-push: - parallel: true - commands: - commit-check: - run: convco check - pre-commit: parallel: true commands: + dotnet-format: + glob: "*.cs" + run: dotnet format prettier: run: prettier . --write --loglevel warn nixfmt: run: nixfmt flake.nix + +commit-msg: + commands: + commit-check: + run: convco check -n 1 + +skip_output: + - meta # Skips lefthook version printing + - summary # Skips summary block (successful and failed steps) printing + - success # Skips successful steps printing + - failure # Skips failed steps printing + - execution # Skips printing successfully executed commands and their output (but still prints failed executions) diff --git a/scripts/build.sh b/scripts/build.sh index 0cda922..66f32c5 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -3,4 +3,5 @@ cd $(dirname $0)/.. ./scripts/setup.sh || exit 1 +echo "$(basename $0): building project" dotnet build diff --git a/scripts/format.sh b/scripts/format.sh index fd015be..7b31af0 100755 --- a/scripts/format.sh +++ b/scripts/format.sh @@ -1,14 +1,4 @@ #!/usr/bin/env sh -# Normalize our environment. cd $(dirname $0)/.. -./scripts/setup.sh || exit 1 - -# Format the .NET code -dotnet format || exit 1 - -# Format using Prettier. -prettier . --write --loglevel warn - -# Format the Flake. -nixfmt flake.nix +lefthook run pre-commit diff --git a/scripts/release.sh b/scripts/release.sh index 8e51251..94ed900 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -4,43 +4,48 @@ cd $(dirname $0)/.. ./scripts/setup.sh || exit 1 # Verify the input. -if [ "x$NUGET_TOKEN" = "x" ] +if [ "x$GITEA_TOKEN" = "x" ] then - echo "the environment variable NUGET_TOKEN is not defined" - exit 1 -fi - -if [ "x$NUGET_PUSH_URL" = "x" ] -then - echo "the environment variable NUGET_PUSH_URL is not defined" + echo "the environment variable GITEA_TOKEN is not defined" exit 1 fi # Clean up everything from the previous runs. +echo "$(basename $0): cleaning project" dotnet clean # Version the file based on the Git repository. +echo "$(basename $0): setting project version" +(cd src && dotnet dotnet-gitversion /updateprojectfiles) SEMVER="v$(dotnet gitversion /output json | jq -r .SemVer)" if [ "x$SEMVER" = "x" ] then - echo "cannot figure out the semantic version" + echo "$(basename $0): cannot figure out the semantic version" exit 1 fi # Build to pick up the new version. -dotnet build +echo "$(basename $0): building project $SEMVER" +dotnet build || exit 1 # Create and publish the NuGet packages. -dotnet pack --include-symbols --include-source -dotnet nuget push src/*/bin/Debug/*.nupkg --api-key $NUGET_TOKEN --source $NUGET_PUSH_URL +echo "$(basename $0): creating NuGet packages" +dotnet pack -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg || exit 1 + +echo "$(basename $0): publishing NuGet package" +dotnet nuget remove source mfgames.com >& /dev/null +dotnet nuget add source --name mfgames.com --username dmoonfire --password $GITEA_TOKEN https://src.mfgames.com/api/packages/mfgames-cil/nuget/index.json --store-password-in-clear-text || exit 1 +dotnet nuget push --skip-duplicate --source mfgames.com src/*/bin/Debug/*.nupkg || exit 1 # Tag and push, but only if we don't have a tag. if ! git tag | grep $SEMVER >& /dev/null then - echo "tagging and pushing" + echo "$(basename $0): tagging and pushing" + git remote add publish https://dmoonfire:$GITEA_TOKEN@src.mfgames.com/mfgames-cil/$(basename $(git config --get remote.origin.url)) git tag $SEMVER - git push origin $SEMVER + git push publish $SEMVER || exit 1 + git remote remove publish else - echo "not tagging, already exists" + echo "$(basename $0): not tagging, already exists" fi diff --git a/scripts/setup.sh b/scripts/setup.sh index 83081f9..3ee77ae 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -14,13 +14,15 @@ do done # Make sure we have lefthook is installed. -lefthook install +if [ ! -f .git/hooks/pre-commit ] +then + echo "$(basename $0): installing lefthook" + lefthook install +fi # Make sure our tools are installed. +echo "$(basename $0): install .NET tools" dotnet tool restore -# Make sure everything is the right version. -dotnet gitversion /updateprojectfiles - # Everything is good. exit 0 diff --git a/scripts/test.sh b/scripts/test.sh index bb106ee..7587fb1 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -1,8 +1,12 @@ #!/usr/bin/env sh cd $(dirname $0)/.. -./scripts/setup.sh || exit 1 -dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=../artifacts/{assembly}-test-result.xml;MethodFormat=Default;FailureBodyFormat=Verbose" --collect:"XPlat Code Coverage" -dotnet tool run reportgenerator -reports:tests/*/TestResults/*/coverage.cobertura.xml -targetdir:./coverage "-reporttypes:Cobertura;TextSummary" -grep "Line coverage" coverage/Summary.txt +if [ -f ./tests/*/*.csproj ] +then + ./scripts/setup.sh || exit 1 + + dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=../artifacts/{assembly}-test-result.xml;MethodFormat=Default;FailureBodyFormat=Verbose" --collect:"XPlat Code Coverage" + dotnet tool run reportgenerator -reports:tests/*/TestResults/*/coverage.cobertura.xml -targetdir:./coverage "-reporttypes:Cobertura;TextSummary" + grep "Line coverage" coverage/Summary.txt +fi diff --git a/scripts/update-template.sh b/scripts/update-template.sh new file mode 100755 index 0000000..2d80710 --- /dev/null +++ b/scripts/update-template.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh + +cd $(dirname $0)/.. +git pull template main --no-rebase