cycl


Namecycl JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryCLI and Python SDK to help identify cross-stack import/export circular dependencies, for a given AWS account and region.
upload_time2025-02-11 04:19:18
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords aws cdk cycle circular dependency infrastructure boto3 cloud
VCS
bugtrack_url
requirements boto3 networkx
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # cycl

[![PyPI](https://img.shields.io/pypi/v/cycl)](https://pypi.org/project/cycl/)
[![Downloads](https://static.pepy.tech/badge/cycl)](https://pepy.tech/projects/cycl)
[![Build Status](https://github.com/tcm5343/cycl/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/tcm5343/cycl/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

cycl is a CLI and Python SDK to help identify cross-stack import/export circular dependencies, for a given AWS account and region.

The successor to [circular-dependency-detector](https://github.com/tcm5343/circular-dependency-detector), which was built at the University of Texas at Austin.

## Getting started

Install `cycl` by running `pip install cycl`.

### CLI

- `cycl check --exit-zero` - exit 0 regardless of result
- `cycl check --log-level` - set the logging level (default: WARNING)
- `cycl check --cdk-out /path/to/cdk.out` - path to cdk.out, where stacks are CDK synthesized to CFN templates

## How to use cycl?

There are two main use cases for `cycl`.

1. In a pipeline. `cycl` is best used to detect circular dependencies before a deployment. If you're using the AWS CDK v2 (v1 support coming soon), simply synthesize you templates to a directory and pass that directory to `cycl` using `--cdk-out-path some-path-here `. This allows `cycl` to find all existing cycles and then those to be introduced by the deployment. This prevents the circular dependency from ever being introduced. If your pipeline deploys more than once, you should execute `cycl` before each deployment.
2. To perform analysis. While a CLI is best used in a pipeline, if you require analysis which is not currently supported, you can use the SDK. The SDK gives you all the information that `cycl` collects.

## Why use cycl?

Over the lifetime of a project, circular references are bound to be introduced. They may not be noticed until you need to re-deploy some infrastructure. A good example is disaster recovery testing and potentially deploying all your infrastructure from scratch in a new region. This tool detects those changes.

## Contributing

`cycl` is being actively developed, instructions will come as it becomes more stable.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "cycl",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "aws, cdk, cycle, circular, dependency, infrastructure, boto3, cloud",
    "author": null,
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/7d/70/b5389b26014c8aa9ed7af4ffbee71090544a9d2104692c2a11b44bc53d9f/cycl-0.1.0.tar.gz",
    "platform": null,
    "description": "# cycl\n\n[![PyPI](https://img.shields.io/pypi/v/cycl)](https://pypi.org/project/cycl/)\n[![Downloads](https://static.pepy.tech/badge/cycl)](https://pepy.tech/projects/cycl)\n[![Build Status](https://github.com/tcm5343/cycl/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/tcm5343/cycl/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\ncycl is a CLI and Python SDK to help identify cross-stack import/export circular dependencies, for a given AWS account and region.\n\nThe successor to [circular-dependency-detector](https://github.com/tcm5343/circular-dependency-detector), which was built at the University of Texas at Austin.\n\n## Getting started\n\nInstall `cycl` by running `pip install cycl`.\n\n### CLI\n\n- `cycl check --exit-zero` - exit 0 regardless of result\n- `cycl check --log-level` - set the logging level (default: WARNING)\n- `cycl check --cdk-out /path/to/cdk.out` - path to cdk.out, where stacks are CDK synthesized to CFN templates\n\n## How to use cycl?\n\nThere are two main use cases for `cycl`.\n\n1. In a pipeline. `cycl` is best used to detect circular dependencies before a deployment. If you're using the AWS CDK v2 (v1 support coming soon), simply synthesize you templates to a directory and pass that directory to `cycl` using `--cdk-out-path some-path-here `. This allows `cycl` to find all existing cycles and then those to be introduced by the deployment. This prevents the circular dependency from ever being introduced. If your pipeline deploys more than once, you should execute `cycl` before each deployment.\n2. To perform analysis. While a CLI is best used in a pipeline, if you require analysis which is not currently supported, you can use the SDK. The SDK gives you all the information that `cycl` collects.\n\n## Why use cycl?\n\nOver the lifetime of a project, circular references are bound to be introduced. They may not be noticed until you need to re-deploy some infrastructure. A good example is disaster recovery testing and potentially deploying all your infrastructure from scratch in a new region. This tool detects those changes.\n\n## Contributing\n\n`cycl` is being actively developed, instructions will come as it becomes more stable.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "CLI and Python SDK to help identify cross-stack import/export circular dependencies, for a given AWS account and region.",
    "version": "0.1.0",
    "project_urls": {
        "Repository": "http://github.com/tcm5343/cycl"
    },
    "split_keywords": [
        "aws",
        " cdk",
        " cycle",
        " circular",
        " dependency",
        " infrastructure",
        " boto3",
        " cloud"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "222dcbeab9620d6c8e27afb61f8c6d804a869a3fdf064c958734432f42629598",
                "md5": "f9e60df41c293ef26e53881d28b71fa1",
                "sha256": "6d7890db882bb7165063e253548b66532b9c12150a607ad183c5d3ff6c2b200e"
            },
            "downloads": -1,
            "filename": "cycl-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f9e60df41c293ef26e53881d28b71fa1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 8506,
            "upload_time": "2025-02-11T04:19:16",
            "upload_time_iso_8601": "2025-02-11T04:19:16.785953Z",
            "url": "https://files.pythonhosted.org/packages/22/2d/cbeab9620d6c8e27afb61f8c6d804a869a3fdf064c958734432f42629598/cycl-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7d70b5389b26014c8aa9ed7af4ffbee71090544a9d2104692c2a11b44bc53d9f",
                "md5": "362972fce2a894249cf6fb7fe88bae48",
                "sha256": "857648d5628f7c231841f5ae8786cd76481aa53fcf6b3e09775e87383a819e0e"
            },
            "downloads": -1,
            "filename": "cycl-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "362972fce2a894249cf6fb7fe88bae48",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 8496,
            "upload_time": "2025-02-11T04:19:18",
            "upload_time_iso_8601": "2025-02-11T04:19:18.655481Z",
            "url": "https://files.pythonhosted.org/packages/7d/70/b5389b26014c8aa9ed7af4ffbee71090544a9d2104692c2a11b44bc53d9f/cycl-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-11 04:19:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tcm5343",
    "github_project": "cycl",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "boto3",
            "specs": [
                [
                    "==",
                    "1.36.14"
                ]
            ]
        },
        {
            "name": "networkx",
            "specs": [
                [
                    "==",
                    "3.4.2"
                ]
            ]
        }
    ],
    "lcname": "cycl"
}
        
Elapsed time: 7.35354s