New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Umbrella] Changesets v3 #665
Comments
Prereleases need some attention. It's a high-value workflow but we've found across multiple projects that it's not ready for primetime. |
@bennypowers I agree that there are some issues with this but I don't have any strong solutions for this just yet. Could you list what issues you have encountered with them? Knowing the pain points would allow us to design a better solution |
Getting in and out of 'pre' mode has proven to be difficult.
The concept of "prerelease mode" has gotten in the way of those goals. From a user perspective, it would be much nicer to just pass cc @Westbrook |
^ +1 to making prereleases simpler. I would just like to cut a release at any time, and not have it be marked as |
@threepointone you might be in for a treat, we already have "snapshot" releases. This doesnt require any global state, just do smth like Ian here @ianstormtaylor actually doesn't add any additional tag to a snapshot release, so the published snapshots only have a date appended to them. Note that by default we use This unlocks a whole set of use cases:
|
I’ve posted a new issue that could be interesting for some people who had contributed to the discussion here: #680 |
+1; "pre" mode is an unnatural ways of interacting. May be provide params like
|
I appreciate the RFC! Better handling of private and ignored packagesRelated: #436, changesets/bot#44 Currently, Finer control of snapshot versionsRelated: #573 We wish we had more control over version names on snapshot releases. We wish we can control the format to make it more readable: I'll be glad to create any issues and contribute 👍 |
I just discovered this tool and it looks really cool! Would support for polyglot monorepos be in scope for this project? Each language or build system would have a different way of storing its version so there would have to be some way to define projects in other languages. I also recently started using nx, a build tool for polyglot repos. It maintains a dependency graph of all the projects inside it. If you decide to allow plugins to tell changeset about projects and their versions, a plugin could piggy back off of nx's dependency graph to determine what the next versions should be. |
Thanks :)
I'm open to this possibility but other maintainers are worried that this would make the code way more complicated and the gains could not be that great. As this tool is written in JS, it requires node etc and this might not be acceptable for people coming from projects written primarily in other languages. This might not be as big of an issue for polyglot repositories that already rely on JS but it's an important consideration. That being said - I don't think this is off the table. It's just not super obvious how to implement this, how many people this would actually benefit and there is no clear plan for this. I'm also unsure if I'm able to figure this stuff out on my own any time soon - given that supporting JS ecosystem alone is already challenging and is consuming my, limited, time. |
I'll try to revisit this stuff when I have a chance. Thanks for bringing this up.
q: why does this matter? I mean - shouldn't you mostly access those snapshot versions through shorter and readable tags? Or just copy-paste them from one place to another? I'm not saying no - but I would really like to understand the motivation behind the request. |
I can't really comment on the code complexity as I'm not familiar with the code base, but the gains would be for full stack monorepos that already use JS for the front end.
My first thought as far as implementation goes is for the core logic of incrementing versions changes to be a pure function. Its inputs are the current versions, the dependency graph, and the changeset. A plugin would be a module that exports two functions. One for scanning the workspace and returning a list of projects, and one for applying the version changes. The sticking point would be cross language dependencies. I can think of two options for this. One, add a config options. Two, require the user to write a bare-bones plugin that just returns their custom dependency configuration. If no plugins are specified, it can default to a plugin that implements the current behavior. As far as maintenance goes, if you can provide a stable API for the plugins then you can take a hands-off approach and leave the maintenance of individual plugins to the people that want them. |
That's a good point. For context, our repo deployed to But as you brought up this isn't an actual blocker, and I agree, so I'll leave that to your discretion. |
Can the 'pre' mode be simplified? For ExampleExecution
I think this is more convenient to use, if possible I can implement this function! |
Code |
Better support for monorepos that release groups of artifacts at different schedules. In my recent hunt for better release/changelog management, I've started circling around several tools/concepts:
Right now, Changesets only works well for library monorepos. It kinda works ok for monorepos that contain apps, but it falls over when you have a QA pipeline and you then need to follow a git-flow process. "Keep a changelog" and Changesets (if you use it in combination with the changesets/action ) both have a similar feature: unreleased changes.
My current thought process is that in order to support a git-flow process (with release branches, hotfixes to those branches, release branches being pushed to staging, production targets) is that i'd need to move away from changesets and instead adopt something like "Keep a changelog". The problem is that we'd be moving back to the idea that PR titles are now our changelog entries. While not the worst, it isn't as flexible as changesets i guess? If the changeset action could support configuration that allows multiple unique release pullrequests (driven by configuration, maybe a list of globs) then we could automate the creation of our |
Support for conventional commits via a plugin would be a game changer for people/teams using it or coming from a semantic release background. |
I would like to see CJS build dropped at least from the CLI: #587 (comment). This could arguably be done before v3 as it wouldn't be considered a breaking change if you assume people are only interacting with the CLI via the CLI and not importing it as a library. |
That would be an incorrect assumption. 👍🏻 |
Just want to +1 the suggestion for polyglot support. I love using changesets and would like to bring the release workflow into some of my Python projects as well. I've experimented with a pure Python repo, attempting to set up changesets/action via GitHub actions. It was almost seamless, though I had to incorporate a
Given that changesets are in markdown, they can be created and edited manually (or via a minimal language-specific CLIs – e.g., https://github.com/knope-dev/changesets). With changesets/actions, the core versioning and publishing logic could just be handled in CI by Node.js (regardless of whether the project is already using node). I understand the concerns regarding code complexity and the need for Node, but I think the ability to configure changesets to update |
Support for bun.sh when using workspaces would be great. For some reason Bun uses |
I'd love to see |
esm sources please. if i load up import read from '@changesets/read'
const cSs = await read.default(process.cwd()); |
My org has a monorepo with a use case for managing multiple major versions of some modules. The issue is the modules are listed by name when using I see you use package.json name from the return from @manypkg/getpackages. They also include the relative path of the module in the Package class. Perhaps including a new config option for |
adding |
Yup, being able to publish to multiple package registries would be nice.
|
First off - this tool is great :) I'd love to see some more tooling and specific docs / recommended workflows for managing and publishing prerelease candidates. This likely means dealing with releases and changesets within long lived branches, potentially multiple at the same time (might want to be working on the next major release and patch release at the same time), and keeping in mind the ability to easily release hotfixes to the main production branch. |
I'd like to write Markdown content which would appear above the list of changesets in the next release. These "release notes" would let us add a brief, human-readable summary of our next version. "This release improves accessibility and adds new elements...", etc. |
For now, I'd like to just open this as a placeholder issue, I will gather things here over time. You can mention whatever improvements you would like to see in Changesets, maybe even what we should remove/deprecate.
Note that there is no rush in moving this forward any time soon. This is more like a "what if" issue, for now, so we can gather things that we'd like to change at some point in time. A lot of changes to this project can be done without introducing any breaking changes and whenever we can do that, we try to stick to this approach.
Every actionable item (a one that we've agreed on) will be added to the corresponding milestone
cc
@mitchellhamilton
@Noviny
@zkochan
@arcanis I know that we were not able to converge on our way of doing things in the past but maybe this would be a good occasion to revisit our differences once again and take a look if they could be solved
@threepointone I know that you like the project so maybe you would have some quality input here
@ianstormtaylor I know that you had some quality suggestions in the past, you could resurface them here, or maybe even you have some more thoughts on the subject after using the project for a while
The text was updated successfully, but these errors were encountered: