diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 0000000..c45e691 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,78 @@ +on: + push: + tags: + - "*" + +name: Publish + +jobs: + audit: + name: Audit + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/audit@v1 + + build_and_test_linux: + name: Build and Test (Linux) + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + + - uses: taiki-e/install-action@nextest + - name: "Build and test" + run: cd vantage && cargo nextest run --all-features + + crates_io_publish: + name: Publish (crates.io) + needs: + - audit + - build_and_test_linux + + runs-on: ubuntu-latest + timeout-minutes: 25 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + + - name: cargo-release Cache + id: cargo_release_cache + uses: actions/cache@v4 + with: + path: ~/.cargo/bin/cargo-release + key: ${{ runner.os }}-cargo-release + + - run: cargo install cargo-release + if: steps.cargo_release_cache.outputs.cache-hit != 'true' + + - name: cargo login + run: cargo login ${{ secrets.CRATES_IO_API_TOKEN }} + + # allow-branch HEAD is because GitHub actions switches + # to the tag while building, which is a detached head + + # Publishing is currently messy, because: + # + # * `peace_rt_model_core` exports `NativeError` or `WebError` depending on the target. + # * `peace_rt_model_web` fails to build when publishing the workspace for a native target. + # * `peace_rt_model_web` still needs its dependencies to be published before it can be + # published. + # * `peace_rt_model_hack` needs `peace_rt_model_web` to be published before it can be + # published. + # + # We *could* pass through `--no-verify` so `cargo` doesn't build the crate before publishing, + # which is reasonable, since this job only runs after the Linux, Windows, and WASM builds + # have passed. + - name: "cargo release publish" + run: |- + cargo release \ + publish \ + --workspace \ + --all-features \ + --allow-branch HEAD \ + --no-confirm \ + --no-verify \ + --execute diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yaml similarity index 100% rename from .github/workflows/rust.yml rename to .github/workflows/rust.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..422b19d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [0.1.0] - 2024-12-12 + +### ๐Ÿš€ Features + +- Query Building - added `Query` with `set_type`, `fields`, and `build` +- Introduced `Renderable` trait (renamed into `Chunk`) +- Table buildind - added `Table` +- Introcuded `Field` struct +- Introduced `Select`, `Insert`, `Update`, `Delete` query types +- Introduced `Expression` struct +- Implemented Field positional rendering +- Introduced `ReadableDataSet` and `WritableDataSet` traits +- Added `mocking` for unit tests +- Briefly introduced and removed `sqlite` support +- Implemented `Postgres` datasource +- Introduced Conditions +- Implemented nested expressions +- Implemented Operations (such as field.eq(5)) +- Implemented DataSource generics with +- Added `Table.sum()` +- Added `AssociatedQuery` and `AssociatedExpressionArc` +- Added `Query.join()` +- Added `with_one` and `with_many` into `Table` for relation definitions +- Added lazy expressions with `with_expression` +- Implementet Entity generics with +- Added `Entity` trait and `SqlTable` trait + +### ๐Ÿ“š Documentation + +- Added mdbook documentation under `docs` +- Added rustdoc documentation under `vantage` + +### โš™๏ธ Miscellaneous Tasks + +- Added bakery example under `bakery_example` +- Added API example under `bakery_api` diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 0000000..8656d82 --- /dev/null +++ b/cliff.toml @@ -0,0 +1,84 @@ +# git-cliff ~ default configuration file +# https://git-cliff.org/docs/configuration +# +# Lines starting with "#" are comments. +# Configuration options are organized into tables and keys. +# See documentation for more information on available options. + +[changelog] +# template for the changelog header +header = """ +# Changelog\n +All notable changes to this project will be documented in this file.\n +""" +# template for the changelog body +# 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 +""" +# template for the changelog footer +footer = """ + +""" +# remove the leading and trailing s +trim = true +# postprocessors +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] +# render body even when there are no releases to process +# render_always = true +# output file path +# output = "test.md" + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + # Replace issue numbers + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, + # Check spelling of the commit with https://github.com/crate-ci/typos + # If the spelling is incorrect, it will be automatically fixed. + #{ pattern = '.*', replace_command = 'typos --write-changes -' }, +] +# regex for parsing and grouping commits +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" }, +] +# filter out the commits that are not matched by commit parsers +filter_commits = false +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "oldest" diff --git a/docs/src/releases/new-in-0.0.1.md b/docs/src/releases/new-in-0.0.1.md index ef1d186..853718f 100644 --- a/docs/src/releases/new-in-0.0.1.md +++ b/docs/src/releases/new-in-0.0.1.md @@ -94,7 +94,7 @@ assert_eq!( Initial implementation of conditions is very limited - no way to specify a field. A new implementation is going to store field reference, operation and value. -## Apr 18: Name changed to `vantage` and early syntax added in README: +## Apr 18: Name changed to `dorm` and early syntax added in README: This is how early syntax looked like: diff --git a/vantage/Cargo.toml b/vantage/Cargo.toml index 2045e5d..f111b65 100644 --- a/vantage/Cargo.toml +++ b/vantage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vantage" -version = "0.1.0" +version = "0.1.1" edition = "2021" license = "MIT OR Apache-2.0" authors = ["Romans Malinovskis "] @@ -8,6 +8,7 @@ description = "A type-safe, ergonomic database toolkit for Rust that focuses on documentation = "https://romaninsh.github.io/vantage" homepage = "https://github.com/romaninsh/vantage" repository = "https://github.com/romaninsh/vantage" +readme = "../README.md" [lib] doctest = false