wurk 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eee8f74b4646a8c8efc7ccd83504f4d88186475b62c07110d427cbc2bb81c540
4
- data.tar.gz: 8016408ba51c5ed155b914bb21f2b54abb2a918cb4724532de7f3932fc06479c
3
+ metadata.gz: e4c0b4f7856306b0cec991a88fa89a2ba86f152598adb27b8b1e34607128c12a
4
+ data.tar.gz: 4ece7a94d1ddba50dbcb6af3b6e17c6346c7ef90642d5839d1b87cf4a12eb7e7
5
5
  SHA512:
6
- metadata.gz: d69bf292c551c84ea8d508ce1b639bbd6bcfafed88fd1dc7bded95eebd3b82570d235b1a85fbae67f9dad7eab1a714daa1b6c90c2eba454af83c3cb0ec5c4bc9
7
- data.tar.gz: 564be6373cad541391ca36eb31e7e7137dfc4c6e96c44973b886e36ead41ed18cdd761df21b187714a0ed577fa64b03f698e5666fe30a3cd14e9d41440a016ac
6
+ metadata.gz: ae6268ba18a442b30c692a3017cb6bd5a8b14fa136d5f6ae9edcf3cf5d96df1ac36bc1f5449a78f8d5f237ef70d69720c7b6b3c7a0d8730bdf8ce9ac979c9d0c
7
+ data.tar.gz: 2269d08c147405889c154e7ed995c346b972c19f0fcb40b42263bf498469b1bc33e297ab1e28f569d7162e3d6b208c3804134d74fbcc4c127e41ebe335b5ef14
data/README.md CHANGED
@@ -1,6 +1,14 @@
1
- # Wurk ⚡
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/developerz-ai/wurk/main/docs/assets/wurk-logo.png" alt="Wurk — an orc ready to work" width="220">
3
+ </p>
2
4
 
3
- **A 100% drop-in replacement for Sidekiq + Sidekiq Pro + Sidekiq Enterprise. Free forever. Faster.**
5
+ <h1 align="center">Wurk ⚡</h1>
6
+
7
+ <p align="center"><strong>Wurk, wurk.</strong> 🪓 <em>Ready to work. Zug zug.</em></p>
8
+
9
+ <p align="center"><strong>A 100% drop-in replacement for Sidekiq + Sidekiq Pro + Sidekiq Enterprise. Free forever. Faster.</strong></p>
10
+
11
+ <div align="center">
4
12
 
5
13
  [![Gem Version](https://img.shields.io/gem/v/wurk.svg)](https://rubygems.org/gems/wurk)
6
14
  [![CI](https://github.com/developerz-ai/wurk/actions/workflows/test.yml/badge.svg)](https://github.com/developerz-ai/wurk/actions/workflows/test.yml)
@@ -8,6 +16,8 @@
8
16
  [![Ruby](https://img.shields.io/badge/ruby-%E2%89%A5%203.2-CC342D.svg)](https://www.ruby-lang.org)
9
17
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
10
18
 
19
+ </div>
20
+
11
21
  Wurk is wire-compatible with Sidekiq — same Redis keys, same job JSON, same Ruby DSL. Swap one line in your `Gemfile` and your existing jobs, batches, limiters, cron entries, and live Redis data keep working untouched. The Pro and Enterprise feature sets ship in the same free gem, with no license check and no tiers.
12
22
 
13
23
  ## Install
data/lib/wurk/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wurk
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.5"
5
5
  end
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "0.0.4",
3
- "timestamp": "2026-06-01T13:12:27.892Z"
2
+ "version": "0.0.5",
3
+ "timestamp": "2026-06-01T13:26:00.506Z"
4
4
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wurk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - developerz.ai
@@ -88,11 +88,8 @@ executables:
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
- - CHANGELOG.md
92
- - CONTRIBUTING.md
93
91
  - LICENSE
94
92
  - README.md
95
- - SECURITY.md
96
93
  - app/controllers/wurk/api/pagination.rb
97
94
  - app/controllers/wurk/api/serializers.rb
98
95
  - app/controllers/wurk/api_controller.rb
data/CHANGELOG.md DELETED
@@ -1,67 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to Wurk are recorded here. Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versioning: [Semantic Versioning](https://semver.org/).
4
-
5
- ## [Unreleased]
6
-
7
- ### Added
8
- - `Sidekiq::Testing` drop-in: `inline!` / `fake!` / `disable!` (global or block-scoped), the in-memory `Sidekiq::Queues` store, and the `Worker`/`Job` test helpers (`.jobs`, `.clear`, `.drain`, `.perform_one`, `.process_job`, `.drain_all`, `.clear_all`) + `Sidekiq::EmptyQueueError`.
9
-
10
- ## [0.0.4] - 2026-06-01
11
-
12
- ### Added
13
- - `docs/clean-room.md` — compatibility & legal basis: Wurk reimplements the Sidekiq API (clean-room, original implementation), the *Google v. Oracle* rationale, and trademark/nominative-use notes. Linked from the README.
14
-
15
- ### Changed
16
- - Dependency refresh. GitHub Actions bumped to current majors (`checkout@v6`, `setup-node@v6`, `upload-artifact@v7`) on Node 24, clearing the Node 20 deprecation. Dashboard frontend upgraded to React 19, React Router 7, Recharts 3, Vite 8, and TypeScript 6. Ruby dev/test gems refreshed to latest.
17
-
18
- ## [0.0.3] - 2026-06-01
19
-
20
- ### Changed
21
- - Gem contact email set to `admin@developerz.ai`.
22
-
23
- ## [0.0.2] - 2026-06-01
24
-
25
- ### Changed
26
- - Releases now publish to RubyGems via GitHub Actions OIDC trusted publishing (`rubygems/release-gem`) — no long-lived API key. Pushing a `v*` tag cuts the release.
27
-
28
- ### Added
29
- - Local release helpers: `bin/gem-build`, `bin/gem-login`, `bin/gem-push` for manual/bootstrap publishing.
30
-
31
- ## [0.0.1] - 2026-06-01
32
-
33
- First public (pre-1.0) release. Wurk is a 100% API-compatible drop-in replacement for Sidekiq + Sidekiq Pro + Sidekiq Enterprise — same Redis key schema, same job JSON, same Ruby DSL — with fork-based real parallelism, the full Pro + Enterprise feature set in one free gem (no license check), and a precompiled React dashboard.
34
-
35
- ### Runtime
36
- - Fork-based Swarm: parent forks N children with PID supervision, rolling restart (SIGUSR1), graceful drain (SIGTERM/SIGINT) to `shutdown_timeout`, and global pause/resume (SIGTSTP/SIGCONT).
37
- - Reliable fetcher — atomic `BLMOVE` from the main queue to a per-process private list — with orphan reclamation on boot; Processor runs the middleware chain; Manager owns the thread pool, lifecycle, and heartbeat.
38
- - Scheduled-set and retry pollers; EVALSHA-cached Lua on the hot paths; per-fork Redis pool over redis-client; Redis-outage client buffer.
39
- - `reliable_push` opt-in `:raise` overflow policy with a background drainer.
40
- - Cluster leader election with periodic firing consolidated onto the leader.
41
- - StatsD metrics across hot paths; liveness HTTP endpoint for Kubernetes probes; expired-job counter for `expires_in`.
42
-
43
- ### Batches
44
- - Sidekiq Pro Batch API: `on(:success/:complete/:death)` callbacks, live progress, nested batches, autoflush + linger, nested death cascade, and per-callback rescue.
45
-
46
- ### Limiters
47
- - Enterprise rate limiters — concurrent, bucket, window, leaky, and points — each exposing a uniform live `#status` (`used`/`limit`/`reset_at`/`available?`); concurrent additionally reports metric counters. Includes a poison-pill brake.
48
-
49
- ### Periodic
50
- - Cron loops (sidekiq-cron compatible): schedule parsing with timezone/DST handling, leader-gated firing, pause/resume, enqueue-now, and fire history.
51
-
52
- ### Encryption
53
- - Transparent job-payload encryption with key rotation and graceful failure modes (a decryption failure degrades rather than crashing the worker).
54
-
55
- ### Dashboard
56
- - Precompiled React + TypeScript SPA mounted under the engine — consumers never run Node. Tabs: queues, retries, scheduled, dead, busy, processes, batches (+ per-batch detail), limiters, periodic, metrics, and search. SSE live updates, read-only mode, pagination, i18n with host-app override, and a dark default theme.
57
-
58
- ### Compat
59
- - `Sidekiq::*` aliases for every public `Wurk::*` class (`Sidekiq::Worker`, `Sidekiq::Batch`, `Sidekiq::Limiter`, `Sidekiq.configure_server`, …) — the drop-in contract.
60
- - ActiveJob adapter, `IterableJob`, embedded mode, and a standalone `exe/wurk` runner.
61
- - Sidekiq client/server middleware contract; third-party ecosystem suites (sidekiq-cron, sidekiq-unique-jobs, sidekiq-scheduler, sidekiq-status, sidekiq-failures, sidekiq-throttled) pass against Wurk.
62
-
63
- [Unreleased]: https://github.com/developerz-ai/wurk/compare/v0.0.4...HEAD
64
- [0.0.4]: https://github.com/developerz-ai/wurk/compare/v0.0.3...v0.0.4
65
- [0.0.3]: https://github.com/developerz-ai/wurk/compare/v0.0.2...v0.0.3
66
- [0.0.2]: https://github.com/developerz-ai/wurk/compare/v0.0.1...v0.0.2
67
- [0.0.1]: https://github.com/developerz-ai/wurk/releases/tag/v0.0.1
data/CONTRIBUTING.md DELETED
@@ -1,73 +0,0 @@
1
- # Contributing to Wurk
2
-
3
- Thanks for helping make Wurk better. This guide covers local setup, the test
4
- layers, and the conventions a change has to follow to merge.
5
-
6
- ## Setup
7
-
8
- ```sh
9
- git clone https://github.com/developerz-ai/wurk
10
- cd wurk
11
- bundle install
12
- ```
13
-
14
- You'll need a local **Redis ≥ 7.0** running (tests use real Redis, never a mock).
15
- Node is only needed if you touch the dashboard frontend (`frontend/`); the
16
- precompiled bundle is committed under `vendor/assets/`.
17
-
18
- ## Running the tests
19
-
20
- | Task | Command |
21
- |---|---|
22
- | Full suite (parallel) | `bin/rake test` |
23
- | A single file | `bin/rake test TEST=test/path/to/file_test.rb` |
24
- | A single test by name | `bin/rake test TEST=test/foo_test.rb TESTOPTS="--name=/pattern/"` |
25
- | Parity suite (oracles lifted from Sidekiq) | `bin/rake test:parity` |
26
- | Ecosystem compatibility | `bin/rake test:ecosystem` |
27
- | Coverage gate | `COVERAGE=1 bin/rake test` |
28
- | Benchmarks | `bin/rake bench` |
29
- | Lint | `bundle exec rubocop` |
30
-
31
- Test layers:
32
-
33
- - **unit** — plain Ruby classes in isolation.
34
- - **engine** — boots the dummy Rails app in `test/dummy/`.
35
- - **integration** — real forks + real Redis.
36
- - **parity** (`test/parity/`) — tests lifted from upstream Sidekiq, SHA-pinned.
37
- These are **oracles**: if Wurk diverges, Wurk is wrong unless the divergence
38
- is explicitly documented as intentional.
39
- - **ecosystem** — third-party Sidekiq gem suites run against Wurk.
40
-
41
- Never mock Redis in integration or parity tests. Each test uses a unique Redis
42
- key namespace so the parallel runner stays safe.
43
-
44
- ## Conventions
45
-
46
- These are non-negotiable — they're what keep Wurk a true drop-in:
47
-
48
- - **Wire-compat is sacred.** Never change a Redis key, JSON field, or
49
- sorted-set score format. If an optimization would break compatibility, drop
50
- the optimization.
51
- - **SOLID, especially SRP.** One reason to change per class — Manager owns
52
- lifecycle, Fetcher owns the Redis pop, Processor owns middleware + perform,
53
- Client owns enqueue.
54
- - **Match the spec.** Any public Sidekiq surface must match
55
- `docs/target/sidekiq-{free,pro,ent}.md` exactly.
56
- - **Frozen string literals everywhere**; per-fork Redis pools (never share a
57
- socket across a fork).
58
- - **Comments explain non-obvious _why_**, never restate the code.
59
- - **Coverage**: line coverage on `lib/` must stay ≥ 90% (the gate blocks PRs
60
- below it). Branch coverage is tracked and ratcheting toward 90%.
61
-
62
- ## Pull requests
63
-
64
- 1. Branch off `main`.
65
- 2. Keep the change focused; add tests at the right layer.
66
- 3. Run `bin/rake test`, `bin/rake test:parity`, `bin/rake test:ecosystem`, and `bundle exec rubocop` locally.
67
- 4. Open the PR — CI runs the matrix (Ruby 3.2/3.3/3.4 × Rails 7.2/8.0), the
68
- coverage gate, the parity job, and benchmarks. The bench bot comments
69
- per-benchmark deltas; a real regression fails the check.
70
- 5. Don't `--no-verify` past a failing hook — fix the hook.
71
-
72
- By contributing you agree your work is licensed under the project's
73
- [MIT License](LICENSE).
data/SECURITY.md DELETED
@@ -1,39 +0,0 @@
1
- # Security Policy
2
-
3
- ## Supported versions
4
-
5
- Wurk follows semantic versioning. Security fixes land on the latest minor
6
- release line.
7
-
8
- | Version | Supported |
9
- |---|---|
10
- | 1.x | ✅ |
11
- | < 1.0 | ❌ |
12
-
13
- ## Reporting a vulnerability
14
-
15
- **Please do not open a public issue for security vulnerabilities.**
16
-
17
- Report privately through GitHub's
18
- [**Report a vulnerability**](https://github.com/developerz-ai/wurk/security/advisories/new)
19
- form (Security → Advisories). This opens a private advisory only the
20
- maintainers can see.
21
-
22
- Please include:
23
-
24
- - a description of the issue and its impact,
25
- - the affected version(s),
26
- - steps to reproduce or a proof of concept,
27
- - any suggested remediation.
28
-
29
- ## What to expect
30
-
31
- - **Acknowledgement** within 3 business days.
32
- - An initial assessment and severity within 7 days.
33
- - Coordinated disclosure: we'll agree on a timeline with you, ship a patched
34
- release, and credit you in the advisory and `CHANGELOG.md` unless you prefer
35
- to remain anonymous.
36
-
37
- Because Wurk is wire-compatible with Sidekiq and runs your job code with access
38
- to Redis, reports about deserialization, the dashboard's auth surface, or
39
- argument encryption are especially welcome.