-
Notifications
You must be signed in to change notification settings - Fork 214
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
Book & playground don't match the latest published version #1507
Comments
I agree this isn't ideal. I can see a couple of ways of improving the situation:
@mklopets I totally get that having the playground & book match the currently released version would make development easier for you, and I really want development to be easy for you! But having it match the current |
Today, PRQL has conflicting priorities:
My perspective: We're still very much in an experimental phase. There are lots of known "language issues" that need to be ironed out that will break queries. We should target intrepid users who can tolerate this breakage, all the while minimizing their pain. How can we do that?
Thanks for listening. |
This is the important part. It implies that we don't give any guarantees about stability. So there is point of having nightly builds or even different versions in playground. I can vow to include CHANGELOG.md entries in my |
OK, this sounds very reasonable if you're up for that. If the thing is just one line, I'm also happy to take it from the GitHub suggestion. (So maybe "feat" is a good filter) |
Simple question: how hard is it to deploy the root docs only updated at release time and the edge docs in a sub directory like |
Not easy but doable. The problematic part is that we build the whole website+book+playground in a single build for a commit and book requires prql-compiler for compiling PRQL snippets to SQL. |
One update per day may be sufficient, as in the Apache Arrow website? |
I agree with @mklopets and was going to raise the same thing. @max-sixty What is the cost of operating the website? Or rather, would it be possible to get prql-dev.org and have main branch deploy there and only deploy to prql-lang.org on releases? There presumably wouldn't be much traffic to prql-dev.org so egress charges and the like would be much lower. I don't know how hard coded the prql-lang.org URL is everywhere. In my experience with internal sites, putting things behind a |
I hear a consensus for putting out a release frequently. Before we design and build a lot of new machinery, let's see if this release schedule minimizes the problems that have been identified. |
It's approximately zero, and even if it were not, that would be fine. FWIW something like readthedocs supports lots of versions (e.g. here's xarray: https://docs.xarray.dev/en/v0.21.0/). We don't use them because we're using mdbook, but there are probably options around that too. The only constraint is someone owning it... |
Let's try the new release cadence, and see how that goes. I trust @mklopets will give an honest review! I'll leave this open for the moment. |
I'm all for the other improvements on the release cadence but I do think the most "correct" solution would be to either:
This is obviously an important point, but I also think it's probably a simple one to address. Other than running the playground with the code of your active local compiler branch, are there any other difficulties here that I'm missing? I'm sure we could figure those out (& I'm more than happy to help). While releases e.g. at most every 2 weeks would be great for continuing the momentum of the project (irregardless of this issue), I think it's incredibly user-unfriendly to have the docs & playground (not only the playground!) be incorrect for even a few days. As we start to have more and more real, live use cases, these things will only get more important, and I'd hate for us to lose potential users because it externally looks like it's a "broken thing". |
I agree with that. I also got the impression that we only picked up some issues on release and deployment so I would vote in favour of doing some DEV/UAT/QA deployment somewhere which can be triggered on every merge to main. |
In a project this new and experimental, I don't think a small delay between implementing a new feature and seeing its documentation is bad. What makes newcomers suspect a project is broken is the observation that there isn't new development and that the documentation is out of date. In an ideal world, new features and their documentation would roll out simultaneously.
Where do we think we are with PRQL's evolution? Thanks. |
I think we should go for option 1 here. It's easiest to implement while making sure that latest release, book & playground always match. |
I'm confused: Option 1 seems to lock us at a particular version until we get the documentation complete. This means that fewer people (only those who have set up a development environment) can try out any new features. I prefer our current practice, which is more like option 2. It seems to me that model allows developers to make progress (and automatically push their updates into the Playground) as long as they leave hints (in the CHANGELOG) about how to use the new capabilities. Option 2 also makes these updates available to a broader audience who can try the (possibly experimental) features and give feedback before writing definitive documentation. How does this affect the release cadence? Some thoughts:
As the language matures, and we move closer to a 1.0 version, we can choose to switch the Playground to an actual released version, but for now, I think I'd rather make progress and let the documentation try to keep up. Comments? Thanks. |
The main problem here is that playground & book don't match the latest release of the library and bindings. This is a huge problem for anyone who is not just "checking things out". If we go with option 1, the people that want to experiment with latest changes, would indeed have to wait for a release. This could be eased by:
|
I'm going to put names on things, because there are two comments enumerating options, so "Option 1" depends on which comment we look at!
|
One downside of In Xarray / ReadTheDocs we got around this by having a branch called |
It should indeed say |
Thanks for the clear definition of "latest release" vs "latest commit". This follows other project's
I lean slightly toward the latter choice, but would accede to the needs of the group. As I said elsewhere I would like to take some time on this week's Dev Call to hash out the way we want to proceed for the next release or two, and how that might differ longer-term. Toward that end, I encourage everyone on this thread to participate, or to provide your thoughts. Thanks. |
tl;drI am in favour of the I suggest we should follow a process close to Git Flow. This is quite good account of it: Gitflow Branch Guide
Apart from the occasional need to manually rebase Assumptions and backgroundMy assumptions are the following:
Git Flow |
I'm not sure if full git flow workflow is necessary - it add some complexity where it is not yet needed. A simpler alternative is what we have, but releasing patches ( |
That's what I gather has been the general sentiment from the discussion so far. May I ask what you see as the complexity that would most concern you? I don't see it as too bad but I'm probably overlooking something. I also think you and @max-sixty should be protected/isolated from it to allow you to focus on what you're currently focusing on and I would volunteer myself to manage the merging and branch management. |
Well, we don't (at least I don't) build compiler in features. It more like many commits, each making the feature better & more stable or changing it completely. Also many of the smaller commits that we would want to release in a patch release are not hotfixes, but small improvements to recent releases. |
I'd like to talk about @snth's assertion on the Dev Call today (in 5 hours):
Do we agree that "PRQL is ready for use"? Or is it still "in an experimental phase"? What commitments are we prepared to make today? How will those commitments affect development velocity? How could those commitments (including increased stability) evolve through the life of the project? Thanks. PS I will note that I use PRQL all the time: I can no longer bring myself to write bare SQL PRQL is just too easy. But I do it with the clear knowledge that I'm going to have to rewrite my |
PPS - I appreciate all the thought that people have put into the different ways that we could organize the project. They're all reasonable approaches. And some day, I'm sure we'll pick one (or a combination) for a 1.0 (or near-1.0) timeframe. The question I'm asking is "What do we want to do for the next 2-3 months?" Thanks again. |
@aljazerzen I wonder whether that's just a matter of terminology. Those could all still go to |
Update from the meeting: We can look into having another release for the main branch published in parallel to current deployment, so there would be a "bleeding edge" for people to experiment with. For now, we can try to keep releases frequent. |
Thanks for adding the summary @aljazerzen ! Slight tweak, from my understanding:
The only thing we use stable for is changes to the website or docs fixes; any fix to PRQL's compiler or semantics needs an actual release — otherwise we get neither the simplicity of a single branch, nor the playground & docs matching the semantics of the latest release. Contributions welcome for moving this over! |
Thanks for the terrific discussion on the Dev Call last Sunday. For those who weren't on the call, here is a more fleshed-out version of my understanding of the discussion and comments from @max-sixty and @aljazerzen above. Comments appreciated. Going forward, PRQL will maintain two important branches:
|
That's an excellent base @richb-hanover . I'm going to take it and tweak it a bit, if that's OK. Once implemented, PRQL will maintain two important branches:
Until we set this up, we're operating as we were — playground & book & website are deployed on every merge to main. Does everyone agree with this? It would mean that #1611 should merge into FWIW, I think this has not been characteristic of our usually successful coordination efforts. I'm not sure why, I'm extremely open to feedback. Possibly I have done a bad job structuring the discussion, so ideas have been all over. The actual change we're making is very small. Maybe I should have been clearer that we should make the "minimum sized change"? Ideas like git flow etc were never viable imo; were we exploring way too big a space to fix the immediate issue? |
Definitely. Feel free to edit/expand on this.
I'm not sure that you, as a leader, have the responsibility for structuring the discussion. You need to (and do) make everyone feel comfortable throwing ideas into the mix. But you can also structure the goals and the decision process: We must do [a | b | c]; we have to decide by X date; we can afford no more than Y hours of development time; we have Z resources available to us; etc. I hope that my behavior did not come across as unhelpful. I agree the technical change we specified is pretty small, but I saw the decision would have large ramifications to the project because of increased commitments to testers and users. Until now, we've had a simple "developer workflow" - just check stuff in, and that's what the world sees. This change establishes both branches, with the need to maintain the attendant machinery, cognitive overhead, potential for updating the wrong branch, etc. I wanted the group to declare affirmatively that it was time to switch to this new, more involved development model. And we did. Let me be clear: this kind of change was always on PRQL's horizon. Although I had been hoping to put it off for a little while longer, I am OK embracing it now. Thanks for listening. |
@max-sixty the problem I see with your description in #1507 (comment) is that how do we release 0.4.3 with hotfixes while we also have features pending that are only supposed to go into 0.5.0 (such as the switch syntax change)? My understanding of the proposal was closer to @aljazerzen 's description: #1507 (comment) Cherry-picking descriptions from the comments above, it would be:
Since I'm not that close to the actual compiler code, I don't feel strongly about this and am happy to go with the simpler workflow proposed if it is felt that backporting introduces too much overhead and potential for merge conflicts. However how do you then deal with "breaking" changes like the In fact I suspect it would probably be worse because you would have multiple major changes which wouldn't have been merged together yet. Backporting hotfixes to |
I can comment more fully but to stop at the first problem I see with that proposal: it doesn't fulfil the original goal of this effort: the compiler in the playground doesn't match the latest release, since it includes fixes. Do you agree? |
Sorry, I didn't explain it very well. The way I saw it, playground and docs would only be updated/deployed on releases, including patch releases. They therefore would match the latest release code.
The reason I included "on every merge" (to
So there would indeed be a bit of drift between playground and latest release but it would likely be only minor since it's just hotfixes and the patch release should follow soon. If that's undesirable then playground could only be deployed on releases. That would probably be my preference. The only downside is that if there's a bug in the hotfix and the playground goes into a broken state then another patch release would have to follow immediately, but that could be ok. |
What do you see as a hotfix here? A change to the compiler or just a docs change? If it includes a change to the compiler, we violate the original goal, no? I think you agree but don't think it's a big deal, is that right? Though why are we doing this at all then? So we can avoid having breaking change PRs waiting before we do a non-partch release?? If it only includes docs & playground changes, then it's the same as the slimmer proposal I wrote above, is that right? If hotfixes include changes to the compiler, that's most changes. What's the process for doing those? Who would be responsible? Who is managing merge conflicts. How do we oversee there are no mistakes? How do we indicate the differences between the released version, the compiler behavior on stable, and the compiler behavior on main? |
I wonder if we are being distracted by discussions of hot fixes and maintaining multiple major versions and all the attendant effort and headaches caused by multiple moving parts. These will be important once we become a large project that's heavily-used by many, many people. But we're still a small project, with relatively few intrepid people using it. Although we strive to keep things working, our commitment is to fix in the next release. At the last Dev Call, I understood that we agreed to aim for a two week (more or less) release cycle, and that no changes to the compiler would occur between those releases. As a practical matter, that's pretty rapid. Do we expect to find a critical bug that needs to be addressed outside that two-week cadence? (If we found that PRQL computes 1+1=3, I suppose we could create a new out-of-schedule release.) But otherwise, let's stick with the plan. About version numbers: (0.4.2 vs 0.4.3 vs 0.5.0 vs ...) Although our roadmap calls for certain features to be in So my advice is to stick with the two-week release cadence for the compiler. Documentation and website fixes can go in at any time, and the CHANGELOG can track anything that's waiting for the next release. Thanks for listening. |
tl;dr: Ignore this and skip to below the line. This discussion is getting bigger than I intended and I will try to wrap up my participation because @aljazerzen reminded me there is a simpler way to see it which was discussed on Discord and which I think is what @richb-hanover is trying to say above and probably @max-sixty too (which I think I'm misunderstanding).
Not in my understanding but I think I am missing something. Regarding whether it's a big deal or not, I think it's a relatively big deal but I think I should have no say in it since I'm not doing the actual work and it's you, @aljazerzen and @max-sixty, that are writing new features and integrating PRs so you should decide on a workflow that works for you. My description of my understanding of the process was just to offer up an idea to see if it resonated with someone. I didn't mean it to be prescriptive in any way.
In my mind it would have been the minority but that's probably because I've been too far removed and mostly watch for new features and don't keep an eye on all the day-to-day fixes you integrate.
I did offer up my time for this (probably foolishly) for this here: #1507 (comment)
Of course I wouldn't be able to guarantee there are no mistakes but in my mind I would just be handling the simpler task of backporting changes from
Would we need to indicate this? The only visible one would be the released version, both in code and docs. Summing up, let's ignore everything I've said above. @aljazerzen reminded me that probably the easiest and most practical is to go with the simple flow proposed by @max-sixty above and not worry too much about 0.4.x and 0.5.0 versions and rather just keep going with 0.5, 0.6, 0.7, ... for each breaking change and keep up the high cadence proposed above. |
OK let's go with the approach above for a while. I'm very happy to reassess after we've lived with it for a while. I'll close this. Meta comments:
|
Because the website (book + playground) get published from
main
, they are frequently out-of-sync with the reality that's been published & taken into use by others. This can cause a lot of confusion when "known good" queries suddenly start breaking in the playground, or when docs don't match the playground.We've discussed this briefly in the past, but I wanted to open an issue since I've seen my team run into this multiple times in the past few weeks.
As the project gains popularity, I think we need to solve this in one way or another. Otherwise, this will make for a lot of frustrated would-be users. IMO, the published docs (+playground) should match the latest published version of the library, and they should also explicitly mention which version they're for.
The text was updated successfully, but these errors were encountered: