Skip to content

Commit 255b6e1

Browse files
authored
Workflows + bump 0.12.0 (#8)
1 parent 615d422 commit 255b6e1

5 files changed

Lines changed: 214 additions & 28 deletions

File tree

.github/workflows/ci.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: CI
2+
3+
permissions:
4+
contents: read
5+
6+
on:
7+
push:
8+
branches: [main]
9+
pull_request:
10+
branches: [main]
11+
12+
jobs:
13+
check:
14+
name: Check
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v4
19+
20+
- name: Install Rust toolchain
21+
uses: dtolnay/rust-toolchain@stable
22+
with:
23+
targets: wasm32-unknown-unknown
24+
25+
- name: Cache cargo dependencies
26+
uses: Swatinem/rust-cache@v2
27+
28+
- name: Check WASM compilation
29+
run: cargo check --target wasm32-unknown-unknown
30+
31+
format:
32+
name: Format
33+
runs-on: ubuntu-latest
34+
steps:
35+
- name: Checkout repository
36+
uses: actions/checkout@v4
37+
38+
- name: Install Rust toolchain
39+
uses: dtolnay/rust-toolchain@stable
40+
with:
41+
components: rustfmt
42+
43+
- name: Check formatting
44+
run: cargo fmt --all -- --check
45+
46+
clippy:
47+
name: Clippy
48+
runs-on: ubuntu-latest
49+
steps:
50+
- name: Checkout repository
51+
uses: actions/checkout@v4
52+
53+
- name: Install Rust toolchain
54+
uses: dtolnay/rust-toolchain@stable
55+
with:
56+
targets: wasm32-unknown-unknown
57+
components: clippy
58+
59+
- name: Cache cargo dependencies
60+
uses: Swatinem/rust-cache@v2
61+
62+
- name: Run clippy
63+
run: cargo clippy --target wasm32-unknown-unknown -- -D warnings

.github/workflows/release.yml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
name: Release
2+
3+
run-name: "Release run '${{ github.head_ref || github.ref_name }}'"
4+
5+
on:
6+
workflow_dispatch:
7+
8+
jobs:
9+
semver:
10+
name: semver
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
- name: Check semver
15+
uses: obi1kenobi/cargo-semver-checks-action@v2
16+
17+
release:
18+
name: Process Release
19+
runs-on: ubuntu-latest
20+
needs: semver
21+
permissions:
22+
contents: write # required for creating tags and GitHub releases
23+
steps:
24+
- uses: actions/checkout@v4
25+
with:
26+
fetch-depth: 0
27+
token: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Install Rust toolchain
30+
uses: dtolnay/rust-toolchain@stable
31+
32+
- name: Cache dependencies
33+
uses: Swatinem/rust-cache@v2
34+
35+
- name: Install a TOML parser
36+
run: |
37+
curl -L https://github.com/tamasfe/taplo/releases/download/0.8.1/taplo-full-linux-x86_64.gz | gunzip - > taplo
38+
chmod +x taplo
39+
sudo mv taplo /usr/bin/taplo
40+
41+
- name: Configure git
42+
run: |
43+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
44+
git config user.name "github-actions[bot]"
45+
git config --add --bool push.autoSetupRemote true
46+
47+
- name: Extract version from branch name
48+
id: version
49+
run: |
50+
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
51+
VERSION="${BRANCH_NAME#release/}"
52+
echo "Version from branch: $VERSION"
53+
54+
# Validate version matches Cargo.toml
55+
CARGO_VERSION=$(taplo get -f Cargo.toml "package.version")
56+
if [ "$VERSION" != "$CARGO_VERSION" ]; then
57+
echo "Error: Branch version ($VERSION) doesn't match Cargo.toml version ($CARGO_VERSION)"
58+
exit 1
59+
fi
60+
61+
echo "version=$VERSION" >> $GITHUB_OUTPUT
62+
63+
- name: Create and push tag
64+
run: |
65+
git tag -a "v${{ steps.version.outputs.version }}" -m "Release version ${{ steps.version.outputs.version }}"
66+
git push origin "v${{ steps.version.outputs.version }}"
67+
68+
- name: Publish crate
69+
env:
70+
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
71+
run: cargo publish
72+
73+
- name: Create GitHub Release
74+
uses: softprops/action-gh-release@v2
75+
with:
76+
tag_name: v${{ steps.version.outputs.version }}
77+
name: Release ${{ steps.version.outputs.version }}
78+
draft: false
79+
prerelease: false

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "indxdb"
33
publish = true
44
edition = "2021"
5-
version = "0.11.0"
5+
version = "0.12.0"
66
readme = "CARGO.md"
77
authors = ["Tobie Morgan Hitchcock <tobie@surrealdb.com>"]
88
description = "A key-value database engine abstraction layer for IndexedDB running in WASM"

src/tx.rs

Lines changed: 70 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ impl Transaction {
9191

9292
/// Open a fresh read-only IDB store for a single read request.
9393
fn fresh_read_store(&self) -> Result<Store, Error> {
94-
let tx = self.db.transaction(&["kv"], TransactionMode::ReadOnly)
95-
.map_err(|_| Error::TxError)?;
94+
let tx =
95+
self.db.transaction(&["kv"], TransactionMode::ReadOnly).map_err(|_| Error::TxError)?;
9696
tx.store("kv").map_err(|_| Error::TxError)
9797
}
9898

@@ -145,8 +145,8 @@ impl Transaction {
145145
return Ok(());
146146
}
147147

148-
let flush_tx = self.db.transaction(&["kv"], TransactionMode::ReadWrite)
149-
.map_err(|_| Error::TxError)?;
148+
let flush_tx =
149+
self.db.transaction(&["kv"], TransactionMode::ReadWrite).map_err(|_| Error::TxError)?;
150150
let flush_store = flush_tx.store("kv").map_err(|_| Error::TxError)?;
151151

152152
// Build an iterator of (JsValue, Option<JsValue>) for put_all, and
@@ -308,9 +308,13 @@ impl Transaction {
308308
if self.done {
309309
return Err(Error::TxClosed);
310310
}
311-
let Range { start, end } = rng;
311+
let Range {
312+
start,
313+
end,
314+
} = rng;
312315
let dir = Some(Direction::Next);
313-
let kr = KeyRange::bound(&start.clone().convert(), &end.clone().convert(), None, Some(true));
316+
let kr =
317+
KeyRange::bound(&start.clone().convert(), &end.clone().convert(), None, Some(true));
314318
let kr = kr.map_err(|e| Error::IndexedDbError(e.to_string()))?;
315319

316320
let store = self.fresh_read_store()?;
@@ -321,13 +325,19 @@ impl Transaction {
321325
let key: Key = k.convert();
322326
match self.buffer.get(&key) {
323327
Some(Buffered::Del) => {}
324-
_ => { merged.insert(key, ()); }
328+
_ => {
329+
merged.insert(key, ());
330+
}
325331
}
326332
}
327333
for (key, op) in self.buffer.range(start..end) {
328334
match op {
329-
Buffered::Set(_) => { merged.insert(key.clone(), ()); }
330-
Buffered::Del => { merged.remove(key); }
335+
Buffered::Set(_) => {
336+
merged.insert(key.clone(), ());
337+
}
338+
Buffered::Del => {
339+
merged.remove(key);
340+
}
331341
}
332342
}
333343

@@ -339,9 +349,13 @@ impl Transaction {
339349
if self.done {
340350
return Err(Error::TxClosed);
341351
}
342-
let Range { start, end } = rng;
352+
let Range {
353+
start,
354+
end,
355+
} = rng;
343356
let dir = Some(Direction::Prev);
344-
let kr = KeyRange::bound(&end.clone().convert(), &start.clone().convert(), None, Some(true));
357+
let kr =
358+
KeyRange::bound(&end.clone().convert(), &start.clone().convert(), None, Some(true));
345359
let kr = kr.map_err(|e| Error::IndexedDbError(e.to_string()))?;
346360

347361
let store = self.fresh_read_store()?;
@@ -352,13 +366,19 @@ impl Transaction {
352366
let key: Key = k.convert();
353367
match self.buffer.get(&key) {
354368
Some(Buffered::Del) => {}
355-
_ => { merged.insert(key, ()); }
369+
_ => {
370+
merged.insert(key, ());
371+
}
356372
}
357373
}
358374
for (key, op) in self.buffer.range(start..end) {
359375
match op {
360-
Buffered::Set(_) => { merged.insert(key.clone(), ()); }
361-
Buffered::Del => { merged.remove(key); }
376+
Buffered::Set(_) => {
377+
merged.insert(key.clone(), ());
378+
}
379+
Buffered::Del => {
380+
merged.remove(key);
381+
}
362382
}
363383
}
364384

@@ -370,9 +390,13 @@ impl Transaction {
370390
if self.done {
371391
return Err(Error::TxClosed);
372392
}
373-
let Range { start, end } = rng;
393+
let Range {
394+
start,
395+
end,
396+
} = rng;
374397
let dir = Some(Direction::Next);
375-
let kr = KeyRange::bound(&start.clone().convert(), &end.clone().convert(), None, Some(true));
398+
let kr =
399+
KeyRange::bound(&start.clone().convert(), &end.clone().convert(), None, Some(true));
376400
let kr = kr.map_err(|e| Error::IndexedDbError(e.to_string()))?;
377401

378402
let store = self.fresh_read_store()?;
@@ -384,14 +408,22 @@ impl Transaction {
384408
let val: Val = v.convert();
385409
match self.buffer.get(&key) {
386410
Some(Buffered::Del) => {}
387-
Some(Buffered::Set(bv)) => { merged.insert(key, bv.clone()); }
388-
None => { merged.insert(key, val); }
411+
Some(Buffered::Set(bv)) => {
412+
merged.insert(key, bv.clone());
413+
}
414+
None => {
415+
merged.insert(key, val);
416+
}
389417
}
390418
}
391419
for (key, op) in self.buffer.range(start..end) {
392420
match op {
393-
Buffered::Set(v) => { merged.insert(key.clone(), v.clone()); }
394-
Buffered::Del => { merged.remove(key); }
421+
Buffered::Set(v) => {
422+
merged.insert(key.clone(), v.clone());
423+
}
424+
Buffered::Del => {
425+
merged.remove(key);
426+
}
395427
}
396428
}
397429

@@ -403,9 +435,13 @@ impl Transaction {
403435
if self.done {
404436
return Err(Error::TxClosed);
405437
}
406-
let Range { start, end } = rng;
438+
let Range {
439+
start,
440+
end,
441+
} = rng;
407442
let dir = Some(Direction::Prev);
408-
let kr = KeyRange::bound(&end.clone().convert(), &start.clone().convert(), None, Some(true));
443+
let kr =
444+
KeyRange::bound(&end.clone().convert(), &start.clone().convert(), None, Some(true));
409445
let kr = kr.map_err(|e| Error::IndexedDbError(e.to_string()))?;
410446

411447
let store = self.fresh_read_store()?;
@@ -417,14 +453,22 @@ impl Transaction {
417453
let val: Val = v.convert();
418454
match self.buffer.get(&key) {
419455
Some(Buffered::Del) => {}
420-
Some(Buffered::Set(bv)) => { merged.insert(key, bv.clone()); }
421-
None => { merged.insert(key, val); }
456+
Some(Buffered::Set(bv)) => {
457+
merged.insert(key, bv.clone());
458+
}
459+
None => {
460+
merged.insert(key, val);
461+
}
422462
}
423463
}
424464
for (key, op) in self.buffer.range(start..end) {
425465
match op {
426-
Buffered::Set(v) => { merged.insert(key.clone(), v.clone()); }
427-
Buffered::Del => { merged.remove(key); }
466+
Buffered::Set(v) => {
467+
merged.insert(key.clone(), v.clone());
468+
}
469+
Buffered::Del => {
470+
merged.remove(key);
471+
}
428472
}
429473
}
430474

0 commit comments

Comments
 (0)