{"id":21982081,"url":"https://github.com/ubiquitydotnet/csemver.gitbuild","last_synced_at":"2025-06-24T23:09:51.249Z","repository":{"id":143468421,"uuid":"103850703","full_name":"UbiquityDotNET/CSemVer.GitBuild","owner":"UbiquityDotNET","description":"Automated Constrained Semantic Versioning for Git repos","archived":false,"fork":false,"pushed_at":"2025-06-22T20:33:39.000Z","size":6689,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-06-22T21:28:18.706Z","etag":null,"topics":["assemblyversion","buildversion","csemver","msbuild-task","semver"],"latest_commit_sha":null,"homepage":"https://ubiquitydotnet.github.io/CSemVer.GitBuild/","language":"C#","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/UbiquityDotNET.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":"2017-09-17T18:09:03.000Z","updated_at":"2025-06-22T20:33:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"99d64f1b-f71b-4959-90d9-09101b97621d","html_url":"https://github.com/UbiquityDotNET/CSemVer.GitBuild","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/UbiquityDotNET/CSemVer.GitBuild","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UbiquityDotNET%2FCSemVer.GitBuild","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UbiquityDotNET%2FCSemVer.GitBuild/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UbiquityDotNET%2FCSemVer.GitBuild/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UbiquityDotNET%2FCSemVer.GitBuild/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UbiquityDotNET","download_url":"https://codeload.github.com/UbiquityDotNET/CSemVer.GitBuild/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UbiquityDotNET%2FCSemVer.GitBuild/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261771193,"owners_count":23207223,"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":["assemblyversion","buildversion","csemver","msbuild-task","semver"],"created_at":"2024-11-29T17:21:44.652Z","updated_at":"2025-06-24T23:09:51.240Z","avatar_url":"https://github.com/UbiquityDotNET.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ubiquity.NET.Versioning\nThis repo includes support for versioning numbers. This support includes:\n1) Automated Constrained Semantic Versioning ([CSemVer](https:/csemver.org)) for MSBuild\n   projects.\n2) A standalone library useful for parsing, sorting and validating versions.\n    - [SemVer](https://semver.org)\n    - [CSemVer](https://csemver.org)\n        - This is a Constrained Semantic Version (That is, a strict subset of a SemVer)\n    - [CSemVer-CI](https://csemver.org)\n        - This is also a Constrained Semantic Version but is designed for ***POST-RELEASE** CI\n          build numbering. It is NOT a CSemVer but IS a SemVer.\n\n\u003e[!NOTE]\n\u003e This repository is historically named for only the build tasks but that name is not very\n\u003e very representative of reality anymore. The repo does contain actual build tasks, but also\n\u003e a library for working with versions that includes a number of unit tests to ensure it is\n\u003e operating correctly.\n\n## Status\n![Nuget](https://img.shields.io/nuget/dt/CSemVer.Build.Tasks.svg)\n![PR/CI Workflow Status](https://img.shields.io/github/actions/workflow/status/UbiquityDotNET/CSemVer.GitBuild/pr-build.yml?label=PR%2FCI%20Build%20Status)\n![Release Workflow Status](https://img.shields.io/github/actions/workflow/status/UbiquityDotNET/CSemVer.GitBuild/release-build.yml?label=Release%20Build%20Status)\n\n## Overview\nOfficially, NUGET Packages use a SemVer 2.0 (see http://semver.org).\nHowever, SemVer 2.0 doesn't consider or account for publicly available CI builds.\nSemVer is only concerned with official releases. This makes CI builds producing \nversioned packages challenging. Fortunately, someone has already defined a solution\nto using SemVer in a specially constrained way to ensure compatibility, while also \nallowing for automated CI builds. These new versions are called a [Constrained Semantic\nVersion](http://csemver.org) (CSemVer).\n\n## Constrained use of Constrained Semantic Versions\nA CSemVer is unique for each CI build and always increments while supporting official releases.\nIn the real world there are often cases where there are additional builds that are distinct\nfrom official releases and CI builds. Including Local developer builds, builds generated from a\nPull Request (a.k.a Automated buddy build). CSemVer doesn't explicitly define any format for\nthese cases. So this library defines a pattern of versioning that is fully compatible with\nCSemVer and allows for the additional build types in a way that retains precedence having the\nleast surprising consequences. In particular, local build packages have a higher precedence\nthan automated builds (CI or release) versions if all other components of the version match.\nThis ensures that what you are building includes the dependent packages you just built instead\nof the last one released publicly.\n\n## Documentation\nFull documentation on the tasks is available in the project's [docs site](https://ubiquitydotnet.github.io/CSemVer.GitBuild/)\n\n\u003e[!WARNING]\n\u003e The formal 'spec' for [CSemVer](https://csemver.org) remains silent on the point of the short\n\u003e format.^1^ Instead it relies on only examples. However, the examples are inconsistent on the\n\u003e requirement of a delimiter between the short name and number components of a version. It\n\u003e shows two examples '1.0.0-b03-01' ***AND*** '5.0.0-r-04-13'. So, which is it? Is the\n\u003e delimiter required or not?\n\u003e\n\u003e This may seem like an entirely academic issue, but when parsing an input it impacts the\n\u003e validity of inputs. Also, when the dealing with ordering and the length of otherwise equal\n\u003e components comes into play it can impact the behavior as well. How are `1.0.0-b03-01` and\n\u003e `1.0.0-b-03-01` ordered in relation to each other? Is the former even a valid CSemVer?\n\u003e\n\u003e This implementation is assuming the former is a typographical error and a delimiter is\n\u003e required in all cases. ***That is, `1.0.0-b03-01` is not a valid CSemVer.***\n\n## Building the tasks\nThe build uses a common PowerShell module pattern for Ubiquity.NET projects. To build the\nsources use the `Build-All.ps1` script. You can also open the `src/Ubiquity.NET.Versioning.slnx`\nin any editor/IDE that has support for the slnx solution format. (Visual Studio 2022 is used\nbut other options may work, though they are not supported. If you have experience with other\nIDEs, then PRs are welcome for additional support - but such PRs ***MUST NOT*** break the VS\nsupport, and you must be willing to maintain such support going forward.)\n\n\u003e[!IMPORTANT]\n\u003e It is important to note that IDE builds of a clean repo get will FAIL! This is due to the\n\u003e mechanisms used to eliminate circular dependencies while still supporting automated\n\u003e versioning of the projects themselves. To resolve this, you must run the\n\u003e `.\\New-GeneratedVersionProps.ps1` at least once to create the imported\n\u003e `generatedversion.props` file. This is also generated by the `Build-All.ps1` script, which is\n\u003e the recommended means of generating the required file. This is only needed the first time\n\u003e (or any time the `buildversion.xml` changes).\n\n----\n^1^See: [This issue](https://github.com/CK-Build/csemver.org/issues/2) which was reported upon\ntesting this library and found inconsistencies.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fubiquitydotnet%2Fcsemver.gitbuild","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fubiquitydotnet%2Fcsemver.gitbuild","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fubiquitydotnet%2Fcsemver.gitbuild/lists"}