Sloum's Compiled Build Manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.0 KiB


The idea here, and this may exist elsewhere - not sure, is to build out a program that will manage/updating programs built from git hosted source on a system. It requires some manual effort as the install procedures will vary from system to system program to program. But once set it should do pretty well for managing things, only breaking when install procedures or dependencies change (the user will see output to this effect either when running the program or when attempting to install it).


There will be a config with a format in the ballpark of what appears below. It is possible that recutils could be useful for this, but maybe not tie it to that? An ini could also work. When a new program is added to the system the

  • name program name
  • description this is pulled from the .git folder of any repo
  • url git repo location (url)
  • command install command (what you would run to install the program, likely configured manually)
  • req-sudo requires sudo (boolean for whether sudo is required in order to run the install step)
  • *current the active commit id
  • *prev[] previous commit (the commit that was live on the system before the most recent update, this field is a comma separated slice of previous commits)

(fields marked * can only be updated by the program and not w/ set)



Format: scbm get _git-url_ [program name] Action: Will attempt to download the files at the url to the scbm staging folder (location tbd) and add the program url to the database. The name field will default to the repo name, but can be replaced by an optional paramater. Current will be set to the current HEAD commit hash for the repo.


Format: scbm view [-v] _program-name_ Action: Will print a readable table of the current settings for the program in question. If the verbose (-v) flag is passed the info will be opened up in $READER (or less) and the contents of the readme, if present, will be concatenated to the output.


Format: scbm set _program-name_ _key_ _new-value_ Action: Will set a new value for a given key for a given program. Will request confirmation of value before updating the database.


Format: scbm upgrade _program- name..._ Action: Will pull updates for each program, or optionally just the program passed in, and run the install command for each. Before doing so the current commit hash will be stored in the *prev field for the program.


Format scbm revert _program-name_ Action: Will move to the commit hash stored in in the *prev field for the given program. Will run the install command for the given program. Will remove the commit hash from the *prev slice and move it to current. If the -f flag is passed, it will also freeze the program (but not trash it).


Format: scbm list Action: Will output a table in the format: "program name\tdescription" for each program currently managed by scbm. The verbose flag will render a full view for all items.


Format: scbm freeze [-trash] _program-name_ Action: Will freeze a program (prevent it from receiving further updates). DOES NOT delete any files or uninstall the programs. If the -trash flag is passed the repo will be removed from the scbm folder; this is not recommended, as there may be things to refer to in it in order to uninstall the program (but this would be an appropriate flag if the uninstall actions have already been manually undertaken). The -trash flag is how you would fully remove a program from being managed by scbm.


Format: scbm unfreeze _program-name_ Action: Will reactiveate a frozen program, allowing it to receive updates.

Dependency management

scbm DOES NOT handle dependency management. It is simply a tool for automating updates to compiled programs. Install steps and dependencies still need to be manually handled by the user (in most cases the install steps can be set once and then used for future builds).

Directory structure


Repos: BASE/{repo-name} Index: BASE/data/manifest.txt Data: BASE/data/{repo-name}.sscbm