12 Commits
Author SHA1 Message Date
semantic-release-bot c830d2b949 chore(release): 0.2.3 [skip ci]
## [0.2.3](https://github.com/asepharyana/corex/compare/v0.2.2...v0.2.3) (2026-08-28)

### Bug Fixes

* **release:** hardcode repo in successCmd gh api ([d3c35ec](https://github.com/asepharyana/corex/commit/d3c35eccd0e3e1da21bcfed50ce2ba1f82d03cc5))
2026-08-28 10:17:43 +00:00
asepharyana d3c35eccd0 fix(release): hardcode repo in successCmd gh api
GITHUB_REPOSITORY is not in semantic-release template context, causing
ReferenceError in successCmd. Use the static repo path asepharyana/corex.
2026-08-28 17:17:17 +07:00
semantic-release-bot e7a932f716 chore(release): 0.2.2 [skip ci]
## [0.2.2](https://github.com/asepharyana/corex/compare/v0.2.1...v0.2.2) (2026-08-28)

### Bug Fixes

* **release:** dispatch publish via gh api in exec successCmd ([3c04aa4](https://github.com/asepharyana/corex/commit/3c04aa44b6110c8ce15278d7dc76828c44dfc8d9))
2026-08-28 10:15:48 +00:00
asepharyana 3c04aa44b6 fix(release): dispatch publish via gh api in exec successCmd
gh workflow run failed inside successCmd (exit 1, no output shown).
Switch to gh api REST dispatch which is transparent and reliable.
successCmd only runs after semantic-release actually publishes a new
version, so this fires once per release, exactly on the new tag.
Remove the separate Detect step (it depended on git state that is not
updated by semantic-release).
2026-08-28 17:15:12 +07:00
semantic-release-bot 5a2bb634a1 chore(release): 0.2.1 [skip ci]
## [0.2.1](https://github.com/asepharyana/corex/compare/v0.2.0...v0.2.1) (2026-08-28)

### Bug Fixes

* **release:** dispatch publish via exec successCmd not step output ([6c8c98e](https://github.com/asepharyana/corex/commit/6c8c98e86cf27b6a998124e3de3b226a78c82f66))
2026-08-28 10:10:44 +00:00
asepharyana 6c8c98e86c fix(release): dispatch publish via exec successCmd not step output
CI / Rustfmt (push) Canceled after 0s
CI / Clippy (push) Canceled after 0s
CI / Test (default features) (push) Canceled after 0s
CI / Test (all features) (push) Canceled after 0s
CI / Test (bg only) (push) Canceled after 0s
CI / Test (compute only) (push) Canceled after 0s
CI / Test (io only) (push) Canceled after 0s
CI / Run example (push) Canceled after 0s
CI / Docs check (push) Canceled after 0s
CI / Cargo package dry-run (push) Canceled after 0s
Release / Semantic Release (push) Canceled after 0s
The prior pattern relying on steps.semantic-release.outputs did not
fire. Move the publish dispatch into @semantic-release/exec successCmd,
which runs only after a release is actually published and has
nextRelease.version available. Also add GH_TOKEN env for gh CLI
(GITHUB_TOKEN alone is not read by gh).
2026-08-28 17:10:16 +07:00
semantic-release-bot c995b2b937 chore(release): 0.2.0 [skip ci]
# [0.2.0](https://github.com/asepharyana/corex/compare/v0.1.0...v0.2.0) (2026-08-28)

### Bug Fixes

* **release:** remove --locked from cargo check in release prepare ([90322b5](https://github.com/asepharyana/corex/commit/90322b5f970aaf48b6da0adaf89c2f516aec0e4c))

### Features

* **release:** add semantic-release auto versioning ([12a1ab1](https://github.com/asepharyana/corex/commit/12a1ab10d04dec40f8b93edb51bb6104f6a75bcb))
2026-08-28 10:07:22 +00:00
asepharyana 90322b5f97 fix(release): remove --locked from cargo check in release prepare
cargo check --locked fails after bumping version in Cargo.toml because
Cargo.lock needs to be regenerated with the new root package version.
Semantic-release bump then committed Cargo.toml+CHANGELOG but lockfile
stayed stale, so the whole prepare step errored out.
2026-08-28 17:06:51 +07:00
asepharyana 8a3869773c chore(release): add workflow_dispatch trigger for manual release test 2026-08-28 17:05:28 +07:00
asepharyana 12a1ab10d0 feat(release): add semantic-release auto versioning
- Add .releaserc.json: conventional commits -> semantic version bump
  (major/minor/patch), updates Cargo.toml + Cargo.lock version, writes
  CHANGELOG.md, commits as 'chore(release): X.Y.Z [skip ci]'
- Add release.yml: runs semantic-release on main push, then triggers
  publish.yml via workflow_dispatch with the new tag
- Update publish.yml: add workflow_dispatch input (tag) so release
  workflow can trigger publish directly (GITHUB_TOKEN tag pushes do not
  trigger 'on: push: tags'); still supports manual tag pushes
2026-08-28 17:03:12 +07:00
asepharyana b344828d73 Fix ambiguous intra-doc links for compute function/module
CI / Rustfmt (push) Canceled after 0s
CI / Clippy (push) Canceled after 0s
CI / Test (default features) (push) Canceled after 0s
CI / Test (all features) (push) Canceled after 0s
CI / Test (bg only) (push) Canceled after 0s
CI / Test (compute only) (push) Canceled after 0s
CI / Test (io only) (push) Canceled after 0s
CI / Run example (push) Canceled after 0s
CI / Docs check (push) Canceled after 0s
CI / Cargo package dry-run (push) Canceled after 0s
Publish to crates.io / Publish (push) Canceled after 0s
2026-08-28 16:46:50 +07:00
asepharyana d8354d6cec Rename crate to mytheclipse and flatten workspace to single crate
- Rename corex -> mytheclipse (corex name taken on crates.io by an
  unrelated crate published by David-Kunz in 2023)
- Flatten corex + corex-core workspace into a single crate; all modules
  (context/error/io/compute/bg) now live directly under src/
- Update Cargo.toml metadata: real repo URL, docs.rs, author
- Update README, example, doc comments, tracing span names
- Fix CI: single package dry-run (corex-core no longer separate)
- Fix publish workflow: single cargo publish step
2026-08-28 16:44:28 +07:00
19 changed files with 619 additions and 168 deletions

No files matched your search

+7 -9
View File
@@ -29,9 +29,9 @@ jobs:
with:
components: clippy
- name: Clippy (all features)
run: cargo clippy --workspace --all-features -- -D warnings
run: cargo clippy --all-features -- -D warnings
- name: Clippy (no default features)
run: cargo clippy --workspace --no-default-features -- -D warnings
run: cargo clippy --no-default-features -- -D warnings
test-matrix:
name: Test (${{ matrix.name }})
@@ -54,9 +54,9 @@ jobs:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Build
run: cargo build --workspace ${{ matrix.flags }}
run: cargo build --all-targets ${{ matrix.flags }}
- name: Test
run: cargo test --workspace ${{ matrix.flags }}
run: cargo test ${{ matrix.flags }}
example:
name: Run example
@@ -72,7 +72,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: RUSTDOCFLAGS="-D warnings" cargo doc --workspace --all-features --no-deps
- run: RUSTDOCFLAGS="-D warnings" cargo doc --all-features --no-deps
package:
name: Cargo package dry-run
@@ -80,7 +80,5 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Package corex-core
run: cargo package -p corex-core --no-verify
- name: Package corex
run: cargo package -p corex --no-verify
- name: Package
run: cargo package --no-verify
+17 -9
View File
@@ -3,6 +3,15 @@ name: Publish to crates.io
on:
push:
tags: ["v*.*.*"]
workflow_dispatch:
inputs:
tag:
description: "Git tag to publish (e.g. v0.2.0). Defaults to latest tag."
required: false
type: string
permissions:
contents: read
jobs:
publish:
@@ -10,14 +19,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.tag || github.event.ref || github.ref }}
fetch-depth: 0
- uses: dtolnay/rust-toolchain@stable
- name: Publish corex-core
run: cargo publish -p corex-core --allow-dirty --no-verify
- name: Publish mytheclipse
run: cargo publish --allow-dirty --no-verify
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
- name: Wait for crates.io indexing
run: sleep 30
- name: Publish corex
run: cargo publish -p corex --allow-dirty --no-verify
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
+45
View File
@@ -0,0 +1,45 @@
name: Release
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: write
issues: write
pull-requests: write
jobs:
release:
name: Semantic Release
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "lts/*"
- name: Install semantic-release
run: |
npm install -D \
semantic-release \
@semantic-release/exec \
@semantic-release/git \
@semantic-release/changelog \
@semantic-release/github
- name: Run semantic-release
id: semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx semantic-release
+1 -7
View File
@@ -1,15 +1,9 @@
# Cargo build artifacts
/target
/crates/*/target
# corex is a library workspace: the lockfile is not committed, per Rust's
# convention for libraries (binaries/applications should commit theirs).
# Cargo regenerates it locally and in CI on every build.
Cargo.lock
# Editor / OS noise
.DS_Store
Thumbs.db
*.swp
.idea/
.vscode/
.vscode/
+34
View File
@@ -0,0 +1,34 @@
{
"branches": [
"main"
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
[
"@semantic-release/exec",
{
"prepareCmd": "sed -i 's/^version = \\\"[^\\\"]*\\\"/version = \\\"${nextRelease.version}\\\"/' Cargo.toml && cargo check",
"successCmd": "gh api -X POST repos/asepharyana/corex/actions/workflows/publish.yml/dispatches -f ref=main -f 'inputs[tag]=v${nextRelease.version}'"
}
],
[
"@semantic-release/git",
{
"assets": [
"Cargo.toml",
"Cargo.lock",
"CHANGELOG.md"
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
],
[
"@semantic-release/github",
{
"assets": []
}
]
]
}
+32
View File
@@ -0,0 +1,32 @@
## [0.2.3](https://github.com/asepharyana/corex/compare/v0.2.2...v0.2.3) (2026-08-28)
### Bug Fixes
* **release:** hardcode repo in successCmd gh api ([d3c35ec](https://github.com/asepharyana/corex/commit/d3c35eccd0e3e1da21bcfed50ce2ba1f82d03cc5))
## [0.2.2](https://github.com/asepharyana/corex/compare/v0.2.1...v0.2.2) (2026-08-28)
### Bug Fixes
* **release:** dispatch publish via gh api in exec successCmd ([3c04aa4](https://github.com/asepharyana/corex/commit/3c04aa44b6110c8ce15278d7dc76828c44dfc8d9))
## [0.2.1](https://github.com/asepharyana/corex/compare/v0.2.0...v0.2.1) (2026-08-28)
### Bug Fixes
* **release:** dispatch publish via exec successCmd not step output ([6c8c98e](https://github.com/asepharyana/corex/commit/6c8c98e86cf27b6a998124e3de3b226a78c82f66))
# [0.2.0](https://github.com/asepharyana/corex/compare/v0.1.0...v0.2.0) (2026-08-28)
### Bug Fixes
* **release:** remove --locked from cargo check in release prepare ([90322b5](https://github.com/asepharyana/corex/commit/90322b5f970aaf48b6da0adaf89c2f516aec0e4c))
### Features
* **release:** add semantic-release auto versioning ([12a1ab1](https://github.com/asepharyana/corex/commit/12a1ab10d04dec40f8b93edb51bb6104f6a75bcb))
Generated
+408
View File
@@ -0,0 +1,408 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "bitflags"
version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
[[package]]
name = "bytes"
version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "crossbeam-deque"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb"
dependencies = [
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17"
[[package]]
name = "either"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d"
[[package]]
name = "errno"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys",
]
[[package]]
name = "hermit-abi"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
[[package]]
name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
version = "0.2.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
[[package]]
name = "lock_api"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
dependencies = [
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]]
name = "mio"
version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427"
dependencies = [
"libc",
"wasi",
"windows-sys",
]
[[package]]
name = "mytheclipse"
version = "0.2.3"
dependencies = [
"num_cpus",
"rayon",
"tokio",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "nu-ansi-term"
version = "0.50.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
dependencies = [
"windows-sys",
]
[[package]]
name = "num_cpus"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
dependencies = [
"hermit-abi",
"libc",
]
[[package]]
name = "once_cell"
version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "parking_lot"
version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.9.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
"windows-link",
]
[[package]]
name = "pin-project-lite"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
[[package]]
name = "proc-macro2"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rayon"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
dependencies = [
"either",
"rayon-core",
]
[[package]]
name = "rayon-core"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
]
[[package]]
name = "redox_syscall"
version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
"bitflags",
]
[[package]]
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sharded-slab"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
dependencies = [
"lazy_static",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
dependencies = [
"errno",
"libc",
]
[[package]]
name = "smallvec"
version = "1.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
[[package]]
name = "socket2"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
dependencies = [
"libc",
"windows-sys",
]
[[package]]
name = "syn"
version = "2.0.119"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "thread_local"
version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070"
dependencies = [
"cfg-if",
]
[[package]]
name = "tokio"
version = "1.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
dependencies = [
"bytes",
"libc",
"mio",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
"socket2",
"tokio-macros",
"windows-sys",
]
[[package]]
name = "tokio-macros"
version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
dependencies = [
"proc-macro2",
"quote",
"syn 3.0.3",
]
[[package]]
name = "tracing"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
dependencies = [
"pin-project-lite",
"tracing-attributes",
"tracing-core",
]
[[package]]
name = "tracing-attributes"
version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.119",
]
[[package]]
name = "tracing-core"
version = "0.1.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
dependencies = [
"once_cell",
"valuable",
]
[[package]]
name = "tracing-log"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
dependencies = [
"log",
"once_cell",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
dependencies = [
"nu-ansi-term",
"sharded-slab",
"smallvec",
"thread_local",
"tracing-core",
"tracing-log",
]
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "valuable"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
[[package]]
name = "wasi"
version = "0.11.1+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
+20 -42
View File
@@ -1,57 +1,35 @@
[workspace]
resolver = "2"
members = ["crates/corex-core"]
[workspace.package]
version = "0.1.0"
[package]
name = "mytheclipse"
version = "0.2.3"
edition = "2021"
rust-version = "1.75"
license = "MIT OR Apache-2.0"
repository = "https://github.com/username/corex"
homepage = "https://github.com/username/corex"
documentation = "https://docs.rs/corex"
authors = ["The corex Authors"]
[workspace.dependencies]
tokio = { version = "1.53", features = ["full"] }
rayon = "1.12"
num_cpus = "1.17"
tracing = "0.1"
corex-core = { path = "crates/corex-core", version = "0.1.0", default-features = false }
[package]
name = "corex"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
authors.workspace = true
repository = "https://github.com/asepharyana/corex"
homepage = "https://github.com/asepharyana/corex"
documentation = "https://docs.rs/mytheclipse"
authors = ["asepharyana <superaseph@gmail.com>"]
description = "Resource-aware abstractions for async I/O, heavy compute, and background queue management."
readme = "README.md"
keywords = ["async", "concurrency", "rayon", "tokio", "resource-management"]
categories = ["asynchronous", "concurrency", "rust-patterns"]
[lib]
name = "corex"
path = "src/lib.rs"
[dependencies]
tokio = { version = "1.53", features = ["full"], optional = true }
rayon = { version = "1.12", optional = true }
num_cpus = "1.17"
tracing = "0.1"
[dev-dependencies]
tokio = { version = "1.53", features = ["full"] }
tracing-subscriber = "0.3"
[features]
default = []
io = ["corex-core/io"]
compute = ["corex-core/compute"]
bg = ["corex-core/bg"]
io = ["dep:tokio"]
compute = ["dep:rayon"]
bg = ["dep:tokio"]
full = ["io", "compute", "bg"]
[dependencies]
corex-core = { workspace = true }
[dev-dependencies]
tokio = { workspace = true }
tracing-subscriber = "0.3"
[[example]]
name = "main"
path = "examples/main.rs"
@@ -59,4 +37,4 @@ required-features = ["full"]
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
rustdoc-args = ["--cfg", "docsrs"]
+12 -12
View File
@@ -1,7 +1,7 @@
# corex
# mytheclipse
[![Crates.io](https://img.shields.io/crates/v/corex.svg)](https://crates.io/crates/corex)
[![Documentation](https://docs.rs/corex/badge.svg)](https://docs.rs/corex)
[![Crates.io](https://img.shields.io/crates/v/mytheclipse.svg)](https://crates.io/crates/mytheclipse)
[![Documentation](https://docs.rs/mytheclipse/badge.svg)](https://docs.rs/mytheclipse)
[![License](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](LICENSE-MIT)
Resource-aware execution primitives for Rust: async I/O, heavy compute, and background queue management, sized automatically from the host's logical core count and exposed through a single, lazily-initialized engine context.
@@ -18,9 +18,9 @@ Given $N$ logical cores (via `num_cpus::get()`):
## Features
- **`io`**: enables `corex::spawn_io`, instrumented async task spawning.
- **`compute`**: enables `corex::compute`, panic-isolated execution on a sized Rayon pool.
- **`bg`**: enables `corex::spawn_bg`, semaphore-bounded background tasks.
- **`io`**: enables `mytheclipse::spawn_io`, instrumented async task spawning.
- **`compute`**: enables `mytheclipse::compute`, panic-isolated execution on a sized Rayon pool.
- **`bg`**: enables `mytheclipse::spawn_bg`, semaphore-bounded background tasks.
- **`full`**: enables all three subsystems.
Zero features enabled by default (`default = []`), so you only pull in the dependencies your application actually uses.
@@ -31,7 +31,7 @@ Add to your `Cargo.toml`:
```toml
[dependencies]
corex = { version = "0.1", features = ["full"] }
mytheclipse = { version = "0.1", features = ["full"] }
```
Use the entry points directly:
@@ -41,23 +41,23 @@ Use the entry points directly:
async fn main() {
// Optional explicit bootstrap: logs or validates resource sizing upfront.
// Omit it and the first call to any primitive below will initialize it lazily.
let ctx = corex::init();
let ctx = mytheclipse::init();
println!(
"io_threads={} compute_threads={} bg_concurrency={}",
ctx.io_threads, ctx.compute_threads, ctx.bg_concurrency
);
// 1. Async I/O (instrumented with tracing)
let io = corex::spawn_io(async {
let io = mytheclipse::spawn_io(async {
// ... network / disk work ...
42
});
// 2. Heavy Compute (isolated from worker panics)
let sum = corex::compute(|| (1..=1_000_000u64).sum::<u64>())?;
let sum = mytheclipse::compute(|| (1..=1_000_000u64).sum::<u64>())?;
// 3. Background Queue (concurrency-bounded)
let bg = corex::spawn_bg(async {
let bg = mytheclipse::spawn_bg(async {
// ... deferred cleanup / telemetry ...
}).await;
@@ -78,4 +78,4 @@ Licensed under either of:
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or <http://www.apache.org/licenses/LICENSE-2.0>)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or <http://opensource.org/licenses/MIT>)
at your option.
at your option.
-31
View File
@@ -1,31 +0,0 @@
[package]
name = "corex-core"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
authors.workspace = true
description = "Core allocation logic and execution primitives for corex."
readme = "README.md"
keywords = ["async", "concurrency", "rayon", "tokio", "resource-management"]
categories = ["asynchronous", "concurrency", "rust-patterns"]
[features]
default = []
io = ["dep:tokio"]
compute = ["dep:rayon"]
bg = ["dep:tokio"]
full = ["io", "compute", "bg"]
[dependencies]
tokio = { workspace = true, optional = true }
rayon = { workspace = true, optional = true }
num_cpus = { workspace = true }
tracing = { workspace = true }
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
-9
View File
@@ -1,9 +0,0 @@
# corex-core
Core allocation logic, global context initialization, and execution primitives for [`corex`](https://crates.io/crates/corex).
Applications should depend on the `corex` facade crate rather than this crate directly.
## License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
-19
View File
@@ -1,19 +0,0 @@
//! Core allocation logic, global context initialization, and execution
//! primitives for [corex](https://docs.rs/corex).
//!
//! This crate is not typically consumed directly; applications should
//! depend on the `corex` facade crate instead, which re-exports the pieces
//! of this crate behind feature flags.
pub mod context;
#[cfg(feature = "compute")]
pub mod error;
#[cfg(feature = "io")]
pub mod io;
#[cfg(feature = "compute")]
pub mod compute;
#[cfg(feature = "bg")]
pub mod bg;
+7 -7
View File
@@ -1,30 +1,30 @@
//! Demonstrates `corex`'s three execution primitives end to end, including
//! Demonstrates `mytheclipse`'s three execution primitives end to end, including
//! automatic recovery from a panicking compute closure.
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
let ctx = corex::init();
let ctx = mytheclipse::init();
println!(
"engine context: io_threads={} compute_threads={} bg_concurrency={}",
ctx.io_threads, ctx.compute_threads, ctx.bg_concurrency
);
let io_handle = corex::spawn_io(async {
let io_handle = mytheclipse::spawn_io(async {
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
42u64
});
let sum_result = corex::compute(|| (1..=1_000u64).sum::<u64>());
let sum_result = mytheclipse::compute(|| (1..=1_000u64).sum::<u64>());
let panic_result: Result<u64, corex::CorexError> = corex::compute(|| {
let panic_result: Result<u64, mytheclipse::CorexError> = mytheclipse::compute(|| {
panic!("intentional panic to demonstrate isolation");
});
let recovery_result = corex::compute(|| 2u64 + 2u64);
let recovery_result = mytheclipse::compute(|| 2u64 + 2u64);
let bg_handle = corex::spawn_bg(async {
let bg_handle = mytheclipse::spawn_bg(async {
tokio::time::sleep(std::time::Duration::from_millis(10)).await;
"bg-task-done"
})
+2 -2
View File
@@ -30,8 +30,8 @@ where
.bg_semaphore
.acquire()
.await
.expect("corex: bg semaphore closed unexpectedly");
let span = tracing::info_span!("corex_bg_task");
.expect("mytheclipse: bg semaphore closed unexpectedly");
let span = tracing::info_span!("mytheclipse_bg_task");
tokio::spawn(
async move {
let _permit = permit;
File renamed without changes.
@@ -10,7 +10,7 @@ static CONTEXT: OnceLock<EngineContext> = OnceLock::new();
/// The global, lazily-initialized engine context.
///
/// Holds the computed thread and concurrency counts for each corex
/// Holds the computed thread and concurrency counts for each mytheclipse
/// subsystem, along with the resource pools those counts were used to
/// build. The context lives for the lifetime of the process once
/// initialized: it is stored in a `'static` [`OnceLock`] and is never
@@ -46,9 +46,9 @@ impl EngineContext {
#[cfg(feature = "compute")]
let compute_pool = rayon::ThreadPoolBuilder::new()
.num_threads(compute_threads)
.thread_name(|index| format!("corex-compute-{index}"))
.thread_name(|index| format!("mytheclipse-compute-{index}"))
.build()
.expect("corex: failed to build rayon compute thread pool");
.expect("mytheclipse: failed to build rayon compute thread pool");
#[cfg(feature = "bg")]
let bg_semaphore = tokio::sync::Semaphore::new(bg_concurrency);
@@ -1,6 +1,6 @@
//! Shared error type for corex execution primitives.
//! Shared error type for mytheclipse execution primitives.
/// Errors surfaced by corex's panic-isolated execution primitives.
/// Errors surfaced by mytheclipse's panic-isolated execution primitives.
///
/// Marked `#[non_exhaustive]` so new variants can be added without a
/// breaking change; downstream `match` expressions should include a
+3 -3
View File
@@ -3,11 +3,11 @@
use tracing::Instrument;
/// Spawns `future` onto the ambient Tokio runtime, wrapped in a
/// `corex_io_task` tracing span.
/// `mytheclipse_io_task` tracing span.
///
/// # Panics
///
/// Panics if called outside the context of a running Tokio runtime; corex
/// Panics if called outside the context of a running Tokio runtime; mytheclipse
/// does not construct or own a runtime of its own, it schedules onto
/// whichever runtime the caller is already inside.
pub fn spawn_io<F>(future: F) -> tokio::task::JoinHandle<F::Output>
@@ -15,7 +15,7 @@ where
F: std::future::Future + Send + 'static,
F::Output: Send + 'static,
{
let span = tracing::info_span!("corex_io_task");
let span = tracing::info_span!("mytheclipse_io_task");
tokio::spawn(future.instrument(span))
}
+26 -13
View File
@@ -1,4 +1,4 @@
//! # corex
//! # mytheclipse
//!
//! Resource-aware abstractions for async I/O, heavy compute, and
//! background queue management, built on a single lazily-initialized
@@ -9,31 +9,44 @@
//! feature-gated entry points your workload needs:
//!
//! - [`spawn_io`] (feature `io`) — spawn an async I/O task, tracing-instrumented.
//! - [`compute`] (feature `compute`) — run CPU-bound work on a sized Rayon pool, panic-isolated.
//! - [`compute()`] (feature `compute`) — run CPU-bound work on a sized Rayon pool, panic-isolated.
//! - [`spawn_bg`] (feature `bg`) — spawn a background task under bounded concurrency.
//!
//! Enable the `full` feature to pull in all three at once.
pub use corex_core::context::{context, EngineContext};
pub mod context;
#[cfg(feature = "compute")]
pub use corex_core::error::CorexError;
pub mod error;
#[cfg(feature = "io")]
pub use corex_core::io::spawn_io;
pub mod io;
#[cfg(feature = "compute")]
pub use corex_core::compute::compute;
pub mod compute;
#[cfg(feature = "bg")]
pub use corex_core::bg::spawn_bg;
pub mod bg;
/// Bootstraps the global corex [`EngineContext`].
pub use context::{context, EngineContext};
#[cfg(feature = "compute")]
pub use error::CorexError;
#[cfg(feature = "io")]
pub use io::spawn_io;
#[cfg(feature = "compute")]
pub use compute::compute;
#[cfg(feature = "bg")]
pub use bg::spawn_bg;
/// Bootstraps the global [`EngineContext`].
///
/// See [`corex_core::context::init`] for full semantics: this is safe to
/// call any number of times, from any thread, and is equivalent to letting
/// the first call to [`spawn_io`], [`compute`], or [`spawn_bg`] trigger
/// See [`context::init`] for full semantics: this is safe to call any
/// number of times, from any thread, and is equivalent to letting the
/// first call to [`spawn_io`], [`compute()`], or [`spawn_bg`] trigger
/// initialization implicitly.
pub fn init() -> &'static EngineContext {
corex_core::context::init()
context::init()
}