diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 511ef2d..9a70d40 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: - name: Compute affected traits id: compute run: | - FULL='["", "Git", "Brew", "Grep", "Fzf", "Rg", "CommonUtilities", "All"]' + FULL='["", "Git", "Brew", "Grep", "Fzf", "Rg", "Zip", "Unzip", "CommonUtilities", "All"]' CHANGED=$(git diff --name-only "origin/${{ github.base_ref }}...HEAD") echo "Changed files:" diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index c0539fd..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,41 +0,0 @@ -# Changelog - -All notable changes to SwiftyShell are documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -## [0.1.0] — 2026-04-24 - -Initial public release. - -### Added - -- `Core` execution primitives: `Command`, `Pipeline`, `ShellContext`, `ShellPlatform`, `ShellOutput`, `OutputDestination`, `ShellError`, `Workflow`. -- `CommandExecutor` protocol with two shipped implementations: `SubprocessExecutor` (default) and `MockExecutor` (for tests). -- Command-family protocol hierarchy: `ToolConfigurableCommandFamily`, `OutputRedirectingCommandFamily`, `RunnableCommandFamily`, plus shared `ToolConfiguration` carrier. -- `FileMode` value type for typed POSIX permissions with owner/group/other permission sets and special bits. -- Typed command families, each gated behind a SwiftPM package trait: - - `Git` — `git status` with `porcelain=v2` parsing, `GitStatusWorkflow` gates, `pull`, `fetch`, `branch`, `stash`, `worktree`, `diff`, `log`, `config`, `merge`, `commit`, `rebase`. - - `Brew` — full top-level Homebrew subcommand coverage including `--cask` and `--greedy`. - - `Grep` — literal and extended-regex patterns, recursive, case-insensitive, line numbers, counts, invert match. - - `Common/*` — `Ls`, `Cp`, `Mkdir`, `Chmod`, `Rm`, `Mv`, `Pwd`, `Jq`. -- Umbrella traits: `CommonUtilities` (all `Common/*` families) and `All` (every family). -- `Scripts/validate-traits.swift` — structural validator enforcing the trait wiring contract, run in CI before any build. -- Build/test matrix across empty, per-family, `CommonUtilities`, and `All` traits on macOS 15 and Linux (Swift 6.1). -- DocC catalog with articles: `GettingStarted`, `SelectingCommandFamilies`, `CoreConcepts`, `ErrorHandling`, `BuildingCommandFamilies`, `UsingAIAssistants`. -- `Example/` — standalone SwiftPM executable demonstrating SwiftyShell via a local path reference. - -### Execution semantics - -- Timeouts enforced via `DispatchSourceTimer` on a dedicated queue so the escalation fires at wall-clock time even under cooperative-pool saturation. -- Graceful termination: `SIGTERM` on timeout or task cancellation, followed by `SIGKILL` after a short grace period. -- `stdin` is always closed (`/dev/null`) for spawned processes; interactive stdin is out of scope for v1. -- UTF-8 strict decoding for captured streams; invalid bytes surface as `ShellError.decodingError`. -- Default output-capture limit of 10 MiB; exceeding the limit drains the child output and throws `ShellError.outputLimitExceeded` with partial output. -- Pipelines terminate remaining stages when any stage exits non-zero. - -[Unreleased]: https://github.com/maniramezan/SwiftyShell/compare/0.1.0...HEAD -[0.1.0]: https://github.com/maniramezan/SwiftyShell/releases/tag/0.1.0 diff --git a/README.md b/README.md index 2284a4a..a24f3ca 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,9 @@ SwiftyShell ships typed wrappers for common tools. Each family is gated behind a |---|---|---|---| | `Git` | `git` | `Git` | Structured `GitStatus`, workflow gates, concurrent fetch | | `Grep` | `grep` | `Grep` | Literal and regex patterns, recursive, case-insensitive | +| `Rg` | `rg` | `Rg` | Comprehensive ripgrep support, context, globs, JSON output | | `Brew` | `brew` | `Brew` | Full top-level subcommand coverage, plus `--cask` and `--greedy` | +| `Fzf` | `fzf` | `Fzf` | Fuzzy finder options for interactive and filter-mode pipelines | | `Ls` | `ls` | `Ls` | All flags, recursive, human-readable sizes | | `Cp` | `cp` | `Cp` | Recursive, force | | `Mkdir` | `mkdir` | `Mkdir` | Parent directories, permissions | @@ -101,6 +103,8 @@ SwiftyShell ships typed wrappers for common tools. Each family is gated behind a | `Mv` | `mv` | `Mv` | Force | | `Pwd` | `pwd` | `Pwd` | Physical and logical paths | | `Jq` | `jq` | `Jq` | Filter expressions, `--arg` bindings, raw output | +| `Zip` | `zip` | `Zip` | Info-ZIP archive creation, compression, recursion, exclusions | +| `Unzip` | `unzip` | `Unzip` | Info-ZIP archive extraction and structured entry listing | When the tool you need isn't listed, `Command("tool", arguments: "arg").run(in: context)` is the fluent escape hatch. If you use the same tool repeatedly, promoting it to a typed family is straightforward — see below. @@ -176,10 +180,6 @@ make linux-ci-amd64 For macOS validation from Linux, rely on GitHub Actions' macOS runners; Docker-based local macOS execution is not a practical option on Linux hosts. -## Changelog - -Release notes live in [CHANGELOG.md](CHANGELOG.md). - ## License SwiftyShell is available under the MIT license. See [LICENSE](LICENSE) for details.