{"id":24861995,"url":"https://github.com/hpcflow/python-release-workflow","last_synced_at":"2026-03-06T17:36:09.515Z","repository":{"id":94092780,"uuid":"470101373","full_name":"hpcflow/python-release-workflow","owner":"hpcflow","description":"A template repository containing some GitHub Actions workflows for automating releases","archived":false,"fork":false,"pushed_at":"2025-11-15T13:11:27.000Z","size":167,"stargazers_count":1,"open_issues_count":11,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-15T15:16:44.074Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hpcflow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-03-15T10:06:28.000Z","updated_at":"2025-11-15T13:11:28.000Z","dependencies_parsed_at":"2024-03-12T17:28:48.773Z","dependency_job_id":"0c8318bb-5ff8-4173-8b19-9e5e603e1945","html_url":"https://github.com/hpcflow/python-release-workflow","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hpcflow/python-release-workflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcflow%2Fpython-release-workflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcflow%2Fpython-release-workflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcflow%2Fpython-release-workflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcflow%2Fpython-release-workflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hpcflow","download_url":"https://codeload.github.com/hpcflow/python-release-workflow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcflow%2Fpython-release-workflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30188356,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T17:33:53.563Z","status":"ssl_error","status_checked_at":"2026-03-06T17:33:51.678Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-31T22:21:13.077Z","updated_at":"2026-03-06T17:36:09.495Z","avatar_url":"https://github.com/hpcflow.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# python-release-workflow\n\nA template repository containing some GitHub Actions workflows for automating releases of Python packages. In particular we:\n\n- Automate the version bump increment by using conventional commits\n- Automate generation of a CHANGELOG\n- Automate generation of Pyinstaller executables on multiple platforms\n- Automate releasing the package to PyPI\n- Automate the GitHub release\n- Automate building Sphinx documentation and adding the built HTML as a new documentation version to a GitHub pages site\n\n## Branching strategy\n\nIn this workflow, we assume two special branches, from which releases/deployments are made: `main` and `develop`:\n\n- Merge pull-request into `develop` ==\u003e make pre-release\n- Merge pull-request into `main` from `develop` ==\u003e make stable release\n\nTo avoid mistakes, we should \"protect\" these branches on GitHub, meaning all incoming code must be integrated via a pull request (i.e. no direct commits are allowed). However, we do need to allow a \"bot\" account to circumvent branch protection for the purposes of committing:\n  - the version bump, updated CHANGELOG, and new tag\n  - pre-commit fixes\n  - documentation related commits\n\nall of which need to occur during the GitHub actions workflows.\n\n## Required software\n\n- Poetry: for managing package dependencies\n- commitizen: for determining the correct version bump increment (major, minor, or patch) according to the commit messages\n- git-chglog: for generating a changelog between two tags\n- PyInstaller: for generating single-file executables from a Python package\n- Sphinx: for building documentation\n\n## Skipping the release workflow\n\nWe can prevent release workflow running on pull-request merge by adding `[skip release]` to the PR title.\n\n\n# Using these workflows in another repository\n\nIn the [matflow](https://github.com/hpcflow/matflow-new) and [hpcflow](https://github.com/hpcflow/hpcflow-new) repositories the script `remotes.py` configures the remotes, synchronizes the contents, and generates the workflows from the jinja2 templates.\n\nAll you need to do is run the python script `.github/remotes.py`, and commit the staged changes.\n\nAlternatively, you may want to perform each step manually, as indicated below.\n\n## Configure this repository as a remote\n\nIn the target repository:\n\n- Add this repo as a remote: `git remote add python-release-workflow https://github.com/hpcflow/python-release-workflow.git`\n- Effectively set the remote as fetch-only to avoid accidentally pushing to it: `git remote set-url --push python-release-workflow no-pushing`\n\nNote: the remote only needs to be set up once.\nSynchronization and workflow generation from the jinja2 templates needs to be done every time.\n\n## Sync with the remote\n\n- Fetch branches and commits from the `python-release-workflow` repository:\n```\ngit fetch python-release-workflow\n```\nCommits to `BRANCHNAME` in `python-release-workflow` will be stored locally in the branch `python-release-workflow/BRANCHNAME`\n- Checkout the branch you want to synchronise workflow updates to:\n```\ngit checkout aplowman/develop\n```\n- Checkout only the `.github` directory from the `python-release-workflow` branch of interest:\n```\ngit checkout python-release-workflow/BRANCHNAME -- .github/\n```\n- Stage, commit, and push the changes as normal:\n```\ngit add .github/\ngit commit -m \"build: update GH Actions workflows\"\ngit push\n```\n\n\n## Generate the workflow files from the Jinja2 templates\n\nRun:\n```\npoetry run python .github/workflows/generate_workflows.py .github/workflows .github/workflows/vars.jsonc\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhpcflow%2Fpython-release-workflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhpcflow%2Fpython-release-workflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhpcflow%2Fpython-release-workflow/lists"}