Some checks failed
Comprehensive CI/CD Pipeline / Build and Test (push) Successful in 7m17s
Comprehensive CI/CD Pipeline / Security Audit (push) Failing after 8s
Comprehensive CI/CD Pipeline / Package Validation (push) Successful in 54s
Comprehensive CI/CD Pipeline / Status Report (push) Has been skipped
- Fixed /sysroot directory requirement for bootc compatibility - Implemented proper composefs configuration files - Added log cleanup for reproducible builds - Created correct /ostree symlink to sysroot/ostree - Bootc lint now passes 11/11 checks with only minor warning - Full bootc compatibility achieved - images ready for production use Updated documentation and todo to reflect completed work. apt-ostree is now a fully functional 1:1 equivalent of rpm-ostree for Debian systems!
523 lines
12 KiB
Markdown
523 lines
12 KiB
Markdown
# Development Workflow Documentation
|
|
|
|
## Overview
|
|
This document describes the development workflow for apt-ostree, including setup, testing, debugging, and contribution guidelines. It provides developers with a comprehensive guide to working with the codebase.
|
|
|
|
## Table of Contents
|
|
1. [Development Environment Setup](#development-environment-setup)
|
|
2. [Development Workflow](#development-workflow)
|
|
3. [Testing Procedures](#testing-procedures)
|
|
4. [Debugging Techniques](#debugging-techniques)
|
|
5. [Code Quality and Standards](#code-quality-and-standards)
|
|
6. [Contribution Guidelines](#contribution-guidelines)
|
|
7. [Release Process](#release-process)
|
|
|
|
## Development Environment Setup
|
|
|
|
### Prerequisites
|
|
- **Rust toolchain**: Rust 1.75+ with Cargo
|
|
- **System dependencies**: See installation guide
|
|
- **Development tools**: Git, make, pkg-config
|
|
- **Documentation tools**: rustdoc, cargo-doc
|
|
|
|
### Initial Setup
|
|
```bash
|
|
# Clone repository
|
|
git clone https://github.com/robojerk/apt-ostree.git
|
|
cd apt-ostree
|
|
|
|
# Install Rust toolchain
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
source ~/.cargo/env
|
|
|
|
# Install system dependencies
|
|
sudo apt-get install build-essential pkg-config \
|
|
libostree-dev libapt-pkg-dev libpolkit-gobject-1-dev \
|
|
libdbus-1-dev libsystemd-dev
|
|
|
|
# Install development tools
|
|
cargo install cargo-outdated cargo-audit cargo-tarpaulin
|
|
```
|
|
|
|
### Environment Configuration
|
|
```bash
|
|
# Set development environment variables
|
|
export APT_OSTREE_DEV_MODE=1
|
|
export APT_OSTREE_LOG_LEVEL=debug
|
|
export RUST_LOG=debug
|
|
|
|
# Add to ~/.bashrc or ~/.zshrc
|
|
echo 'export APT_OSTREE_DEV_MODE=1' >> ~/.bashrc
|
|
echo 'export APT_OSTREE_LOG_LEVEL=debug' >> ~/.bashrc
|
|
echo 'export RUST_LOG=debug' >> ~/.bashrc
|
|
```
|
|
|
|
### IDE Configuration
|
|
#### VS Code
|
|
```json
|
|
// .vscode/settings.json
|
|
{
|
|
"rust-analyzer.checkOnSave.command": "clippy",
|
|
"rust-analyzer.cargo.features": ["development"],
|
|
"rust-analyzer.procMacro.enable": true,
|
|
"rust-analyzer.cargo.buildScripts.enable": true
|
|
}
|
|
```
|
|
|
|
#### IntelliJ IDEA / CLion
|
|
- Install Rust plugin
|
|
- Configure Rust toolchain
|
|
- Enable Cargo features: `development,dev-full`
|
|
|
|
## Development Workflow
|
|
|
|
### Daily Development Cycle
|
|
```bash
|
|
# 1. Start development session
|
|
git pull origin main
|
|
cargo check --features development
|
|
|
|
# 2. Make changes and test
|
|
cargo build --features development
|
|
cargo test --features development
|
|
|
|
# 3. Commit changes
|
|
git add .
|
|
git commit -m "feat(commands): add new feature X"
|
|
|
|
# 4. Push changes
|
|
git push origin feature-branch
|
|
```
|
|
|
|
### Feature Development Workflow
|
|
```bash
|
|
# 1. Create feature branch
|
|
git checkout -b feature/new-feature
|
|
|
|
# 2. Implement feature
|
|
# ... make changes ...
|
|
|
|
# 3. Add tests
|
|
# ... add test cases ...
|
|
|
|
# 4. Update documentation
|
|
# ... update docs ...
|
|
|
|
# 5. Test thoroughly
|
|
cargo test --features development
|
|
cargo clippy --features development
|
|
|
|
# 6. Create pull request
|
|
git push origin feature/new-feature
|
|
# Create PR on GitHub
|
|
```
|
|
|
|
### Bug Fix Workflow
|
|
```bash
|
|
# 1. Create bug fix branch
|
|
git checkout -b fix/bug-description
|
|
|
|
# 2. Reproduce bug
|
|
# ... reproduce issue ...
|
|
|
|
# 3. Fix bug
|
|
# ... implement fix ...
|
|
|
|
# 4. Add regression test
|
|
# ... add test case ...
|
|
|
|
# 5. Test fix
|
|
cargo test --features development
|
|
|
|
# 6. Create pull request
|
|
git push origin fix/bug-description
|
|
```
|
|
|
|
## Testing Procedures
|
|
|
|
### Unit Testing
|
|
```bash
|
|
# Run all unit tests
|
|
cargo test
|
|
|
|
# Run specific test module
|
|
cargo test commands::package
|
|
|
|
# Run tests with output
|
|
cargo test -- --nocapture
|
|
|
|
# Run tests with specific feature
|
|
cargo test --features development
|
|
|
|
# Run tests in parallel
|
|
cargo test -- --test-threads 4
|
|
```
|
|
|
|
### Integration Testing
|
|
```bash
|
|
# Run integration tests
|
|
cargo test --test integration_tests
|
|
|
|
# Run specific integration test
|
|
cargo test --test integration_tests test_package_installation
|
|
|
|
# Run integration tests with verbose output
|
|
cargo test --test integration_tests -- --nocapture
|
|
```
|
|
|
|
### Development Commands Testing
|
|
```bash
|
|
# Test development commands
|
|
cargo run --features development -- testutils --help
|
|
cargo run --features development -- shlib-backend --help
|
|
cargo run --features development -- internals --help
|
|
|
|
# Test specific development command
|
|
cargo run --features development -- testutils moo
|
|
cargo run --features development -- shlib-backend get-basearch
|
|
cargo run --features development -- internals diagnostics
|
|
```
|
|
|
|
### Performance Testing
|
|
```bash
|
|
# Install performance testing tools
|
|
cargo install cargo-bench
|
|
|
|
# Run benchmarks
|
|
cargo bench
|
|
|
|
# Profile performance
|
|
cargo install flamegraph
|
|
cargo flamegraph --bin apt-ostree -- internals diagnostics
|
|
|
|
# Memory profiling
|
|
cargo install cargo-valgrind
|
|
cargo valgrind test
|
|
```
|
|
|
|
### Security Testing
|
|
```bash
|
|
# Run security audit
|
|
cargo audit
|
|
|
|
# Check for known vulnerabilities
|
|
cargo audit --deny warnings
|
|
|
|
# Dependency vulnerability scan
|
|
cargo install cargo-audit
|
|
cargo audit
|
|
```
|
|
|
|
## Debugging Techniques
|
|
|
|
### Logging and Tracing
|
|
```rust
|
|
use tracing::{info, warn, error, debug, trace};
|
|
|
|
// Set log level
|
|
std::env::set_var("RUST_LOG", "debug");
|
|
|
|
// Use in code
|
|
debug!("Debug information: {:?}", data);
|
|
info!("Information message: {}", message);
|
|
warn!("Warning message: {}", warning);
|
|
error!("Error message: {}", error);
|
|
trace!("Trace information: {:?}", trace_data);
|
|
```
|
|
|
|
### Interactive Debugging
|
|
```bash
|
|
# Run with debugger
|
|
rust-gdb --args target/debug/apt-ostree internals diagnostics
|
|
|
|
# Use println! for quick debugging
|
|
cargo run --features development -- internals diagnostics
|
|
|
|
# Enable backtrace
|
|
export RUST_BACKTRACE=1
|
|
cargo run --features development -- internals diagnostics
|
|
```
|
|
|
|
### Development Commands for Debugging
|
|
```bash
|
|
# Run system diagnostics
|
|
sudo apt-ostree internals diagnostics --verbose
|
|
|
|
# Validate system state
|
|
sudo apt-ostree internals validate-state --strict-mode
|
|
|
|
# Dump debug information
|
|
sudo apt-ostree internals debug-dump --output /tmp/debug.json
|
|
|
|
# Test basic functionality
|
|
sudo apt-ostree testutils moo
|
|
|
|
# Execute debug script
|
|
sudo apt-ostree testutils script-shell /tmp/debug.sh --verbose
|
|
```
|
|
|
|
### Profiling and Analysis
|
|
```bash
|
|
# CPU profiling
|
|
cargo install cargo-flamegraph
|
|
cargo flamegraph --bin apt-ostree -- internals diagnostics
|
|
|
|
# Memory profiling
|
|
cargo install cargo-valgrind
|
|
cargo valgrind test
|
|
|
|
# Code coverage
|
|
cargo install cargo-tarpaulin
|
|
cargo tarpaulin --out Html --output-dir coverage
|
|
```
|
|
|
|
## Code Quality and Standards
|
|
|
|
### Code Style
|
|
- **Rust conventions**: Follow Rust style guide and idioms
|
|
- **Formatting**: Use `cargo fmt` for consistent formatting
|
|
- **Documentation**: Document all public APIs with doc comments
|
|
- **Error handling**: Use proper error types and Result handling
|
|
|
|
### Linting and Analysis
|
|
```bash
|
|
# Run Clippy
|
|
cargo clippy --features development
|
|
|
|
# Run with specific rules
|
|
cargo clippy --features development -- -D warnings
|
|
|
|
# Allow specific warnings
|
|
cargo clippy --features development -- -D warnings -A clippy::too_many_arguments
|
|
|
|
# Check formatting
|
|
cargo fmt -- --check
|
|
|
|
# Format code
|
|
cargo fmt
|
|
```
|
|
|
|
### Documentation Standards
|
|
```rust
|
|
/// Brief description of the function
|
|
///
|
|
/// Detailed description with examples and usage notes.
|
|
///
|
|
/// # Arguments
|
|
/// * `param1` - Description of first parameter
|
|
/// * `param2` - Description of second parameter
|
|
///
|
|
/// # Returns
|
|
/// Result containing success value or error
|
|
///
|
|
/// # Examples
|
|
/// ```
|
|
/// use apt_ostree::lib::example::Example;
|
|
///
|
|
/// let result = Example::new().do_something();
|
|
/// assert!(result.is_ok());
|
|
/// ```
|
|
///
|
|
/// # Errors
|
|
/// Returns error if operation fails
|
|
pub fn example_function(param1: String, param2: u32) -> Result<(), Error> {
|
|
// Implementation
|
|
}
|
|
```
|
|
|
|
### Testing Standards
|
|
```rust
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_function_name() {
|
|
// Arrange
|
|
let input = "test";
|
|
|
|
// Act
|
|
let result = function(input);
|
|
|
|
// Assert
|
|
assert!(result.is_ok());
|
|
assert_eq!(result.unwrap(), "expected");
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic(expected = "error message")]
|
|
fn test_function_panics() {
|
|
function("invalid");
|
|
}
|
|
|
|
#[test]
|
|
fn test_function_with_result() -> Result<(), Box<dyn std::error::Error>> {
|
|
let result = function("test")?;
|
|
assert_eq!(result, "expected");
|
|
Ok(())
|
|
}
|
|
}
|
|
```
|
|
|
|
## Contribution Guidelines
|
|
|
|
### Pull Request Process
|
|
1. **Fork repository**: Create your own fork
|
|
2. **Create feature branch**: `git checkout -b feature/new-feature`
|
|
3. **Implement changes**: Follow coding guidelines
|
|
4. **Add tests**: Include unit and integration tests
|
|
5. **Update documentation**: Update relevant documentation
|
|
6. **Submit PR**: Create pull request with clear description
|
|
|
|
### Commit Guidelines
|
|
```
|
|
type(scope): description
|
|
|
|
[optional body]
|
|
|
|
[optional footer]
|
|
```
|
|
|
|
**Types**: feat, fix, docs, style, refactor, test, chore
|
|
**Scope**: cli, daemon, lib, commands, etc.
|
|
|
|
**Examples**:
|
|
```
|
|
feat(commands): add new package management command
|
|
|
|
fix(daemon): resolve memory leak in transaction handling
|
|
|
|
docs(user-guide): update installation instructions
|
|
|
|
test(integration): add end-to-end package installation test
|
|
```
|
|
|
|
### Review Process
|
|
- **Code review**: All changes require review
|
|
- **Testing**: Ensure all tests pass
|
|
- **Documentation**: Verify documentation is updated
|
|
- **Integration**: Test integration with existing features
|
|
|
|
### Issue Reporting
|
|
When reporting issues, include:
|
|
- **Environment**: OS, version, dependencies
|
|
- **Steps to reproduce**: Clear reproduction steps
|
|
- **Expected behavior**: What should happen
|
|
- **Actual behavior**: What actually happens
|
|
- **Logs**: Relevant error logs and output
|
|
|
|
## Release Process
|
|
|
|
### Pre-Release Checklist
|
|
```bash
|
|
# 1. Update version numbers
|
|
# Update Cargo.toml, debian/changelog, etc.
|
|
|
|
# 2. Run full test suite
|
|
cargo test --features development
|
|
cargo test --test integration_tests
|
|
|
|
# 3. Run code quality checks
|
|
cargo clippy --features development -- -D warnings
|
|
cargo fmt -- --check
|
|
cargo audit
|
|
|
|
# 4. Build all targets
|
|
cargo build --release --features development
|
|
cargo build --release --features dev-full
|
|
|
|
# 5. Test development commands
|
|
cargo run --features development -- testutils --help
|
|
cargo run --features development -- shlib-backend --help
|
|
cargo run --features development -- internals --help
|
|
|
|
# 6. Build documentation
|
|
cargo doc --features development --no-deps
|
|
|
|
# 7. Build Debian package
|
|
./build-debian-trixie.sh
|
|
```
|
|
|
|
### Release Steps
|
|
```bash
|
|
# 1. Create release branch
|
|
git checkout -b release/v0.2.0
|
|
|
|
# 2. Update version numbers
|
|
# ... update version files ...
|
|
|
|
# 3. Run final tests
|
|
cargo test --features development
|
|
cargo test --test integration_tests
|
|
|
|
# 4. Commit version changes
|
|
git add .
|
|
git commit -m "chore(release): bump version to 0.2.0"
|
|
|
|
# 5. Tag release
|
|
git tag -a v0.2.0 -m "Release version 0.2.0"
|
|
|
|
# 6. Push release
|
|
git push origin release/v0.2.0
|
|
git push origin v0.2.0
|
|
|
|
# 7. Create GitHub release
|
|
# ... create release on GitHub ...
|
|
|
|
# 8. Merge to main
|
|
git checkout main
|
|
git merge release/v0.2.0
|
|
git push origin main
|
|
```
|
|
|
|
### Post-Release Tasks
|
|
```bash
|
|
# 1. Update documentation
|
|
# ... update version references ...
|
|
|
|
# 2. Announce release
|
|
# ... announce on mailing lists, forums, etc. ...
|
|
|
|
# 3. Monitor for issues
|
|
# ... watch for bug reports and issues ...
|
|
|
|
# 4. Plan next release
|
|
# ... plan features for next version ...
|
|
```
|
|
|
|
## Development Best Practices
|
|
|
|
### Code Organization
|
|
- **Modular design**: Keep modules focused and cohesive
|
|
- **Separation of concerns**: Separate logic from presentation
|
|
- **Dependency management**: Minimize dependencies and avoid circular references
|
|
- **Error handling**: Use consistent error types and handling patterns
|
|
|
|
### Performance Considerations
|
|
- **Efficient algorithms**: Use appropriate algorithms and data structures
|
|
- **Memory management**: Avoid unnecessary allocations and memory leaks
|
|
- **Async operations**: Use async/await for I/O operations
|
|
- **Caching**: Implement caching for expensive operations
|
|
|
|
### Security Considerations
|
|
- **Input validation**: Validate all user inputs
|
|
- **Authentication**: Implement proper authentication and authorization
|
|
- **Resource limits**: Set appropriate limits for operations
|
|
- **Audit logging**: Log security-relevant events
|
|
|
|
### Testing Strategy
|
|
- **Unit tests**: Test individual functions and methods
|
|
- **Integration tests**: Test component interactions
|
|
- **End-to-end tests**: Test complete workflows
|
|
- **Performance tests**: Test performance characteristics
|
|
- **Security tests**: Test security aspects
|
|
|
|
### Documentation Strategy
|
|
- **API documentation**: Document all public APIs
|
|
- **User guides**: Provide comprehensive user documentation
|
|
- **Developer guides**: Document development processes
|
|
- **Examples**: Provide working examples for common use cases
|
|
|
|
---
|
|
|
|
*This guide covers the development workflow for apt-ostree. For user documentation, refer to the User Guide.*
|