[](https://dl.circleci.com/status-badge/redirect/gh/hasii2011/versionoverlord/tree/master)
[](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
[](https://badge.fury.io/py/versionoverlord)
## Rationale
These utilities are meant to solve a problem with related repositories and their dependency relationships
Projects may have hierarchical dependencies. See the following [Pyut](https://github.com/hasii2011/PyUt) dependency diagram.
```mermaid
---
title: Pyut Dependency Graph
---
flowchart
direction RL
pyut(Pyut 9.6.0) --> oglio(oglio 2.3.4)
pyut(Pyut 9.6.0) --> pyutplugins(pyutplugins 3.2.3)
pyutplugins(pyutplugins 3.2.3) -.-> oglio(oglio 2.3.4)
pyutplugins(pyutplugins 3.2.3) & oglio(oglio 2.3.4) --> untanglepyut.2.6.3
pyut(Pyut 9.6.0) & oglio(oglio 2.3.4) & untanglepyut.2.6.3 --> ogl.3.6.7
pyut(Pyut 9.6.0) & pyutplugins(pyutplugins 3.2.3) & oglio(oglio 2.3.4) & untanglepyut.2.6.3 & ogl.3.6.7 -...-> pyutmodelv2.2.2.3
pyut(Pyut 9.6.0) & pyutplugins(pyutplugins 3.2.3) & ogl.3.6.7 ----> codeallybasic.1.9.0
style pyut fill:#ee4,stroke:#333,stroke-width:
%% linkStyle 1 stroke:#ff3,stroke-width:4px,color:red;
```
The above diagram illustrates how low-level dependencies ripple up the dependency tree.
## Dependency Locations
Additionally, projects may specify dependencies in different places. Examples of the dependency locations are
* setup.py
* requirements.txt
* .circleci/config.yml
* .travis.yml
## Python Console Scripts
VersionOverlord means to handle this problem by providing a set of Python command line scripts to automate updating the first three of the above dependency specification locations
* versionoverlord -- lists all the commands and their short names
* querySlugs -- queries repositories for their latest release version
* createSpecification -- creates a dependency specification for a project
* updateDependencies -- updates the supported dependency locations using the generated specification
* draftRelease -- This command creates draft release in the appropriate repository. You must provide a repository slug
* bumpVersion -- Bump version looks for file in `src/<moduleName>/_version.py`. It echoes it to stdout and asks the developer to provide an updated value.
* pickDependencies
* Reads pyproject.toml and picks the dependencies from the `dependencies` section.
* It displays them in an editor.
* The developer removes dependencies he/she does not want to update.
* This command updates the dependency csv file in the same format as the `createSpecification` command.
* It then invokes the `updateDependencies` command to update the files. Unlike `createSpecification`, pickDependencies queries pypi to get the module versions
## Required Environment Variables
The above commands depend on the following environment variables.
```bash
GH_TOKEN - A personal GitHub access token necessary to read repository release information
PROJECTS_BASE - The local directory where the python projects are based
PROJECT - The name of the project; It should be a directory name
```
See the [GitHub Documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) for instructions on how to create a usable access token. These scripts assume that a developer keeps all checked out repositories in a single directory. An example, of a PROJECTS_BASE is:
```bash
export PROJECTS_BASE="${HOME}/PycharmProjects"
```
This should be set in your shell startup script. For example `.bash_profile`.
The developer sets the PROJECT environment variable on a project by project basis.
I recommend you use [direnv](https://direnv.net) to manage these.
An example of a .envrc follows:
```bash
export PROJECT=pyutmodel
export GH_TOKEN=DEADBEEF
source pyenv-3.10.6/bin/activate
```
## Advanced Slugs
The command line options for querySlug and createSpecification are advanced GitHub slugs. For example, for the following repositories
https://github.com/hasii2011/pyutmodel
https://github.com/hasii2011/code-ally-basic
The slugs are `hasii2011/pyutmodel` and `hasii2011/code-ally-basic,codeallybasic`, respectively.
Note the advanced part of the third slugs because the package name does not match the repository name;
## Usage
From the above dependency diagram assume the following:
Both the `pyutmodel` and `code-ally-basic` repositories releases have been updated. We need to update the `ogl` dependencies to match the latest of both. Assume both `GH_TOKEN` and `PROJECTS_BASE` are correctly set and `PROJECT` is set to `'ogl'`. Use the following CLI invocation to create the specification file.
```bash
createSpecification -s hasii2011/pyutmodel -s hasii2011/code-ally-basic,codeallybasic
```
The command creates the file `versionSpecification.csv` with the following contents.
```
PackageName,OldVersion,NewVersion
pyutmodel,1.4.0,1.4.1
codeallybasic,0.0.7,0.1.0
```
Again assuming, the previously mentioned environment variables are set the following CLI invocation;
```
updateDependencies
```
correctly updates the following
* setup.py
* requirements.txt
* .circleci/config.yml
## Installation
```
pip install versionoverlord
```
___
Written by <a href="mailto:email@humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2025
## Note
For all kind of problems, requests, enhancements, bug reports, etc., drop me an e-mail.
---
I am concerned about GitHub's Copilot project

I urge you to read about the [Give up GitHub](https://GiveUpGitHub.org) campaign from[the Software Freedom Conservancy](https://sfconservancy.org).
While I do not advocate for all the issues listed there, I do not like that a company like Microsoft may profit from open source projects.
I continue to use GitHub because it offers the services I need for free. I continue to monitor their terms of service.
Any use of this project's code by GitHub Copilot, past or present, is done without my permission. I do not consent to GitHub's use of this project's code in Copilot.
Raw data
{
"_id": null,
"home_page": null,
"name": "versionoverlord",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": "\"Humberto A. Sanchez II\" <Humbert.A.Sanchez.II@gmail.com>",
"keywords": "version management, dependencies, python",
"author": null,
"author_email": "\"Humberto A. Sanchez II\" <Humbert.A.Sanchez.II@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b0/e2/7d1c46e3ee5b4fb1442392f79f14db73ff08c838e6d14ff80feb6c057b61/versionoverlord-2.1.0.tar.gz",
"platform": null,
"description": "[](https://dl.circleci.com/status-badge/redirect/gh/hasii2011/versionoverlord/tree/master)\n[](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)\n[](https://badge.fury.io/py/versionoverlord)\n\n## Rationale\n\nThese utilities are meant to solve a problem with related repositories and their dependency relationships\n\nProjects may have hierarchical dependencies. See the following [Pyut](https://github.com/hasii2011/PyUt) dependency diagram. \n\n\n\n```mermaid\n---\ntitle: Pyut Dependency Graph\n---\nflowchart\n\tdirection RL\n\t\n pyut(Pyut 9.6.0) --> oglio(oglio 2.3.4)\n pyut(Pyut 9.6.0) --> pyutplugins(pyutplugins 3.2.3)\n \n pyutplugins(pyutplugins 3.2.3) -.-> oglio(oglio 2.3.4)\n pyutplugins(pyutplugins 3.2.3) & oglio(oglio 2.3.4) --> untanglepyut.2.6.3\n\n pyut(Pyut 9.6.0) & oglio(oglio 2.3.4) & untanglepyut.2.6.3 --> ogl.3.6.7\n \n pyut(Pyut 9.6.0) & pyutplugins(pyutplugins 3.2.3) & oglio(oglio 2.3.4) & untanglepyut.2.6.3 & ogl.3.6.7 -...-> pyutmodelv2.2.2.3\n pyut(Pyut 9.6.0) & pyutplugins(pyutplugins 3.2.3) & ogl.3.6.7 ----> codeallybasic.1.9.0\n\n style pyut fill:#ee4,stroke:#333,stroke-width:\n %% linkStyle 1 stroke:#ff3,stroke-width:4px,color:red;\n```\n\nThe above diagram illustrates how low-level dependencies ripple up the dependency tree. \n\n## Dependency Locations\n\nAdditionally, projects may specify dependencies in different places. Examples of the dependency locations are\n\n* setup.py\n* requirements.txt\n* .circleci/config.yml\n* .travis.yml\n\n\n\n## Python Console Scripts\n\nVersionOverlord means to handle this problem by providing a set of Python command line scripts to automate updating the first three of the above dependency specification locations\n\n* versionoverlord -- lists all the commands and their short names\n* querySlugs -- queries repositories for their latest release version\n* createSpecification -- creates a dependency specification for a project \n* updateDependencies -- updates the supported dependency locations using the generated specification\n* draftRelease -- This command creates draft release in the appropriate repository. You must provide a repository slug\n* bumpVersion -- Bump version looks for file in `src/<moduleName>/_version.py`. It echoes it to stdout and asks the developer to provide an updated value.\n* pickDependencies \n * Reads pyproject.toml and picks the dependencies from the `dependencies` section. \n * It displays them in an editor.\n * The developer removes dependencies he/she does not want to update. \n * This command updates the dependency csv file in the same format as the `createSpecification` command.\n * It then invokes the `updateDependencies` command to update the files. Unlike `createSpecification`, pickDependencies queries pypi to get the module versions\n \n\n\n\n\n## Required Environment Variables\n\nThe above commands depend on the following environment variables.\n\n```bash\nGH_TOKEN - A personal GitHub access token necessary to read repository release information\nPROJECTS_BASE - The local directory where the python projects are based\nPROJECT - The name of the project; It should be a directory name\n```\n\nSee the [GitHub Documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) for instructions on how to create a usable access token. These scripts assume that a developer keeps all checked out repositories in a single directory. An example, of a PROJECTS_BASE is:\n\n```bash\nexport PROJECTS_BASE=\"${HOME}/PycharmProjects\" \n```\n\nThis should be set in your shell startup script. For example `.bash_profile`.\n\nThe developer sets the PROJECT environment variable on a project by project basis. \nI recommend you use [direnv](https://direnv.net) to manage these. \nAn example of a .envrc follows:\n\n```bash\nexport PROJECT=pyutmodel\nexport GH_TOKEN=DEADBEEF\nsource pyenv-3.10.6/bin/activate\n```\n\n## Advanced Slugs\n\nThe command line options for querySlug and createSpecification are advanced GitHub slugs. For example, for the following repositories\n\nhttps://github.com/hasii2011/pyutmodel\n\nhttps://github.com/hasii2011/code-ally-basic\n\nThe slugs are `hasii2011/pyutmodel` and `hasii2011/code-ally-basic,codeallybasic`, respectively.\nNote the advanced part of the third slugs because the package name does not match the repository name; \n\n\n\n## Usage\n\nFrom the above dependency diagram assume the following:\n\nBoth the `pyutmodel` and `code-ally-basic` repositories releases have been updated. We need to update the `ogl` dependencies to match the latest of both. Assume both `GH_TOKEN` and `PROJECTS_BASE` are correctly set and `PROJECT` is set to `'ogl'`. Use the following CLI invocation to create the specification file.\n\n```bash\ncreateSpecification -s hasii2011/pyutmodel -s hasii2011/code-ally-basic,codeallybasic\n```\n\nThe command creates the file `versionSpecification.csv` with the following contents.\n\n```\nPackageName,OldVersion,NewVersion\npyutmodel,1.4.0,1.4.1\ncodeallybasic,0.0.7,0.1.0 \n```\n\nAgain assuming, the previously mentioned environment variables are set the following CLI invocation;\n\n```\nupdateDependencies\n```\n\ncorrectly updates the following\n\n* setup.py\n* requirements.txt\n* .circleci/config.yml\n\n## Installation\n\n```\npip install versionoverlord\n```\n___\n\nWritten by <a href=\"mailto:email@humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto\">Humberto A. Sanchez II</a> (C) 2025\n\n\n## Note\nFor all kind of problems, requests, enhancements, bug reports, etc., drop me an e-mail.\n\n\n---\nI am concerned about GitHub's Copilot project\n\n\n\nI urge you to read about the [Give up GitHub](https://GiveUpGitHub.org) campaign from[the Software Freedom Conservancy](https://sfconservancy.org).\n\nWhile I do not advocate for all the issues listed there, I do not like that a company like Microsoft may profit from open source projects.\n\nI continue to use GitHub because it offers the services I need for free. I continue to monitor their terms of service.\n\nAny use of this project's code by GitHub Copilot, past or present, is done without my permission. I do not consent to GitHub's use of this project's code in Copilot.\n",
"bugtrack_url": null,
"license": "GNU AFFERO GENERAL PUBLIC LICENSE",
"summary": "Dependency Manager",
"version": "2.1.0",
"project_urls": {
"Repository": "https://github.com/hasii2011/versionoverlord"
},
"split_keywords": [
"version management",
" dependencies",
" python"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "fbd9d7ac3cf1a871c8da53ecd21ae06d64dc2284926a4af40c4a565b6e2ecd5c",
"md5": "eacf0528add3b9b0b54661338704f6e1",
"sha256": "e1bd9ed84db6ad254f1bbc5b64969530b6cc56bdf6fb4821b9d97dfc250519bf"
},
"downloads": -1,
"filename": "versionoverlord-2.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "eacf0528add3b9b0b54661338704f6e1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 44104,
"upload_time": "2025-02-05T22:39:44",
"upload_time_iso_8601": "2025-02-05T22:39:44.420649Z",
"url": "https://files.pythonhosted.org/packages/fb/d9/d7ac3cf1a871c8da53ecd21ae06d64dc2284926a4af40c4a565b6e2ecd5c/versionoverlord-2.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b0e27d1c46e3ee5b4fb1442392f79f14db73ff08c838e6d14ff80feb6c057b61",
"md5": "8c9bedda9adfa8a233d2ed3629776e6e",
"sha256": "44ae163c54bbc3a2e2ea1bbcd48723d0a2d88a6f0859882b9973839efc44992f"
},
"downloads": -1,
"filename": "versionoverlord-2.1.0.tar.gz",
"has_sig": false,
"md5_digest": "8c9bedda9adfa8a233d2ed3629776e6e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 34920,
"upload_time": "2025-02-05T22:39:46",
"upload_time_iso_8601": "2025-02-05T22:39:46.158611Z",
"url": "https://files.pythonhosted.org/packages/b0/e2/7d1c46e3ee5b4fb1442392f79f14db73ff08c838e6d14ff80feb6c057b61/versionoverlord-2.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-05 22:39:46",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hasii2011",
"github_project": "versionoverlord",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"circle": true,
"lcname": "versionoverlord"
}