Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
6b881a2
Implement full TUI monitor with SLURM and LSF support
jayhesselberth Dec 18, 2025
ee9b5ee
feat: Add live polling, file watching, and TUI components
jayhesselberth Dec 18, 2025
243bdb9
chore: Update to ratatui 0.30.0-beta.0 and crossterm 0.29
jayhesselberth Dec 18, 2025
32c7d2b
chore: Run cargo fmt and fix clippy warnings
jayhesselberth Dec 18, 2025
402f743
refactor: Extract shared parsing utilities into charmer-parsers crate
jayhesselberth Dec 18, 2025
a88de5b
refactor: Add ToJobStatus trait and split merge.rs into submodules
jayhesselberth Dec 18, 2025
a047453
feat: Add initial metadata scan and filter to recent jobs
jayhesselberth Dec 18, 2025
ef0d051
fix: Fix TUI not updating with new jobs
jayhesselberth Dec 18, 2025
7d00f64
fix: Add periodic metadata re-scan fallback
jayhesselberth Dec 18, 2025
4b4da1d
feat: Enhance TUI with colors, progress bar, and rich details
jayhesselberth Dec 18, 2025
8b697fb
feat: Implement log viewer with toggle support
jayhesselberth Dec 18, 2025
f334a2b
fix: Make log viewer toggle with 'l', enable text selection
jayhesselberth Dec 18, 2025
4c576f5
feat: Add failure analysis for SLURM and LSF jobs
jayhesselberth Dec 18, 2025
debcc7d
feat: Change log viewer from popup to bottom panel
jayhesselberth Dec 18, 2025
a084fa5
test: Update test pipeline with longer runtime and failure simulation
jayhesselberth Dec 18, 2025
7490826
fix: Improve log file path resolution
jayhesselberth Dec 18, 2025
493c4bf
feat: Fall back to main snakemake log file
jayhesselberth Dec 18, 2025
838a091
feat: Improve TUI with responsive columns, colors, and header info
jayhesselberth Dec 18, 2025
18af9a1
feat: Add environment detection, rule summary view, error parsing, an…
jayhesselberth Dec 18, 2025
9fde1f9
feat: Move VHS tapes to docs/tapes with generate.sh script
jayhesselberth Dec 18, 2025
d285b4a
docs: Add generated demo GIFs
jayhesselberth Dec 18, 2025
2bce268
feat: Cap rule column width and display target rules
jayhesselberth Dec 18, 2025
5162593
fix: Use full path to charmer binary in VHS tapes
jayhesselberth Dec 18, 2025
abdf22d
chore: Track main_log.rs that was accidentally untracked
jayhesselberth Dec 18, 2025
3cfdb57
chore: Ignore test pipeline logs directory
jayhesselberth Dec 18, 2025
6886b80
docs: Regenerate demo GIFs with working charmer binary
jayhesselberth Dec 18, 2025
495b451
style: Apply cargo fmt formatting
jayhesselberth Dec 18, 2025
f1dc663
refactor: Use cargo install for cleaner tape commands
jayhesselberth Dec 18, 2025
cf37dff
feat: Add docs-deploy task for GitHub Pages
jayhesselberth Dec 18, 2025
6ac7971
ci: Deploy docs on develop branch too
jayhesselberth Dec 18, 2025
e4f3a5d
feat: Add command copy/expand and fix target job handling
jayhesselberth Dec 18, 2025
d50fcea
fix: Initialize job list before opening log viewer
jayhesselberth Dec 19, 2025
ce1da00
refactor: Consolidate UI with dense header and improved progress bar
jayhesselberth Dec 19, 2025
cf934eb
feat: Add Tabs widget for Jobs/Rules view selection
jayhesselberth Dec 19, 2025
cb0e8e7
feat: Add Sparkline widget for runtime trends in rule detail
jayhesselberth Dec 19, 2025
20adabc
feat: Add BarChart widget for job status visualization
jayhesselberth Dec 19, 2025
6d26839
feat: Add Canvas DAG visualization with 'd' key toggle
jayhesselberth Dec 19, 2025
0d4d39f
refactor: Consolidate UI with dense header and improved progress bar
jayhesselberth Dec 19, 2025
a622e2c
fix: Implement real DAG layout based on job dependencies
jayhesselberth Dec 19, 2025
7ee36dc
refactor: Replace Canvas DAG with ASCII box diagram
jayhesselberth Dec 19, 2025
dd213e8
fix: Add scrollbars and fix panel colors
jayhesselberth Dec 19, 2025
0106506
refactor: Integrate tabs into block titles
jayhesselberth Dec 19, 2025
505a37d
fix: Improve rule detail visualizations
jayhesselberth Dec 19, 2025
38a6a7b
feat: Replace DAG view with inline dependency indicators
jayhesselberth Dec 19, 2025
c3d903a
fix: Use vertical lines for dependency chain visualization
jayhesselberth Dec 19, 2025
0fa6e9b
fix: Use vertical chain for dependency visualization
jayhesselberth Dec 19, 2025
e08813e
feat: Tree-style dependency visualization with connectors
jayhesselberth Dec 19, 2025
28398e0
feat: UI refinements for jobs panel and details
jayhesselberth Dec 19, 2025
29d56d6
feat: Improve time display in Job Details
jayhesselberth Dec 19, 2025
2a0bd68
Merge feature/ratatui-enhancements: Advanced UI improvements
jayhesselberth Dec 19, 2025
c105898
chore: Run tape generation from repo root and update notify
jayhesselberth Dec 19, 2025
a45b98f
chore: Remove unused demo.webm
jayhesselberth Dec 19, 2025
1e08b40
style: Apply cargo fmt
jayhesselberth Dec 19, 2025
9f1e546
fix: Resolve clippy and rustdoc warnings
jayhesselberth Dec 19, 2025
7a70be5
feat: Add dedicated demo pipeline for VHS recordings
jayhesselberth Dec 19, 2025
4ad3460
fix: Use mkdocs gh-deploy for docs deployment
jayhesselberth Dec 19, 2025
2e84d7e
feat: Add cluster test pipeline for SLURM and LSF (#2)
jayhesselberth Dec 19, 2025
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
65 changes: 65 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: CI

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

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1

jobs:
check:
name: Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo check --all-targets

test:
name: Test
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo test --all-targets

fmt:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all -- --check

clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy --all-targets -- -D warnings

docs:
name: Docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: -D warnings
29 changes: 29 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Documentation

on:
push:
branches: [main, develop]
paths:
- 'docs/**'
- 'mkdocs.yml'
workflow_dispatch:

permissions:
contents: write

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

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install dependencies
run: pip install mkdocs-material mkdocstrings[python]

- name: Deploy to gh-pages
run: mkdocs gh-deploy --force
75 changes: 75 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Release

on:
push:
tags:
- 'v*'

permissions:
contents: write

jobs:
build:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
artifact: charmer-linux-x86_64
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
artifact: charmer-linux-x86_64-musl
- os: macos-latest
target: x86_64-apple-darwin
artifact: charmer-macos-x86_64
- os: macos-latest
target: aarch64-apple-darwin
artifact: charmer-macos-aarch64

steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Install musl tools
if: matrix.target == 'x86_64-unknown-linux-musl'
run: sudo apt-get install -y musl-tools

- uses: Swatinem/rust-cache@v2

- name: Build
run: cargo build --release --target ${{ matrix.target }}

- name: Package
run: |
cd target/${{ matrix.target }}/release
tar czf ../../../${{ matrix.artifact }}.tar.gz charmer
cd ../../..

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: ${{ matrix.artifact }}.tar.gz

release:
name: Create Release
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: artifacts

- name: Create release
uses: softprops/action-gh-release@v1
with:
files: artifacts/**/*.tar.gz
generate_release_notes: true
28 changes: 28 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,31 @@ Cargo.lock
.DS_Store
*.swp
*.swo

# Test pipeline outputs
tests/pipelines/*/results/
tests/pipelines/*/.snakemake/
tests/pipelines/*/dag.png

# Pixi
.pixi/
pixi.lock

# Documentation
site/

# VHS output
docs/assets/*.gif
docs/assets/*.webm
docs/assets/*.mp4

# IDE
.idea/
.vscode/
*.code-workspace

# Coverage
*.profraw
*.profdata
coverage/
lcov.info
24 changes: 15 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,21 @@ members = ["crates/*"]

[workspace.package]
version = "0.1.0"
edition = "2024"
edition = "2021"
rust-version = "1.85"
license = "MIT"
authors = ["Jay Hesselberth"]

[workspace.dependencies]
# TUI
ratatui = "0.29"
crossterm = "0.28"
ratatui = "0.30.0-beta.0"
crossterm = "0.29"

# Async
tokio = { version = "1.35", features = ["full"] }
tokio = { version = "1.43", features = ["full"] }

# File watching
notify = "6.1"
notify = "8.2"

# Serialization
serde = { version = "1.0", features = ["derive"] }
Expand All @@ -27,24 +28,29 @@ serde_json = "1.0"
chrono = { version = "0.4", features = ["serde"] }

# CLI
clap = { version = "4.4", features = ["derive"] }
clap = { version = "4.5", features = ["derive"] }

# Paths
camino = { version = "1.1", features = ["serde1"] }

# Regex for parsing
regex = "1.10"
regex = "1.11"

# Base64 for snakemake filenames
base64 = "0.22"

# Error handling
thiserror = "1.0"
miette = { version = "7.0", features = ["fancy"] }
thiserror = "2.0"
miette = { version = "7.4", features = ["fancy"] }

# Clipboard
arboard = "3"

# Internal crates
charmer-core = { path = "crates/charmer-core" }
charmer-parsers = { path = "crates/charmer-parsers" }
charmer-slurm = { path = "crates/charmer-slurm" }
charmer-lsf = { path = "crates/charmer-lsf" }
charmer-state = { path = "crates/charmer-state" }
charmer-monitor = { path = "crates/charmer-monitor" }
charmer-cli = { path = "crates/charmer-cli" }
Loading