diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..64fe5e67 --- /dev/null +++ b/.clang-format @@ -0,0 +1,45 @@ +--- +BasedOnStyle: Google +Language: Cpp +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: 'true' +AlignConsecutiveDeclarations: 'true' +AlignTrailingComments: 'true' +AllowAllArgumentsOnNextLine: 'false' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AlwaysBreakBeforeMultilineStrings: 'false' +AlwaysBreakTemplateDeclarations: 'Yes' +BinPackArguments: 'false' +BinPackParameters: 'false' +BreakBeforeBraces: Linux +ColumnLimit: '100' +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +FixNamespaceComments: 'true' +IndentAccessModifiers: 'true' +IndentCaseLabels: 'true' +IndentWidth: '2' +NamespaceIndentation: All +PointerAlignment: Left +SortIncludes: Never +SpaceAfterCStyleCast: 'true' +SpaceAfterLogicalNot: 'false' +SpaceAfterTemplateKeyword: 'false' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeCtorInitializerColon: 'true' +SpaceBeforeInheritanceColon: 'true' +SpaceBeforeParens: ControlStatements +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' +Standard: Cpp11 +TabWidth: '2' +UseTab: Never + +--- +Language: Json +# Use 100 columns for JS. +ColumnLimit: 100 +--- +Language: ObjC +# Use 100 columns for C#. +ColumnLimit: 100 +... diff --git a/.github/workflows/.cmake-format.py b/.cmake-format similarity index 95% rename from .github/workflows/.cmake-format.py rename to .cmake-format index 2fb7cd4b..77459569 100644 --- a/.github/workflows/.cmake-format.py +++ b/.cmake-format @@ -16,4 +16,4 @@ # If a statement is wrapped to more than one line, than dangle the closing # parenthesis on its own line. - dangle_parens = True + dangle_parens = True \ No newline at end of file diff --git a/.github/workflows/.clang-format b/.github/workflows/.clang-format deleted file mode 100644 index b8cef3e9..00000000 --- a/.github/workflows/.clang-format +++ /dev/null @@ -1,9 +0,0 @@ -# Documentation about the style options and their meaning -# https://releases.llvm.org/12.0.0/tools/clang/docs/ClangFormatStyleOptions.html - -Language: Cpp -AccessModifierOffset: 0 -AlignConsecutiveMacros: true -BreakBeforeBraces: Linux -ColumnLimit: 150 -ConstructorInitializerIndentWidth: 2 diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index c320c236..ab01b05c 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -1,6 +1,8 @@ name: documentation on: workflow_dispatch +# on: [pull_request] + permissions: contents: write diff --git a/.github/workflows/pre_commit.yaml b/.github/workflows/pre_commit.yaml new file mode 100644 index 00000000..beaf8626 --- /dev/null +++ b/.github/workflows/pre_commit.yaml @@ -0,0 +1,29 @@ +name: pre-commit GitHub Action + +# Won't run on develop/main directly +on: + workflow_dispatch: + inputs: + branch: + description: 'The branch to build' + required: true + pull_request: + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.ref }} + - uses: actions/setup-python@v3 + - uses: pre-commit/action@v3.0.0 + # - uses: EndBug/add-and-commit@v9.1.3 + # # Only need to try and commit if the action failed + # if: failure() + # with: + # fetch: false + # committer_name: GitHub Actions + # committer_email: actions@github.com + # message: Apply pre-commmit fixes + diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..7dcbdd19 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,17 @@ + +repos: + - repo: https://github.com/cheshirekow/cmake-format-precommit + rev: v0.6.13 + hooks: + - id: cmake-format + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: v16.0.1 + hooks: + - id: clang-format + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: forbid-new-submodules + - id: end-of-file-fixer + - id: check-yaml + args: [--allow-multiple-documents] diff --git a/README.md b/README.md index 1ba6c64f..11042ac0 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,42 @@ target_link_libraries(my_app PRIVATE ReSolve::ReSolve) For all contributions to ReSolve please follow the [developer guidelines](CONTRIBUTING.md) +### Pre-commit +Precommit is a framework for mmangaing and maintain multi-lanagueg pre-commit hooks. https://pre-commit.com/ +Precommit is auto applied through CI to every pull request and every commit to the said pull request. Precommit checks for valid yaml files, end of file spaces, Syntax of C codeand etc. To see specifically what formating precommit looks for please check out our .clang-format and .cmake-format filed as well as our .pre-commit-config.yaml which show the specific precommit hooks being applied. + +### Running Pre-commit locally +To run pre-commit locally you first must install pre-commit and there are a couple ways to do this. + +#### Prerequiste to installing pre-commit +It is recommended that you install pre-commit through python. Here we assume Python is aleadly installed if that is not the case please check out these [docs](https://wiki.python.org/moin/BeginnersGuide/Download) for how to install python. + +Next create a virtual environment with the following: +```shell +python -m venv /path/to/new/virtual/environment +``` + +Activate the new environment: +```shell +source /path/to/new/virtual/environment/bin/activate +``` + + Now that we are within a virtual environment we can install pre-commit via; +```shell +pip install pre-commit +``` + +To install the hooks and have pre-commit run automatically before every commit run +```shell +pre-commit install --install-hooks +``` + +If you want to manually run all pre-commit hooks on a repository, run +```shell +pre-commit run --all-files +``` +To learn more about pre-commit usuage check out https://pre-commit.com/#usage. ## Test and Deploy @@ -111,4 +146,3 @@ contributions to ReSolve must be made under the smae licensing terms. **Please Note** If you are using ReSolve with any third party libraries linked in (e.g., KLU), be sure to review the respective license of the package as that license may have more restrictive terms than the ReSolve license. -