- Python/Bash Scripting Toolkit for cross-project refactoring.
- Uninvasive, agile solution to deal with problem of poorly-isolated dependencies impacting many components.
- Core application written in Python, per-project scripts writable in any language.
- Designed according to Unix ”simple, clear, modular, extensible” philosophy to facilitate integration into existing toolchains and processes.
- Successfully deployed to automatically upgrade the dependencies of approx. 60 components without user intervention.
While working at L3Harris, a common pattern emerged within our software organization. We strictly control dependencies through a combination of a dependency management system (Apache Ivy) and careful semantic versioning for components. This provides robust and repeatable builds, but as the complexity of our software grows, the average dependency graph for a given component grows as well. This, combined with a lack of emphasis put on decoupling component dependencies, means that even simple middleware updates require a substantial number of engineer hours to mass-update components to avoid transitive dependency conflicts. The updates applied to each component are often identical, but the organization repeatedly dedicated hundreds of engineering hours to mass-component updates.
As a solution, I developed a CLI tool called ‘BUpdate’ to enable scripted component updates across the dependencies of a given root component. Leveraging dependency information provided by Ivy, BUpdate traverses the dependency graph in topological order, ensuring each operation is only performed when the dependencies of that operation are satisfied. To maximize reusability and integration with other tooling, BUpdate adheres to the Unix “one tool for one job” philosophy. While traversing the dependency graph, ‘BUpdate’ applies user-defined update/modification scripts, component-specific metadata provided to each operation by ‘BUpdate’. To accelerate adoption, a number of baseline scripts are included with the tool, including chainable scripts to update component dependencies, tweak CMake parameters, and create and push version control commits.
‘BUpdate’ was successfully deployed in a mass-update of L3Harris IPC middleware, turning what was previously a costly engineering task requiring three to four engineers into a simple mass-update operation suitable for supervision by a single engineer.