Updates on upcoming v0.15.0 PureScript release

I’m going to use this thread to update the community on the upcoming v0.15.0 PureScript release. Specifically, announcing various milestones we hit. I’m writing it for those who are new to the community and for those who were with us in the v0.14.0 update.

No estimate being given for when will v0.15.0 be released

First, I’m not going to give an estimate as to when this is ready. During the v0.14.0 update, I made statements like, “We’re really close!”, and “it’ll be ready soon!”. Well, 3 months later, it still wasn’t ready. Not exactly “close” or “soon” now is it? While I don’t anticipate this release taking as long as the previous one, I’m still going to apply that lesson and not provide an estimate.

Current Status

Second, I want to provide a “current status” as to where we’re at. Below I’m providing two snapshots. The first one is the original one I created when we got started on the release. The second is where we are today.

I’m providing both to prevent a misinterpretation of the current snapshot: the current snapshot is not exhaustive. As we’ve made progress, various issues arose, I realized additional tasks needed to be done, and I reformulated a few steps to show more detail. In other words, there may be more tasks we need to do than what is currently shown. Moreover, some boxes serve as things to keep in mind, not necessarily tasks to do or tasks that we’ve agreed to do.

First snapshot

Current snapshot

What are core, contrib, node, and web libraries?

Third, you might be wondering, "What are the core, contrib, node, and web libraries?

  • core libraries refer to the 60 libraries under the purescript GitHub organization. It has the policy that PRs can only be merged if CI builds and 1) two core team members approve the PR if it’s submitted by a non-core-team contributor or 2) another core team member approves it if the contributor is on the core team.

  • contrib libraries refer to the 48 libraries under the purescript-contrib GitHub organization. It follows a similar PR policy, except approvers must be on the contrib team.

  • node and web correspond to the purescript-node and purescript-web GitHub organizations.

Why couldn’t I help earlier?

Once most of the breaking changes are done to the compiler, we can start updating the ecosystem. Updating the ecosystem is a very linear process. Since core libraries use bower, we have to update each library’s bower.json to refer to the master branch before any of its dependents will build in CI. Once we get to contrib libraries, we have to depend on a package set, and that complicates things. Moreover, some libraries in web and node depends on libraries in contrib and vice versa.

However, the biggest bottleneck is getting an approval for the PR, not submitting the PR itself. So, this task is really a two-person job for core libraries, and can expand to a 2-4 person job for contrib, web, and node libraries.

Due to the efforts of myself, @thomashoneyman and @sigma-andex, core, contrib, node, and web libraries (excluding purescript-affjax) have been migrated to ES modules. These migrations exist only on those repos’ default branches, not as an official release yet as we may still make breaking changes.

How do I help?

In this section, I’m specifically talking to library authors. As for how to help, you could start updating your libraries, but you might want to wait before doing that.

First, all core, contrib, web, and node libraries are currently “unstable”. If you updated your library and added it to the package-set repo’s prepare-0.15 branch, your library may break if we merge other breaking changes (e.g. in the compiler itself or in one of those libraries). Thus, you might have to do additional work later.

Second, your library may depend on another package that hasn’t yet been updated. Until that package compiles, you can’t update yours. The latest released package set has 419 packages whereas the prepare-0.15 branch only has 229. See libDeps.txt to determine whether your package can be updated now or not. Lines starting with ‘0’ have 0 dependencies blocking their update, but this calculation might be incorrect at times.

Third, I use the package set to see how breaking changes propagate throughout the ecosystem. If you added your package and it stops compiling after a breaking change is made, I’ll temporarily drop your package from the set. This creates extra work for me.

The ES modules working group will be discussing where we’re at and what we need to do next in weekly Discord call tomorrow.

List of possible breaking changes

The issues and PRs below are labeled with type: breaking change and purs-0.15. The breaking change label simply means that implementing the change would be a breaking one. It doesn’t necessarily mean we think it should be done, or that we will do it in this release.

14 Likes

Just FYI. If there’s a particular breaking change you’ve been wanting to get in, now’s your chance. However, you’ll need to be the one who submits the PR and makes a case for why it’s needed.

1 Like

Just a heads up. I’ve posted a summary of the changes (breaking and other unreleased improvements) we made across all core, contrib, web, and node libraries in this PR. If you’re not watching all of those libraries, this PR gives a good summary:

3 Likes

The migration guide is largely complete (aside from final version numbers of tools). Some of the links in this guide won’t work yet:

1 Like

It’s been a while since I’ve made an update here. Below is the current snapshot:

4 Likes

@JordanMartinez btw, the text on the image is mostly not readable (if download it and zoom in).

How’s this? I increased the scale from 1.0 to 1.5:

Looks like Discourse is the problem here, not the file itself.

When I download this file and zoom in in the editor/viewer I see blured poorly readable text:

Yeah, it seems that Discourse takes the file and significantly decreases its file size, thus making it unreadable. I’m not sure what’s the best way for working around that.

You could push it to a github repo and post the link.

Thanks for the idea!

@wclr See GitHub - JordanMartinez/purescript-0.15.x-snapshots

3 Likes

It’s also possible to just link the raw image (from github) via markdown. For example:

2 Likes

Lots has happened today:

  • All core, contrib, node, and web libraries (aside from github-actions-toolkit) have been released.
  • The prepare-0.15 package set now refers to these releases (as opposed to a relative “may change at anytime” branch (e.g. main / master))
  • We fixed a bug and improved some of the error messages in pulp
  • spago was updated to work on both 0.14.x and 0.15.x compilers (npm i -g spago@0.20.8)

A 0.15.0 compiler release should be coming soon.

8 Likes

I was hoping to get 0.15.0 out yesterday, but ran into some issues with the release PR. While that has been resolved, I also learned that a breaking change I made to node-streams was done incorrectly.

Thus, I’ll need to make a breaking change on node-streams, and update its dependents (see list below) to use the new version:

[
  "github-actions-toolkit",
  "node-child-process",
  "node-fs",
  "node-fs-aff",
  "node-http",
  "node-net",
  "node-process",
  "node-readline"
]

After that and another package set release, things should be good to go.

4 Likes

Node libraries were updated and the package set was updated. However, the 0.15.0 build hit an issue with its cache and isn’t building the binaries correctly: v0.15.0 · purescript/purescript@1324638 · GitHub

Because npm i purescript downloads the binaries from GitHub, I can’t just publish 0.15.0 on NPM. We’re troubleshooting this.

3 Likes

FWIW, it seems like this is a GitHub-wide issue: No such file or directory · Issue #794 · actions/cache · GitHub

2 Likes

@JordanMartinez, you should be good to publish to npm now.

2 Likes