AutoBASS CLI

Enterprise-grade backup automation utility with robust error handling and stream isolation.

Role

-

Tech Stack
BashLinuxRegexCI/CD

The Challenge

Standard shell backup scripts (using cp or simple tar) often suffer from "Silent Failures"—where a script exits successfully even if partial data corruption occurred. The engineering challenge was to design a system that guarantees data integrity by strictly validating input states, enforcing atomic operations, and allowing granular control over file exclusions via .bassignore without hardcoding paths.

Architecture & Deep Dive

System Architecture

Logic Flow: Priority handling between CLI Args and Config Files

Input(CLI/Config)ValidationLayerExclusionParserDry-RunEngineTar/GzipCore

Key Implementation

bash
log_message() {
    LEVEL=$1
    MESSAGE=$2 
    TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
    LOG_ENTRY="${LEVEL}: [${TIMESTAMP}] ${MESSAGE}"

    # Strict Stream Separation: 
    # Errors to stderr (fd2) for pipeline monitoring
    # Info to stdout (fd1) for user feedback
    if [ "$LEVEL" == "ERROR" ]; then
        echo "${LOG_ENTRY}" >&2
    else
        echo "${LOG_ENTRY}"
    fi

    # Persistent audit trail
    echo "${LOG_ENTRY}" >> "${LOG_FILE}"
}

Technical Trade-offs

I chose Bash over Python for this specific tool to ensure zero-dependency portability across any Unix-based CI/CD environment. While Python offers better exception handling, Bash provides direct interaction with filesystem streams (tar pipes). To mitigate Bash's loose error handling, I implemented explicit exit code checks ($?) after every critical operation instead of relying on set -e, allowing for graceful cleanup routines.

Reliability & Validation

Test Coverage

Validated against 4 distinct input scenarios (Args, Config, Dry-run, Invalid)

Error Handling Strategy

The system implements Dual-Stream Logging. Critical failures (Missing Source, Permission Denied) are routed to stderr to break build pipelines immediately, while operational logs go to archive.log. Input validation logic prevents execution if target directories cannot be created or source is unreadable.

Impact & Collaboration

Replaced ad-hoc backup commands with a standardized, version-controlled utility. The introduction of dry-run mode allows teams to verify backup manifest generation without disk I/O, preventing accidental storage saturation. The .bassignore pattern matching reduced backup size by excluding temporary build artifacts automatically.