Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
e6d6d51
feat(rust): expand Queue/Job/Worker API parity with Node.js BullMQ
manast Jun 10, 2026
c96f54f
fix: fix vulns
manast Jun 10, 2026
0f4e838
Merge branch 'master' into feat/add-flow-support-rust
manast Jun 11, 2026
d04548a
fix: addressed PR comments
manast Jun 11, 2026
e75262b
Merge branch 'feat/add-flow-support-rust' of https://github.com/taskf…
manast Jun 11, 2026
e1b86b2
Merge origin/master into feat/add-flow-support-rust
Copilot Jun 11, 2026
197ae34
fix: addressed PR comments
manast Jun 11, 2026
2bce7e1
Merge branch 'feat/add-flow-support-rust' of https://github.com/taskf…
manast Jun 11, 2026
a68e2d2
fix: addressed PR comments
manast Jun 11, 2026
eb78cfa
fix: addressed PR comments
manast Jun 12, 2026
f207ded
fix: addressed PR comments
manast Jun 12, 2026
4d5bf55
fix: addressed PR comments
manast Jun 12, 2026
f209b55
fix: addressed PR comments
manast Jun 13, 2026
bf4e8cb
test(rust): fix broken test
manast Jun 13, 2026
ec07d58
fix: addressed PR comments
manast Jun 13, 2026
fb55b0d
fix(rust): address remaining PR comments
Copilot Jun 13, 2026
a9f997b
refactor(rust): clarify packed add args naming
Copilot Jun 13, 2026
e8e413e
Merge branch 'master' into feat/add-flow-support-rust
manast Jun 14, 2026
1353b04
fix(rust): propagate flow child loading errors
Copilot Jun 14, 2026
d5761eb
fix(rust): redact redis connection debug output
Copilot Jun 14, 2026
bfb2f31
fix(ci): use stable skipped Elixir check name
Copilot Jun 15, 2026
d818294
fix(ci): keep Elixir required check reportable
Copilot Jun 15, 2026
1bb97f3
fix(rust): align flow add ID semantics docs
Copilot Jun 15, 2026
43d07a2
test(rust): cover child ID preservation in flow add
Copilot Jun 15, 2026
3a5b134
Potential fix for pull request finding
manast Jun 15, 2026
8686920
Potential fix for pull request finding
manast Jun 15, 2026
3358f6b
Merge branch 'master' into feat/add-flow-support-rust
manast Jun 15, 2026
c2a0ac9
Potential fix for pull request finding
manast Jun 15, 2026
97048b4
Potential fix for pull request finding
manast Jun 15, 2026
38741b2
fix: restore rustfmt formatting in flow producer
Copilot Jun 15, 2026
c533bfa
ci: avoid failing osv scan on PR events
Copilot Jun 15, 2026
00a1c54
Merge branch 'master' into feat/add-flow-support-rust
manast Jun 15, 2026
e8b7567
Potential fix for pull request finding
manast Jun 16, 2026
ae6311f
Potential fix for pull request finding
manast Jun 16, 2026
2c00f3f
Potential fix for pull request finding
manast Jun 16, 2026
143f767
chore: fix osv scanner vulnerabilities
Copilot Jun 16, 2026
43f94da
Merge branch 'master' into feat/add-flow-support-rust
Copilot Jun 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions .github/workflows/elixir-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ jobs:

test:
needs: changes
if: needs.changes.outputs.should_run == 'true'
runs-on: ubuntu-latest

name: testing elixir@${{ matrix.elixir-version }}, otp@${{ matrix.otp-version }}, redis@${{ matrix.redis-version }}
Expand All @@ -44,31 +43,43 @@ jobs:
redis-version: [7-alpine]

steps:
- name: Skip when Elixir files are unchanged
if: needs.changes.outputs.should_run != 'true'
run: echo "No Elixir-related changes detected; skipping Elixir test steps."

- name: Checkout repository
if: needs.changes.outputs.should_run == 'true'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Use Node.js ${{ matrix.node-version }}
if: needs.changes.outputs.should_run == 'true'
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: ${{ matrix.node-version }}
cache: 'yarn'

- name: Start Redis
if: needs.changes.outputs.should_run == 'true'
uses: supercharge/redis-github-action@bc274cb7238cd63a45029db04ee48c07a72609fd # 1.8.1
with:
redis-version: ${{ matrix.redis-version }}

- run: yarn install --ignore-engines --frozen-lockfile --non-interactive
- run: yarn generate:raw:scripts
- run: yarn copy:lua:elixir
- if: needs.changes.outputs.should_run == 'true'
run: yarn install --ignore-engines --frozen-lockfile --non-interactive
- if: needs.changes.outputs.should_run == 'true'
run: yarn generate:raw:scripts
- if: needs.changes.outputs.should_run == 'true'
run: yarn copy:lua:elixir

- name: Set up Elixir
if: needs.changes.outputs.should_run == 'true'
uses: erlef/setup-beam@v1
with:
elixir-version: ${{ matrix.elixir-version }}
otp-version: ${{ matrix.otp-version }}

- name: Restore dependencies cache
if: needs.changes.outputs.should_run == 'true'
uses: actions/cache@v5
with:
path: elixir/deps
Expand All @@ -77,20 +88,24 @@ jobs:
${{ runner.os }}-mix-deps-${{ matrix.elixir-version }}-${{ matrix.otp-version }}-

- name: Install Elixir dependencies
if: needs.changes.outputs.should_run == 'true'
working-directory: elixir
run: |
mix local.hex --force
mix local.rebar --force
mix deps.get

- name: Compile
if: needs.changes.outputs.should_run == 'true'
working-directory: elixir
run: mix compile --warnings-as-errors

- name: Run tests
if: needs.changes.outputs.should_run == 'true'
working-directory: elixir
run: mix test --include integration

- name: Check formatting
if: needs.changes.outputs.should_run == 'true'
working-directory: elixir
run: mix format --check-formatted
1 change: 1 addition & 0 deletions .github/workflows/osv-scanner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ jobs:
scan-scheduled:
uses: 'google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v2.3.5'
with:
fail-on-vuln: ${{ github.event_name == 'schedule' }}
scan-args: |-
--config=osv-scanner.toml
-r
Comment thread
manast marked this conversation as resolved.
Expand Down
9 changes: 9 additions & 0 deletions docs/gitbook/rust/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,12 @@
- Job deduplication support and remove_deduplication_key
- Worker handling for RateLimited/NextTimestamp fetch results
- Cron scheduler support via croner and chrono-tz
- FlowProducer: add, add_bulk, add_with_opts (per-queue default job options), get_flow
- Flows: failParentOnFailure, removeDependencyOnFailure, ignoreDependencyOnFailure, continueParentOnFailure
- Queue getters: get_jobs, get_ranges, get_waiting/active/delayed/completed/failed/prioritized/waiting_children
- Queue counts: count, get_job_counts_by_types, get_job_count_by_types, get_counts_per_priority, per-state count getters
- Queue: get_rate_limit_ttl, get_global_concurrency, get_global_rate_limit, get_deduplication_job_id
- Queue: get_metrics (time-series), get_dependencies_count, get_children_values
- Job: clear_logs, discard, is_waiting_children, get_ignored_children_failures, get_dependencies, move_to_waiting_children
- Worker: metrics option (time-series collection), rate limiting
- Connections: typed options (host/port/username/password/db) and TLS (`rediss://`) support
18 changes: 18 additions & 0 deletions docs/gitbook/rust/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,24 @@ let worker = Worker::new("my-queue", processor, WorkerOptions {
}).await?;
```

Instead of a URL you can use typed connection fields. When `host` is set, the
URL is built from these fields (use `tls: true` for a `rediss://` TLS
connection):

```rust
use bullmq::options::RedisConnectionOptions;

let conn = RedisConnectionOptions {
host: Some("redis.example.com".to_string()),
port: Some(6380),
username: Some("user".to_string()),
password: Some("password".to_string()),
db: Some(0),
tls: true,
..Default::default()
};
```

## Key Differences from Node.js

| Aspect | Node.js | Rust |
Expand Down
7 changes: 7 additions & 0 deletions osv-scanner.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
# OSV Scanner Configuration
# https://google.github.io/osv-scanner/configuration/

# rustls-pemfile is unmaintained (the crate was archived; its PEM parsing was
# folded into rustls-pki-types). This is an informational advisory with no CVSS
# score and no fixed version available. It is only pulled in transitively by the
# `redis` crate's TLS support (rust/Cargo.lock) and there is nothing to upgrade
# to, so we acknowledge and ignore it.
[[IgnoredVulns]]
id = "RUSTSEC-2025-0134"
reason = "Informational only (unmaintained). Transitive via redis TLS; no fixed version available."
Loading
Loading