Independent versioning of packages in a mono-repo
up vote
1
down vote
favorite
We just started working on something that is maybe best described as a company-wide "open" source framework. Our main language is C# and we use Jenkins and ProGet to create and share nuget-packages. We started putting everything (and I really mean everything. One module has at least three repositories) in it's own Git-repo.
We thought that would be a good idea as we can version and publish everything separately but it turns out to result in a very annoying workflow if you want to make changes on multiple repositories that have dependencies.
I startet looking around and it seems, that most projects use a more monolitic approach and I think that would probably make our lives here easier too. What I am not so sure about is, how versioning with this approach works.
The CoreFx repository is a nice example of what we are trying to achieve. One repo that results in many separate packages. When I build this locally there is one version number for all packages but when I take a look at the available package versions on nuget.org the versions seem to be per package. For example System.Diagnostics.DiagnosticsSource has Version 4.5.1 but references System.Diagnostics.Debug version 4.3.0.
So this is exactly, what I think would be a good solution for us. One repo, many resulting packages with indepentend version.
Does anyone know how this is achieved with the corefx project or has anyone other suggestions, how that could be done?
c# git jenkins nuget versioning
add a comment |
up vote
1
down vote
favorite
We just started working on something that is maybe best described as a company-wide "open" source framework. Our main language is C# and we use Jenkins and ProGet to create and share nuget-packages. We started putting everything (and I really mean everything. One module has at least three repositories) in it's own Git-repo.
We thought that would be a good idea as we can version and publish everything separately but it turns out to result in a very annoying workflow if you want to make changes on multiple repositories that have dependencies.
I startet looking around and it seems, that most projects use a more monolitic approach and I think that would probably make our lives here easier too. What I am not so sure about is, how versioning with this approach works.
The CoreFx repository is a nice example of what we are trying to achieve. One repo that results in many separate packages. When I build this locally there is one version number for all packages but when I take a look at the available package versions on nuget.org the versions seem to be per package. For example System.Diagnostics.DiagnosticsSource has Version 4.5.1 but references System.Diagnostics.Debug version 4.3.0.
So this is exactly, what I think would be a good solution for us. One repo, many resulting packages with indepentend version.
Does anyone know how this is achieved with the corefx project or has anyone other suggestions, how that could be done?
c# git jenkins nuget versioning
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
We just started working on something that is maybe best described as a company-wide "open" source framework. Our main language is C# and we use Jenkins and ProGet to create and share nuget-packages. We started putting everything (and I really mean everything. One module has at least three repositories) in it's own Git-repo.
We thought that would be a good idea as we can version and publish everything separately but it turns out to result in a very annoying workflow if you want to make changes on multiple repositories that have dependencies.
I startet looking around and it seems, that most projects use a more monolitic approach and I think that would probably make our lives here easier too. What I am not so sure about is, how versioning with this approach works.
The CoreFx repository is a nice example of what we are trying to achieve. One repo that results in many separate packages. When I build this locally there is one version number for all packages but when I take a look at the available package versions on nuget.org the versions seem to be per package. For example System.Diagnostics.DiagnosticsSource has Version 4.5.1 but references System.Diagnostics.Debug version 4.3.0.
So this is exactly, what I think would be a good solution for us. One repo, many resulting packages with indepentend version.
Does anyone know how this is achieved with the corefx project or has anyone other suggestions, how that could be done?
c# git jenkins nuget versioning
We just started working on something that is maybe best described as a company-wide "open" source framework. Our main language is C# and we use Jenkins and ProGet to create and share nuget-packages. We started putting everything (and I really mean everything. One module has at least three repositories) in it's own Git-repo.
We thought that would be a good idea as we can version and publish everything separately but it turns out to result in a very annoying workflow if you want to make changes on multiple repositories that have dependencies.
I startet looking around and it seems, that most projects use a more monolitic approach and I think that would probably make our lives here easier too. What I am not so sure about is, how versioning with this approach works.
The CoreFx repository is a nice example of what we are trying to achieve. One repo that results in many separate packages. When I build this locally there is one version number for all packages but when I take a look at the available package versions on nuget.org the versions seem to be per package. For example System.Diagnostics.DiagnosticsSource has Version 4.5.1 but references System.Diagnostics.Debug version 4.3.0.
So this is exactly, what I think would be a good solution for us. One repo, many resulting packages with indepentend version.
Does anyone know how this is achieved with the corefx project or has anyone other suggestions, how that could be done?
c# git jenkins nuget versioning
c# git jenkins nuget versioning
asked Nov 21 at 12:15
Flotto
685
685
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Both monorepos and very-many-repos have advantages; one example of advantages with many small repos is that you can git tag
an individual package's specific version easily. Doing the same in a monorepo is more awkward sometimes.
But, if what you are releasing is more of a "set of related packages", that's perhaps not a bad idea after all: you can have a single .bat
or .ps1
file that builds all the NuGet packages for your repository and sets the version number accordingly. Like this example (Powershell script)
The references/dependencies you are talking about (System.Diagnostics.DiagnosticsSource
version 4.5.1 depending on System.Diagnostics.Debug
version 4.3.0) becomes the individual <dependency>
tags in the .nuspec
of the "consuming" package (i.e. System.Diagnostics.DiagnosticsSource
in this case.) Here, you can choose two major strategies:
- Always bump all
<dependency>
versions so that "upgrading one upgrades all" the packages. Sometimes this is what you want, and then you should do that. - Be more fine-grained: only update the dependency when you actually use the newer/updated functionality somehow. For example, when the consuming package uses a method that only exist in a particular version of the dependency.
The latter strategy is arguably the more elegant approach, but also more complex (might require more work to get it done in a good way)
.NET-specific challenges
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A.
Now, I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed
This is indeed an interesting problem. Some potential workarounds:
Let Jenkins detect/determine the delta between the changes and only build packages for the parts of the tree that has changed. Probably doable, but perhaps not very easy; requires some logic in your
.ps1
script. Perhaps the most elegant solution I can think of.Make NuGet pushes that fail because of "version already exists" a non-fatal error. I.e. detect when you run
nuget push
if you get that particular error (very important detail!) and ignore it. You definitely do not want to ignore all errors innuget push
but only these particular ones. Less elegant, but still fully automatic.Make releasing packages a semi-automatic instead of a fully automatic process. Set up one or more jobs in Jenkins where you manually "press the button" when a new version of a package is to be released, perhaps with a job argument saying "which package to release" (can be a dropdown in Jenkins so noone has to type the name manually.) Sounds perhaps a bit manual in nature, but this option is the option that gives you as a team the greatest level of control over what packages gets pushed and when.
Further reading
(About monorepos in general, not specifically dealing with the CoreFx case you mention. Can still provide valuable information though.)
https://github.com/babel/babel/blob/master/doc/design/monorepo.md: Why is Babel a monorepo?
https://github.com/korfuri/awesome-monorepo: A curated list of awesome Monorepo tools, software and architectures.
https://github.com/pouchdb/pouchdb/issues/5128: Some of PouchDB's steps towards a monorepo
Thanks for the quick response! You are absolutely right about that both approaches have their pros and cons but I feel our current approach is not really fun to work with :) I would like to try to go with the more fine grained versioning. But I believe this would result in packages with the same version would be created multiple times, if we work with visual studios project references and I do know how to deal with that
– Flotto
Nov 21 at 12:43
@Flotto Recreating a package with the same version is obviously a bad idea. What makes you think this would happen if you use Visual Studio's project references? Please expand a bit more about the issue there and maybe we can figure out a way around it. :)
– Per Lundberg
Nov 21 at 14:50
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A. Now I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed.
– Flotto
Nov 21 at 15:12
@Flotto Thanks, I see your problem now. Updated the answer accordingly and gave some suggestions.
– Per Lundberg
Nov 21 at 20:01
1
Thanks again for the effort you put in this to help me :) The third options seems to be pragmatic. I thisnk we will try that and maybe work towards Jenkins creating deltas. Thanks a lot for your help!!!
– Flotto
Nov 22 at 11:28
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Both monorepos and very-many-repos have advantages; one example of advantages with many small repos is that you can git tag
an individual package's specific version easily. Doing the same in a monorepo is more awkward sometimes.
But, if what you are releasing is more of a "set of related packages", that's perhaps not a bad idea after all: you can have a single .bat
or .ps1
file that builds all the NuGet packages for your repository and sets the version number accordingly. Like this example (Powershell script)
The references/dependencies you are talking about (System.Diagnostics.DiagnosticsSource
version 4.5.1 depending on System.Diagnostics.Debug
version 4.3.0) becomes the individual <dependency>
tags in the .nuspec
of the "consuming" package (i.e. System.Diagnostics.DiagnosticsSource
in this case.) Here, you can choose two major strategies:
- Always bump all
<dependency>
versions so that "upgrading one upgrades all" the packages. Sometimes this is what you want, and then you should do that. - Be more fine-grained: only update the dependency when you actually use the newer/updated functionality somehow. For example, when the consuming package uses a method that only exist in a particular version of the dependency.
The latter strategy is arguably the more elegant approach, but also more complex (might require more work to get it done in a good way)
.NET-specific challenges
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A.
Now, I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed
This is indeed an interesting problem. Some potential workarounds:
Let Jenkins detect/determine the delta between the changes and only build packages for the parts of the tree that has changed. Probably doable, but perhaps not very easy; requires some logic in your
.ps1
script. Perhaps the most elegant solution I can think of.Make NuGet pushes that fail because of "version already exists" a non-fatal error. I.e. detect when you run
nuget push
if you get that particular error (very important detail!) and ignore it. You definitely do not want to ignore all errors innuget push
but only these particular ones. Less elegant, but still fully automatic.Make releasing packages a semi-automatic instead of a fully automatic process. Set up one or more jobs in Jenkins where you manually "press the button" when a new version of a package is to be released, perhaps with a job argument saying "which package to release" (can be a dropdown in Jenkins so noone has to type the name manually.) Sounds perhaps a bit manual in nature, but this option is the option that gives you as a team the greatest level of control over what packages gets pushed and when.
Further reading
(About monorepos in general, not specifically dealing with the CoreFx case you mention. Can still provide valuable information though.)
https://github.com/babel/babel/blob/master/doc/design/monorepo.md: Why is Babel a monorepo?
https://github.com/korfuri/awesome-monorepo: A curated list of awesome Monorepo tools, software and architectures.
https://github.com/pouchdb/pouchdb/issues/5128: Some of PouchDB's steps towards a monorepo
Thanks for the quick response! You are absolutely right about that both approaches have their pros and cons but I feel our current approach is not really fun to work with :) I would like to try to go with the more fine grained versioning. But I believe this would result in packages with the same version would be created multiple times, if we work with visual studios project references and I do know how to deal with that
– Flotto
Nov 21 at 12:43
@Flotto Recreating a package with the same version is obviously a bad idea. What makes you think this would happen if you use Visual Studio's project references? Please expand a bit more about the issue there and maybe we can figure out a way around it. :)
– Per Lundberg
Nov 21 at 14:50
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A. Now I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed.
– Flotto
Nov 21 at 15:12
@Flotto Thanks, I see your problem now. Updated the answer accordingly and gave some suggestions.
– Per Lundberg
Nov 21 at 20:01
1
Thanks again for the effort you put in this to help me :) The third options seems to be pragmatic. I thisnk we will try that and maybe work towards Jenkins creating deltas. Thanks a lot for your help!!!
– Flotto
Nov 22 at 11:28
add a comment |
up vote
1
down vote
accepted
Both monorepos and very-many-repos have advantages; one example of advantages with many small repos is that you can git tag
an individual package's specific version easily. Doing the same in a monorepo is more awkward sometimes.
But, if what you are releasing is more of a "set of related packages", that's perhaps not a bad idea after all: you can have a single .bat
or .ps1
file that builds all the NuGet packages for your repository and sets the version number accordingly. Like this example (Powershell script)
The references/dependencies you are talking about (System.Diagnostics.DiagnosticsSource
version 4.5.1 depending on System.Diagnostics.Debug
version 4.3.0) becomes the individual <dependency>
tags in the .nuspec
of the "consuming" package (i.e. System.Diagnostics.DiagnosticsSource
in this case.) Here, you can choose two major strategies:
- Always bump all
<dependency>
versions so that "upgrading one upgrades all" the packages. Sometimes this is what you want, and then you should do that. - Be more fine-grained: only update the dependency when you actually use the newer/updated functionality somehow. For example, when the consuming package uses a method that only exist in a particular version of the dependency.
The latter strategy is arguably the more elegant approach, but also more complex (might require more work to get it done in a good way)
.NET-specific challenges
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A.
Now, I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed
This is indeed an interesting problem. Some potential workarounds:
Let Jenkins detect/determine the delta between the changes and only build packages for the parts of the tree that has changed. Probably doable, but perhaps not very easy; requires some logic in your
.ps1
script. Perhaps the most elegant solution I can think of.Make NuGet pushes that fail because of "version already exists" a non-fatal error. I.e. detect when you run
nuget push
if you get that particular error (very important detail!) and ignore it. You definitely do not want to ignore all errors innuget push
but only these particular ones. Less elegant, but still fully automatic.Make releasing packages a semi-automatic instead of a fully automatic process. Set up one or more jobs in Jenkins where you manually "press the button" when a new version of a package is to be released, perhaps with a job argument saying "which package to release" (can be a dropdown in Jenkins so noone has to type the name manually.) Sounds perhaps a bit manual in nature, but this option is the option that gives you as a team the greatest level of control over what packages gets pushed and when.
Further reading
(About monorepos in general, not specifically dealing with the CoreFx case you mention. Can still provide valuable information though.)
https://github.com/babel/babel/blob/master/doc/design/monorepo.md: Why is Babel a monorepo?
https://github.com/korfuri/awesome-monorepo: A curated list of awesome Monorepo tools, software and architectures.
https://github.com/pouchdb/pouchdb/issues/5128: Some of PouchDB's steps towards a monorepo
Thanks for the quick response! You are absolutely right about that both approaches have their pros and cons but I feel our current approach is not really fun to work with :) I would like to try to go with the more fine grained versioning. But I believe this would result in packages with the same version would be created multiple times, if we work with visual studios project references and I do know how to deal with that
– Flotto
Nov 21 at 12:43
@Flotto Recreating a package with the same version is obviously a bad idea. What makes you think this would happen if you use Visual Studio's project references? Please expand a bit more about the issue there and maybe we can figure out a way around it. :)
– Per Lundberg
Nov 21 at 14:50
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A. Now I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed.
– Flotto
Nov 21 at 15:12
@Flotto Thanks, I see your problem now. Updated the answer accordingly and gave some suggestions.
– Per Lundberg
Nov 21 at 20:01
1
Thanks again for the effort you put in this to help me :) The third options seems to be pragmatic. I thisnk we will try that and maybe work towards Jenkins creating deltas. Thanks a lot for your help!!!
– Flotto
Nov 22 at 11:28
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Both monorepos and very-many-repos have advantages; one example of advantages with many small repos is that you can git tag
an individual package's specific version easily. Doing the same in a monorepo is more awkward sometimes.
But, if what you are releasing is more of a "set of related packages", that's perhaps not a bad idea after all: you can have a single .bat
or .ps1
file that builds all the NuGet packages for your repository and sets the version number accordingly. Like this example (Powershell script)
The references/dependencies you are talking about (System.Diagnostics.DiagnosticsSource
version 4.5.1 depending on System.Diagnostics.Debug
version 4.3.0) becomes the individual <dependency>
tags in the .nuspec
of the "consuming" package (i.e. System.Diagnostics.DiagnosticsSource
in this case.) Here, you can choose two major strategies:
- Always bump all
<dependency>
versions so that "upgrading one upgrades all" the packages. Sometimes this is what you want, and then you should do that. - Be more fine-grained: only update the dependency when you actually use the newer/updated functionality somehow. For example, when the consuming package uses a method that only exist in a particular version of the dependency.
The latter strategy is arguably the more elegant approach, but also more complex (might require more work to get it done in a good way)
.NET-specific challenges
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A.
Now, I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed
This is indeed an interesting problem. Some potential workarounds:
Let Jenkins detect/determine the delta between the changes and only build packages for the parts of the tree that has changed. Probably doable, but perhaps not very easy; requires some logic in your
.ps1
script. Perhaps the most elegant solution I can think of.Make NuGet pushes that fail because of "version already exists" a non-fatal error. I.e. detect when you run
nuget push
if you get that particular error (very important detail!) and ignore it. You definitely do not want to ignore all errors innuget push
but only these particular ones. Less elegant, but still fully automatic.Make releasing packages a semi-automatic instead of a fully automatic process. Set up one or more jobs in Jenkins where you manually "press the button" when a new version of a package is to be released, perhaps with a job argument saying "which package to release" (can be a dropdown in Jenkins so noone has to type the name manually.) Sounds perhaps a bit manual in nature, but this option is the option that gives you as a team the greatest level of control over what packages gets pushed and when.
Further reading
(About monorepos in general, not specifically dealing with the CoreFx case you mention. Can still provide valuable information though.)
https://github.com/babel/babel/blob/master/doc/design/monorepo.md: Why is Babel a monorepo?
https://github.com/korfuri/awesome-monorepo: A curated list of awesome Monorepo tools, software and architectures.
https://github.com/pouchdb/pouchdb/issues/5128: Some of PouchDB's steps towards a monorepo
Both monorepos and very-many-repos have advantages; one example of advantages with many small repos is that you can git tag
an individual package's specific version easily. Doing the same in a monorepo is more awkward sometimes.
But, if what you are releasing is more of a "set of related packages", that's perhaps not a bad idea after all: you can have a single .bat
or .ps1
file that builds all the NuGet packages for your repository and sets the version number accordingly. Like this example (Powershell script)
The references/dependencies you are talking about (System.Diagnostics.DiagnosticsSource
version 4.5.1 depending on System.Diagnostics.Debug
version 4.3.0) becomes the individual <dependency>
tags in the .nuspec
of the "consuming" package (i.e. System.Diagnostics.DiagnosticsSource
in this case.) Here, you can choose two major strategies:
- Always bump all
<dependency>
versions so that "upgrading one upgrades all" the packages. Sometimes this is what you want, and then you should do that. - Be more fine-grained: only update the dependency when you actually use the newer/updated functionality somehow. For example, when the consuming package uses a method that only exist in a particular version of the dependency.
The latter strategy is arguably the more elegant approach, but also more complex (might require more work to get it done in a good way)
.NET-specific challenges
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A.
Now, I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed
This is indeed an interesting problem. Some potential workarounds:
Let Jenkins detect/determine the delta between the changes and only build packages for the parts of the tree that has changed. Probably doable, but perhaps not very easy; requires some logic in your
.ps1
script. Perhaps the most elegant solution I can think of.Make NuGet pushes that fail because of "version already exists" a non-fatal error. I.e. detect when you run
nuget push
if you get that particular error (very important detail!) and ignore it. You definitely do not want to ignore all errors innuget push
but only these particular ones. Less elegant, but still fully automatic.Make releasing packages a semi-automatic instead of a fully automatic process. Set up one or more jobs in Jenkins where you manually "press the button" when a new version of a package is to be released, perhaps with a job argument saying "which package to release" (can be a dropdown in Jenkins so noone has to type the name manually.) Sounds perhaps a bit manual in nature, but this option is the option that gives you as a team the greatest level of control over what packages gets pushed and when.
Further reading
(About monorepos in general, not specifically dealing with the CoreFx case you mention. Can still provide valuable information though.)
https://github.com/babel/babel/blob/master/doc/design/monorepo.md: Why is Babel a monorepo?
https://github.com/korfuri/awesome-monorepo: A curated list of awesome Monorepo tools, software and architectures.
https://github.com/pouchdb/pouchdb/issues/5128: Some of PouchDB's steps towards a monorepo
edited Nov 21 at 20:01
answered Nov 21 at 12:29
Per Lundberg
1,59811830
1,59811830
Thanks for the quick response! You are absolutely right about that both approaches have their pros and cons but I feel our current approach is not really fun to work with :) I would like to try to go with the more fine grained versioning. But I believe this would result in packages with the same version would be created multiple times, if we work with visual studios project references and I do know how to deal with that
– Flotto
Nov 21 at 12:43
@Flotto Recreating a package with the same version is obviously a bad idea. What makes you think this would happen if you use Visual Studio's project references? Please expand a bit more about the issue there and maybe we can figure out a way around it. :)
– Per Lundberg
Nov 21 at 14:50
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A. Now I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed.
– Flotto
Nov 21 at 15:12
@Flotto Thanks, I see your problem now. Updated the answer accordingly and gave some suggestions.
– Per Lundberg
Nov 21 at 20:01
1
Thanks again for the effort you put in this to help me :) The third options seems to be pragmatic. I thisnk we will try that and maybe work towards Jenkins creating deltas. Thanks a lot for your help!!!
– Flotto
Nov 22 at 11:28
add a comment |
Thanks for the quick response! You are absolutely right about that both approaches have their pros and cons but I feel our current approach is not really fun to work with :) I would like to try to go with the more fine grained versioning. But I believe this would result in packages with the same version would be created multiple times, if we work with visual studios project references and I do know how to deal with that
– Flotto
Nov 21 at 12:43
@Flotto Recreating a package with the same version is obviously a bad idea. What makes you think this would happen if you use Visual Studio's project references? Please expand a bit more about the issue there and maybe we can figure out a way around it. :)
– Per Lundberg
Nov 21 at 14:50
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A. Now I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed.
– Flotto
Nov 21 at 15:12
@Flotto Thanks, I see your problem now. Updated the answer accordingly and gave some suggestions.
– Per Lundberg
Nov 21 at 20:01
1
Thanks again for the effort you put in this to help me :) The third options seems to be pragmatic. I thisnk we will try that and maybe work towards Jenkins creating deltas. Thanks a lot for your help!!!
– Flotto
Nov 22 at 11:28
Thanks for the quick response! You are absolutely right about that both approaches have their pros and cons but I feel our current approach is not really fun to work with :) I would like to try to go with the more fine grained versioning. But I believe this would result in packages with the same version would be created multiple times, if we work with visual studios project references and I do know how to deal with that
– Flotto
Nov 21 at 12:43
Thanks for the quick response! You are absolutely right about that both approaches have their pros and cons but I feel our current approach is not really fun to work with :) I would like to try to go with the more fine grained versioning. But I believe this would result in packages with the same version would be created multiple times, if we work with visual studios project references and I do know how to deal with that
– Flotto
Nov 21 at 12:43
@Flotto Recreating a package with the same version is obviously a bad idea. What makes you think this would happen if you use Visual Studio's project references? Please expand a bit more about the issue there and maybe we can figure out a way around it. :)
– Per Lundberg
Nov 21 at 14:50
@Flotto Recreating a package with the same version is obviously a bad idea. What makes you think this would happen if you use Visual Studio's project references? Please expand a bit more about the issue there and maybe we can figure out a way around it. :)
– Per Lundberg
Nov 21 at 14:50
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A. Now I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed.
– Flotto
Nov 21 at 15:12
Assume that I have project A and project B, which has a reference to A and that both are in the same repository. Also I have a Visual Studio solution for project B, which holds a project reference to project A. Now I make a change to project B and increment it's version, without incrementing the version of project A. I push my changes and Jenkins makes a clean checkout of the repo and build the solution creating both packages but package A now has the same version as it had on a previous build and can not be pushed to the nuget feed.
– Flotto
Nov 21 at 15:12
@Flotto Thanks, I see your problem now. Updated the answer accordingly and gave some suggestions.
– Per Lundberg
Nov 21 at 20:01
@Flotto Thanks, I see your problem now. Updated the answer accordingly and gave some suggestions.
– Per Lundberg
Nov 21 at 20:01
1
1
Thanks again for the effort you put in this to help me :) The third options seems to be pragmatic. I thisnk we will try that and maybe work towards Jenkins creating deltas. Thanks a lot for your help!!!
– Flotto
Nov 22 at 11:28
Thanks again for the effort you put in this to help me :) The third options seems to be pragmatic. I thisnk we will try that and maybe work towards Jenkins creating deltas. Thanks a lot for your help!!!
– Flotto
Nov 22 at 11:28
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53411841%2findependent-versioning-of-packages-in-a-mono-repo%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown