New Config Command | MathSwe Ops Mvp (2024/08/30)

New Config Command | MathSwe Ops Mvp (2024/08/30)

The System app needs a command to configure or restore software the user installs. The CLI entry modules require a redesign for command scalability. The MSW Ops web home will also provide the System app documentation. The MathSwe Ops MVP should have its initial release soon to cool down and help other tasks across MathSwe.


Refactor CLI app module before implementing more commands

Aug 25: PR #10 merged into ops/dev <- system by tobiasbriones

The Config operation needs an implementation and I found the main entry code had some over-engineered parts, so it’s necessary to:

  • Simplify it.
  • Make it more modular.
  • Add more abstractions.

These changes integrate a new submodule main for the CLI app.

├── main
│   ├── batch.rs
│   ├── cli.rs
│   ├── exec.rs
│   ├── image_exec.rs
│   └── system.rs
├── main.rs
New Module main

This organization denotes the CLI submodules, considering it needs to apply batch logic with a report. By default, all commands are by batch, so the system will process it by batch whether the command only accepts one image or many as it gives the same result.

It introduces the OperationContext in the module exec to load all the environment information, like the OS, which will be available for decision-making. It clarifies where to look for runtime details.

It introduces the OperationExecution in the module exec to implement the CLI-facing commands and resolve the low-level operations to load and execute. For example, low-level operations are independent, but a command can be a composition like install + config, so this module converts the user command into program low-level operations to execute (e.g. ImageOps).

The restructure, simplification, and redesign of the CLI-facing modules provide scalability to the program to add more commands and operations that the user can compose.


Implement operation Config

Aug 26: PR #11 merged into ops/dev <- system by tobiasbriones

Some images require configuration after you install them, so they function in a restored state.

This PR:

  • Implements the new operation Config.
  • Implements Config for MinicondaImageConfig to create conda environments with packages pre-installed.
  • Composes the --config flag on the Install operation.

Usages: system config miniconda, system install --config miniconda, etc.

The configuration goes to the image/ directory. For example, image/miniconda.config.json for MinicondaConfig.

It demonstrates the system’s capabilities to extend more functionalities since I’ve invested much in its design to fit Rust’s robustness.

The new configuration command makes the System CLI more powerful by allowing users to restore the image state after installation, or whenever they want.


Update System app docs with command Config

Aug 27: PR #12 merged into ops/dev <- system by tobiasbriones

It adds the recently added command Config and flag --config to the project README.md documentation.


Implement GitImage with Config

Aug 28: PR #13 merged into ops/dev <- system by tobiasbriones

It adds the GitImage to the repository and the tooling necessary to implement its Config operation.

The config file is an empty structure at image/git.config.json you replace with your values.

  • It includes configuration fields for Git Core, User, and Commit.
  • It allows you to set and enforce sign commits with GPG.
  • It allows you to set the global Git ignore file that applies to all Git repositories on your machine.

You can run system install git, system install --config git, system config git, etc.

The Git implementation is quite useful for setting up a workstation machine from cold-start with your personal Git environment.


Get project ready for initial release

Aug 30: PR #14 merged into ops/dev <- system by tobiasbriones

It sets the project information to create the Debian installer and be able to release it now for faster iterations.


Update landing page info and set to release

Aug 30: PR #15 merged into ops/dev <- ops.math.software by tobiasbriones

It adds the latest documentation of the System app and sets the project for its initial release.


Update project docs for release

Aug 30: PR #16 merged into ops/dev <- ops/docs by tobiasbriones

It adds the landing page section in the README.md and updates the badge SVGs. A new project will automate updating the badges, so this work should not be done manually for future releases.


The new config operation required a significant refactorization of the CLI-facing modules so that the app could support the config command and any other commands it may need.

The config command is a key feature of MathSwe System Ops since it sets up the software users install with their needs, configurations, or dependencies out of the box. It restores images.

I can release the System CLI app via GitHub releases and a deb package with checksum. While there are more pending tasks, the current changes make the app productive and give an idea of what it is.

Finally, the MSW Ops web home is ready with up-to-date essentials of MSW Ops and MathSwe Ops concepts, as well as the System app documentation for end users.

The current developments can provide production value. The latest changes allow the initial release of the MVP projects to cool down and not leave behind other tasks pending from other projects that cover other MSW and MathSwe requirements to reach production as a whole.