1 unstable release
new 0.2.2 | Mar 30, 2025 |
---|
#6 in #force
80KB
1.5K
SLoC
wrale-acdm
Wrale Agnostic Content Dependency Manager
Overview
wrale-acdm
is an open-source tool designed to solve the problem of granular, selective content inclusion from external repositories without the complexity and limitations of Git submodules. Built in Rust with clean architecture principles, it enables teams to pull specific folders or files from external repositories while maintaining a clean project history and minimizing dependency footprint.
Key Features
- Selective Content Inclusion: Pull only the specific folders or files you need from external repositories
- Zero Submodule Footprint: Avoids Git submodules entirely, leaving no metadata in your repository
- Declarative Configuration: TOML-based specification of dependencies and targets
- Version Locking: Pin dependencies to specific commits, branches, or tags
- Clean Git History: Changes to vendored content appear as normal changes in your repository
- Multiple Protocol Support: Clone via SSH and HTTPS with appropriate authentication
- Git-Aware Operations: Operates only within clean Git repositories
- Safe Operations: Verifies clean git status before making changes
- Interactive Workflow: Prompts before potentially destructive actions (can be bypassed with --force)
- Verbose Logging: Detailed logging for debugging (can be disabled with --quiet)
Installation
⚠️ Platform Support: Currently,
wrale-acdm
is only officially supported on macOS (specifically tested on M1 MacBook Air). While it may work on other platforms when built from source, these are not officially supported yet. Contributions for other platforms are welcome!
# Install from crates.io
cargo install wrale-acdm
or install from source:
git clone https://github.com/wrale/wrale-acdm.git
cd wrale-acdm
cargo install --path .
Alternatively, using the provided Makefile:
git clone https://github.com/wrale/wrale-acdm.git
cd wrale-acdm
make install
Quick Start
Initialize a new configuration:
acdm init
Add an external dependency:
acdm add git@github.com:example/repo.git --name example-dep --rev main --target vendor/example
Define which files to include:
acdm include example-dep "docs/specification/**" "schema/**"
Update all dependencies:
acdm update
After running any command that modifies files, you'll need to review and commit the changes manually:
git add .
git commit -m "Update external dependencies"
Note: acdm
requires a clean git repository to perform updates. It will not automatically commit changes.
Global Flags
The following flags can be used with any command:
--quiet
: Suppress verbose logging, showing only warnings and errors--force
: Skip confirmation prompts and proceed with potentially destructive operations--config <path>
: Specify a custom path to the configuration file (default:acdm.toml
)
Configuration
acdm.toml
example:
location = "vendor/external"
[[sources]]
repo = "git@github.com:example/repo.git"
name = "example-dependency"
rev = "main"
type = "git"
sparse_paths = [
"docs/specification/**",
"schema/**"
]
target = "vendor/example"
Development
Requirements:
- Rust 1.70+
- Git 2.25+ (for sparse checkout features)
- macOS for primary development and testing
Building from source:
git clone https://github.com/wrale/wrale-acdm.git
cd wrale-acdm
make build
Running tests:
make test # Run all tests
make unit # Run unit tests only
make integration # Run integration tests only
Preparing for a commit:
make prepare # Formats code, runs linter, checks, tests, and generates docs
See all available commands:
make help
License
This project is licensed under the MIT License - see the LICENSE file for details. Copyright information is available in the NOTICE file.
Tags
rust
dependency-management
git
vendoring
content-management
submodules
monorepo
package-manager
selective-checkout
sparse-checkout
Copyright (c) 2025 Wrale LTD contact@wrale.com
Dependencies
~15–27MB
~470K SLoC