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?










share|improve this question


























    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?










    share|improve this question
























      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?










      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 21 at 12:15









      Flotto

      685




      685
























          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 in nuget 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






          share|improve this answer























          • 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











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          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

























          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 in nuget 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






          share|improve this answer























          • 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















          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 in nuget 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






          share|improve this answer























          • 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













          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 in nuget 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






          share|improve this answer














          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 in nuget 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







          share|improve this answer














          share|improve this answer



          share|improve this answer








          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


















          • 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


















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Different font size/position of beamer's navigation symbols template's content depending on regular/plain...

          Berounka

          I want to find a topological embedding $f : X rightarrow Y$ and $g: Y rightarrow X$, yet $X$ is not...