Hi Accumulo Devs, I wanted to bring to everybody's attention that GitHub is sunsetting their classic "Projects" interfaces and will very soon forcibly migrate all of them to the new Projects. See https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/
There are two ways we use projects: 1. To track groups of related topics under a single theme of effort, and 2. Basic milestone tracking ("fix versions") For the first use, the new projects will still be suitable, though they behave differently, with some key differences that we all need to be aware of. We've already been using two of them, named "Accumulo Elasticity" and "Accumulo Observability". For the second use, the new projects are a huge hassle and very bloated for what we need. What we need here is very basic milestone tracking. In JIRA, we had the "fixVersion" field, in which you could specify multiple versions in which we released a fix for a given issue. In GitHub, we have "milestones". However, GitHub will only let you specify a single milestone. So, it's harder to specify something complex, like "this bug is fixed in versions 2.1.1 and 3.0.5" like we could easily do in JIRA. As a workaround, we considered using labels. However, labels have the problem of being around forever... and it's very hard to manage them (closing ones that are old) because all you can do is delete them (which removes the label from every issue it was on). Labels are suitable for a discrete set of states like "blocker" or "critical" or "question" or "wontfix" or "good first issue", but not for things like versions, where new ones are constantly created and old ones need to be archived. So, we had been using the "classic" GitHub Projects for this. However, the recent change forces us to reconsider this use case. Here's a couple of things to consider about new projects and how they differ from the classic ones: 1. New projects are scoped to the GitHub organization (github.com/orgs/apache) not to an individual project (github.com/apache/accumulo) like classic projects. This is convenient for the first use case (because they can track issues across repos), but are not desired for milestone tracking for a single repo. 2. New projects use a common namespace. Our current projects use versions like "2.1.3" and "3.1.0". We would have to change all of them to "Accumulo 2.1.3" or "accumulo-2.1.3" to not get lost in the larger common namespace. 3. New projects have complex permissions that we need to make sure we set properly. These permissions depend heavily on ASF's INFRA team maintaining per-project committers (sync'd with LDAP) or rely on us to actively maintain permissions on every project. For example, when a new project is created, we have to make sure it is set to "Public" instead of "Private" which is the default, set the default permissions from "Write" to "Read", and then add the "accumulo-committers" team (which INFRA should be keeping synched to LDAP and GitBox) to the project with "Admin" permissions, so all the committers can share in its maintenance (by default, only the user that created it has "Admin"). When I looked today, none of our projects had these set correctly (though I have requested their creators fix them, so they should be good soon). If any of these permissions are set improperly, then users will not be able to see the projects labeled on issues, or will have too much permission and will be able to make changes that interfere with our community's project planning. 4. New projects must be manually "linked" to the repository to be easily found when tagging issues, or in one's personal "Recent" list. If they aren't and you can't remember the name, you have to scroll through hundreds of projects in the organization to find it (assuming you have permission to see it, which regular users and outside contributors would not have). Milestones still have the limitation of being able to have only one, but this could be mitigated by having a consistent way we use them. For example, for something like "fixed in versions 2.1.3 and 3.1.0", we could just set 2.1.3 as the milestone, and users can infer that any version released chronologically after that would include the fix. Alternatively, we could create separate tickets for backporting, like label issue number 1234 as "fixed in 3.1.0" with a milestone of 3.1.0, but then create a new issue that says "Backport #1234 to 2.1" and has a milestone of "2.1.3". However, my concern about that is the bloating of redundant tickets, which makes it hard to follow the lifecycle of an issue. I think simply marking the oldest fixed version and inferring the newer releases is the better way to go. However, that does have two downsides: 1. You might need to cross-reference release dates to see if a fix in 2.1.3 was in 3.1.0, for example, because you're not sure if 3.1.0 was released before or after 2.1.3, and 2. There may be some special situations where a fix version didn't apply to a newer branch, was not merged to it because a different fix was required in the newer branch, was reverted in the newer branch, or the timeline doesn't match up because voting took longer for the older branch, or some other special circumstance. I think that neither of these two are substantial concerns, though. I think they can be clarified via the comments in the issues/PRs, if it comes up. So, my proposal would be to switch to using single milestones. We can mark the oldest milestone that a fix is applied to. If we backport to an earlier branch without creating a new issue, we can just update the milestone to the older version. If a new issue is created, we can leave the original milestone alone, and describe the new issue/PR as a backport and put the milestone appropriate for the backport. If there are any special circumstances, we can just describe them in the comments. In August, the classic projects will all be forcibly migrated to the new projects. I'm not sure about the details of what happens if there's a name collision, or what happens to closed projects, or if only open projects will be migrated. I'm also not sure what permissions will be set on the new projects for the migration. So, there's a lot of unknowns. What I would like to do is make a decision quickly to use milestones as I've described above, and then I can manually go in and convert our existing projects over to using milestones and update the links in the website. Once that is done, I can manually convert any old projects that were not milestone tracking, but instead correspond to the first use case I described above. For those, I'll make sure they have a name starting with "Accumulo" so they can be easily found, make sure they are linked to our repo, and have the proper permissions on them. I would prefer not to rely on the automatic migration from classic to new projects because there are too many unknowns and too many things can go wrong. So, are there any objections to going with the single milestone approach I've described? Or perhaps you feel strongly that the new projects *are* best for milestone tracking (I really hope not, because I'm really strongly against using them for this)? Or perhaps there's a better suggestion? (Or best yet, do you know somebody at GitHub who can implement multiple milestones prior to the sunsetting of the classic projects? *long-shot*) Thanks for your attention to this issue, Christopher P.S. We are already unable to create any new classic projects, since GitHub already disabled that. So, once 2.1.3 is released, we're going to need to have a decision made so we can track the 2.1.4 tickets that got bumped off 2.1.3. We can always do something temporary in the meantime (using a label, milestone, or new project), if we have to, but I'd prefer to make a decision than stick to temporary workarounds without one.