diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..264fe9a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,47 @@ +name: Release and Changelog + +on: + push: + branches: + - main # Trigger only when a PR is merged to main + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install tools + run: | + cargo install git-cliff cargo-release + + - name: Determine next version + id: semver + uses: ietf-tools/semver-action@v1 + with: + token: ${{ github.token }} + branch: main + + - name: Generate changelog + run: git-cliff -o CHANGELOG.md + + - name: Commit changelog + run: | + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + git add CHANGELOG.md + git commit -m "chore: update changelog [skip ci]" || echo "no changes" + + - name: Perform release + run: | + bump=${{ steps.semver.outputs.bump }} + cargo release $bump --no-confirm + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + + - name: Push + run: | + git push + git push --tags diff --git a/CHANGELOG.md b/CHANGELOG.md index c07610f..836706c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,20 +1,16 @@ -## 0.2.3 (15/07/2024) +# Changelog -- A complete rewrite of the paystack-rs crate. The rewrite is necessary because in the current state, the crate is not -extendable and will be difficult to add support for sync and async code. The rewrite is to achieve the following objectives: - - Make the code less complex (relatively speaking) - - Improve the maintainability of the crate - - Support both async and sync code - - Use high level data construct when creating request body - - Have extensive Rust type for every possible response from the API - - Use advanced rust type and how a better understand of the Rust programming language (personal reason) +All notable changes to this project will be documented in this file. -- The following changes have been implemented - - Change the project file layout to improve separation of concerns. The new layout includes the following - - http (to handle all http related functionalities) - - models (holds all request and response models from the API) - - macros (utility macro to simplify code repetition) +## [0.2.2] - 2023-11-11 -## 0.2.2 (29/11/2023) +### โš™๏ธ Miscellaneous Tasks -- Added support for create customer API route \ No newline at end of file +- Split test with valid data +- Split test with valid data +- Merge main into branch +- *(tests)* Completed transaction_splits tests and fixed splits API issues + +## [0.1.1] - 2023-07-02 + + diff --git a/README.md b/README.md index 7c55f10..a9a734a 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,6 @@ [![paystack-rs on docs.rs](https://docs.rs/paystack-rs/badge.svg)](https://docs.rs/paystack-rs) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -> _NB: a core rewrite of the project is being carried out, the goal is to make the crate easier to maintain, -> improve the performance, abstract certain features to improve flexibility, and support for both blocking and non-blocking -> operations._ - Convenient Rust bindings and types for the [Paystack](https://paystack.com) HTTP API aiming to support the entire API surface. Not the case? Please open an issue. I update the definitions on a weekly basis. The client aims to make receiving payments for African business or business with African clients building with Rust as hassle-free as possible. diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 0000000..c81800c --- /dev/null +++ b/cliff.toml @@ -0,0 +1,103 @@ +# git-cliff ~ configuration file +# https://git-cliff.org/docs/configuration + + +[changelog] +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction +header = """ +# Changelog\n +All notable changes to this project will be documented in this file.\n +""" +# A Tera template to be rendered for each release in the changelog. +# See https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**] {% endif %}\ + {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" +# A Tera template to be rendered as the changelog's footer. +# See https://keats.github.io/tera/docs/#introduction +footer = """ + +""" +# Remove leading and trailing whitespaces from the changelog's body. +trim = true +# Render body even when there are no releases to process. +render_always = true +# An array of regex based postprocessors to modify the changelog. +postprocessors = [ + # Replace the placeholder with a URL. + #{ pattern = '', replace = "https://github.com/orhun/git-cliff" }, +] +# render body even when there are no releases to process +# render_always = true +# output file path +# output = "test.md" + +[git] +# Parse commits according to the conventional commits specification. +# See https://www.conventionalcommits.org +conventional_commits = true +# Exclude commits that do not match the conventional commits specification. +filter_unconventional = true +# Require all commits to be conventional. +# Takes precedence over filter_unconventional. +require_conventional = false +# Split commits on newlines, treating each line as an individual commit. +split_commits = false +# An array of regex based parsers to modify commit messages prior to further processing. +commit_preprocessors = [ + # Replace issue numbers with link templates to be updated in `changelog.postprocessors`. + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, + # Check spelling of the commit message using https://github.com/crate-ci/typos. + # If the spelling is incorrect, it will be fixed automatically. + #{ pattern = '.*', replace_command = 'typos --write-changes -' }, +] +# Prevent commits that are breaking from being excluded by commit parsers. +protect_breaking_commits = false +# An array of regex based parsers for extracting data from the commit message. +# Assigns commits to groups. +# Optionally sets the commit's scope and can decide to exclude commits from further processing. +commit_parsers = [ + { message = "^feat", group = "๐Ÿš€ Features" }, + { message = "^fix", group = "๐Ÿ› Bug Fixes" }, + { message = "^doc", group = "๐Ÿ“š Documentation" }, + { message = "^perf", group = "โšก Performance" }, + { message = "^refactor", group = "๐Ÿšœ Refactor" }, + { message = "^style", group = "๐ŸŽจ Styling" }, + { message = "^test", group = "๐Ÿงช Testing" }, + { message = "^chore\\(release\\): prepare for", skip = true }, + { message = "^chore\\(deps.*\\)", skip = true }, + { message = "^chore\\(pr\\)", skip = true }, + { message = "^chore\\(pull\\)", skip = true }, + { message = "^chore|^ci", group = "โš™๏ธ Miscellaneous Tasks" }, + { body = ".*security", group = "๐Ÿ›ก๏ธ Security" }, + { message = "^revert", group = "โ—€๏ธ Revert" }, + { message = ".*", group = "๐Ÿ’ผ Other" }, +] +# Exclude commits that are not matched by any commit parser. +filter_commits = false +# An array of link parsers for extracting external references, and turning them into URLs, using regex. +link_parsers = [] +# Include only the tags that belong to the current branch. +use_branch_tags = false +# Order releases topologically instead of chronologically. +topo_order = false +# Order releases topologically instead of chronologically. +topo_order_commits = true +# Order of commits in each group/release within the changelog. +# Allowed values: newest, oldest +sort_commits = "oldest" +# Process submodules commits +recurse_submodules = false