stouputils.continuous_delivery.github module
This module contains utilities for continuous delivery on GitHub.
- upload_to_github: Upload the project to GitHub using the credentials and the configuration (make a release and upload the assets, handle existing tag, generate changelog, etc.) 
- validate_credentials(credentials: dict[str, dict[str, str]]) tuple[str, dict[str, str]][source]
- Get and validate GitHub credentials - Parameters:
- credentials (dict[str, dict[str, str]]) – Credentials for the GitHub API 
- Returns:
- str: Owner (the username of the account to use) - dict[str, str]: Headers (for the requests to the GitHub API) 
- Return type:
- tuple[str, dict[str, str]] 
 
- validate_config(github_config: dict[str, Any]) tuple[str, str, str, list[str]][source]
- Validate GitHub configuration - Parameters:
- github_config (dict[str, str]) – Configuration for the GitHub project 
- Returns:
- str: Project name on GitHub - str: Version of the project - str: Build folder path containing zip files to upload to the release - list[str]: List of zip files to upload to the release 
- Return type:
- tuple[str, str, str, list[str]] 
 
- handle_existing_tag(owner: str, project_name: str, version: str, headers: dict[str, str]) bool[source]
- Check if tag exists and handle deletion if needed - Parameters:
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- version (str) – Version to check for existing tag 
- headers (dict[str, str]) – Headers for GitHub API requests 
 
- Returns:
- True if the tag was deleted or if it was not found, False otherwise 
- Return type:
- bool 
 
- delete_existing_release(owner: str, project_name: str, version: str, headers: dict[str, str]) None[source]
- Delete existing release for a version - Parameters:
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- version (str) – Version of the release to delete 
- headers (dict[str, str]) – Headers for GitHub API requests 
 
 
- delete_existing_tag(tag_url: str, headers: dict[str, str]) None[source]
- Delete existing tag - Parameters:
- tag_url (str) – URL of the tag to delete 
- headers (dict[str, str]) – Headers for GitHub API requests 
 
 
- clean_version(version: str, keep: str = '') str[source]
- Clean a version string - Parameters:
- version (str) – The version string to clean 
- keep (str) – The characters to keep in the version string 
 
- Returns:
- The cleaned version string 
- Return type:
- str 
 - >>> clean_version("v1.e0.zfezf0.1.2.3zefz") '1.0.0.1.2.3' >>> clean_version("v1.e0.zfezf0.1.2.3zefz", keep="v") 'v1.0.0.1.2.3' >>> clean_version("v1.2.3b", keep="ab") '1.2.3b' 
- version_to_float(version: str) float[source]
- Converts a version string into a float for comparison purposes. The version string is expected to follow the format of major.minor.patch.something_else…., where each part is separated by a dot and can be extended indefinitely. - Parameters:
- version (str) – The version string to convert. (e.g. “v1.0.0.1.2.3”) 
- Returns:
- The float representation of the version. (e.g. 0) 
- Return type:
- float 
 - >>> version_to_float("v1.0.0") 1.0 >>> version_to_float("v1.0.0.1") 1.000000001 >>> version_to_float("v2.3.7") 2.003007 >>> version_to_float("v1.0.0.1.2.3") 1.0000000010020031 >>> version_to_float("v2.0") > version_to_float("v1.0.0.1") True 
- get_latest_tag(owner: str, project_name: str, version: str, headers: dict[str, str]) tuple[str, str] | tuple[None, None][source]
- Get latest tag information - Parameters:
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- version (str) – Version to remove from the list of tags 
- headers (dict[str, str]) – Headers for GitHub API requests 
 
- Returns:
- SHA of the latest tag commit, None if no tags exist str|None: Version number of the latest tag, None if no tags exist 
- Return type:
- str|None 
 
- get_commits_since_tag(owner: str, project_name: str, latest_tag_sha: str | None, headers: dict[str, str]) list[dict[str, Any]][source]
- Get commits since last tag - Parameters:
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- latest_tag_sha (str|None) – SHA of the latest tag commit 
- headers (dict[str, str]) – Headers for GitHub API requests 
 
- Returns:
- List of commits since the last tag 
- Return type:
- list[dict] 
 
- generate_changelog(commits: list[dict[str, Any]], owner: str, project_name: str, latest_tag_version: str | None, version: str) str[source]
- Generate changelog from commits. They must follow the conventional commits convention. - Convention format: <type>: <description> - Parameters:
- commits (list[dict]) – List of commits to generate changelog from 
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- latest_tag_version (str|None) – Version number of the latest tag 
- version (str) – Current version being released 
 
- Returns:
- Generated changelog text 
- Return type:
- str 
 
- create_tag(owner: str, project_name: str, version: str, headers: dict[str, str]) None[source]
- Create a new tag - Parameters:
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- version (str) – Version for the new tag 
- headers (dict[str, str]) – Headers for GitHub API requests 
 
 
- create_release(owner: str, project_name: str, version: str, changelog: str, headers: dict[str, str]) int[source]
- Create a new release - Parameters:
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- version (str) – Version for the new release 
- changelog (str) – Changelog text for the release 
- headers (dict[str, str]) – Headers for GitHub API requests 
 
- Returns:
- ID of the created release 
- Return type:
- int 
 
- upload_assets(owner: str, project_name: str, release_id: int, build_folder: str, headers: dict[str, str], endswith: list[str]) None[source]
- Upload release assets - Parameters:
- owner (str) – GitHub username 
- project_name (str) – Name of the GitHub repository 
- release_id (int) – ID of the release to upload assets to 
- build_folder (str) – Folder containing assets to upload 
- headers (dict[str, str]) – Headers for GitHub API requests 
- endswith (list[str]) – List of files to upload to the release (every file ending with one of these strings will be uploaded) 
 
 
- upload_to_github(credentials: dict[str, Any], github_config: dict[str, Any]) str[source]
- Upload the project to GitHub using the credentials and the configuration - Parameters:
- credentials (dict[str, Any]) – Credentials for the GitHub API 
- github_config (dict[str, Any]) – Configuration for the GitHub project 
 
- Returns:
- Generated changelog text 
- Return type:
- str 
 - Examples: - > upload_to_github( credentials={ "github": { "api_key": "ghp_...", "username": "Stoupy" } }, github_config={ "project_name": "stouputils", "version": "1.0.0", "build_folder": "build", "endswith": [".zip"] } )