[![CircleCI](https://dl.circleci.com/status-badge/img/gh/hasii2011/versionoverlord/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/hasii2011/versionoverlord/tree/master)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
[![PyPI version](https://badge.fury.io/py/versionoverlord.svg)](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 LR
pyut(Pyut 7.7.0) --> oglio(oglio 0.5.80)
pyut(Pyut 7.7.0) --> pyutplugins(pyutplugins 0.8.40)
pyutplugins(pyutplugins 0.8.40) -.-> oglio(oglio 0.5.80)
pyutplugins(pyutplugins 0.8.40) & oglio(oglio 0.5.80) --> untanglepyut.0.6.40
pyut(Pyut 7.7.0) & oglio(oglio 0.5.80) & untanglepyut.0.6.40 --> ogl.0.70.20
pyut(Pyut 7.7.0) & pyutplugins(pyutplugins 0.8.40) & oglio(oglio 0.5.80) & untanglepyut.0.6.40 & ogl.0.70.20 -...-> pyutmodel.1.4.2
pyut(Pyut 7.7.0) & pyutplugins(pyutplugins 0.8.40) & ogl.0.70.20 ----> hasiicommon.0.2.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
* 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
## Required Environment Variables
The above commands depend on the following environment variables.
```bash
GITHUB_ACCESS_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
source pyenv-3.10.6/bin/activate
```
## Advanced Slugs
The command line options for querySlug and createSpec are advanced GitHub slugs. For example, for the following repositories
https://github.com/hasii2011/pyutmodel
https://github.com/hasii2011/hasiicommon
https://github.com/hasii2011/code-ally-basic
The slugs are `hasii2011/pyutmodel` and `hasii2011/hasiicommon` 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 `hasiicommon` repositories have been updated. We need to update the `ogl` dependencies to match the latest of both. Assume both `GITHUB_ACCESS_TOKEN` and `PROJECTS_BASE` are correctly set and `PROJECT` is set to `'ogl'`. Use the following CLI invocation to create the specification file.
```
createSpecification -s hasii2011/pyutmodel -s hasii2011/hasiicommon
```
The command creates the file `versionSpecification.csv` with the following contents.
```
PackageName,OldVersion,NewVersion
pyutmodel,1.4.0,1.4.1
hasiicommon,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) 2023
## Note
For all kind of problems, requests, enhancements, bug reports, etc.,
Drop me an e-mail.
---
I am concerned about GitHub's Copilot project
![](https://github.com/hasii2011/code-ally-basic/blob/master/developer/SillyGitHub.png)
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/86/48/2dd010daa7015d4b763f7a6138385c2daece9515c357a51164e2da5b822b/versionoverlord-1.6.0.tar.gz",
"platform": null,
"description": "[![CircleCI](https://dl.circleci.com/status-badge/img/gh/hasii2011/versionoverlord/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/hasii2011/versionoverlord/tree/master)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)\n[![PyPI version](https://badge.fury.io/py/versionoverlord.svg)](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 LR\n\t\n pyut(Pyut 7.7.0) --> oglio(oglio 0.5.80)\n pyut(Pyut 7.7.0) --> pyutplugins(pyutplugins 0.8.40)\n \n pyutplugins(pyutplugins 0.8.40) -.-> oglio(oglio 0.5.80)\n pyutplugins(pyutplugins 0.8.40) & oglio(oglio 0.5.80) --> untanglepyut.0.6.40\n\n pyut(Pyut 7.7.0) & oglio(oglio 0.5.80) & untanglepyut.0.6.40 --> ogl.0.70.20\n \n pyut(Pyut 7.7.0) & pyutplugins(pyutplugins 0.8.40) & oglio(oglio 0.5.80) & untanglepyut.0.6.40 & ogl.0.70.20 -...-> pyutmodel.1.4.2\n pyut(Pyut 7.7.0) & pyutplugins(pyutplugins 0.8.40) & ogl.0.70.20 ----> hasiicommon.0.2.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* 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\n\n\n## Required Environment Variables\n\nThe above commands depend on the following environment variables.\n\n```bash\nGITHUB_ACCESS_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\nsource pyenv-3.10.6/bin/activate\n```\n\n## Advanced Slugs\n\nThe command line options for querySlug and createSpec are advanced GitHub slugs. For example, for the following repositories\n\nhttps://github.com/hasii2011/pyutmodel\n\nhttps://github.com/hasii2011/hasiicommon\n\nhttps://github.com/hasii2011/code-ally-basic\n\nThe slugs are `hasii2011/pyutmodel` and `hasii2011/hasiicommon` 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 `hasiicommon` repositories have been updated. We need to update the `ogl` dependencies to match the latest of both. Assume both `GITHUB_ACCESS_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```\ncreateSpecification -s hasii2011/pyutmodel -s hasii2011/hasiicommon\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\nhasiicommon,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) 2023\n\n\n## Note\nFor all kind of problems, requests, enhancements, bug reports, etc.,\nDrop me an e-mail.\n\n\n---\nI am concerned about GitHub's Copilot project\n\n![](https://github.com/hasii2011/code-ally-basic/blob/master/developer/SillyGitHub.png)\n\nI urge you to read about the\n[Give up GitHub](https://GiveUpGitHub.org) campaign from\n[the Software Freedom Conservancy](https://sfconservancy.org).\n\nWhile I do not advocate for all the issues listed there, I do not like that\na company like Microsoft may profit from open source projects.\n\nI continue to use GitHub because it offers the services I need for free. \nI continue to monitor their terms of service.\n\nAny use of this project's code by GitHub Copilot, past or present, is done\nwithout my permission. I do not consent to GitHub's use of this project's\ncode in Copilot.\n",
"bugtrack_url": null,
"license": "GNU AFFERO GENERAL PUBLIC LICENSE",
"summary": "Dependency Manager",
"version": "1.6.0",
"project_urls": {
"Repository": "https://github.com/hasii2011/versionoverlord"
},
"split_keywords": [
"version management",
" dependencies",
" python"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "82978c8c09c75166dd20979f7d00c029e594f011cc76780481b57699c8980afe",
"md5": "1da07c8e6a540d0d3c28aa8c825bb536",
"sha256": "0f1a88149521809e061ea14b17085aab08ed02834b790a5149d8e642c6e83826"
},
"downloads": -1,
"filename": "versionoverlord-1.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1da07c8e6a540d0d3c28aa8c825bb536",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 33551,
"upload_time": "2024-10-27T00:47:27",
"upload_time_iso_8601": "2024-10-27T00:47:27.609891Z",
"url": "https://files.pythonhosted.org/packages/82/97/8c8c09c75166dd20979f7d00c029e594f011cc76780481b57699c8980afe/versionoverlord-1.6.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "86482dd010daa7015d4b763f7a6138385c2daece9515c357a51164e2da5b822b",
"md5": "ab9f90cedb750400a0383ec5fcd1e6ec",
"sha256": "6d40f2e1f143a5264f4f5d0375c14586d8e98b3a862571d4ebdc78b811a6a905"
},
"downloads": -1,
"filename": "versionoverlord-1.6.0.tar.gz",
"has_sig": false,
"md5_digest": "ab9f90cedb750400a0383ec5fcd1e6ec",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 27719,
"upload_time": "2024-10-27T00:47:28",
"upload_time_iso_8601": "2024-10-27T00:47:28.974363Z",
"url": "https://files.pythonhosted.org/packages/86/48/2dd010daa7015d4b763f7a6138385c2daece9515c357a51164e2da5b822b/versionoverlord-1.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-27 00:47:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hasii2011",
"github_project": "versionoverlord",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"circle": true,
"requirements": [],
"lcname": "versionoverlord"
}