{"id":13633575,"url":"https://github.com/usecannon/cannon","last_synced_at":"2025-04-06T12:09:18.574Z","repository":{"id":45106557,"uuid":"513232514","full_name":"usecannon/cannon","owner":"usecannon","description":"Manage EVM protocol deployments. Inspired by Docker, Terraform, and npm.","archived":false,"fork":false,"pushed_at":"2024-04-13T21:46:07.000Z","size":105913,"stargazers_count":77,"open_issues_count":9,"forks_count":16,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-04-14T05:13:06.115Z","etag":null,"topics":["anvil","ethereum","evm","hardhat","solidity"],"latest_commit_sha":null,"homepage":"https://usecannon.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/usecannon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-07-12T17:24:36.000Z","updated_at":"2024-05-07T08:40:40.173Z","dependencies_parsed_at":"2024-03-10T15:44:11.114Z","dependency_job_id":"e1a7c6f6-ecdf-4e98-b2f8-f355d86c0dbe","html_url":"https://github.com/usecannon/cannon","commit_stats":{"total_commits":878,"total_committers":7,"mean_commits":"125.42857142857143","dds":0.5649202733485194,"last_synced_commit":"9b6d7ceb8dd28874756ce739f5df9a0c3a0551b4"},"previous_names":[],"tags_count":359,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usecannon%2Fcannon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usecannon%2Fcannon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usecannon%2Fcannon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usecannon%2Fcannon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/usecannon","download_url":"https://codeload.github.com/usecannon/cannon/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247478323,"owners_count":20945266,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["anvil","ethereum","evm","hardhat","solidity"],"created_at":"2024-08-01T23:00:48.573Z","updated_at":"2025-04-06T12:09:18.553Z","avatar_url":"https://github.com/usecannon.png","language":"JavaScript","funding_links":[],"categories":["Development Tools"],"sub_categories":["Upcoming"],"readme":"# Cannon\n\n![Cannon](packages/website/public/images/terminal-example.svg)\n\nCannon is a DevOps tool for EVM chains. It's a tool for testing, deploying, and publishing of smart contracts.\n\nThis is the monorepo for Cannon. If you're just interested in using the project, [visit the website](https://usecannon.com).\n\n**⚠️ Cannon is under active development. While the interface and functionality are generally stable, use the tool with caution when conducting high-risk deployments.**\n\nFor more information, please see documentation in the modules listed below:\n\n- [`api`](packages/api): Backend for the website.\n- [`cli`](packages/cli): The command-line interface. Run `npx @usecannon/cli --help` for usage information.\n- [`builder`](packages/builder): Builds chain data from cannonfiles. (This is used by the CLI.)\n- [`hardhat-cannon`](packages/hardhat-cannon): Code for the Hardhat plug-in, which wraps the CLI functionality with defaults pulled from a Hardhat project configuration.\n- [`indexer`](packages/indexer): Processes all data for cannon into a Redis database. Used on the website.\n- [`registry`](packages/registry): The smart contract for the package registry.\n- [`repo`](packages/repo): Backend for our homegrown IPFS hosting service.\n- [`website`](packages/website): The website, hosted at https://usecannon.com.\n\nUsage Examples:\n\n- [`router-architecture`](examples/router-architecture): Project demonstrating how to setup an upgradable [Router Architecture](https://www.npmjs.com/package/@synthetixio/router).\n- [`sample-hardhat-project`](examples/sample-hardhat-project): Hardhat project that demonstrates the core functionality of the `hardhat-cannon` module\n- [`sample-foundry-project`](examples/sample-hardhat-project): Foundry project that demonstrates the core functionality of the `cli` module\n\nCannon is 100% open-source, from the dev tooling to our hosted infrastructure.\n\n## Development\n\nCommunity contributions to Cannon are greatly appreciated. Please open pull requests, issues, and discussions in the GitHub repository.\n\nTo load a development version of Cannon, first start by making sure you have the correct node and [pnpm](https://pnpm.io/installation) versions installed.\n\nThen, install the dependencies from the root directory:\n\n```\npnpm i\n```\n\nAfter making changes, rebuild the project:\n\n```\npnpm build\n```\n\nUse the development version of the CLI:\n\n```\ncd ./packages/cli \u0026\u0026 pnpm start -- \u003cpackage:version\u003e\n```\n\nTest changes to the Hardhat plug-in in the sample project:\n\n```\ncd ./examples/sample-hardhat-project \u0026\u0026 pnpm hardhat cannon:build\n```\n\nPreview updates to the website\n\n```\ncd ./packages/website \u0026\u0026 pnpm dev\n```\n\n### Contribution Guidelines\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md)\n\n### Version and Publish\n\nWe bump and publish manually using lerna's [version and publish](https://lerna.js.org/docs/features/version-and-publish) workflow.\n\n#### Stable Release\n\n1. To create a `stable` release, first checkout to a new branch (it should be called `release/*`)\n\n- Note, DO NOT use the version name as the branch name as this can cause conflicts with tags. (eg `v2.12.1` as a branch name is incorrect)\n\n2. Run `pnpm run version` and select one of the desired patch, minor or major versions.\n3. Create PR for the release branch\n4. From the branch, run `pnpm run publish` and follow the prompts.\n5. Merge release PR\n\n#### Alpha Release\n\n1. To create an `alpha` release, first checkout to a new branch (it can be called `release-alpha` or something similar)\n\n- Note, DO NOT use the version name as the branch name as this can cause conflicts with tags. (eg `v2.12.1-alpha.0` as a branch name is incorrect)\n\n1. Run `pnpm run version` to bump package versions and select one of the desired alpha versions.\n2. Create PR for the branch and merge when required tests are passing\n3. From the `main` branch, run `pnpm publish-alpha` and follow the prompts.\n\n#### Changesets\n\nWe can also use [changesets](https://github.com/changesets/changesets) to manage versions on our monorepo.\n\nCurrently our [release workflow](.github/workflows/release.yml) on our CI handles bumping package versions and publishing releases to npm through lerna.\nIt only publishes releases if any changeset PR's have been added to the commit history merged into main.\n\nTo trigger a new version bump run the following command (from the root of the repo):\n\n```\n  pnpm changeset\n```\n\n## License\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n\nThis project is licensed under the terms of the GNU General Public License v3.0.\n\nCopyright (C) 2024 Taihou Technologies\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusecannon%2Fcannon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusecannon%2Fcannon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusecannon%2Fcannon/lists"}