release: v1.1.0 — bug fixes, Docker, clients, SCRAM auth
- Bump version to 1.1.0 across all components - Remove debug CI artifacts (debug.yml, test_all.nim.bak, test_lock) - Update CHANGELOG with v1.1.0 release notes - Bug fixes: irNeg, distributed txn, sharding, Raft majority, MVCC, LSM-Tree, auth (JWT + SCRAM-SHA-256), wire protocol, SQL injection, ReDoS, graph, vector, FTS, build warnings - Client SDKs: JS/TS, Python, Nim, Rust with tests and examples - Docker: production + source + test compose configs - TLA+: crossmodal, backup, recovery specs with symmetry reduction
This commit is contained in:
@@ -1,59 +0,0 @@
|
|||||||
name: Debug Tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
debug:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Nim
|
|
||||||
uses: jiro4989/setup-nim-action@v1
|
|
||||||
with:
|
|
||||||
nim-version: '2.2.10'
|
|
||||||
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: sudo apt-get update -qq && sudo apt-get install -y -qq libssl-dev libpcre3-dev openssl ca-certificates
|
|
||||||
|
|
||||||
- name: Install Nim dependencies
|
|
||||||
run: nimble install --depsOnly -y
|
|
||||||
|
|
||||||
- name: Check nim binary
|
|
||||||
run: |
|
|
||||||
which nim
|
|
||||||
nim --version
|
|
||||||
echo "NIM_OK=1"
|
|
||||||
|
|
||||||
- name: Compile and run lock test
|
|
||||||
run: nim c --threads:on --path:src -r tests/test_lock.nim
|
|
||||||
|
|
||||||
- name: Run join_tests
|
|
||||||
run: timeout 30 nim c -d:ssl --threads:on --path:src -r tests/join_tests.nim
|
|
||||||
|
|
||||||
- name: Run tla_faithfulness
|
|
||||||
run: nim c -d:ssl --threads:on --path:src -r tests/tla_faithfulness.nim
|
|
||||||
|
|
||||||
- name: Compile test_all
|
|
||||||
run: nim c -d:ssl --threads:on --path:src tests/test_all.nim
|
|
||||||
|
|
||||||
- name: Run test_all binary
|
|
||||||
run: ./tests/test_all > test_all.log 2>&1
|
|
||||||
|
|
||||||
- name: Upload test_all log to repo
|
|
||||||
if: failure()
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: |
|
|
||||||
URL=$(curl -s -F'file=@test_all.log' https://0x0.st)
|
|
||||||
echo "::notice::test_all.log uploaded to $URL"
|
|
||||||
sudo apt-get install -y -qq git
|
|
||||||
git config user.name "CI Bot"
|
|
||||||
git config user.email "ci@baradb"
|
|
||||||
git checkout -b ci-logs-${{ github.run_id }} || true
|
|
||||||
cp test_all.log ci_log.txt
|
|
||||||
git add ci_log.txt
|
|
||||||
git commit -m "CI log for run ${{ github.run_id }}" || true
|
|
||||||
git push https://$GITHUB_TOKEN@github.com/${{ github.repository }}.git ci-logs-${{ github.run_id }} || echo "PUSH_FAILED=1"
|
|
||||||
+1
-1
@@ -16,7 +16,7 @@ FROM debian:bookworm-slim
|
|||||||
|
|
||||||
LABEL maintainer="BaraDB Team"
|
LABEL maintainer="BaraDB Team"
|
||||||
LABEL description="BaraDB — Multimodal Database Engine"
|
LABEL description="BaraDB — Multimodal Database Engine"
|
||||||
LABEL version="1.0.0"
|
LABEL version="1.1.0"
|
||||||
|
|
||||||
# Инсталираме runtime зависимости
|
# Инсталираме runtime зависимости
|
||||||
# libpcre3 — нужна за Nim regex (зарежда се динамично)
|
# libpcre3 — нужна за Nim regex (зарежда се динамично)
|
||||||
|
|||||||
+1
-1
@@ -40,7 +40,7 @@ FROM alpine:3.19
|
|||||||
|
|
||||||
LABEL maintainer="BaraDB Team"
|
LABEL maintainer="BaraDB Team"
|
||||||
LABEL description="BaraDB — Multimodal Database Engine (source build)"
|
LABEL description="BaraDB — Multimodal Database Engine (source build)"
|
||||||
LABEL version="1.0.0"
|
LABEL version="1.1.0"
|
||||||
|
|
||||||
# Инсталираме runtime зависимости
|
# Инсталираме runtime зависимости
|
||||||
RUN apk add --no-cache ca-certificates su-exec wget pcre
|
RUN apk add --no-cache ca-certificates su-exec wget pcre
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
**A multimodal database engine written in Nim — 100% native, zero dependencies.**
|
**A multimodal database engine written in Nim — 100% native, zero dependencies.**
|
||||||
|
|
||||||
[](baradadb.nimble)
|
[](baradadb.nimble)
|
||||||
[](docs/index.md)
|
[](docs/index.md)
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
# Package
|
# Package
|
||||||
version = "1.0.0"
|
version = "1.1.0"
|
||||||
author = "BaraDB Team"
|
author = "BaraDB Team"
|
||||||
description = "BaraDB — Multimodal database written in Nim"
|
description = "BaraDB — Multimodal database written in Nim"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "baradb",
|
"name": "baradb",
|
||||||
"version": "1.0.0",
|
"version": "1.1.0",
|
||||||
"description": "Official JavaScript/Node.js client for BaraDB — Multimodal Database Engine",
|
"description": "Official JavaScript/Node.js client for BaraDB — Multimodal Database Engine",
|
||||||
"main": "baradb.js",
|
"main": "baradb.js",
|
||||||
"types": "baradb.d.ts",
|
"types": "baradb.d.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Package
|
# Package
|
||||||
|
|
||||||
version = "1.0.0"
|
version = "1.1.0"
|
||||||
author = "BaraDB Team"
|
author = "BaraDB Team"
|
||||||
description = "Official Nim client for BaraDB — async binary protocol client"
|
description = "Official Nim client for BaraDB — async binary protocol client"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "baradb"
|
name = "baradb"
|
||||||
version = "1.0.0"
|
version = "1.1.0"
|
||||||
description = "Official Python client for BaraDB — Multimodal Database Engine"
|
description = "Official Python client for BaraDB — Multimodal Database Engine"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
license = { text = "Apache-2.0" }
|
license = { text = "Apache-2.0" }
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "baradb"
|
name = "baradb"
|
||||||
version = "1.0.0"
|
version = "1.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["BaraDB Team <team@baradb.dev>"]
|
authors = ["BaraDB Team <team@baradb.dev>"]
|
||||||
description = "Official Rust client for BaraDB — binary protocol client"
|
description = "Official Rust client for BaraDB — binary protocol client"
|
||||||
|
|||||||
@@ -2,6 +2,45 @@
|
|||||||
|
|
||||||
All notable changes to BaraDB are documented in this file.
|
All notable changes to BaraDB are documented in this file.
|
||||||
|
|
||||||
|
## [1.1.0] — 2026-05-13
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **Client SDKs v1.1.0** — Full-featured clients for all languages:
|
||||||
|
- JavaScript: TypeScript definitions, package.json, examples, unit & integration tests
|
||||||
|
- Python: Restructured as proper package (`baradb/` with `__init__.py` and `core.py`), pyproject.toml, examples, tests (query builder, wire protocol, integration)
|
||||||
|
- Nim: Examples, integration tests, README
|
||||||
|
- Rust: Examples, integration tests, improved Cargo.toml
|
||||||
|
- **SCRAM-SHA-256 Authentication** — RFC 7677 compliant authentication with PBKDF2 + HMAC + SHA-256 + nonce/salt generation
|
||||||
|
- **HTTP SCRAM Endpoints** — `/auth/scram/start` + `/auth/scram/finish` in HTTP server
|
||||||
|
- **Docker Compose Test Configuration** — `docker-compose.test.yml` for test environments
|
||||||
|
- **CI/CD Clients Pipeline** — `.github/workflows/clients-ci.yml` for automated client testing
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **Query Executor** — Unary minus (`irNeg`) evaluation now works correctly in SELECT and WHERE clauses
|
||||||
|
- **Distributed Transactions** — Rollback after commit attempt no longer violates atomicity
|
||||||
|
- **Sharding** — Data migration protocol with TCP + `scanAll` on LSM
|
||||||
|
- **Raft** — Majority calculation for even number of nodes fixed
|
||||||
|
- **MVCC** — Aborted transactions no longer become visible
|
||||||
|
- **LSM-Tree** — Data loss on immutable memtable overwrite fixed; SSTable lookup sorting fixed
|
||||||
|
- **Auth** — JWT signature changed to HMAC-SHA256 (no longer trivially forgeable); token expiration (`exp`/`nbf`/`iat`) now validated; signature comparison is now constant-time
|
||||||
|
- **Recovery** — `summary()` no longer mutates the database
|
||||||
|
- **Wire Protocol** — 64MB limit + bounds checking + max depth to prevent OOM/DoS
|
||||||
|
- **SQL Injection** — `exprToSql` now escapes single quotes
|
||||||
|
- **ReDoS** — `irLike`/`irILike` now escape regex metacharacters
|
||||||
|
- **Graph** — `addEdge` now checks node existence
|
||||||
|
- **Vector** — Dimension mismatch validation + HNSW locking
|
||||||
|
- **FTS** — UTF-8 tokenization now uses runes instead of bytes
|
||||||
|
- **Build** — `nim.cfg` adds `-d:ssl` so `nimble build` works without flags; `--threads:on` added to all CI commands
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **Version bumped to 1.1.0** across all components (server, Docker images, clients, CLI)
|
||||||
|
- **README** — Version badge updated; all feature tables now reference v1.1.0
|
||||||
|
- **TLA+ Formal Verification** — Added `crossmodal.tla`, `backup.tla`, `recovery.tla`; symmetry reduction in all 9 specs
|
||||||
|
- **Clean build** — 0 compiler warnings on Nim 2.2.10
|
||||||
|
|
||||||
## [0.1.0] — 2025-01-15
|
## [0.1.0] — 2025-01-15
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import ../query/lexer
|
|||||||
import ../query/parser
|
import ../query/parser
|
||||||
|
|
||||||
const
|
const
|
||||||
Version = "0.1.0"
|
Version = "1.1.0"
|
||||||
Prompt = "bara> "
|
Prompt = "bara> "
|
||||||
ContinuationPrompt = " .. > "
|
ContinuationPrompt = " .. > "
|
||||||
|
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ proc queryHandler(server: HttpServer): RequestHandler =
|
|||||||
proc healthHandler(): RequestHandler =
|
proc healthHandler(): RequestHandler =
|
||||||
return proc(request: Request) {.gcsafe.} =
|
return proc(request: Request) {.gcsafe.} =
|
||||||
let ctx = newContext(request)
|
let ctx = newContext(request)
|
||||||
ctx.json(%*{"status": "ok", "version": "0.1.0"})
|
ctx.json(%*{"status": "ok", "version": "1.1.0"})
|
||||||
|
|
||||||
proc metricsHandler(server: HttpServer): RequestHandler =
|
proc metricsHandler(server: HttpServer): RequestHandler =
|
||||||
return proc(request: Request) {.gcsafe.} =
|
return proc(request: Request) {.gcsafe.} =
|
||||||
@@ -514,7 +514,7 @@ function showTab(idx){
|
|||||||
}
|
}
|
||||||
setInterval(() => { if(document.querySelectorAll('.panel')[4].classList.contains('active')) loadMetrics() }, 5000)
|
setInterval(() => { if(document.querySelectorAll('.panel')[4].classList.contains('active')) loadMetrics() }, 5000)
|
||||||
</script>
|
</script>
|
||||||
<div class='status' style='text-align:center;padding:10px'>BaraDB v1.0.0 — Multimodal Database Engine</div>
|
<div class='status' style='text-align:center;padding:10px'>BaraDB v1.1.0 — Multimodal Database Engine</div>
|
||||||
</body></html>"""
|
</body></html>"""
|
||||||
request.respond(200, @[("Content-Type", "text/html; charset=utf-8")], html)
|
request.respond(200, @[("Content-Type", "text/html; charset=utf-8")], html)
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ proc exportOtlp*(tracer: Tracer, endpoint: string = "http://localhost:4318/v1/tr
|
|||||||
{"key": "service.name", "value": {"stringValue": "baradadb"}}
|
{"key": "service.name", "value": {"stringValue": "baradadb"}}
|
||||||
]},
|
]},
|
||||||
"scopeSpans": [{
|
"scopeSpans": [{
|
||||||
"scope": {"name": "baradadb-tracer", "version": "0.1.0"},
|
"scope": {"name": "baradadb-tracer", "version": "1.1.0"},
|
||||||
"spans": otlpSpans
|
"spans": otlpSpans
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
|
|||||||
+1
-1
@@ -86,7 +86,7 @@ proc main() =
|
|||||||
# Init structured logger from config
|
# Init structured logger from config
|
||||||
let logLvl = parseEnum[LogLevel]("ll" & capitalizeAscii(config.logLevel))
|
let logLvl = parseEnum[LogLevel]("ll" & capitalizeAscii(config.logLevel))
|
||||||
defaultLogger = newLogger(logLvl, config.logFile)
|
defaultLogger = newLogger(logLvl, config.logFile)
|
||||||
info("BaraDB v1.0.0 — Multimodal Database Engine")
|
info("BaraDB v1.1.0 — Multimodal Database Engine")
|
||||||
|
|
||||||
# Security check: warn if JWT secret is not configured
|
# Security check: warn if JWT secret is not configured
|
||||||
if config.jwtSecret.len == 0:
|
if config.jwtSecret.len == 0:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Reference in New Issue
Block a user