# Deployment Guide
This guide covers deploying the Password Manager CLI application.
## Table of Contents
1. [Prerequisites](#prerequisites)
2. [Local Development](#local-development)
3. [Installation](#installation)
4. [CI/CD Pipeline](#cicd-pipeline)
5. [Release Process](#release-process)
6. [Distribution](#distribution)
## Prerequisites
### System Requirements
- Rust 1.70+ and Cargo
- Git
### Required Secrets (for CI/CD)
- `CARGO_REGISTRY_TOKEN`: For publishing to crates.io
- `SNYK_TOKEN`: For Snyk security scanning (optional)
- `GITHUB_TOKEN`: Automatically provided by GitHub Actions
## Local Development
### Build from Source
```bash
# Clone the repository
git clone <repository-url>
cd password_manager
# Build the application
cargo build --release
# Run tests
cargo test --all-features
# Install system-wide
cargo install --path .
```
### Development Environment
```bash
# Install development dependencies
make setup
# Run with hot reload
make dev-watch
# Quick development cycle
make dev
```
## Installation
### From Source
```bash
# Clone and build
git clone <repository-url>
cd password_manager
cargo install --path .
# Verify installation
password_manager --help
```
### From crates.io (after publishing)
```bash
# Install from crates.io
cargo install password_manager
# Verify installation
password_manager --help
```
### From GitHub Releases
```bash
# Download appropriate binary for your platform
# Linux: password_manager-linux-x86_64.tar.gz
# macOS: password_manager-macos-x86_64.tar.gz
# Windows: password_manager-windows-x86_64.zip
# Extract and add to PATH
tar -xzf password_manager-linux-x86_64.tar.gz
sudo mv password_manager /usr/local/bin/
```
## CI/CD Pipeline
### GitHub Actions Workflows
The project includes several automated workflows:
1. **CI Pipeline** (`.github/workflows/ci.yml`)
- Runs on every push and PR
- Tests with multiple Rust versions
- Security audits and code coverage
- Format and linting checks
2. **Build and Release** (`.github/workflows/build.yml`)
- Triggered by version tags
- Cross-platform builds
- Creates GitHub releases
- Publishes to crates.io
3. **Security Scanning** (`.github/workflows/security.yml`)
- Daily security audits
- Dependency vulnerability checks
- Code scanning with multiple tools
4. **Dependency Updates** (`.github/workflows/dependencies.yml`)
- Weekly dependency updates
- Automated PR creation
- Security validation
### Setting Up CI/CD
1. **Fork the Repository**
```bash
git clone <your-fork>
cd password_manager
```
2. **Configure Secrets**
- Go to Settings → Secrets and variables → Actions
- Add `CARGO_REGISTRY_TOKEN` for crates.io publishing
- Add `SNYK_TOKEN` for security scanning (optional)
3. **Enable Actions**
- Go to Settings → Actions → General
- Enable "Allow all actions and reusable workflows"
### Manual Release Process
```bash
# Create a new release
./scripts/release.sh 1.0.0
# This will:
# 1. Update version in Cargo.toml
# 2. Run tests and security audit
# 3. Create git tag
# 4. Push changes
# 5. Trigger GitHub Actions release workflow
```
## Release Process
### Automated Release
1. Create a version tag: `git tag v1.0.0`
2. Push the tag: `git push origin v1.0.0`
3. GitHub Actions automatically:
- Builds for all platforms
- Creates GitHub release
- Publishes to crates.io
### Manual Release Steps
```bash
# 1. Update version
cargo set-version 1.0.0
# 2. Run tests
cargo test --all-features
# 3. Security audit
cargo audit
# 4. Build release
cargo build --release
# 5. Create tag
git tag -a v1.0.0 -m "Release v1.0.0"
# 6. Push
git push origin main --tags
# 7. Create GitHub release manually
```
### Release Checklist
- [ ] All tests passing
- [ ] Security audit clean
- [ ] Documentation updated
- [ ] Version bumped
- [ ] Changelog updated
- [ ] Release notes prepared
- [ ] Cross-platform builds verified
## Distribution
### Cross-Platform Builds
The CI/CD pipeline automatically builds for:
- **Linux**: x86_64, ARM64
- **macOS**: x86_64, ARM64 (Apple Silicon)
- **Windows**: x86_64
### Release Artifacts
Each release includes:
- Source code archive
- Platform-specific binaries
- Checksums for verification
- Release notes
### Installation Methods
1. **crates.io**: `cargo install password_manager`
2. **GitHub Releases**: Download binary for your platform
3. **Source**: `cargo install --git <repository>`
## Development Workflow
### Daily Development
```bash
# Setup development environment
make setup
# Quick development cycle
make dev
# Run tests
make test
# Security audit
make security
# Format code
make format
```
### Release Preparation
```bash
# Full test suite
make check-all
# Build release
make release
# Create release
make release-create
```
## Security Considerations
### Code Security
- Automated security audits
- Dependency vulnerability checks
- Code scanning with multiple tools
- Regular security updates
### Distribution Security
- Signed releases (when configured)
- Checksum verification
- Secure download channels
- Vulnerability disclosure process
### Best Practices
1. **Regular Updates**: Keep dependencies updated
2. **Security Audits**: Run `cargo audit` regularly
3. **Code Review**: Review all changes before merging
4. **Testing**: Comprehensive test coverage
5. **Documentation**: Keep docs updated
## Troubleshooting
### Common Issues
1. **Build Failures**
```bash
make clean
make build
```
2. **Test Failures**
```bash
cargo test --verbose
```
3. **Security Audit Failures**
```bash
cargo update
cargo audit
```
4. **Installation Issues**
```bash
rustc --version
rustup update
```
### Debug Mode
```bash
# Run with debug logging
RUST_LOG=debug cargo run
# Build with debug symbols
cargo build --debug
```
## Support
For deployment issues:
1. Check the logs for error messages
2. Verify all prerequisites are met
3. Review security configuration
4. Check Rust toolchain version
For CI/CD issues:
1. Check GitHub Actions logs
2. Verify secrets are configured
3. Review workflow permissions
4. Check branch protection rules
## Performance
### Build Performance
- **Debug build**: ~30 seconds
- **Release build**: ~2 minutes
- **Test suite**: ~1 minute
- **Security audit**: ~10 seconds
### Runtime Performance
- **Startup time**: <100ms
- **Memory usage**: <50MB
- **Database operations**: <10ms per operation