{"id":16458232,"url":"https://github.com/boromir674/automated-workflows","last_synced_at":"2026-05-15T10:17:44.653Z","repository":{"id":206062055,"uuid":"715684311","full_name":"boromir674/automated-workflows","owner":"boromir674","description":"Automated Workflows for implementing Git Ops and CI/CD.","archived":false,"fork":false,"pushed_at":"2025-11-10T23:48:38.000Z","size":618,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-11T01:12:22.158Z","etag":null,"topics":["automated-deployment","cicd","github-workflows","pipelines","reusable-workflows"],"latest_commit_sha":null,"homepage":"https://automated-workflows.readthedocs.io/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boromir674.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-07T16:17:35.000Z","updated_at":"2025-06-16T01:12:29.000Z","dependencies_parsed_at":"2023-12-08T03:22:24.682Z","dependency_job_id":"2a5f6c1e-8c52-4938-816c-16ef90fa08e7","html_url":"https://github.com/boromir674/automated-workflows","commit_stats":null,"previous_names":["boromir674/automated-workflows"],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/boromir674/automated-workflows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fautomated-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fautomated-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fautomated-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fautomated-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boromir674","download_url":"https://codeload.github.com/boromir674/automated-workflows/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fautomated-workflows/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33062918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-15T02:00:06.351Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["automated-deployment","cicd","github-workflows","pipelines","reusable-workflows"],"created_at":"2024-10-11T10:44:39.807Z","updated_at":"2026-05-15T10:17:44.625Z","avatar_url":"https://github.com/boromir674.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CI/CD Workflows\n\n[![CI Status](https://img.shields.io/github/actions/workflow/status/boromir674/automated-workflows/cicd.yml?style=plastic\u0026logo=github-actions\u0026logoColor=lightblue\u0026label=CI%20Tests\u0026color=lightgreen\u0026link=https%3A%2F%2Fgithub.com%2Fboromir674%2Fautomated-workflows%2Factions%2Fworkflows%2Fcicd.yml)](https://github.com/boromir674/automated-workflows/actions/workflows/cicd.yml)\n[![Read the Docs](https://img.shields.io/readthedocs/automated-workflows?style=plastic\u0026logo=readthedocs\u0026logoColor=lightblue\u0026label=Docs\u0026color=lightgreen\u0026link=https%3A%2F%2Fautomated-workflows.readthedocs.io%2F)](https://automated-workflows.readthedocs.io)\n[![License](https://img.shields.io/github/license/boromir674/automated-workflows?style=plastic\u0026)](https://github.com/boromir674/automated-workflows/blob/main/LICENSE)\n\n`Reusable Workflows` for **CI/CD Pipelines**, implemented in `Github Actions`.\n\n\u003e **Live Documentation** at **https://automated-workflows.readthedocs.io.**\n\n- Source: https://github.com/boromir674/automated-workflows\n- CI: https://github.com/boromir674/automated-workflows/actions\n\n\n## Reusable Workflows\n\n- **CI/CD**\n  - [**Docker**](.github/workflows/docker.yml): Build Docker image and Push to Dockerhub.\n  - [**Python Build**](.github/workflows/test_build.yml): Build n Test Python Distributions.\n  - [**PyPI**](.github/workflows/pypi_env.yml): Upload Python distribution to PyPI\n  - [**Docs Build**](.github/workflows/policy_docs.yml): Docs Site Build with `Mkdocs` or `Sphinx`\n  - [**Lint**](.github/workflows/lint.yml): Static Code Analysis\n  - [**Code Visualization**](.github/workflows/python_imports.yml): Visualize Python Code as an `svg` Graph of `Module Imports`\n- **Git Ops**\n  - [**Open PR to Boarding**](.github/workflows/go-pr-to-boarding.yml): Open a PR on a **Boarding Branch**\n  - [**Acceptance as Single Job Status**](.github/workflows/go-single-status.yml): Model **Git Ops Acceptance** as one Job\n\n\n\u003e [!NOTE]\n\u003e See the **API** `References` in the [Documentation](https://automated-workflows.readthedocs.io/en/main/) for all the `Reusable Workflows`.\n\n## Git Ops Processes\n- [**`release-me`**](https://automated-workflows.readthedocs.io/en/main/topics/gitops/): Ship your Branch to `main` with 2 Steps/PRs\n\n\u003e [!NOTE]\n\u003e See the [`how-to` **Guides**](https://automated-workflows.readthedocs.io/en/main/guides/gitops/) for implementing your **Git Ops Processes**.\n\n## Quickstart\n\n### Docker\n\nContinuously **Publish to Dockerhub** using [`docker.yml`](.github/workflows/docker.yml).\n\n[//]: \u003c\u003e (Style text in \u003csummary\u003e .)\n\n#### Prerequisites\n\n- GitHub account.\n- Access to a repository.\n- Passing a proper DOCKER_USER from `context`\n- Passing a proper DOCKER_PASSWORD from `secrets`\n\n### `Use Case 1: CI/Continuous Deployment`\n\n\"We publish to Dockerhub **only Tested Builds**\"\n\n\u003cdetails\u003e\n\u003c!-- summary text in style of 'fancy text' --\u003e\n\u003csummary\u003e\n  \u003cspan style=\"display: inline; font-weight: bold; color: #0074d9;\"\u003eQuick-start\u003c/span\u003e\n\u003c/summary\u003e\n\n```mermaid\ngraph LR\nworkflow_triggered(\"CI Start\") --\u003e rt{\"Do QA?\"}\nrt -- Yes --\u003e cit\ncit[\"Run Tests\"] --\u003e ifpass{\"Passed?\"}\nifpass -- \"Yes\" --\u003e run_docker[\"Publish Docker\"]\nifpass -- \"No\" --\u003e do_not_publish_broken_build[\"Decline Publish\"]\nrt -- No --\u003e do_not_publish_broken_build\n```\n\n```yaml\nenv:\n  DO_QA: true\n\njobs:\n  build_n_test:\n    runs-on: ubuntu-latest\n    if: always() \u0026\u0026 ${{ env.DO_QA == 'true' }}\n    steps:\n      - run: echo \"Build Code and run Tests\"\n\n  call_docker_job:\n    needs: build_n_test\n    uses: boromir674/automated-workflows/.github/workflows/docker.yml@test\n    with:\n      DOCKER_USER: ${{ vars.DOCKER_USER }}\n      acceptance_policy: 2\n      image_slug: \"my_app_name\"\n      image_tag: \"1.0.0\"\n      tests_pass: ${{ needs.build_n_test.result == 'success' }}\n      tests_run: ${{ !contains(fromJSON('[\"skipped\", \"cancelled\"]'), needs.build_n_test.result) }}\n    secrets:\n      DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}\n```\n\u003c/details\u003e\n\n\n### `Use Case 2: CI/Continuous Delivery`\n\n- \"Publish to Dockerhub Builds bearing a **'Tests Passed'** or a **'Tests Skipped'**\"\n\n\n\u003cdetails\u003e\n\u003c!-- summary text in style of 'fancy text' --\u003e\n\u003csummary\u003e\n  \u003cspan style=\"display: inline; font-weight: bold; color: #0074d9;\"\u003eQuick-start\u003c/span\u003e\n\u003c/summary\u003e\n\n- Not tested builds (ie when CI Test Job is skipped for any reason), are still treated as eligible for Docker Publish.\n- Useful to trigger Docker Job, without waiting for Tests.\n\n```mermaid\ngraph LR\nworkflow_triggered(\"CI Start\") --\u003e rt{\"Run QA?\"}\nrt -- Yes --\u003e cit\ncit[\"Run Tests\"] --\u003e ifpass{\"Passed?\"}\nifpass -- \"Yes\" --\u003e run_docker[\"Publish Docker\"]\nifpass -- \"No\" --\u003e do_not_publish_broken_build[\"Decline Publish\"]\nrt -- No --\u003e run_docker\n```\n\n```yaml\nenv:\n  DO_QA: false\n\njobs:\n  build_n_test:\n    runs-on: ubuntu-latest\n    if: always() \u0026\u0026 ${{ env.DO_QA == 'true' }}\n    steps:\n      - run: echo \"Build Code and run Tests\"\n\n  call_docker_job:\n    needs: build_n_test\n    uses: boromir674/automated-workflows/.github/workflows/docker.yml@test\n    with:\n      DOCKER_USER: ${{ vars.DOCKER_USER }}\n      acceptance_policy: 3\n      image_slug: \"my_app_name\"\n      image_tag: \"1.0.0\"\n      tests_pass: ${{ needs.build_n_test.result == 'success' }}\n      tests_run: ${{ !contains(fromJSON('[\"skipped\", \"cancelled\"]'), needs.build_n_test.result) }}\n    secrets:\n      DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}\n```\n\n\u003c/details\u003e\n\n## License\n\n- See the [LICENSE](LICENSE) file to read the License, under which this Project is released under.\n- This project is licensed under the [GNU Affero General Public License v3.0](LICENSE).\n- Free software: `GNU Affero General Public License v3.0`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboromir674%2Fautomated-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboromir674%2Fautomated-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboromir674%2Fautomated-workflows/lists"}