From 0987ee8b807a44f7f26aedeeb06dbc5a45423ff6 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Thu, 26 May 2022 08:57:57 -0700 Subject: [PATCH] Ready to test --- .editorconfig | 243 ++++++++++++++++++ .gitignore | 3 +- .vscode/format-report.json | 1 + .vscode/launch.json | 28 ++ .vscode/settings.json | 11 + .vscode/tasks.json | 41 +++ File-Folder-Helper.csproj | 34 +++ Helpers/HelperDeleteEmptyDirectories.cs | 43 ++++ Helpers/HelperILMerge.cs | 44 ++++ Helpers/HelperLogMerge.cs | 71 +++++ Helpers/HelperRenameToOldMoveDeleteOld.cs | 50 ++++ Helpers/HelperSaveOrCopyContents.cs | 182 +++++++++++++ Helpers/HelperStart.cs | 55 ++++ Helpers/HelperTooLong.cs | 32 +++ Helpers/HelperZipFilesByDate.cs | 139 ++++++++++ Jenkinsfile | 138 ++++++++++ Models/AppSettings.cs | 32 +++ Models/Binder/AppSettings.cs | 24 ++ Models/Stateless/AppSettings.cs | 25 ++ Phares/Shared/Models/IsEnvironment.cs | 167 ++++++++++++ .../Models/Stateless/Methods/IMethodName.cs | 10 + .../Stateless/Methods/IWorkingDirectory.cs | 8 + .../Stateless/Methods/WorkingDirectory.cs | 50 ++++ Program.cs | 151 +++++++++++ appsettings.Development.json | 51 ++++ appsettings.Staging.json | 51 ++++ appsettings.json | 51 ++++ package.json | 14 + 28 files changed, 1747 insertions(+), 2 deletions(-) create mode 100644 .editorconfig create mode 100644 .vscode/format-report.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 File-Folder-Helper.csproj create mode 100644 Helpers/HelperDeleteEmptyDirectories.cs create mode 100644 Helpers/HelperILMerge.cs create mode 100644 Helpers/HelperLogMerge.cs create mode 100644 Helpers/HelperRenameToOldMoveDeleteOld.cs create mode 100644 Helpers/HelperSaveOrCopyContents.cs create mode 100644 Helpers/HelperStart.cs create mode 100644 Helpers/HelperTooLong.cs create mode 100644 Helpers/HelperZipFilesByDate.cs create mode 100644 Jenkinsfile create mode 100644 Models/AppSettings.cs create mode 100644 Models/Binder/AppSettings.cs create mode 100644 Models/Stateless/AppSettings.cs create mode 100644 Phares/Shared/Models/IsEnvironment.cs create mode 100644 Phares/Shared/Models/Stateless/Methods/IMethodName.cs create mode 100644 Phares/Shared/Models/Stateless/Methods/IWorkingDirectory.cs create mode 100644 Phares/Shared/Models/Stateless/Methods/WorkingDirectory.cs create mode 100644 Program.cs create mode 100644 appsettings.Development.json create mode 100644 appsettings.Staging.json create mode 100644 appsettings.json create mode 100644 package.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..046ef9f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,243 @@ +[*.cs] +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true +csharp_prefer_braces = false +csharp_prefer_simple_default_expression = true:warning +csharp_prefer_simple_using_statement = true:warning +csharp_prefer_static_local_function = true:warning +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true +csharp_style_allow_embedded_statements_on_same_line_experimental = true +csharp_style_conditional_delegate_call = true +csharp_style_deconstructed_variable_declaration = false +csharp_style_expression_bodied_accessors = when_on_single_line:warning +csharp_style_expression_bodied_constructors = when_on_single_line:warning +csharp_style_expression_bodied_indexers = when_on_single_line:warning +csharp_style_expression_bodied_lambdas = when_on_single_line:warning +csharp_style_expression_bodied_local_functions = when_on_single_line:warning +csharp_style_expression_bodied_methods = when_on_single_line:warning +csharp_style_expression_bodied_operators = when_on_single_line:warning +csharp_style_expression_bodied_properties = when_on_single_line:warning +csharp_style_implicit_object_creation_when_type_is_apparent = true:warning +csharp_style_inlined_variable_declaration = false +csharp_style_namespace_declarations = file_scoped:warning +csharp_style_pattern_local_over_anonymous_function = true:warning +csharp_style_pattern_matching_over_as_with_null_check = true:warning +csharp_style_pattern_matching_over_is_with_cast_check = true:warning +csharp_style_prefer_index_operator = true:warning +csharp_style_prefer_not_pattern = true:warning +csharp_style_prefer_null_check_over_type_check = true +csharp_style_prefer_pattern_matching = true:warning +csharp_style_prefer_range_operator = true:warning +csharp_style_prefer_switch_expression = true:warning +csharp_style_throw_expression = true +csharp_style_unused_value_assignment_preference = discard_variable:warning +csharp_style_unused_value_expression_statement_preference = discard_variable:warning +csharp_style_var_elsewhere = false:warning +csharp_style_var_for_built_in_types = false:warning +csharp_style_var_when_type_is_apparent = false:warning +csharp_using_directive_placement = outside_namespace +dotnet_code_quality_unused_parameters = all +dotnet_code_quality_unused_parameters = non_public # IDE0060: Remove unused parameter +dotnet_code_quality.CAXXXX.api_surface = private, internal +dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations +dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available +dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable +dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name +dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); +dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary +dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed +dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter +dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method +dotnet_naming_rule.class_should_be_pascal_case.severity = warning +dotnet_naming_rule.class_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.class_should_be_pascal_case.symbols = class +dotnet_naming_rule.delegate_should_be_pascal_case.severity = warning +dotnet_naming_rule.delegate_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.delegate_should_be_pascal_case.symbols = delegate +dotnet_naming_rule.enum_should_be_pascal_case.severity = warning +dotnet_naming_rule.enum_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.enum_should_be_pascal_case.symbols = enum +dotnet_naming_rule.event_should_be_pascal_case.severity = warning +dotnet_naming_rule.event_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.event_should_be_pascal_case.symbols = event +dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.method_should_be_pascal_case.severity = warning +dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.method_should_be_pascal_case.symbols = method +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.private_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.private_method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.private_method_should_be_pascal_case.symbols = private_method +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.style = private_of_internal_field +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.symbols = private_or_internal_field +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.style = private_of_internal_field +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.symbols = private_or_internal_static_field +dotnet_naming_rule.property_should_be_pascal_case.severity = warning +dotnet_naming_rule.property_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.property_should_be_pascal_case.symbols = property +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.style = private_of_internal_field +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.symbols = public_or_protected_field +dotnet_naming_rule.static_field_should_be_pascal_case.severity = warning +dotnet_naming_rule.static_field_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.static_field_should_be_pascal_case.symbols = static_field +dotnet_naming_rule.static_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.static_method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.static_method_should_be_pascal_case.symbols = static_method +dotnet_naming_rule.struct_should_be_pascal_case.severity = warning +dotnet_naming_rule.struct_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.struct_should_be_pascal_case.symbols = struct +dotnet_naming_rule.types_should_be_pascal_case.severity = warning +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_style.begins_with_i.capitalization = pascal_case +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.private_of_internal_field.capitalization = pascal_case +dotnet_naming_style.private_of_internal_field.required_prefix = _ +dotnet_naming_style.private_of_internal_field.required_suffix = +dotnet_naming_style.private_of_internal_field.word_separator = +dotnet_naming_symbols.abstract_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.abstract_method.applicable_kinds = method +dotnet_naming_symbols.abstract_method.required_modifiers = abstract +dotnet_naming_symbols.class.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.class.applicable_kinds = class +dotnet_naming_symbols.class.required_modifiers = +dotnet_naming_symbols.delegate.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.delegate.applicable_kinds = delegate +dotnet_naming_symbols.delegate.required_modifiers = +dotnet_naming_symbols.enum.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.enum.applicable_kinds = enum +dotnet_naming_symbols.enum.required_modifiers = +dotnet_naming_symbols.event.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.event.applicable_kinds = event +dotnet_naming_symbols.event.required_modifiers = +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.required_modifiers = +dotnet_naming_symbols.method.applicable_accessibilities = public +dotnet_naming_symbols.method.applicable_kinds = method +dotnet_naming_symbols.method.required_modifiers = +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.required_modifiers = +dotnet_naming_symbols.private_method.applicable_accessibilities = private +dotnet_naming_symbols.private_method.applicable_kinds = method +dotnet_naming_symbols.private_method.required_modifiers = +dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected +dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field +dotnet_naming_symbols.private_or_internal_field.required_modifiers = +dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected +dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field +dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static +dotnet_naming_symbols.property.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.property.applicable_kinds = property +dotnet_naming_symbols.property.required_modifiers = +dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected +dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field +dotnet_naming_symbols.public_or_protected_field.required_modifiers = +dotnet_naming_symbols.static_field.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.static_field.applicable_kinds = field +dotnet_naming_symbols.static_field.required_modifiers = static +dotnet_naming_symbols.static_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.static_method.applicable_kinds = method +dotnet_naming_symbols.static_method.required_modifiers = static +dotnet_naming_symbols.struct.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.struct.applicable_kinds = struct +dotnet_naming_symbols.struct.required_modifiers = +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.required_modifiers = +dotnet_remove_unnecessary_suppression_exclusions = 0 +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = false +dotnet_style_allow_multiple_blank_lines_experimental = false:warning +dotnet_style_allow_statement_immediately_after_block_experimental = true +dotnet_style_coalesce_expression = true +dotnet_style_collection_initializer = true:warning +dotnet_style_explicit_tuple_names = true:warning +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true:warning +dotnet_style_object_initializer = true:warning +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity +dotnet_style_predefined_type_for_locals_parameters_members = true +dotnet_style_predefined_type_for_member_access = true +dotnet_style_prefer_auto_properties = true:warning +dotnet_style_prefer_compound_assignment = true:warning +dotnet_style_prefer_conditional_expression_over_assignment = false +dotnet_style_prefer_conditional_expression_over_return = false +dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning +dotnet_style_prefer_inferred_tuple_names = true:warning +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning +dotnet_style_prefer_simplified_boolean_expressions = true:warning +dotnet_style_prefer_simplified_interpolation = true +dotnet_style_qualification_for_event = false:error +dotnet_style_qualification_for_field = false +dotnet_style_qualification_for_method = false:error +dotnet_style_qualification_for_property = false:error +dotnet_style_readonly_field = true:warning +dotnet_style_require_accessibility_modifiers = for_non_interface_members +end_of_line = crlf +file_header_template = unset +indent_size = 4 +indent_style = space +insert_final_newline = false +root = true +tab_width = 4 +# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1822 +# https://github.com/dotnet/aspnetcore/blob/main/.editorconfig +# https://github.com/dotnet/project-system/blob/main/.editorconfig \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3e759b7..0c04d1d 100644 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,6 @@ x86/ bld/ [Bb]in/ [Oo]bj/ -[Ll]og/ # Visual Studio 2015/2017 cache/options directory .vs/ @@ -327,4 +326,4 @@ ASALocalRun/ *.nvuser # MFractors (Xamarin productivity tool) working folder -.mfractor/ +.mfractor/ \ No newline at end of file diff --git a/.vscode/format-report.json b/.vscode/format-report.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/.vscode/format-report.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..8a89066 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,28 @@ +{ + // 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 (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/bin/Debug/net6.0/win-x64/File-Folder-Helper.dll", + "args": [ + "s", + "C", + "D:/" + ], + "cwd": "${workspaceFolder}", + "console": "externalTerminal", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..81fd88c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.exclude": { + "**/.git": false + }, + "cSpell.words": [ + "ASPNETCORE", + "Infineon", + "Phares", + "Serilog" + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..c3f3754 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/File-Folder-Helper.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/File-Folder-Helper.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/File-Folder-Helper.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/File-Folder-Helper.csproj b/File-Folder-Helper.csproj new file mode 100644 index 0000000..049fa85 --- /dev/null +++ b/File-Folder-Helper.csproj @@ -0,0 +1,34 @@ + + + enable + 10.0 + enable + Exe + win-x64 + net6.0 + + + + + + + + + + + + + + + + + Always + + + Always + + + Always + + + \ No newline at end of file diff --git a/Helpers/HelperDeleteEmptyDirectories.cs b/Helpers/HelperDeleteEmptyDirectories.cs new file mode 100644 index 0000000..bdfa00c --- /dev/null +++ b/Helpers/HelperDeleteEmptyDirectories.cs @@ -0,0 +1,43 @@ +namespace File_Folder_Helper.Helpers; + +internal static class HelperDeleteEmptyDirectories +{ + + internal static bool DeleteEmptyDirectories(string rootDirectory) + { + bool result; + if (!Directory.Exists(rootDirectory)) + result = false; + else + { + string[] files; + string[] directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly); + if (directories.Length > 0) + files = Array.Empty(); + else + files = Directory.GetFiles(rootDirectory, "*", SearchOption.AllDirectories); + if (directories.Length == 0 && files.Length == 0) + { + result = true; + Directory.Delete(rootDirectory); + } + else + { + result = false; + foreach (string directory in directories) + { + result = DeleteEmptyDirectories(directory); + if (result) + result = DeleteEmptyDirectories(directory); + } + if (files is null) + { + directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly); + result = directories.Length == 0; + } + } + } + return result; + } + +} \ No newline at end of file diff --git a/Helpers/HelperILMerge.cs b/Helpers/HelperILMerge.cs new file mode 100644 index 0000000..166cb93 --- /dev/null +++ b/Helpers/HelperILMerge.cs @@ -0,0 +1,44 @@ +using System.Diagnostics; +using System.Text; + +namespace File_Folder_Helper.Helpers; + +internal static class HelperILMerge +{ + + internal static void ILMerge(string workingDirectory) + { + bool result; + ProcessStartInfo processStartInfo; + StringBuilder stringBuilder = new(); + string[] successChecks = new string[] { "success" }; + string[] errorChecks = new string[] { "Error", "Conflict", "error:" }; + string errorFile = Path.Combine(workingDirectory, string.Concat(Path.GetFileName(workingDirectory), ".err")); + string primaryFile = Path.Combine(workingDirectory, string.Concat(Path.GetFileName(workingDirectory), ".dll")); + string[] dllFiles = Directory.GetFiles(workingDirectory, "*.dll", SearchOption.TopDirectoryOnly); + FileInfo ilMerge = new(@"C:\Users\phares\AppData\Local\IFXApps\ILMerge\ILMerge.exe"); + FileInfo fileInfo = new(Path.Combine(workingDirectory, ilMerge.Name)); + if (!fileInfo.Exists) + _ = ilMerge.CopyTo(fileInfo.FullName); + if (fileInfo.Exists && ilMerge.LastWriteTime != fileInfo.LastWriteTime) + _ = ilMerge.CopyTo(fileInfo.FullName, overwrite: true); + _ = stringBuilder.Append("/allowDup /target:library /out:\"").Append(Path.GetFileNameWithoutExtension(primaryFile)).Append(".all.dll\" "); + foreach (string dllFile in dllFiles) + { + if (dllFile == primaryFile) + continue; + _ = stringBuilder.Append('"').Append(Path.GetFileName(dllFile)).Append("\" "); + } + processStartInfo = new ProcessStartInfo(fileInfo.FullName, stringBuilder.ToString()) + { + UseShellExecute = false, + RedirectStandardError = true, + RedirectStandardOutput = true, + WorkingDirectory = workingDirectory, + }; + result = HelperStart.Start(errorChecks, successChecks, processStartInfo, errorFile); + if (result) + { } + } + +} \ No newline at end of file diff --git a/Helpers/HelperLogMerge.cs b/Helpers/HelperLogMerge.cs new file mode 100644 index 0000000..5333a0b --- /dev/null +++ b/Helpers/HelperLogMerge.cs @@ -0,0 +1,71 @@ +using System.Globalization; + +namespace File_Folder_Helper.Helpers; + +internal static class HelperLogMerge +{ + + internal static void LogMerge(string argsZero) + { + int hour; + string day; + string logFile; + FileInfo fileInfo; + string[] segments; + string checkDirectory; + string format = "yyyyMMdd"; + string segment1 = string.Empty; + string sourceFileNameWithoutExtension; + List lines = new(); + List moveFiles = new(); + DateTime dateTime = DateTime.Now.AddMinutes(2); + string[] sourceFiles = Directory.GetFiles(argsZero, "*.log", SearchOption.TopDirectoryOnly); + Dictionary> keyValuePairs = new(); + foreach (string sourceFile in sourceFiles) + { + sourceFileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile); + if (sourceFileNameWithoutExtension.Split('-').Length > 2) + continue; + if (sourceFileNameWithoutExtension.StartsWith(dateTime.ToString(format))) + continue; + fileInfo = new FileInfo(sourceFile); + if (fileInfo.Length == 0) + moveFiles.Add(sourceFile); + day = sourceFileNameWithoutExtension[..8]; + if (!keyValuePairs.ContainsKey(day)) + keyValuePairs.Add(day, new Dictionary()); + if (sourceFileNameWithoutExtension.Substring(8, 1) == "_") + continue; + segments = sourceFileNameWithoutExtension.Split('_'); + if (!string.IsNullOrEmpty(segment1) && segment1 != segments[1]) + continue; + segment1 = segments[1]; + hour = int.Parse(sourceFileNameWithoutExtension.Substring(8, 2)); + if (keyValuePairs[day].ContainsKey(hour)) + continue; + keyValuePairs[day].Add(hour, File.ReadAllLines(sourceFile)); + moveFiles.Add(sourceFile); + } + if (!string.IsNullOrEmpty(segment1)) + { + foreach (KeyValuePair> keyValuePair in keyValuePairs) + { + lines.Clear(); + dateTime = DateTime.ParseExact(keyValuePair.Key, format, CultureInfo.InvariantCulture); + foreach (KeyValuePair item in keyValuePair.Value.OrderBy(l => l.Key)) + lines.AddRange(item.Value); + logFile = string.Concat(argsZero, @"\", dateTime.ToString("yyyy-MM-dd"), "_", segment1, ".log"); + File.WriteAllLines(logFile, lines); + if (dateTime.Hour == 0 && dateTime.Minute == 0 && dateTime.Second == 0 && dateTime.Millisecond == 0) + _ = dateTime.AddHours(23).AddMinutes(59).AddSeconds(59); + File.SetLastWriteTime(logFile, dateTime); + } + checkDirectory = string.Concat(argsZero, @"\_ Merged"); + if (!Directory.Exists(checkDirectory)) + _ = Directory.CreateDirectory(checkDirectory); + foreach (string moveFile in moveFiles.Distinct()) + File.Move(moveFile, string.Concat(checkDirectory, @"\", Path.GetFileName(moveFile))); + } + } + +} \ No newline at end of file diff --git a/Helpers/HelperRenameToOldMoveDeleteOld.cs b/Helpers/HelperRenameToOldMoveDeleteOld.cs new file mode 100644 index 0000000..e192832 --- /dev/null +++ b/Helpers/HelperRenameToOldMoveDeleteOld.cs @@ -0,0 +1,50 @@ +using Serilog; + +namespace File_Folder_Helper.Helpers; + +internal static class HelperRenameToOldMoveDeleteOldMerge +{ + + internal static void RenameToOldMoveDeleteOld(ILogger log, string argsZero) + { + string checkDirectory = argsZero[0..^1]; + if (!Directory.Exists(checkDirectory)) + log.Information(string.Concat("<", checkDirectory, "> doesn't exist!")); + else + { + string renameFile; + string destinationFile; + List deleteFiles = new(); + string[] moveFiles = Directory.GetFiles(argsZero, "*", SearchOption.TopDirectoryOnly); + log.Information(string.Concat("<", moveFiles.Length, "> to move")); + foreach (string moveFile in moveFiles) + { + destinationFile = string.Concat(checkDirectory, moveFile[argsZero.Length..]); + if (!File.Exists(destinationFile)) + File.Move(moveFile, destinationFile); + else + { + renameFile = Path.ChangeExtension(destinationFile, string.Concat(Path.GetExtension(destinationFile), ".old")); + File.Move(destinationFile, renameFile); + File.Move(moveFile, destinationFile); + deleteFiles.Add(renameFile); + } + } + log.Information(string.Concat("<", deleteFiles.Count, "> to delete")); + foreach (string deleteFile in deleteFiles) + { + for (short i = 0; i < short.MaxValue; i++) + { + try + { + File.Delete(deleteFile); + break; + } + catch (Exception) { } + Thread.Sleep(500); + } + } + } + } + +} \ No newline at end of file diff --git a/Helpers/HelperSaveOrCopyContents.cs b/Helpers/HelperSaveOrCopyContents.cs new file mode 100644 index 0000000..80c2f51 --- /dev/null +++ b/Helpers/HelperSaveOrCopyContents.cs @@ -0,0 +1,182 @@ +using Serilog; +using System.Text; + +namespace File_Folder_Helper.Helpers; + +internal static class HelperSaveOrCopyContents +{ + + internal static void SaveOrCopyContents(ILogger log, string argsZero, ConsoleKey consoleKey) + { + SearchOption searchOption; + bool fileNameWithoutExtension; + bool alongSideTopDirectoryOnly = false; + bool alongSideAllDirectories = false; + bool clipboardTopDirectoryOnly = false; + switch (consoleKey) + { + case ConsoleKey.A: + alongSideTopDirectoryOnly = true; + searchOption = SearchOption.TopDirectoryOnly; + fileNameWithoutExtension = false; + break; + case ConsoleKey.B: + alongSideAllDirectories = true; + searchOption = SearchOption.AllDirectories; + fileNameWithoutExtension = false; + break; + case ConsoleKey.C: + clipboardTopDirectoryOnly = true; + searchOption = SearchOption.TopDirectoryOnly; + fileNameWithoutExtension = false; + break; + case ConsoleKey.D: + clipboardTopDirectoryOnly = true; + searchOption = SearchOption.AllDirectories; + fileNameWithoutExtension = false; + break; + case ConsoleKey.E: + clipboardTopDirectoryOnly = true; + searchOption = SearchOption.TopDirectoryOnly; + fileNameWithoutExtension = true; + break; + case ConsoleKey.F: + clipboardTopDirectoryOnly = true; + searchOption = SearchOption.AllDirectories; + fileNameWithoutExtension = true; + break; + default: + throw new Exception(); + } + log.Information("D) Directory, F) File or B) Both?"); + ConsoleKey dfb = Console.ReadKey().Key; + log.Information(string.Empty); + if (dfb is not ConsoleKey.D and not ConsoleKey.F and not ConsoleKey.B) + throw new Exception("Not valid"); + else + { + string fileName = dfb switch + { + ConsoleKey.D => "Directories", + ConsoleKey.F => "Files", + ConsoleKey.B => "Both", + _ => throw new Exception(), + }; + long now = DateTime.Now.Ticks; + StringBuilder data = new(); + string[] dataCollection; + string filePathAndName = string.Concat(Path.GetDirectoryName(argsZero), @"\", fileName, ".txt"); + if (alongSideTopDirectoryOnly) + File.WriteAllText(filePathAndName, string.Empty); + else if (alongSideAllDirectories) + File.WriteAllText(filePathAndName, string.Concat(argsZero, Environment.NewLine, "Start", Environment.NewLine)); + switch (dfb) + { + case ConsoleKey.D: + if (alongSideTopDirectoryOnly || clipboardTopDirectoryOnly) + { + dataCollection = Directory.GetDirectories(argsZero, "*", searchOption); + if (!(dataCollection == null) && dataCollection.Length > 0) + { + foreach (string s in dataCollection) + { + if (fileNameWithoutExtension) + _ = data.Append('\'').Append(Path.GetFileNameWithoutExtension(s)).Append("', "); + else + _ = data.AppendLine(s); + } + } + } + else if (alongSideAllDirectories) + { + dataCollection = Directory.GetDirectories(argsZero, "*", searchOption); + if (!(dataCollection == null) && dataCollection.Length > 0) + { + foreach (string s in dataCollection) + File.AppendAllText(filePathAndName, string.Concat(s.Replace(argsZero, "../"), Environment.NewLine)); + } + } + else + throw new Exception(); + break; + case ConsoleKey.F: + if (alongSideTopDirectoryOnly || clipboardTopDirectoryOnly) + { + dataCollection = Directory.GetFiles(argsZero, "*", searchOption); + if (!(dataCollection == null) && dataCollection.Length > 0) + { + foreach (string s in dataCollection) + { + if (fileNameWithoutExtension) + _ = data.Append('\'').Append(Path.GetFileNameWithoutExtension(s)).Append("', "); + else + _ = data.AppendLine(s); + } + } + } + else if (alongSideAllDirectories) + { + dataCollection = Directory.GetFiles(argsZero, "*", searchOption); + if (!(dataCollection == null) && dataCollection.Length > 0) + { + foreach (string s in dataCollection) + File.AppendAllText(filePathAndName, string.Concat(s.Replace(argsZero, "../"), Environment.NewLine)); + } + } + else + throw new Exception(); + break; + case ConsoleKey.B: + if (alongSideTopDirectoryOnly || clipboardTopDirectoryOnly) + { + dataCollection = Directory.GetFiles(argsZero, "*", searchOption); + if (!(dataCollection == null) && dataCollection.Length > 0) + { + foreach (string s in dataCollection) + { + if (fileNameWithoutExtension) + _ = data.Append('\'').Append(Path.GetFileNameWithoutExtension(s)).Append("', "); + else + _ = data.AppendLine(s); + } + } + } + else if (alongSideAllDirectories) + { + dataCollection = Directory.GetDirectories(argsZero, "*", searchOption); + if (!(dataCollection == null) && dataCollection.Length > 0) + { + foreach (string s in dataCollection) + File.AppendAllText(filePathAndName, string.Concat(s.Replace(argsZero, "../"), Environment.NewLine)); + } + } + else + throw new Exception(); + break; + default: + throw new Exception(); + } + TimeSpan timeSpan = new(DateTime.Now.Ticks - now); + log.Information(string.Concat(timeSpan.TotalSeconds, " TotalSeconds")); + if (alongSideTopDirectoryOnly) + { + File.WriteAllText(filePathAndName, data.ToString()); + log.Information("Data written"); + } + else if (clipboardTopDirectoryOnly) + { + TextCopy.ClipboardService.SetText(data.ToString()); + log.Information("Data stored in clipboard"); + } + else if (alongSideAllDirectories) + { + File.AppendAllText(filePathAndName, "Done"); + log.Information("Data written"); + } + else + throw new Exception(); + log.Information("Press any key to close"); + } + } + +} \ No newline at end of file diff --git a/Helpers/HelperStart.cs b/Helpers/HelperStart.cs new file mode 100644 index 0000000..3cdb44e --- /dev/null +++ b/Helpers/HelperStart.cs @@ -0,0 +1,55 @@ +using System.Diagnostics; +using System.Text; + +namespace File_Folder_Helper.Helpers; + +internal static class HelperStart +{ + + internal static bool Start(string[] errorChecks, string[] successChecks, ProcessStartInfo processStartInfo, string errorFile) + { + bool result = false; + string standardError = string.Empty; + string standardOutput = string.Empty; + StringBuilder stringBuilder = new(); + Process? process = Process.Start(processStartInfo); + long breakAfter = DateTime.Now.AddSeconds(20).Ticks; + for (short j = 0; j < short.MaxValue; j++) + { + if (process is null || process.HasExited || process.WaitForExit(500) || DateTime.Now.Ticks > breakAfter) + break; + } + if (process is not null && processStartInfo.RedirectStandardOutput) + { + _ = stringBuilder.Append(process.StandardOutput.ReadToEnd()); + standardOutput = stringBuilder.ToString(); + if (string.IsNullOrEmpty(standardOutput)) + standardOutput = string.Concat(standardOutput); + if (!string.IsNullOrEmpty(standardOutput)) + { + result = (from l in successChecks where standardOutput.Contains(l) select 1).Any(); + if (result) + result = !(from l in errorChecks where standardOutput.Contains(l) select 1).Any(); + } + } + if (process is not null && processStartInfo.RedirectStandardError) + { + standardError = process.StandardError.ReadToEnd(); + if (!string.IsNullOrEmpty(standardError)) + { + if (result) + { + result = (from l in successChecks where standardError.Contains(l) select 1).Any(); + if (result) + result = !(from l in errorChecks where standardError.Contains(l) select 1).Any(); + } + } + } + if (!result) + result = standardOutput == string.Empty && standardError == string.Empty; + if (!result) + File.WriteAllLines(errorFile, new string[] { standardOutput, Environment.NewLine, Environment.NewLine, standardError }); + return result; + } + +} \ No newline at end of file diff --git a/Helpers/HelperTooLong.cs b/Helpers/HelperTooLong.cs new file mode 100644 index 0000000..e6aca88 --- /dev/null +++ b/Helpers/HelperTooLong.cs @@ -0,0 +1,32 @@ +namespace File_Folder_Helper.Helpers; + +internal static class HelperTooLong +{ + + internal static void TooLong(string workingDirectory, bool delete) + { + string[] files; + string destination; + string? parentDirectory; + string[] directories = Directory.GetDirectories(workingDirectory, "*", SearchOption.TopDirectoryOnly); + for (int i = 0; i < directories.Length; i++) + { + if (delete) + { + Directory.Delete(directories[i], recursive: true); + break; + } + files = Directory.GetFiles(directories[i], "*", SearchOption.TopDirectoryOnly); + for (int f = 0; f < files.Length; f++) + File.Delete(files[f]); + parentDirectory = Path.GetDirectoryName(directories[i]); + if (string.IsNullOrEmpty(parentDirectory)) + continue; + destination = Path.Combine(parentDirectory, i.ToString()); + if (Path.GetFileName(directories[i]).Length > 3) + Directory.Move(directories[i], destination); + TooLong(destination, delete); + } + } + +} \ No newline at end of file diff --git a/Helpers/HelperZipFilesByDate.cs b/Helpers/HelperZipFilesByDate.cs new file mode 100644 index 0000000..c76910b --- /dev/null +++ b/Helpers/HelperZipFilesByDate.cs @@ -0,0 +1,139 @@ +using Serilog; +using System.Globalization; +using System.IO.Compression; +using System.Text.RegularExpressions; + +namespace File_Folder_Helper.Helpers; + +internal static class HelperZipFilesByDate +{ + + internal static void ZipFilesByDate(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.TopDirectoryOnly, string dayFormat = "") + { + string key; + bool addFile; + string fileName; + string[] segments; + string[] subFiles; + string weekOfYear; + FileInfo fileInfo; + DateTime creationTime; + DateTime lastWriteTime; + Regex regex = new("[a-zA-Z0-9]{1,}"); + DateTime dateTime = DateTime.Now.AddDays(-6); + DateTime firstEmail = new(2019, 3, 8); + CultureInfo cultureInfo = new("en-US"); + Calendar calendar = cultureInfo.Calendar; + int ticksLength = dateTime.Ticks.ToString().Length; + Dictionary weeks = new(); + for (int i = 0; i < 1000; i++) + { + dateTime = firstEmail.AddDays(i); + weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + key = string.Concat(dateTime.ToString("yyyy"), "_Week_", weekOfYear); + if (!weeks.ContainsKey(key)) + weeks.Add(key, dateTime); + } + weekOfYear = calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + string skipKey = string.Concat(DateTime.Now.ToString("yyyy"), "_Week_", weekOfYear); + Dictionary> keyValuePairs = new(); + string[] topDirectories = Directory.GetDirectories(sourceDirectory, "*", SearchOption.TopDirectoryOnly); + if (topDirectories.Length == 0) + topDirectories = new string[] { sourceDirectory }; + foreach (string topDirectory in topDirectories) + { + keyValuePairs.Clear(); + subFiles = Directory.GetFiles(topDirectory, "*", searchOption); + foreach (string subFile in subFiles) + { + addFile = false; + if (subFile.EndsWith(".zip")) + continue; + fileName = Path.GetFileName(subFile); + fileInfo = new FileInfo(subFile); + creationTime = fileInfo.CreationTime; + if (creationTime > dateTime) + continue; + lastWriteTime = fileInfo.LastWriteTime; + if (fileName.Contains(lastWriteTime.ToString("yyyyMMdd")) || fileName.Contains(lastWriteTime.ToString("yyyy-MM-dd")) || + fileName.Contains(creationTime.ToString("yyyyMMdd")) || fileName.Contains(creationTime.ToString("yyyy-MM-dd")) || + fileName.Contains(lastWriteTime.ToString("yyMMdd")) || fileName.Contains(lastWriteTime.ToString("yy-MM-dd")) || + fileName.Contains(creationTime.ToString("yyMMdd")) || fileName.Contains(creationTime.ToString("yy-MM-dd")) || + fileName.Contains(lastWriteTime.AddDays(-1).ToString("yyyyMMdd")) || fileName.Contains(lastWriteTime.AddDays(-1).ToString("yyyy-MM-dd")) || + fileName.Contains(creationTime.AddDays(-1).ToString("yyyyMMdd")) || fileName.Contains(creationTime.AddDays(-1).ToString("yyyy-MM-dd")) || + fileName.Contains(lastWriteTime.AddDays(-1).ToString("yyMMdd")) || fileName.Contains(lastWriteTime.AddDays(-1).ToString("yy-MM-dd")) || + fileName.Contains(creationTime.AddDays(-1).ToString("yyMMdd")) || fileName.Contains(creationTime.AddDays(-1).ToString("yy-MM-dd"))) + addFile = true; + if (!addFile && fileName.Length > ticksLength) + { + MatchCollection matches = regex.Matches(fileName); + foreach (Match match in matches.Cast()) + { + if (match.Value.Length != ticksLength) + continue; + if (!long.TryParse(match.Value, out long ticks)) + continue; + addFile = true; + break; + } + if (addFile) + break; + } + if (addFile) + { + weekOfYear = calendar.GetWeekOfYear(lastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); + if (string.IsNullOrEmpty(dayFormat)) + key = string.Concat(lastWriteTime.ToString("yyyy"), "_Week_", weekOfYear); + else + key = string.Concat(lastWriteTime.ToString("yyyy"), "_Week_", weekOfYear, "_", lastWriteTime.ToString(dayFormat)); + if (key == skipKey) + continue; + if (!keyValuePairs.ContainsKey(key)) + keyValuePairs.Add(key, new List()); + keyValuePairs[key].Add(subFile); + } + } + foreach (KeyValuePair> element in keyValuePairs) + { + key = string.Concat(topDirectory, @"\", element.Key, ".zip"); + if (File.Exists(key)) + { + for (short i = 101; i < short.MaxValue; i++) + { + key = string.Concat(topDirectory, @"\", element.Key, "_", i, ".zip"); + if (!File.Exists(key)) + break; + } + } + using ZipArchive zip = ZipFile.Open(key, ZipArchiveMode.Create); + foreach (string file in element.Value) + { + _ = zip.CreateEntryFromFile(file, Path.GetFileName(file)); + File.Delete(file); + } + } + subFiles = Directory.GetFiles(topDirectory, "*.zip", SearchOption.TopDirectoryOnly); + foreach (string subFile in subFiles) + { + fileName = Path.GetFileNameWithoutExtension(subFile); + segments = fileName.Split('_'); + if (segments.Length > 2) + fileName = string.Concat(segments[0], '_', segments[1], '_', segments[2]); + if (weeks.ContainsKey(fileName)) + { + try + { File.SetLastWriteTime(subFile, weeks[fileName]); } + catch (Exception) { } + } + } + if (topDirectory != sourceDirectory) + { + try + { _ = HelperDeleteEmptyDirectories.DeleteEmptyDirectories(topDirectory); } + catch (Exception) { } + } + log.Information(topDirectory); + } + } + +} \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..11be6b9 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,138 @@ +#!/usr/bin/env groovy +/* groovylint-disable CompileStatic, ConsecutiveStringConcatenation, DuplicateNumberLiteral, DuplicateStringLiteral, LineLength, NestedBlockDepth, NoDef, VariableTypeRequired */ +import groovy.transform.Field + +@Field String _DDrive = 'D:/' +@Field String _AssemblyName = '...' +@Field String _NetVersion = 'net6.0' +@Field String _GitCommitSeven = '...' +@Field String _GitName = 'File-Folder-Helper' +@Field String _WorkingDirectoryName = 'IFXApps' +@Field String _AgentStaging = 'mestsa07ec-ecmeseaf' +@Field String _AgentProduction = 'messa08ec-ecmeseaf' +@Field String _DDriveNet = "${_DDrive}${_NetVersion}" +@Field String _AgentDevelopment = 'mestsa003-meseafsvc' +@Field String _Company = 'Infineon Technologies Americas Corp.' +@Field String _ProgramFilesDotnet = 'C:/program files/dotnet/dotnet.exe' + +pipeline { + agent { + label env.JENKINS_ENVIRONMENT == 'Development' ? _AgentDevelopment : env.JENKINS_ENVIRONMENT == 'Staging' ? _AgentStaging : env.JENKINS_ENVIRONMENT == 'Production' ? _AgentProduction : 'Else' + } + parameters { + string(name: 'GIT_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'mestsa003.infineon.com' : 'mestsa07ec.ec.local', description: 'git server') + } + stages { + // stage('Git') { + // steps { + // bat(returnStatus: true, script: 'git init') + // bat(returnStatus: true, script: 'git remote add origin \\\\' + params.GIT_SERVER + '\\Git\\' + _GitName + '.git') + // bat(returnStatus: true, script: 'git pull origin master') + // } + // } + stage('Setup') { + steps { + script { + _AssemblyName = "${env.JOB_NAME}" + // _GitCommitSeven = '1234567' + _GitCommitSeven = env.GIT_COMMIT.substring(0, 7) + def files = findFiles(glob: '*.csproj') + if (files.length != 1) { + error("Build failed because couldn't find a *.csproj file") + } + echo """ + ${files[0].name} + ${files[0].path} + ${files[0].directory} + ${files[0].length} + ${files[0].lastModified} + """ + _AssemblyName = files[0].name.split('[.]csproj')[0] + } + } + } + stage('Info') { + steps { + // echo "GIT_URL_N - ${env.GIT_URL_N}" + // echo "BRANCH_NAME ${env.BRANCH_NAME}" + // echo "DEPLOY_VERSION ${env.DEPLOY_VERSION}" + // echo "GIT_AUTHOR_NAME ${env.GIT_AUTHOR_NAME}" + // echo "GIT_LOCAL_BRANCH ${env.GIT_LOCAL_BRANCH}" + // echo "GIT_COMMITTER_EMAIL ${env.GIT_COMMITTER_EMAIL}" + // echo "GIT_PREVIOUS_COMMIT ${env.GIT_PREVIOUS_COMMIT}" + // echo "GIT_PREVIOUS_SUCCESSFUL_COMMIT ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}" + echo "_AssemblyName ${_AssemblyName}" // ... + echo "BUILD_NUMBER ${env.BUILD_NUMBER}" // 11 + echo "GIT_BRANCH ${env.GIT_BRANCH}" // origin/master + echo "GIT_COMMIT ${env.GIT_COMMIT}" // 73b814069f2cf0173a62a8228815a9bc9ba93c41 + echo "GIT_SERVER ${params.GIT_SERVER}" // ... + echo "GIT_URL ${env.GIT_URL}" // D:\ProgramData\Git\....git + echo "JENKINS_ENVIRONMENT ${env.JENKINS_ENVIRONMENT}" // 11 + echo "JENKINS_URL ${env.JENKINS_URL}" // http://localhost:8080/ + echo "JOB_NAME ${env.JOB_NAME}" // ... + echo "WORKSPACE ${env.WORKSPACE}" // D:\.jenkins\_\... + } + } + // stage('Restore') { + // steps { + // bat(returnStatus: true, script: 'dotnet --info') + // } + // } + stage('Safe storage of app secrets') { + steps { + bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + + 'user-secrets init') + bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + + 'user-secrets set "Company" "' + _Company + '"') + bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + + 'user-secrets set "BuildNumber" "' + env.BUILD_NUMBER + '"') + bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + + 'user-secrets set "GitCommitSeven" "' + _GitCommitSeven + '"') + bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + + 'user-secrets set "WorkingDirectoryName" "' + _WorkingDirectoryName + '"') + } + } + stage('Core Build') { + steps { + echo "Build number is ${currentBuild.number}" + bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + + 'build --runtime win-x64 --self-contained --verbosity quiet') + } + } + stage('Commit Id') { + steps { + writeFile(file: 'bin/Debug/' + _NetVersion + "/win-x64/${env.GIT_COMMIT}-${env.BUILD_NUMBER}.txt", text: "${env.GIT_URL}") + } + } + stage('Package') { + steps { + fileOperations([fileZipOperation(folderPath: 'bin/Debug/' + _NetVersion + '/win-x64', outputFolderPath: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-Debug")]) + fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*", renameFiles: false, sourceCaptureExpression: '', targetLocation: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-Debug", targetNameExpression: '')]) + } + } + stage('Publish') { + steps { + bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + + 'publish --configuration Release --runtime win-x64 --verbosity quiet ' + + "--self-contained true --p:Version=6.0.202-${_GitCommitSeven}-${env.BUILD_NUMBER} -o " + + '"' + "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}" + '"') + } + } + // stage('Force Fail') { + // steps { + // error("Build failed because of this and that..") + // } + // } + } + post { + always { + dir('bin') { + deleteDir() + } + dir('obj') { + deleteDir() + } + cleanWs() + } + } +} diff --git a/Models/AppSettings.cs b/Models/AppSettings.cs new file mode 100644 index 0000000..26c4ee0 --- /dev/null +++ b/Models/AppSettings.cs @@ -0,0 +1,32 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace File_Folder_Helper.Models; + +public class AppSettings +{ + + protected string _Company; + protected string _WorkingDirectoryName; + public string Company => _Company; + public string WorkingDirectoryName => _WorkingDirectoryName; + + // public AppSettings() + // { + + // } + + [JsonConstructor] + public AppSettings(string company, string workingDirectoryName) + { + _Company = company; + _WorkingDirectoryName = workingDirectoryName; + } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + +} \ No newline at end of file diff --git a/Models/Binder/AppSettings.cs b/Models/Binder/AppSettings.cs new file mode 100644 index 0000000..f6340a1 --- /dev/null +++ b/Models/Binder/AppSettings.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations; +using System.Text.Json; + +namespace File_Folder_Helper.Models.Binder; + +public class AppSettings +{ + + [Display(Name = "Company"), Required] public string Company { get; set; } + [Display(Name = "Working Directory Name"), Required] public string WorkingDirectoryName { get; set; } + + public AppSettings() + { + Company = string.Empty; + WorkingDirectoryName = string.Empty; + } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + +} \ No newline at end of file diff --git a/Models/Stateless/AppSettings.cs b/Models/Stateless/AppSettings.cs new file mode 100644 index 0000000..f6e2442 --- /dev/null +++ b/Models/Stateless/AppSettings.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Configuration; +using System.Text.Json; + +namespace File_Folder_Helper.Models.Stateless; + +public abstract class AppSettings +{ + + public static Models.AppSettings Get(IConfigurationRoot configurationRoot) + { + Models.AppSettings? result; + Binder.AppSettings appSettings = configurationRoot.Get(); + string json = JsonSerializer.Serialize(appSettings, new JsonSerializerOptions() { WriteIndented = true }); + result = JsonSerializer.Deserialize(json); + if (result is null) + throw new Exception(json); + if (string.IsNullOrEmpty(result.Company)) + throw new Exception(json); + string jsonThis = result.ToString(); + if (jsonThis != json) + throw new Exception(json); + return result; + } + +} \ No newline at end of file diff --git a/Phares/Shared/Models/IsEnvironment.cs b/Phares/Shared/Models/IsEnvironment.cs new file mode 100644 index 0000000..b554d91 --- /dev/null +++ b/Phares/Shared/Models/IsEnvironment.cs @@ -0,0 +1,167 @@ +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace Phares.Shared.Models; + +public class IsEnvironment +{ + + public enum Name + { + LinuxDevelopment, + LinuxProduction, + LinuxStaging, + OSXDevelopment, + OSXProduction, + OSXStaging, + WindowsDevelopment, + WindowsProduction, + WindowsStaging + } + + public bool DebuggerWasAttachedDuringConstructor { get; private set; } + public bool Development { get; private set; } + public bool Linux { get; private set; } + public bool OSX { get; private set; } + public bool Production { get; private set; } + public bool Staging { get; private set; } + public bool Windows { get; private set; } + public string Profile { get; private set; } + public string AppSettingsFileName { get; private set; } + public string? ASPNetCoreEnvironment { get; private set; } + + public IsEnvironment(string testCategory) + { + if (testCategory.EndsWith(".json")) + { + Production = testCategory == "appsettings.json"; + Staging = testCategory.EndsWith(nameof(Staging)); + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Development = testCategory.EndsWith(nameof(Development)); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + } + else + { + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + OSX = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(OSX)); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Linux = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Linux)); + Staging = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Staging)); + Windows = !string.IsNullOrEmpty(testCategory) && testCategory.StartsWith(nameof(Windows)); + Production = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Production)); + Development = !string.IsNullOrEmpty(testCategory) && testCategory.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(bool isDevelopment, bool isStaging, bool isProduction) + { + Staging = isStaging; + Production = isProduction; + Development = isDevelopment; + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount: null); + } + + public IsEnvironment(int? processesCount, bool nullASPNetCoreEnvironmentIsDevelopment, bool nullASPNetCoreEnvironmentIsProduction) + { + OSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + Linux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); + DebuggerWasAttachedDuringConstructor = Debugger.IsAttached; + Windows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + ASPNetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + if (nullASPNetCoreEnvironmentIsDevelopment && nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsProduction) + Production = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && nullASPNetCoreEnvironmentIsDevelopment) + Development = true; + else if (string.IsNullOrEmpty(ASPNetCoreEnvironment) && !nullASPNetCoreEnvironmentIsDevelopment && !nullASPNetCoreEnvironmentIsProduction) + throw new Exception(); + else + { + Staging = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Staging)); + Production = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Production)); + Development = ASPNetCoreEnvironment is not null && ASPNetCoreEnvironment.EndsWith(nameof(Development)); + } + Profile = GetProfile(); + AppSettingsFileName = GetAppSettingsFileName(processesCount); + } + + private string GetProfile() + { + string result; + if (Windows && Production) + result = nameof(Production); + else if (Windows && Staging) + result = nameof(Staging); + else if (Windows && Development) + result = nameof(Development); + else if (Linux && Production) + result = nameof(Name.LinuxProduction); + else if (Linux && Staging) + result = nameof(Name.LinuxStaging); + else if (Linux && Development) + result = nameof(Name.LinuxDevelopment); + else if (OSX && Production) + result = nameof(Name.OSXProduction); + else if (OSX && Staging) + result = nameof(Name.OSXStaging); + else if (OSX && Development) + result = nameof(Name.OSXDevelopment); + else + throw new Exception(); + return result; + } + + private string GetAppSettingsFileName(int? processesCount) + { + string result; + if (Production) + { + if (processesCount is null) + result = "appsettings.json"; + else + result = $"appsettings.{processesCount}.json"; + } + else + { + string environment; + if (Staging) + environment = nameof(Staging); + else if (Development) + environment = nameof(Development); + else + throw new Exception(); + if (processesCount is null) + result = $"appsettings.{environment}.json"; + else + result = $"appsettings.{environment}.{processesCount}.json"; + } + return result; + } + + public static string GetEnvironmentName(IsEnvironment isEnvironment) + { + string result; + if (isEnvironment.Windows) + result = nameof(Windows); + else if (isEnvironment.Linux) + result = nameof(Linux); + else if (isEnvironment.OSX) + result = nameof(OSX); + else + throw new Exception(); + return result; + } + +} \ No newline at end of file diff --git a/Phares/Shared/Models/Stateless/Methods/IMethodName.cs b/Phares/Shared/Models/Stateless/Methods/IMethodName.cs new file mode 100644 index 0000000..33c1c9a --- /dev/null +++ b/Phares/Shared/Models/Stateless/Methods/IMethodName.cs @@ -0,0 +1,10 @@ +using System.Runtime.CompilerServices; + +namespace Phares.Shared.Models.Stateless.Methods; + +public interface IMethodName +{ + + static string? GetActualAsyncMethodName([CallerMemberName] string? name = null) => name; + +} \ No newline at end of file diff --git a/Phares/Shared/Models/Stateless/Methods/IWorkingDirectory.cs b/Phares/Shared/Models/Stateless/Methods/IWorkingDirectory.cs new file mode 100644 index 0000000..c175dfe --- /dev/null +++ b/Phares/Shared/Models/Stateless/Methods/IWorkingDirectory.cs @@ -0,0 +1,8 @@ +namespace Phares.Shared.Models.Stateless.Methods; + +public interface IWorkingDirectory +{ + + static string GetWorkingDirectory(string? executingAssemblyName, string subDirectoryName) => WorkingDirectory.GetWorkingDirectory(executingAssemblyName, subDirectoryName); + +} \ No newline at end of file diff --git a/Phares/Shared/Models/Stateless/Methods/WorkingDirectory.cs b/Phares/Shared/Models/Stateless/Methods/WorkingDirectory.cs new file mode 100644 index 0000000..3670d13 --- /dev/null +++ b/Phares/Shared/Models/Stateless/Methods/WorkingDirectory.cs @@ -0,0 +1,50 @@ +namespace Phares.Shared.Models.Stateless.Methods; + +internal abstract class WorkingDirectory +{ + + internal static string GetWorkingDirectory(string? executingAssemblyName, string subDirectoryName) + { + string result = string.Empty; + if (executingAssemblyName is null) + throw new Exception(); + string traceFile; + List directories = new(); + Environment.SpecialFolder[] specialFolders = new Environment.SpecialFolder[] + { + Environment.SpecialFolder.LocalApplicationData, + Environment.SpecialFolder.ApplicationData, + Environment.SpecialFolder.History, + Environment.SpecialFolder.CommonApplicationData, + Environment.SpecialFolder.InternetCache + }; + foreach (Environment.SpecialFolder specialFolder in specialFolders) + directories.Add(Path.Combine(Environment.GetFolderPath(specialFolder), subDirectoryName, executingAssemblyName)); + foreach (string directory in directories) + { + for (int i = 1; i < 3; i++) + { + if (i == 1) + result = directory; + else + result = string.Concat("D", directory[1..]); + try + { + if (!Directory.Exists(result)) + _ = Directory.CreateDirectory(result); + traceFile = string.Concat(result, @"\", DateTime.Now.Ticks, ".txt"); + File.WriteAllText(traceFile, traceFile); + File.Delete(traceFile); + break; + } + catch (Exception) { result = string.Empty; } + } + if (!string.IsNullOrEmpty(result)) + break; + } + if (string.IsNullOrEmpty(result)) + throw new Exception("Unable to set working directory!"); + return result; + } + +} \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..d5bb3b7 --- /dev/null +++ b/Program.cs @@ -0,0 +1,151 @@ +using File_Folder_Helper.Models; +using Microsoft.Extensions.Configuration; +using Phares.Shared.Models; +using Phares.Shared.Models.Stateless.Methods; +using Serilog; +using System.Diagnostics; +using System.Reflection; + +namespace File_Folder_Helper; + +internal class Program +{ + + public static void Secondary(List args) + { + LoggerConfiguration loggerConfiguration = new(); + Assembly assembly = Assembly.GetExecutingAssembly(); + bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); + IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); + IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() + .AddEnvironmentVariables() + .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true); + IConfigurationRoot configurationRoot = configurationBuilder.Build(); + AppSettings appSettings = Models.Stateless.AppSettings.Get(configurationRoot); + if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName)) + throw new Exception("Working directory name must have a value!"); + string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); + Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); + _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); + Log.Logger = loggerConfiguration.CreateLogger(); + ILogger log = Log.ForContext(); + int silentIndex = args.IndexOf("s"); + if (silentIndex > -1) + args.RemoveAt(silentIndex); + try + { + int? singleCharIndex = null; + ConsoleKey consoleKey = ConsoleKey.End; + ConsoleKey[] consoleKeys = new ConsoleKey[] + { + ConsoleKey.A, + ConsoleKey.B, + ConsoleKey.C, + ConsoleKey.D, + ConsoleKey.E, + ConsoleKey.F, + ConsoleKey.L, + ConsoleKey.R, + ConsoleKey.T, + ConsoleKey.Z, + ConsoleKey.Delete + }; + for (int i = 0; i < args.Count; i++) + { + if (args[i].Length == 1 && Enum.TryParse(args[i], out consoleKey) && consoleKeys.Contains(consoleKey)) + { + singleCharIndex = i; + break; + } + } + if (consoleKey is not ConsoleKey.End && !consoleKeys.Contains(consoleKey)) + consoleKey = ConsoleKey.End; + if (singleCharIndex is not null) + args.RemoveAt(singleCharIndex.Value); + if (!args.Any()) + log.Information("Must pass a argument!"); + else if (Directory.Exists(args[0]) && File.Exists(Path.Combine(args[0], string.Concat(Path.GetFileName(args[0]), ".dll")))) + Helpers.HelperILMerge.ILMerge(args[0]); + else if (Directory.Exists(args[0])) + { + for (int i = 0; i < int.MaxValue; i++) + { + if (consoleKeys.Contains(consoleKey)) + break; + log.Information("A) Save (Top Directory Only),"); + log.Information("B) Save (All Directories),"); + log.Information("C) Clipboard (Top Directory Only),"); + log.Information("D) Clipboard (All Directories),"); + log.Information("E) Clipboard (Top Directory Only and File Name Without Extension),"); + log.Information("F) Clipboard (All Directories and File Name Without Extension),"); + log.Information("L) Log Merge (APC Log [0-9{8}]_*.log),"); + log.Information("R) Rename to old, copy, delete old"); + log.Information("T) Too long rename"); + log.Information("Z) Zip file(s) by date,"); + log.Information("Delete) Delete empty directories,"); + consoleKey = Console.ReadKey().Key; + log.Information(string.Empty); + } + switch (consoleKey) + { + case ConsoleKey.A: + case ConsoleKey.B: + case ConsoleKey.C: + case ConsoleKey.E: + case ConsoleKey.F: + Helpers.HelperSaveOrCopyContents.SaveOrCopyContents(log, args[0], consoleKey); + break; + case ConsoleKey.L: + Helpers.HelperLogMerge.LogMerge(args[0]); + break; + case ConsoleKey.R: + Helpers.HelperRenameToOldMoveDeleteOldMerge.RenameToOldMoveDeleteOld(log, args[0]); + break; + case ConsoleKey.T: + Helpers.HelperTooLong.TooLong(args[0], delete: false); + Helpers.HelperTooLong.TooLong(args[0], delete: true); + break; + case ConsoleKey.Z: + Helpers.HelperZipFilesByDate.ZipFilesByDate(log, args[0]); + break; + default: + switch (consoleKey) + { + case ConsoleKey.Delete: + for (int j = 1; j < 6; j++) + { + if (!Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(args[0])) + break; + } + break; + default: + throw new Exception(); + } + break; + } + } + else + throw new Exception(args[0]); + } + catch (Exception ex) + { + Console.WriteLine(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); + } + if (silentIndex > -1) + Console.WriteLine("Done. Bye"); + else + { + Console.WriteLine("Done. Press 'Enter' to end"); + _ = Console.ReadLine(); + } + } + + public static void Main(string[] args) + { + if (args is not null) + Secondary(args.ToList()); + else + Secondary(new List()); + } + +} \ No newline at end of file diff --git a/appsettings.Development.json b/appsettings.Development.json new file mode 100644 index 0000000..e428a6c --- /dev/null +++ b/appsettings.Development.json @@ -0,0 +1,51 @@ +{ + "Company": "Infineon Technologies Americas Corp.", + "Linux": {}, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Log4netProvider": "Debug", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "Serilog": { + "Using": [ + "Serilog.Sinks.Console", + "Serilog.Sinks.File" + ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "Debug", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" + } + }, + { + "Name": "Console", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "%workingDirectory% - Log/log-.txt", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}", + "rollingInterval": "Hour" + } + } + ], + "Enrich": [ + "FromLogContext", + "WithMachineName", + "WithThreadId" + ], + "Properties": { + "Application": "Sample" + } + }, + "WorkingDirectoryName": "IFXApps", + "Windows": {} +} diff --git a/appsettings.Staging.json b/appsettings.Staging.json new file mode 100644 index 0000000..f494e7f --- /dev/null +++ b/appsettings.Staging.json @@ -0,0 +1,51 @@ +{ + "Company": "Infineon Technologies Americas Corp.", + "Linux": {}, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Log4netProvider": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "Serilog": { + "Using": [ + "Serilog.Sinks.Console", + "Serilog.Sinks.File" + ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "Debug", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" + } + }, + { + "Name": "Console", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "%workingDirectory% - Log/log-.txt", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}", + "rollingInterval": "Hour" + } + } + ], + "Enrich": [ + "FromLogContext", + "WithMachineName", + "WithThreadId" + ], + "Properties": { + "Application": "Sample" + } + }, + "WorkingDirectoryName": "IFXApps", + "Windows": {} +} diff --git a/appsettings.json b/appsettings.json new file mode 100644 index 0000000..730f1a7 --- /dev/null +++ b/appsettings.json @@ -0,0 +1,51 @@ +{ + "Company": "Infineon Technologies Americas Corp.", + "Linux": {}, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Log4netProvider": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "Serilog": { + "Using": [ + "Serilog.Sinks.Console", + "Serilog.Sinks.File" + ], + "MinimumLevel": "Information", + "WriteTo": [ + { + "Name": "Debug", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" + } + }, + { + "Name": "Console", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "%workingDirectory% - Log/log-.txt", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}", + "rollingInterval": "Hour" + } + } + ], + "Enrich": [ + "FromLogContext", + "WithMachineName", + "WithThreadId" + ], + "Properties": { + "Application": "Sample" + } + }, + "WorkingDirectoryName": "IFXApps", + "Windows": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2aa5cc1 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "scripts": { + "Alpha": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "nuget-clear": "dotnet nuget locals all --clear", + "build": "dotnet build --runtime win-x64 --self-contained", + "build-Package-Management": "dotnet build --runtime win-x64 --self-contained --source https://packagemanagement.eu.infineon.com:4430/api/v2/", + "build-nuget-And-Package-Management": "dotnet build --runtime win-x64 --self-contained --source https://api.nuget.org/v3/index.json --source https://packagemanagement.eu.infineon.com:4430/api/v2/", + "build-All-Sources": "dotnet build --runtime win-x64 --self-contained --source https://api.nuget.org/v3/index.json --source https://packagemanagement.eu.infineon.com:4430/api/v2/ --source https://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json --source http://192.168.0.73:5002/v3/index.json", + "dotnet-format": "dotnet format --report .vscode --verbosity detailed --severity warn", + "MSBuild": "\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe\" /target:Build /restore:True /p:RestoreSources=https://api.nuget.org/v3/index.json%3Bhttps://packagemanagement.eu.infineon.com:4430/api/v2/%3Bhttps://tfs.intra.infineon.com/tfs/ManufacturingIT/_packaging/eaf/nuget/v3/index.json /DetailedSummary /ConsoleLoggerParameters:PerformanceSummary;ErrorsOnly; /property:Configuration=Debug;TargetFrameworkVersion=v4.8 File-Folder-Helper.csproj", + "pull": "git pull", + "garbage-collect": "git gc" + } +} \ No newline at end of file