From 01dfc845e4249c0f344e7336a480acac926791ad Mon Sep 17 00:00:00 2001 From: abbyssoul Date: Mon, 16 Mar 2020 23:33:48 +1100 Subject: [PATCH] Read fix and release action added --- .github/workflows/conan-publish.yml | 49 +++++++++++++++++++++++++++ CONTRIBUTING.md | 22 ++++++------- README.md | 51 +++++++++++++++-------------- 3 files changed, 87 insertions(+), 35 deletions(-) create mode 100644 .github/workflows/conan-publish.yml diff --git a/.github/workflows/conan-publish.yml b/.github/workflows/conan-publish.yml new file mode 100644 index 0000000..ce96fff --- /dev/null +++ b/.github/workflows/conan-publish.yml @@ -0,0 +1,49 @@ +name: Build conan package + +on: + push: + tags: + - 'x*' + +jobs: + build: + strategy: + matrix: + # TODO: -- windows-latest + os: [ubuntu-latest, macOS-latest] + + runs-on: ${{ matrix.os }} + env: + CONAN_USERNAME: "abbyssoul" + CONAN_LOGIN_USERNAME: "abbyssoul" + CONAN_CHANNEL: "stable" + CONAN_UPLOAD: "https://api.bintray.com/conan/abbyssoul/public-conan" + #CONAN_STABLE_BRANCH_PATTERN: "release/*" + CONAN_APPLE_CLANG_VERSIONS: "11.0" + CONAN_VISUAL_VERSIONS: ${{ matrix.vs-version }} + CONAN_GCC_VERSIONS: ${{ matrix.gcc-version }} + # CONAN_GCC_VERSIONS=7 + # CONAN_DOCKER_IMAGE=conanio/gcc7 + # CONAN_ARCHS="x86_64" + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v1 + with: + python-version: '3.7' + - run: | + python -m pip install conan conan_package_tools -U + conan profile new default --detect + - name: Generating conan user directory + run: conan user + - name: Get current tag: + run: echo ${{ github.ref }} + - name: Set ref version + run: echo $CONAN_REFERENCE + - name: Describe + run: git describe --tags + - name: Show ref/tag + run: echo $GITHUB_REF + + - name: Building the package + #run: python build.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1e59dd1..fb4ddef 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,26 +1,26 @@ # Contributing -Thank you so much for your interest in contributing! +Thank you for your interest in contributing! This project is in active development and all contributions are welcomed. -There are multiple ways you can help. For example you can [Submit a patch](#submitting-patch) or you can [Contribute documentation](#submitting-docs). If you have encountered an issue while using the library in your project please [Report errors or bugs](#reporting-bugs) to help us fix the issue. If you feel that this library is misssing something feel free to [Request a feature/improvement](#requesting-feature) - it might be that other people can benefit from this feature. +There are multiple ways you can help. For example you can [Submit a patch](#submitting-patch) or you can [Contribute documentation](#submitting-docs). If you have encountered an issue while using the library in your project please [Report errors or bugs](#reporting-bugs) to help us fix the issue. If you feel that this library is missing something, feel free to [Request a feature/improvement](#requesting-feature) - it might be that other people can benefit from this feature too. ## Submit a patch If you want to fix an issue or add a feature - code contribution is the best way to do it. Easiest way to submit a patch is by raising a pull request (PR): -* Clone the project. +* Clone the project (`git clone git@github.com:abbyssoul/libsolace.git`) * Make any necessary changes to the source code. Please see [coding convention](docs/coding_convention.md) about code style. -* Include any [additional documentation](#contribute-documentation) the changes might be needed. -* When adding new feature it is essential to write tests that verify that your contribution works as expected. -* When fixing exising issues it is essential to update existing tests accordingly. -* All code changes are subject to automatic code quality checks run as part of CI. Code changes can not be accepted if they fail quality check so please make sure this checks pass by run `make codecheck` locally before submitting. +* Include any [additional documentation](#contribute-documentation) for changes as need. +* When adding new feature it is essential to write extra tests that verify that the feature works as intended. +* When fixing existing issues it is essential to update existing tests to make sure that issues remains solved and won't be re-introduced in the future. +* All code changes are subject to automatic code quality checks run as part of CI. Code changes can not be accepted if they fail quality checks. You can make sure this checks pass by runing `make codecheck` locally before raising a pull request. * Write clear, concise commit message(s) using [conventional-changelog format](https://github.com/conventional-changelog/conventional-changelog-angular/blob/master/convention.md). * Go to https://github.com/abbyssoul/libsolace/pulls and open a new pull request with your changes. * If your PR is connected to an open issue, add a line in your PR's description that says `Fixes: #123`, where `#123` is the number of the issue you're fixing. ### Testing -This project is commited to maintaining higest level of code quality. That is why any new feature submitted must be covered by expensive unit tests and pass code quality checks. -For fixes it is natural that existing test coverage was not sufficent to vet it. Thus it is expected that exising tests will be extended to cover issue being fixed when ever possible. This helps to avoid re-occurance of the issue as code changes over time. +This project is committed to maintaining highest level of code quality. That is why any new feature submitted must be covered by expensive unit tests and pass code quality checks. +For fixes it is natural that existing test coverage was not sufficient to vet it. Thus it is expected that existing test suite be extended to cover issue being fixed when ever possible. This helps to avoid re-occurrence of the issue as code changes over time. ## Reporting errors or bugs @@ -32,7 +32,7 @@ If you think you run into an error or bug with the project please let us know. I ## Request a feature/improvement -If the project doesn't do something you need or want it to do you can create a feature request. It is possible that there are othere users who need the same functions. To request a feature: +If the project doesn't do something you need or want it to do you can create a feature request. It is possible that there are other users who need the same functions. To request a feature: * Open an Issue at https://github.com/abbyssoul/libsolace/issues * Provide as much context as you can about what you're running into. @@ -44,7 +44,7 @@ Documentation is essential part of any project. To contribute documentation: * Clone the project. * Edit or add any relevant documentation. * Make sure your changes are formatted correctly and consistently with the rest of the documentation. -* Re-read what you wrote, and run a spellchecker on it to make sure you didn't miss anything. +* Re-read what you wrote, and run a spell-checker on it to make sure you didn't miss anything. * Write clear, concise commit message(s) using [conventional-changelog format](https://github.com/conventional-changelog/conventional-changelog-angular/blob/master/convention.md). Documentation commits should use `docs(): `. * Go to https://github.com/abbyssoul/libsolace/pulls and open a new pull request with your changes. * If your PR is connected to an open issue, add a line in your PR's description that says `Fixes: #123`, where `#123` is the number of the issue you're fixing. diff --git a/README.md b/README.md index 8e65716..ddcf7f2 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ This library needs to be installed on your system in order to be used. There are The library is available via [Conan](https://conan.io/) package manager. Add this to your project `conanfile.txt`: ``` [requires] -libsolace/0.3.6 +libsolace/0.3.9 ``` Please check the latest available [binary version][conan-central-latest]. @@ -67,8 +67,8 @@ The project build is managed via CMake with a Makefile provided to automate some ### Build tool dependencies In order to build this project, following tools must be present in the system: -* git (to check out the project and external modules, see dependencies section) -* cmake (version 3.0 and above) +* git (to check out this project) +* cmake (version 3.12 and above) * doxygen (for documentation generation) * cppcheck (static code analysis, the latest version from git is used as part of the 'codecheck' build step) * cpplint (for static code analysis in addition to cppcheck) @@ -78,28 +78,22 @@ This project is using **C++17** features extensively. The minimal tested/require CI is using clang-5 and gcc-7. To install build tools on Debian based Linux distribution: ```shell -sudo apt-get update -qq -sudo apt-get install cmake doxygen python-pip valgrind ggcov -sudo pip install cpplint +sudo apt update -qq +sudo apt install cmake doxygen python-pip valgrind ggcov +python3 -m pip install cpplint conan -U +conan profile new default --detect ``` -The one external dependency is on [googletest](http://github.com/googletest/) - a unit testing framework. -It is managed as `git submodule`. Please make sure to use `git clone --recursive` when cloning the project for the first time. -You can also update an existing clone with: -```sh -git submodule update --init --recursive -``` -If you have an existing checkout that you need to initialize to use submodules: -```sh -git submodule init -``` + +The only external dependency is on [googletest](http://github.com/googletest/) - a unit testing framework used for development. + ## Building the project Current build system used for the project is `cmake`. Please make sure that the system has `cmake` installed. Minimal confirmed version is 3.0 ```sh > cmake --version -cmake version 3.0.1 +cmake version 3.12.1 ``` ```shell @@ -115,6 +109,7 @@ make test # To run Valgrind on test suit: # Note: `valgrind` does not work with `./configure --enable-sanitize` option +# Configure as: `./configure --enable-debug --disable-sanitize` make verify ``` @@ -152,22 +147,30 @@ The library is designed with the following platforms in mind: ## Design -The design of the library is inspired by various functional language elements that can be found in other languages such as Rust and Java. +Main goal of design for this library is to make declarative programming in C++ easy. +As a result a number of similir data structures provided are inspired by othre functional languages. +So some of the concepts and types might fill familiar if you have previous experience with Rust, Java, Python etc. - Fixed-size integral types: - Fix sized integral types: - int{8,16,32} - uint{8,16,32} - float{32,64} -- OOP Memory management interface: - - MemoryView – a OOP way of dealing with raw memory that knows its size and has associated destructor. +- Memory management interface: - MemoryManager – a custom memory allocator that can be locked to control memory allocation after initialization. - Immutable String (for those who are from Java land) with StringBuilder. - Optional<> - optional monad. -- Result<> - Either monad. A good alternative to throwing an exception. +- Result<> - Either monad. An alternative approach to error handling instead of throwing exceptions. - Fixed-size collections: - - ArrayView: a memory view as a collection of objects. - Array: Fixed-size array (dynamically allocated on the heap) - - ArrayBuilder: variable-length collection + - Vector: A collection to hold up-to given number of elements. No re-allocation performed if limit is reached. +- Views to different data structures. Views don't own underlying resources and must be used with care as to not to exceed +lifetime of the object being viewed. Views are designed to be "lightweight" many views can exist for same resource. +It is also convenient for slicing of a resource. It is preferable to pass views by value. + - ArrayView: a memory view as a collection of objects. + - MemoryView – a OOP way of dealing with raw memory that knows its size and has associated destructor. + - StringView - non-owning "string" consisting of pointer and an integer representing length of the string. + +- ArrayBuilder: variable-length collection - Text utilities: - Formatting - Encoding @@ -184,7 +187,7 @@ Given the language of choice, the library is designed with the idea that excepti ## Dependencies -The project's external dependency managed via `git submodule`: +The project has no dependencies other then unit testing framework. * [GTest](https://github.com/google/googletest) - Google's C++ test framework