306 lines
10 KiB
Markdown
306 lines
10 KiB
Markdown
# 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.1.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
A `### Breaking` section is used in addition to Keep a Changelog's standard sections to explicitly document changes that are backwards-incompatible but would otherwise appear under `### Changed`. Entries under `### Breaking` trigger a major version bump in the automated release tooling.
|
|
|
|
## [Unreleased]
|
|
|
|
### Breaking
|
|
|
|
### Added
|
|
|
|
### Changed
|
|
|
|
- CI security scanning now uses GitHub Marketplace actions (`securego/gosec` and `golang/govulncheck-action`) instead of manual tool installation, improving reliability and caching.
|
|
- CI setup compatibility fix: gosec scanner now references the correct public action source (`securego/gosec`), resolving action clone failures in Gitea runners.
|
|
- CI security scanner compatibility: gosec and govulncheck action steps now set `GOTOOLCHAIN=auto` so repositories requiring newer Go versions are analyzed successfully.
|
|
- Code formatting validation added to CI pipelines: pushes and pull requests with code not matching `go fmt ./...` output will be rejected.
|
|
- Applied `go fmt` normalization to core tests (`list_test.go` and `track_test.go`) to satisfy the new formatting gate.
|
|
- Dependencies updated to resolve security vulnerabilities: `cloudflare/circl` to v1.6.3, `go-git/v5` to v5.17.0, `golang.org/x/crypto` to v0.49.0, and `golang.org/x/net` to v0.52.0.
|
|
- CI workflows now include explicit caching for Go modules and build artifacts to reduce pipeline execution time.
|
|
- Security hardening: file and directory creation now uses restrictive permissions (`0o750` for directories, `0o600` for files) instead of world-accessible defaults. Executable wrapper scripts are created with restricted permissions and then explicitly made executable via `chmod`.
|
|
- Security: `Open()` now executes the editor directly without shell intermediary to prevent injection through the `$EDITOR` environment variable.
|
|
|
|
- CI validation now runs `gosec` and `govulncheck` security scanning on push and pull request workflows.
|
|
- `cmd/homesick` now includes entrypoint-focused tests that exercise both the CLI run path and `main` process path.
|
|
- `rc` command: executes all executable scripts inside a castle's `.homesick.d/` directory in sorted order, with the castle root as the working directory. stdout/stderr from each script is forwarded to the caller.
|
|
- `rc` command: when a `.homesickrc` file exists and no `parity.rb` wrapper is present in `.homesick.d/`, a Ruby wrapper script (`parity.rb`) is generated automatically to preserve backwards compatibility. An existing `parity.rb` is never overwritten.
|
|
- `exec` command: runs a shell command inside the target castle root directory.
|
|
- `exec_all` command: runs a shell command inside each cloned castle root directory in sorted order.
|
|
- `pull --all` support: pulls updates for every cloned castle in sorted order.
|
|
- `rc --force` support: legacy `.homesickrc` compatibility hooks now require explicit force mode before execution.
|
|
- Global command flags restored: `--pretend` (with `--dry-run` alias) and `--quiet`.
|
|
- Native Go implementations for `clone`, `link`, `unlink`, `track`, `pull`, `push`, `commit`, `destroy`, `cd`, `open`, and `generate`.
|
|
- Containerized behavior test suite for command parity validation.
|
|
- Dedicated test suites for `list`, `show_path`, `status`, `diff`, and `version`.
|
|
- Just workflow support for building and running the Linux behavior binary.
|
|
- Coverage reports and badges published to shared object storage for branches and pull requests.
|
|
- Pull requests now receive coverage report links in CI comments.
|
|
- Automated release orchestration now runs through vociferate prepare and publish workflows.
|
|
- `symlink` command alias compatibility for `link`.
|
|
|
|
### Changed
|
|
|
|
- Release automation now uses `aether/vociferate` `prepare` and `publish` actions (pinned to `v1.0.1`) instead of repository-local releaseprep wrappers.
|
|
- Push and pull request validation now enforce per-package coverage gates (fail below 50%) and publish package-level coverage status tables in workflow summaries.
|
|
- Push and pull request validation now verify module hygiene (`go mod tidy`, `go mod verify`) and use a dedicated summary-file pattern with a final always-run summary step.
|
|
- CLI argument parsing migrated to Kong.
|
|
- Git operations for clone and track migrated to `go-git`.
|
|
- Build and behavior workflows now produce and run the `gosick` binary name.
|
|
- CI validation is unified into push events, running behavior tests only on `main` pushes.
|
|
- Gitea CI workflows now cache Go modules and build artifacts using a shared runner tool cache.
|
|
- Gitea workflow and README badge updated from `push-unit-tests` to `push-validation`.
|
|
- CLI help now uses the invoked binary name (defaulting to `gosick`) in usage output.
|
|
- CLI help description now reflects Homesick's purpose for managing precious dotfiles.
|
|
- Release notes standardized to Keep a Changelog format.
|
|
- `commit` command now accepts legacy positional form `commit <castle> <message>` in addition to `-m`.
|
|
- `destroy` now prompts for confirmation by default and preserves the castle when declined.
|
|
|
|
### Fixed
|
|
|
|
- `status` and `diff` now consistently write through configured app output writers.
|
|
- `pull --all` output now includes per-castle prefixes to match behavior expectations.
|
|
- Behavior-suite container now includes Ruby so `.homesickrc` parity wrapper execution works under `rc --force`.
|
|
|
|
### Removed
|
|
|
|
- Legacy `script/prepare-release.sh` releaseprep wrapper and its dedicated script test.
|
|
- Legacy Ruby implementation and Ruby toolchain.
|
|
- Legacy in-repository `releaseprep` package and command implementation, now superseded by the standalone `vociferate` tool.
|
|
|
|
## [1.1.6] - 2017-12-20
|
|
|
|
### Fixed
|
|
|
|
- Ensure `FileUtils` is imported correctly to avoid a potential error.
|
|
- Fix an issue where comparing a diff did not use the content of the new file.
|
|
|
|
### Changed
|
|
|
|
- Small documentation fixes.
|
|
|
|
## [1.1.5] - 2017-03-23
|
|
|
|
### Fixed
|
|
|
|
- Problem with version number being incorrect.
|
|
|
|
## [1.1.4] - 2017-03-22
|
|
|
|
### Fixed
|
|
|
|
- Ensure symlink conflicts are explicitly communicated to users and symlinks are not silently overwritten.
|
|
- Fix a problem in diff when asking a user to resolve a conflict.
|
|
|
|
### Changed
|
|
|
|
- Use real paths of symlinks when linking a castle into home.
|
|
- Code refactoring and fixes.
|
|
|
|
## [1.1.3] - 2015-10-31
|
|
|
|
### Added
|
|
|
|
- Allow a destination to be passed when cloning a castle.
|
|
|
|
### Fixed
|
|
|
|
- Make sure `homesick edit` opens the default editor in the root of the given castle.
|
|
- Bug when diffing edited files.
|
|
- Crashing bug when attempting to diff directories.
|
|
- Ensure that messages are escaped correctly on `git commit all`.
|
|
|
|
## [1.1.2] - 2015-01-02
|
|
|
|
### Added
|
|
|
|
- `--force` option to the rc command to bypass confirmation checks when running a `.homesickrc` file.
|
|
- Check to ensure that at least Git 1.8.0 is installed.
|
|
|
|
### Fixed
|
|
|
|
- Stop Homesick failing silently when Git is not installed.
|
|
|
|
### Changed
|
|
|
|
- Code refactoring and fixes.
|
|
|
|
## [1.1.0] - 2014-04-28
|
|
|
|
### Added
|
|
|
|
- `exec` and `exec_all` commands to run commands inside one or all cloned castles.
|
|
|
|
### Changed
|
|
|
|
- Code refactoring.
|
|
|
|
## [1.0.0] - 2014-01-15
|
|
|
|
### Added
|
|
|
|
- `version` command.
|
|
|
|
### Removed
|
|
|
|
- Support for Ruby 1.8.7.
|
|
|
|
## [0.9.8] - 2014-01-02
|
|
|
|
### Added
|
|
|
|
- `homesick cd` command.
|
|
- `homesick open` command.
|
|
|
|
## [0.9.4] - 2013-07-31
|
|
|
|
### Added
|
|
|
|
- `homesick unlink` command.
|
|
- `homesick rc` command.
|
|
|
|
### Changed
|
|
|
|
- Use HTTPS protocol instead of git protocol.
|
|
|
|
## [0.9.3] - 2013-07-07
|
|
|
|
### Added
|
|
|
|
- Recursive option to `homesick clone`.
|
|
|
|
## [0.9.2] - 2013-06-27
|
|
|
|
### Added
|
|
|
|
- `homesick show_path` command.
|
|
- `homesick status` command.
|
|
- `homesick diff` command.
|
|
|
|
### Changed
|
|
|
|
- Set `dotfiles` as default castle name.
|
|
|
|
## [0.9.1] - 2013-06-17
|
|
|
|
### Fixed
|
|
|
|
- Small bugs: #35, #40.
|
|
|
|
## [0.9.0] - 2013-06-06
|
|
|
|
### Added
|
|
|
|
- `.homesick_subdir` (#39).
|
|
|
|
## [0.8.1] - 2013-05-19
|
|
|
|
### Fixed
|
|
|
|
- `homesick list` bug on Ruby 2.0 (#37).
|
|
|
|
## [0.8.0] - 2013-04-06
|
|
|
|
### Added
|
|
|
|
- `commit` and `push` command.
|
|
- Commit changes in a castle and push to remote.
|
|
- Enable recursive submodule update.
|
|
- Git add when using track.
|
|
|
|
## [0.7.0] - 2012-05-28
|
|
|
|
### Added
|
|
|
|
- New option for pull command: `--all`.
|
|
- Pull each castle instead of just one.
|
|
|
|
### Fixed
|
|
|
|
- Double-cloning (#14).
|
|
|
|
## [0.6.1] - 2010-11-13
|
|
|
|
### Added
|
|
|
|
- License.
|
|
|
|
## [0.6.0] - 2010-10-27
|
|
|
|
### Added
|
|
|
|
- `.homesickrc` support.
|
|
- Castles can now have a `.homesickrc` inside them.
|
|
- On clone, this is eval'd inside the destination directory.
|
|
- `track` command.
|
|
- Allows easily moving an existing file into a castle and symlinking it back.
|
|
|
|
## [0.5.0] - 2010-05-18
|
|
|
|
### Added
|
|
|
|
- `homesick pull <CASTLE>` for updating castles (thanks Jorge Dias).
|
|
- A very basic `homesick generate <CASTLE>`.
|
|
|
|
### Fixed
|
|
|
|
- Listing of castles cloned using `homesick clone <github-user>/<github-repo>` (issue 3).
|
|
|
|
## [0.4.1] - 2010-04-02
|
|
|
|
### Fixed
|
|
|
|
- Improve error message when a castle's home dir does not exist.
|
|
|
|
## [0.4.0] - 2010-04-01
|
|
|
|
### Added
|
|
|
|
- `homesick clone` can take a path to a directory on the filesystem, which is symlinked into place.
|
|
- `homesick clone` tries to run `git submodule init` and `git submodule update` if git submodules are defined for a cloned repo.
|
|
|
|
### Changed
|
|
|
|
- Use `HOME` environment variable for where to store files, instead of assuming `~`.
|
|
|
|
### Fixed
|
|
|
|
- Missing dependency on thor and others.
|
|
|
|
## [0.3.0] - 2010-04-01
|
|
|
|
### Changed
|
|
|
|
- Rename `link` to `symlink`.
|
|
|
|
### Fixed
|
|
|
|
- Conflict resolution when symlink destination exists and is a normal file.
|
|
|
|
## [0.2.0] - 2010-03-19
|
|
|
|
### Added
|
|
|
|
- Better support for recognizing git URLs (thanks jacobat).
|
|
- If it looks like a GitHub user/repo, use that.
|
|
- Otherwise hand off to git clone.
|
|
- Listing now displays in color and shows git remote.
|
|
- Support pretend, force, and quiet modes.
|
|
|
|
## [0.1.1] - 2010-03-17
|
|
|
|
### Fixed
|
|
|
|
- Trying to link against castles that do not exist.
|
|
- Linking now excludes `.` and `..` from the list of files to link (thanks Martinos).
|
|
|
|
## [0.1.0] - 2010-03-10
|
|
|
|
### Added
|
|
|
|
- Initial release.
|