Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
53 changes: 53 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Bug Report
description: Report something that isn't working correctly
labels: ["bug"]
body:
- type: textarea
id: description
attributes:
label: Describe the bug
description: A clear description of what's happening.
validations:
required: true

- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: Minimal steps or code to reproduce the behavior.
placeholder: |
1. Create a scheduler with `Scheduler::builder()...`
2. Submit a task with `...`
3. See error...
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
description: What you expected to happen.
validations:
required: true

- type: input
id: version
attributes:
label: Taskmill version
description: The version of taskmill in your Cargo.toml
placeholder: "0.1.1"
validations:
required: true

- type: input
id: os
attributes:
label: Operating system
placeholder: "Ubuntu 24.04 / macOS 15 / etc."

- type: textarea
id: logs
attributes:
label: Relevant logs
description: Paste any relevant log output or panic messages.
render: shell
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Feature Request
description: Suggest a new feature or improvement
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: Problem or use case
description: What are you trying to do? What problem does this solve?
validations:
required: true

- type: textarea
id: solution
attributes:
label: Proposed solution
description: How do you think this should work?
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Any other approaches you've thought about or workarounds you're using.

- type: textarea
id: context
attributes:
label: Additional context
description: Anything else — screenshots, links, related issues.
10 changes: 10 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## Summary

<!-- What does this PR do and why? -->

## Test plan

<!-- How was this tested? -->

- [ ] `cargo test --all-features` passes
- [ ] `cargo clippy --all-features -- -D warnings` is clean
36 changes: 36 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

env:
CARGO_TERM_COLOR: always

jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Build
run: cargo build --all-features

- name: Run tests
run: cargo test --all-features

- name: Check formatting
run: cargo fmt --check

- name: Run clippy
run: cargo clippy --all-features -- -D warnings
65 changes: 65 additions & 0 deletions .github/workflows/pre-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Pre-release

on:
workflow_dispatch:
inputs:
version:
description: "Pre-release version (e.g. 0.1.0-alpha.1, 0.2.0-rc.1)"
required: true
type: string

env:
CARGO_TERM_COLOR: always

jobs:
pre-release:
name: Publish pre-release
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Validate version format
run: |
if ! echo "${{ inputs.version }}" | grep -qP '^\d+\.\d+\.\d+-(alpha|beta|rc)\.\d+$'; then
echo "::error::Invalid version format '${{ inputs.version }}'. Expected: X.Y.Z-(alpha|beta|rc).N"
exit 1
fi

- name: Checkout repository
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Set version in Cargo.toml
run: sed -i 's/^version = ".*"/version = "${{ inputs.version }}"/' Cargo.toml

- name: Verify build
run: cargo build --all-features

- name: Run tests
run: cargo test --all-features

- name: Publish to crates.io
run: cargo publish --allow-dirty
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

- name: Create git tag
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "v${{ inputs.version }}" -m "Pre-release v${{ inputs.version }}"
git push origin "v${{ inputs.version }}"

- name: Create GitHub pre-release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create "v${{ inputs.version }}" \
--title "v${{ inputs.version }}" \
--generate-notes \
--prerelease
63 changes: 63 additions & 0 deletions .github/workflows/release-plz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Release-plz

on:
push:
branches:
- main

jobs:
release-plz-release:
name: Release-plz release
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Run release-plz
uses: release-plz/action@v0.5
with:
command: release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

release-plz-pr:
name: Release-plz PR
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
concurrency:
group: release-plz-${{ github.ref }}
cancel-in-progress: false
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Run release-plz
uses: release-plz/action@v0.5
with:
command: release-pr
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/target
Cargo.lock
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.1.1](https://github.com/deepjoy/shoebox/compare/taskmill-v0.1.0...taskmill-v0.1.1) - 2026-03-10

### Added

- add pagination, filtering, query optimization, and trigger-based staleness for duplicatesFunctional improvements ([#53](https://github.com/deepjoy/shoebox/pull/53))

### Fixed

- *(taskmill)* flush WAL and close database connection on shutdown ([#57](https://github.com/deepjoy/shoebox/pull/57))

## [0.1.0](https://github.com/deepjoy/shoebox/releases/tag/taskmill-v0.1.0) - 2026-03-05

### Added

- *(taskmill)* type-keyed state map with post-build injection ([#46](https://github.com/deepjoy/shoebox/pull/46))
- *(taskmill)* requeue duplicate submissions when task is running ([#45](https://github.com/deepjoy/shoebox/pull/45))
- *(taskmill)* add adaptive priority task scheduler with IO-aware concurrency ([#38](https://github.com/deepjoy/shoebox/pull/38))

### Fixed

- *(taskmill)* resolve SQLite BUSY errors with proper transaction handling ([#40](https://github.com/deepjoy/shoebox/pull/40))

### Other

- *(taskmill)* separate priority from task payload, upgrade on dedup ([#44](https://github.com/deepjoy/shoebox/pull/44))
61 changes: 61 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Contributing to Taskmill

Thanks for your interest in contributing! This document covers the basics to get you started.

## Getting Started

### Prerequisites

- [Rust](https://rustup.rs/) (stable toolchain, MSRV 1.75)
- [lefthook](https://github.com/evilmartians/lefthook) (git hooks)

### Setup

```bash
git clone https://github.com/deepjoy/taskmill.git
cd taskmill
lefthook install
cargo build
```

### Running Tests

```bash
cargo test --all-features
```

### Formatting and Linting

The project uses `cargo fmt` and `clippy`. Lefthook runs these automatically on pre-commit, but you can run them manually:

```bash
cargo fmt --check
cargo clippy --all-features -- -D warnings
```

## Making Changes

1. Fork the repository and create a branch from `main`.
2. Make your changes.
3. Add tests for new functionality.
4. Ensure `cargo test --all-features` passes.
5. Ensure `cargo clippy --all-features -- -D warnings` is clean.
6. Open a pull request against `main`.

## Commit Messages

This project uses [Conventional Commits](https://www.conventionalcommits.org/):

```
feat: add new feature
fix: correct a bug
docs: update documentation
refactor: restructure code without behavior change
chore: maintenance tasks
```

These are used by [release-plz](https://release-plz.ino.rs/) to auto-generate changelogs and determine version bumps.

## Questions?

Open an issue or start a discussion — happy to help.
29 changes: 29 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
[package]
name = "taskmill"
version = "0.1.1"
edition = "2021"
rust-version = "1.75"
license = "MIT"
description = "Adaptive priority work scheduler with IO-aware concurrency and SQLite persistence"
keywords = ["scheduler", "priority-queue", "task", "async"]
categories = ["asynchronous", "concurrency"]
repository = "https://github.com/deepjoy/taskmill"

[features]
default = ["sysinfo-monitor"]
sysinfo-monitor = ["dep:sysinfo"]

[dependencies]
tokio = { version = "1", features = ["sync", "time", "rt", "macros"] }
tokio-util = "0.7"
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite", "chrono"] }
tracing = "0.1"
thiserror = "2.0"
chrono = { version = "0.4", features = ["serde"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha2 = "0.10"
sysinfo = { version = "0.33", optional = true }

[dev-dependencies]
tokio = { version = "1", features = ["full", "test-util"] }
Loading
Loading