Skip to content

Modernize fishmarks for Fish plugin managers with tests and CI#24

Merged
techwizrd merged 16 commits intomasterfrom
fish-modernization
Mar 5, 2026
Merged

Modernize fishmarks for Fish plugin managers with tests and CI#24
techwizrd merged 16 commits intomasterfrom
fish-modernization

Conversation

@techwizrd
Copy link
Copy Markdown
Owner

  • Modernize fishmarks into a Fish plugin-manager-friendly layout (functions/, conf.d/, completions/) while preserving compatibility via a legacy marks.fish loader.
  • Refactor bookmark logic to fish-native parsing/writing (no eval-style pipeline sourcing), improve safety, and keep bashmarks-compatible ~/.sdirs format.
  • Add robust quality and release automation: local hooks (prek/pre-commit), CI, multi-version Fish test matrix, release workflow, and Dependabot updates.
  • Add project governance and contribution scaffolding (CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, PR/issue templates, changelog policy).
  • Improve developer UX and reliability with a version command (fishmarks_version), stricter path validation (reject newline/CR paths), and expanded regression tests.

Key Changes

  • Core plugin structure
    • Added autoloaded functions in functions/*.fish
    • Added startup integration in conf.d/fishmarks.fish
    • Added command completions in completions/*.fish
    • Kept marks.fish as a compatibility loader for existing manual installs
  • Behavior + compatibility
    • Preserved shared bookmark storage format (export DIR_<name>="..." in ~/.sdirs)
    • Hardened escaping/unescaping for shell-sensitive path characters (", $, `, \)
    • Tightened decode behavior and installer source-path quoting
    • Added fishmarks_version
  • Quality + automation
    • Added tests/run.fish behavioral test suite
    • Added tests/check.fish syntax/format checks
    • Added .pre-commit-config.yaml for local enforcement
    • Added GitHub CI (.github/workflows/ci.yml) with Fish version matrix
    • Added release workflow (.github/workflows/release.yml)
    • Added Dependabot config (.github/dependabot.yml)
    • Added Makefile shortcuts (make check, make test)
  • Docs and contributor experience
    • Updated README with badges, Fisher install instructions, plugin layout note, and modernized setup/testing guidance
    • Added/updated CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, CHANGELOG.md
    • Added PR/issue templates

Validation

  • fish tests/check.fish
  • fish tests/run.fish
    Result: all tests pass (33 assertions).

Compatibility Notes

  • Existing users sourcing marks.fish remain supported.
  • Plugin-manager installs (e.g., Fisher) are now first-class.
  • Existing bashmarks-compatible ~/.sdirs data remains supported.

techwizrd added 13 commits March 4, 2026 18:15
Refactor fishmarks to use fish-native parsing with safer bookmark handling, and package it with conf.d/functions/completions for Fisher compatibility while keeping legacy marks.fish loading. Add an automated Fish test suite and update install/docs to match modern Fish workflows.
Introduce a shared fish check runner, pre-commit/prek hooks, and a GitHub Actions workflow so local and remote validation stay aligned. Include an installer smoke test and document the development workflow in the README.
Document local contribution workflow, community conduct expectations, and a private vulnerability reporting process so contributors have clear standards and maintainers have a safer intake path.
Provide structured bug report, feature request, and pull request templates to improve triage quality and keep validation expectations consistent across contributions.
Introduce a Keep-a-Changelog file and document Semantic Versioning expectations in contributor and user docs so release impact is explicit and traceable.
Publish GitHub Releases automatically for version tags and attach a source tarball so users can install from a stable release artifact.
Execute checks and tests in a matrix of official fish container images to catch regressions across supported shell versions while preserving the installer smoke test.
Automatically track GitHub Actions dependency updates so workflow security patches and improvements are proposed regularly.
Define branch protection defaults in a GitHub Settings policy file and document how to apply the same rules manually when the Settings app is unavailable.
Escape and unescape shell-sensitive path characters when writing and reading ~/.sdirs so fishmarks remains interoperable with bashmarks for complex directory names. Add regression tests for special-character round-tripping and stored export line encoding.
Fix installer source-path quoting and harden decode behavior for safer /home/kunal handling, then strengthen escape regression assertions to avoid implementation-coupled expectations. Clean README quality issues, defer contribution details to CONTRIBUTING.md, and remove the unused GitHub Settings app policy file.
Use a 2013-present copyright range in the loader header and README license section to reflect continued maintenance.
Introduce a fishmarks_version command and document the plugin-first layout while keeping marks.fish compatibility loading. Reject unsupported newline/carriage-return paths in save_bookmark, add regression coverage, and add make-based check/test shortcuts for contributors.
@techwizrd techwizrd self-assigned this Mar 5, 2026
Replace container-based fish execution with GitHub runner best-practice setup using fish-actions/install-fish, run checks on ubuntu and macOS, and add a fisher installation smoke test to verify plugin-manager compatibility.
@techwizrd techwizrd force-pushed the fish-modernization branch from a62b76f to 216bff6 Compare March 5, 2026 04:49
Point the CI badge at the active branch status and replace unstable release/license badges with reliable semver and Apache 2.0 badges.
Point the README CI badge back to master so it reflects default-branch workflow health instead of the feature branch.
@techwizrd techwizrd merged commit 0040d09 into master Mar 5, 2026
6 checks passed
@techwizrd techwizrd deleted the fish-modernization branch March 13, 2026 01:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant