From d28db8da887531c8617442b92c71f8a04a966356 Mon Sep 17 00:00:00 2001
From: Oliver Sander <oliver.sander@tu-dresden.de>
Date: Fri, 5 Jan 2024 09:30:00 +0100
Subject: [PATCH] Add a CI job that runs uncrustify and checks for
 modifications

If modifications are found this means that the style rules
are violated.

The uncrustify configuration file is the one from

  https://dune-project.org/share/dune-uncrustify.cfg

downloaded on Jan 5. 2024.
---
 .gitlab-ci.yml      |  18 +++++++
 dune-uncrustify.cfg | 125 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 143 insertions(+)
 create mode 100644 dune-uncrustify.cfg

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 439ec521..f0b7bc53 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -59,3 +59,21 @@ code-spelling-check:
   image: registry.dune-project.org/docker/ci/debian:11
   script:
   - codespell
+
+# Verify code-formatting rules
+code-formatting-check:
+  stage: .pre
+  # Avoid the global 'before_script'
+  before_script: ""
+  image: registry.dune-project.org/docker/ci/debian:11
+  script:
+    # Format all *.cc and *.hh files using the uncrustify tool
+    # We ignore the return value of 'uncrustify', because it is
+    # apparently unreliable, and returns 'failure' without a reason.
+    - uncrustify -l CPP -c dune-uncrustify.cfg --no-backup `find -name "*.cc" -o -name "*.hh"` || true
+
+    # Did anything change?  That would indicate a violation of the formatting rules
+    # But before, work around an issue where git doesn't recognize the source tree as a git directory.
+    # See https://forum.gitlab.com/t/ci-cd-job-git-diff/76666
+    - git config --global --add safe.directory "$(pwd)"
+    - git diff --exit-code
diff --git a/dune-uncrustify.cfg b/dune-uncrustify.cfg
new file mode 100644
index 00000000..57275b14
--- /dev/null
+++ b/dune-uncrustify.cfg
@@ -0,0 +1,125 @@
+tok_split_gte=false
+utf8_byte=false
+utf8_force=false
+indent_cmt_with_tabs=false
+indent_align_string=false
+indent_braces=false
+indent_braces_no_func=false
+indent_braces_no_class=false
+indent_braces_no_struct=false
+indent_brace_parent=false
+indent_namespace=true
+indent_extern=true
+indent_class=true
+indent_class_colon=true
+indent_else_if=false
+indent_var_def_cont=false
+indent_func_call_param=false
+indent_func_def_param=false
+indent_func_proto_param=false
+indent_func_class_param=false
+indent_func_ctor_var_param=false
+indent_template_param=true
+indent_func_param_double=true
+indent_relative_single_line_comments=false
+indent_col1_comment=true
+indent_access_spec_body=false
+indent_paren_nl=false
+indent_comma_paren=false
+indent_bool_paren=false
+indent_first_bool_expr=false
+indent_square_nl=false
+indent_preserve_sql=false
+indent_align_assign=true
+sp_balance_nested_parens=false
+align_keep_tabs=false
+align_with_tabs=false
+align_on_tabstop=false
+align_number_left=false
+align_func_params=false
+align_same_func_call_params=false
+align_var_def_colon=false
+align_var_def_attribute=false
+align_var_def_inline=false
+align_right_cmt_mix=false
+align_on_operator=false
+align_mix_var_proto=false
+align_single_line_func=false
+align_single_line_brace=false
+align_nl_cont=false
+align_left_shift=true
+align_oc_decl_colon=false
+nl_collapse_empty_body=true
+nl_assign_leave_one_liners=true
+nl_class_leave_one_liners=true
+nl_enum_leave_one_liners=true
+nl_getset_leave_one_liners=false
+nl_func_leave_one_liners=false
+nl_if_leave_one_liners=false
+nl_multi_line_cond=false
+nl_multi_line_define=false
+nl_before_case=false
+nl_after_case=false
+nl_after_return=false
+nl_after_semicolon=false
+nl_after_brace_open=false
+nl_after_brace_open_cmt=false
+nl_after_vbrace_open=false
+nl_after_vbrace_open_empty=false
+nl_after_brace_close=false
+nl_after_vbrace_close=false
+nl_define_macro=false
+nl_squeeze_ifdef=false
+nl_ds_struct_enum_cmt=false
+nl_ds_struct_enum_close_brace=false
+nl_create_if_one_liner=false
+nl_create_for_one_liner=false
+nl_create_while_one_liner=false
+ls_for_split_full=false
+ls_func_split_full=false
+nl_after_multiline_comment=false
+eat_blanks_after_open_brace=false
+eat_blanks_before_close_brace=false
+mod_full_brace_if_chain=false
+mod_pawn_semicolon=false
+mod_full_paren_if_bool=false
+mod_remove_extra_semicolon=false
+mod_sort_import=false
+mod_sort_using=false
+mod_sort_include=false
+mod_move_case_break=false
+mod_remove_empty_return=false
+cmt_indent_multi=true
+cmt_c_group=false
+cmt_c_nl_start=false
+cmt_c_nl_end=false
+cmt_cpp_group=false
+cmt_cpp_nl_start=false
+cmt_cpp_nl_end=false
+cmt_cpp_to_c=false
+cmt_star_cont=false
+cmt_multi_check_last=true
+cmt_insert_before_preproc=false
+pp_indent_at_level=false
+pp_region_indent_code=false
+pp_if_indent_code=false
+pp_define_at_level=false
+indent_columns=2
+indent_access_spec=-2
+nl_end_of_file_min=1
+indent_with_tabs=0
+sp_before_semi=ignore
+sp_after_semi=ignore
+sp_after_semi_for=ignore
+sp_before_comma=ignore
+sp_before_case_colon=ignore
+sp_not=ignore
+sp_inv=ignore
+sp_addr=ignore
+sp_member=ignore
+sp_deref=ignore
+sp_sign=ignore
+sp_incdec=ignore
+sp_before_nl_cont=ignore
+nl_end_of_file=force
+nl_before_if=ignore
-- 
GitLab