{"id":13532371,"url":"https://github.com/chaaz/versio","last_synced_at":"2025-10-13T08:23:00.539Z","repository":{"id":38398681,"uuid":"291630527","full_name":"chaaz/versio","owner":"chaaz","description":"A version number manager","archived":false,"fork":false,"pushed_at":"2024-02-15T22:15:15.000Z","size":1032,"stargazers_count":113,"open_issues_count":11,"forks_count":8,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-05T00:03:37.492Z","etag":null,"topics":["cicd","deployments","git","versioning"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chaaz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.html","contributing":"docs/contributing.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-08-31T06:12:52.000Z","updated_at":"2025-02-28T17:09:59.000Z","dependencies_parsed_at":"2024-02-15T23:29:09.726Z","dependency_job_id":null,"html_url":"https://github.com/chaaz/versio","commit_stats":{"total_commits":145,"total_committers":3,"mean_commits":"48.333333333333336","dds":0.1448275862068965,"last_synced_commit":"cfa34a97881208f864afda0fc1fa2abb8208860e"},"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaaz%2Fversio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaaz%2Fversio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaaz%2Fversio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chaaz%2Fversio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chaaz","download_url":"https://codeload.github.com/chaaz/versio/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246709923,"owners_count":20821297,"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":["cicd","deployments","git","versioning"],"created_at":"2024-08-01T07:01:10.486Z","updated_at":"2025-10-13T08:22:55.505Z","avatar_url":"https://github.com/chaaz.png","language":"Rust","funding_links":[],"categories":["构建系统和依赖性管理工具","Rust"],"sub_categories":[],"readme":"# Versio\n\nVersio (pronounced _vir_-zhee-oh) is a tool that manages your project's\nversion evolution. It intelligently updates [semantic version\nnumbers](https://semver.org/) based on [conventional\ncommits](https://www.conventionalcommits.org/). It can handle\nchangelogs, project tags, release subdirectories, GPG signing, pull\nrequests, and more.\n\nVersio is especially intelligent when dealing with\n[monorepos](https://en.wikipedia.org/wiki/Monorepo), allowing not only\nindividual control of each project within the repo, but also managing\ndependencies and references among them.\n\n## Getting Started\n\nThe fastest way to install is to use one of the pre-built programs from\nour [Releases](https://github.com/chaaz/versio/releases). See the\n[Installation docs](./docs/installing.md) for more details and alternate\nmethods to install Versio.\n\nOnce installed, try this in your project to create a new release:\n\n```\n$ git pull\n$ versio init  # this creates .versio.yaml\n$ git add .versio.yaml .gitignore\n$ git commit -m \"build: add versio management\"\n$ git push\n$ versio release\n```\n\nWe've listed plenty of other [use cases](./docs/use_cases.md) where you\ncan use Versio in your projects.\n\n## Who's using Versio?\n\nVersio is listed some places, and used by some projects. If you find\nVersio in the wild--or if you use it yourself--and it's not shown here,\nplease submit an [issue](https://github.com/chaaz/versio/issues). We'll\nmake sure you're mentioned.\n\nWe're listed here!\n\n- [Conventional Commits](https://www.conventionalcommits.org/en/about/):\n  Versio supports the official conventional comment specification.\n- [Awesome Monorepo](https://github.com/korfuri/awesome-monorepo): A\n  great collection of tools for handling your monorepo.\n\nWe're used here!\n\n- [Versio](https://github.com/chaaz/versio/): Of course we use Versio\n  when developing Versio.\n\n## Background\n\nVersio can help automate the release process by updating\n[semver](https://semver.org/) version numbers from [conventional\ncommits](https://www.conventionalcommits.org/), generating a changelog,\nand managing dependencies between projects. This frees developers from\nhaving to coordinate among themselves what versions should be assigned.\n\nVersio can also deliver a machine-readable listing of your projects:\nwhere they live, how they're related, what their tags are--this can be\nused to help construct other parts of your release process: such as when\nyou build, test, publish, and deploy.\n\n## How It Works\n\nMany software projects declare their version number in some sort of\nmanifest file. Node/NPM projects have a \"package.json\" file, Rust/Cargo\nuses \"Cargo.toml\", Java/Maven has \"pom.xml\", Python/pip has \"setup.py\",\nRuby/gem has gemspec files, and so forth. Go projects and Terraform\nmodules, among others, opt to keep version numbers in VCS tags instead\nof a file. However your project is structured, you can list the location\nof your projects' version numbers in a Versio config file, and\nthenceforth Versio will be able to manage them.\n\n- Versio reads a config file (by default named `.versio.yaml`) in your\n  repository, and finds the version number of each project referenced\n  there.\n- It also reads previous versions of the same config file and version\n  numbers, starting at a specific tag (by default: `versio-prev`) in\n  your version control history.\n- Based on the old versions, current version, and intervening\n  conventional commits, Versio will update your projects' version\n  numbers.\n- Versio will commit and push the updated manifest files, and update the\n  `versio-prev` tag.\n- Versio can also create or update per-project version tags.\n- Versio can generate or update a changelog based on the pull requests\n  and commits that have been made since the last release.\n\n## Running\n\nCheck out the [Use Cases](./docs/use_cases.md) to learn how to use\nVersio via specific use cases--including managing your repo, using\nspecific flows, or integrating Versio into CI/CD; or look at the [Versio\nReference](./docs/reference.md) for all command-line options and the\nformat of the `.versio.yaml` config file.\n\n## Features\n\nVersio has some nice features that make it easy to use in your projects;\nhere are just a few.\n\n### Pull Request Scanning\n\nVersio can use the Git API to group commits by PR in its changelog, and\ncan even \"unsquash\" PRs to extract the conventional commits hidden\ninside a squashed commit. This process happens automatically for\nGitHub-originated repositories. See the [PR\nScanning](./docs/pr_scanning.md) page for more information.\n\n### Version Tags\n\nYou can write VCS tags, and use them instead of a manifest file; this is\na common pattern in Go and Terraform projects. To use this feature, you\nneed to provide the project's tag prefix and a default value. See the\n[Version Tags](./docs/version_tags.md) document for details.\n\n### Major subdirectories\n\nSome projects keep major revisions of software in different\nsubdirectories, usually named `v2`, `v3` etc. This allows developers to\nkeep track of multiple, sometimes very different application structures\nat the same time. You can utilize this feature by providing a `subs`\nproperty in your project configuration. See the [Major\nSubdirectories](./docs/subs.md) page for a description.\n\n### Changelog Management\n\nIf you're not happy with the default changelog you can write your own\nliquid template instead; put it in the project itself, elsewhere in the\nfilesystem, or serve it from a web service. If that's not enough\nflexibility, you can output a JSON document that contains all the\nrelease information, and use that in your own pipeline for custom\nactions. Additionally, you can examine the builtin templates, perform a\nchangelog-only release, or format a release plan using a changelog. The\n[Changelog](./docs/changelog.md) page contains more details on this\npowerful feature.\n\n### VCS Levels\n\nVCS Levels allow you to control the way Versio interacts with a Git\nrepository: you can interact only locally, with a remote, or not at all.\nSee the description in its [document](./docs/vcs_levels.md) for more\ninformation.\n\n### Version Chains\n\nSometimes a version in one project will depend on a change in another\nproject, even when both projects are in the same monorepo. Versio allows\nyou to manage these dependencies, and automatically increment all\ndependent versions. See the [Version Chains](./docs/chains.md) document\nfor more info.\n\n### VCS Signing\n\nYou might like to sign your commits or your tags to provide more\nsecurity to your users and co-workers. Versio likes security, too!\nVersio can read tags and commits that have been signed, and with the\nright configuration, will sign its own commits and tags. See the\n[Signing](./docs/signing.md) page for how to do this.\n\n## Troubleshooting\n\nThere's a whole [Troubleshooting](./docs/troubleshooting.md) document\nfor tracking down and reporting errors or other unexpected behavior. A\nlot of the time, though, it comes down to running Versio with logging\nand error tracing activated:\n\n```\nRUST_LOG=versio=trace RUST_BACKTRACE=1 versio \u003ccommand\u003e\n```\n\n## Contributing\n\nWe would love your code contributions to Versio! Feel free to branch or\nfork this repository and submit a pull request.\n\n`versio` is written in Rust, a powerful and safe language for writing\nnative executables. Visit the Rust lang\n[homepage](https://www.rust-lang.org/en-US/index.html) to learn more\nabout writing and compiling Rust programs, and see the\n[Contributing](./docs/contributing.md) page for Versio specifically.\n\nWe also happily accept ideas, suggestions, documentation, tutorials, and\nany and all feedback. Leave a message on the support pages of this repo,\nor send messages directly to its owners.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchaaz%2Fversio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchaaz%2Fversio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchaaz%2Fversio/lists"}