Migrate to GitHub?

We maintain repositories across GitLab and GitHub. I’d like to open a discussion about potentially consolidating all our repositories to GitHub.

Reasons to move to GitHub:

  • Upstream uses GitHub.
  • We’re forced to use GitHub for several repositories anyway (forks of upstream to facilicate PRs, clusters based on Launchpad because it relies on GitHub Actions).
  • Maintaining across two platforms increases our workload. We need to work with two different systems of CI config, different repo layout, etc. We need to manage permissions and groups on another platform. We need to configure services such as Renovate or Blacksmith separately for each platform.
  • Better discoverability for our public repos, and a central location to keep our private repos.
  • (this one is a minor, but personal) GitLab has an annoying bug where you can’t filter out archived repos when searching for issues (work_items).

Reasons to not change things:

  • We originally wanted to use GitLab as much as possible to support open source projects and/or an alternative to GitHub, and that may still apply.
  • Keeping the status quo is easier.
  • Migrating repos is work: links need updating, CI config needs rewriting, repo settings need porting.

Alternatively, we could consider other options, depending on where we sit on practicality and opensource ideology here.

Perhaps we could double down on using opensource platforms and move everything away GitHub except for forks of upstream projects - we can work on porting shared GitHub Actions to GitLab CI or CI-agnostic scripts. (I believe it’s a real issue that we have vendor-lockin to GitHub for our deployments now, but that’s perhaps a separate discussion.)

We could even host our own instance of GitLab, Sourcehut, Forgejo, etc. if we wanted to go hardcore. We could offer support and deployments for alternative code forges. The possibilities are endless (although the practicality is not)!


Anyway, I’m interested to hear your thoughts! Please let me know what you think, and also respond to the poll below to get a gauge of the general sentiment.

Thanks!

Do you think we should move all our repos to GitHub?
  • Yes
  • No
  • Other
0 voters

Ticket: BB-11015

Should and worth are something need to be differentiated here. My main question: what issue do we want to solve with this? If that’s only “fragmentation”, then it doesn’t worth it, hence should not do it.

To be fair, I like GitHub way much more from UX perspective. However, I feel that it is a migration that doesn’t worth the enourmous time it requires. It is easy to underestimate how much it would take to move from A to B.

Moving away from GitHub is not possible with the constraints we work with at the moment.

2 Likes

This was the original idea. GitLab is the default for all new repos and most of what is left on GitHub is forks or just really old stuff that hasn’t been worth it to move. Which should tell you quite a bit about the costs about the prospect of switching.

Also GitHub has been doing everything possible to undermine my trust in it lately. The less we can rely on it the better. The move to Launchpad was a step backward in that regard, though I think it’s fair to say it’s an overall improvement on Grove.

We could but the downside is that it hinders collaboration with outside people, and we value that highly. GitLab is a pretty good middle-ground. It’s more open source than GitHub and we don’t use the enterprise elements, yet many developers have an account there even if they don’t use it often because they have at least one dependency that uses it.

I’d like to see us continue to avoid reliance on GitHub whenever possible, and look out for opportunities to move even further off of it. If we ever get to the point where GitHub is entirely too intolerable (which seems ever more likely day by day), it becomes much easier to leave.

+1 to what @Fox said!

For me the decision algorithm is simple on this type of topic:

  • Migrating from a closed-source tool (or partially like open core) to an open source tool => yes, unless there are strong UX blockers or requires too much budget
  • Migrating from an open source tool (or partially like open core) to something less open => no, especially for communication tools. And this is one where I would almost systematically use my veto, not just comment individually.

Yes, I wish I had realized that earlier - generally there hasn’t been enough discussions about Launchpad before doing the changes, both internally and with the larger community. We need to do better next time, otherwise we have to redo work already done, which isn’t great.

Talking about this, can we switch Launchpad back to gitlab, possibly supporting both options if others in the community want to keep using github?

1 Like

Thanks for your comments everyone! I think this clarifies things nicely.

It would be nice to add (or re-add?) a note to the handbook about preferring creating repos on GitLab - currently it’s a bit random whether a repo ends up on GitHub or GitLab.

@gabor would know more, but as far as I can tell, the only tie that Launchpad has to GitHub are the use of GitHub actions. A summary:

  • build-all / build: this uses the Picasso build workflow which is specific to GitHub actions, and probably the hardest to migrate to another CI. However, this could be an excellent upstream contribution to untie Open edX deployments from GitHub. Also, I would appreciate being able to build images locally; this is the only piece of Launchpad that we can’t run locally right now as far as I know.
  • cleanup-container-packages: simply a quality of life periodic job to tidy the image repos; easily replaced, and the image repos are specific to the platform too.
  • create-instance / delete-instance / update-instance: rarely run, and easy to run locally (for the ayce deployment, I didn’t even include these, as they increased complexity)
  • pre-commit: some general lints - easily replaced

So if we can consider decoupling building images from GitHub - to at least be able to build them locally and from GitLab CI, that would let us move away from GitHub.

Ah I found it - we do still have a note about creating repos on GitLab wherever possible: Free Software - OpenCraft Handbook

I think it can be reworded to clarify though. :slight_smile:

I opened opencraft/documentation/public!670 to address this - please take a look! :slight_smile: @Fox @antoviaque

2 Likes

I’m replying to this on Thursday as I’m off now.

2 Likes

This is now deployed! Free Software - OpenCraft Handbook now has clearer information about what we prefer and why. :slight_smile:

3 Likes

As my reply is quite long this time, I split it into four sections based on the scope, so it is easier to oversee it.

1. Fragmented knowledge
Lately, by reading the forum posts and Jira comments, I started to build the feeling that we are having issues with finding the written knowledge we have. Even though a lot of human-ops and process related topics are described in the handbook, many technical documentation exist in the relevant repositories.

The conversation and documentation is fragmented between: Mattermost (it shouldn’t be the case on paper), forum, Jira, technical docs, handbook, private docs, GitHub and GitLab READMEs, OpenCraft Course, Grove documentation, Launchpad documentation, Google Docs-based discoveries, and “random” repository documentation whether it is upstream or owned by OpenCraft (e.g., ansible-playbooks repo, infrastructure repo, etc.).

As this is not the first and probably not the last instance of a longer conversation that has reasoning split across multiple places, I propose to start a discovery to handle this issue if this is technical. As our documentation base grows, it is proven that it is less likely to find the information we are looking for or simply the effort and time was not put in.

2. Launchpad stack development history and communication
On another note, we’ve had multiple discussions about the Launchpad stack, both internally and with members of the Large Instances Working Group (EduNext). The intended audience (operators of instances on scale) was already engaged with the topic before these discoveries were made. In addition to those conversations, both within the working group and in standalone meetings, we conducted an initial discovery to identify the issues with Grove, followed by a more detailed discovery that outlined the desired solution while taking into account the current constraints we are working within.

Following the discovery, we had ongoing forum discussions covering implementation details (ref1, ref2, and more down below in the thread), shared videos demonstrating the earliest stages of development, and provided regular updates (ref1, ref2) through the epic and forum posts (ref1, ref2, ref3, ref4) as work progressed. After discoveries were accepted, we also conducted additional discoveries (ref1, ref2) work based on the new stack, which now serves as the foundation for Axim’s sandbox implementation.

One of the primary reasons for setting up Launchpad on GitHub was to move away from GitLab CI that causes us a LOT of reliability issues, enable better collaboration with the community, lower the barrier to contribution, and allow the reuse of existing code such as Picasso and Drydock, which are already developed and maintained on GitHub (by EduNext).

Note: I can highlight only EduNext as for a very long time, they are the only people joining the Large Instances Working Group meetings. This seems to change slowly as we have one or two new people for the last 2 meetings (meaning from mid-July). Before that, noone else were interested in discussions about instance operations at scale.

3. Moving to GitLab for Launchpad and cluster repos
I already discussed this with Samuel, but I’ll try to conclude that part of the conversation here as well.

The stack is building on GitHub actions in a way that Picasso and Drydock provides the images utilizing the Tutor commands. Based on our experiences with Grove in regards to GitLab CI reliability and other issues, moving back to GitLab CI would be a vast step back. Even if the idea of closed source software is not liked, we spent a lot of time and effort on fixing GitLab CI related user issues. Anyone in the team who had to deal with GitLab CI issues are praising the new setup as I see so far.

Regarding how frequently some functions are running on GitHub, let me make a quick correction: The instance create/update/delete pipelines are not rarely used. Those are used multiple times every day by the sandboxes integration (mostly used by Axim, but by OpenCraft as well). It is a crucial part of the sandbox implementations. The number of sandbox provisioning, reliability, and CI-related issues dramatically reduced since the new stack. This is due to the effort @Kaustav and I put into the Axim sandbox provisioning and decoupling, the CI improvements (that are technically not possible on GitLab CI), and the new stack’s primitives (e.g., Picasso, Drydock, ArgoCD, GitHub Actions, and more).

Also, Drydock is building Kubernetes manifests for us and configures ArgoCD syncwaves that determines the order of resource synchronization on the Kubernetes clusters during deployment. This sounds a tiny bit, but in reality, to match everything on GitLab would mean 100+ hours spent on duplicating an already existing logic and maintain two different versions of Picasso and Drydock. This is something we deliberatly avoided and this (read: reducing duplications and unify tooling as much as possible) was the starting discussion of the discoveries.

4. Moving and creating repos to GitLab
As the handbook says, we should create new repositories on GitLab unless there is a strong reason not to. Moving repositories that can be moved to GitLab already happened once as I remember, but if other subjects found to get moved, let’s move them (with the exception of Launchpad or sandbox automation related repos).

3 Likes

I 100% agree with you; it’s a real problem, and a point of friction I deal with constantly. A big +1 to this proposal, and I would love to be involved. :slight_smile:

Thanks for clarifying that. :slight_smile: We’ve discussed elsewhere, but closing the loop: I think what we can do here is improve the docs to make it clear that these pipelines are optional, when you might want to use them, and what secrets are required for which pipelines. See open-craft/launchpad-cluster-template#52 (comment) for further discussion.

I’m curious about what issues we had on gitlab CI, and what things were technically not possible there - could you link me to any discussions or tickets? :slight_smile:

@gabor

+1 to a discovery task on this - including discussing & reviewing it with the larger team here.

That’s good to hear that it is discussed with the community now, though the recent discussions at the conference about Launchpad gave me the feeling that there were still quite some progress to make in terms of working together on this. And in any case, discussing it here on the OpenCraft forum too would be useful too in the future, to discuss with the rest of the team who might not be in the DevOps working group but would be impacted.

One of the primary reasons for setting up Launchpad on GitHub was to move away from GitLab CI that causes us a LOT of reliability issues, enable better collaboration with the community, lower the barrier to contribution, and allow the reuse of existing code such as Picasso and Drydock, which are already developed and maintained on GitHub (by EduNext).

If gitlab isn’t reliable enough, what open source alternative can we replace it with, instead of github? Working with the community doesn’t mean we should just accept to switch to proprietary tools, it should be a requirement that is well understood when working within an open source project. It makes sense to support github, but have a more open alternative for managing this?

I’m not sure, we should have a discovery on that, though I’m not sure the issue is inherently with GitLab but the hosted version of it.

We are building on GitHub actions. Without replicating the exact tooling that EduNext has built, supporting and maintaining, we cannot move away from GitHub; as I mentioned above, that was a deliberate choice of ours that we should go ahead with GitHub due to the community support and tooling around it.

@gabor

Definitely, we can and should have a discovery about this :+1:

Yes, to keep the stack open source we do need to replicate the parts that are currently handled by closed source. As mentioned above, moving from an open source tool to a proprietary one is not OK. We can certainly have the feature for people using github, but we should try to keep our stack open source wherever we can, and especially not replace open source parts of our stack with proprietary ones.

@antoviaque just for confirmation if I really do understand correctly what you suggested above:

  • you would like to replicate drydock and picasso for GitLab CI, AND
  • move the generated cluster repos (of Client + OpenCraft clusters) to GitLab, AND
  • keep the cluster template repo on GitHub for the sake of contributions

(so the cluster template generates GitLab CI OR GitHub Actions templates depending on the selected target)

Is this what you meant?

@gabor Please work on this with me, there are again too many round trips in this discussion. It should be your goal too to keep the infrastructure open source - can you work toward that? And proceed with the discovery, without planning to replicate whole open source projects?

@antoviaque Regarding Launchpad specifically, there are nuances to this discussion. In the past when we’ve tried to go fully open source with our operations processes (OpenStack, Grove, GitLab CI, etc.), we got very little collaboration nor community adoption - in some cases essentially zero. So we invested a lot of work in achieving the “100% open source” label, but we paid for it by being a black sheep.

We are already facing an uphill battle in trying to get other larger organizations to collaborate with us on the devops front and to participate in the Large Instances Working Group; eduNEXT has been great in this regard but other orgs are still reluctant. I personally think we need to be doing everything we can to continue to foster that collaboration and make it easier for those orgs to adopt shared tooling with us, and that means prioritizing ease of collaboration (using GitHub) and shared open source projects over aiming for “100% open source” (which sounds more open/collaborative but is actually less from my perspective, and requires re-implementing some things on a different stack to avoid GitHub).

we should try to keep our stack open source wherever we can,

We already do this, but the goal is for Launchpad to be a community project / shared stack, not our stack that happens to have source available under an open source license.

Pretty much every healthy open source project that I encounter is on GitHub. I do think it’s good to try to push communities away from using Discord and toward Discourse, and perhaps even away from Slack toward open source alternatives, but I don’t think that avoiding GitHub is a useful battle to fight. If/when GitHub enshittifies, I’m sure communities will start moving away from it en masse towards GitLab/Gitea/Codeberg, but until then the network effect of having everyone on one system trumps the value of having access to its source code, or at least that’s how it seems.

@braden There are two different topics here: trying to maximize our collaboration with the rest of the community, and keeping our stack open source. I agree that we need to support interfacing with closed source tools or dependencies when it allows to collaborate better with others - and for something like github, I’m sure there would be in any case clients for which we would use it ourselves anyway – just like we will have instances on AWS regardless of our reference hosting company.

But keeping our reference stack fully open source (or at least progressing toward it) for our general case is important, because that’s a contribution few others would do to the Open edX project. It can be really hard, but it is part of our approach and values since the beginning: take the open source approach, even when circumstances push us another way.

And at the very minimum, there should be a good internal discussion about the switch from Gitlab to Github, with a solid review of alternatives that allow us to keep using open source where Gitlab was used before the switch. That is what I keep asking to do now in a discovery – @gabor can you create and schedule that task?

For what it’s worth, it seems like Gitea Actions is an open source implementation of GitHub Actions, so if we need to show that a fully open-source stack for LaunchPad is possible, then that might be a way to just keep the existing community Actions code but run it on a fully open source stack.

2 Likes

@antoviaque I think @gabor already did a few discoveries related to that, which he linked above, with this one being the most relevant. Although the only two options considered were “status quo” (Grove on Gitlab CI) and (what became known as) LaunchPad (community repos shared with eduNext on GitHub). Are you asking for a couple more alternatives to be considered and added as other options there (e.g. community repos on Gitea)? Or a whole new discovery?

I would prefer to create an upstream documentation called “how to run LaunchPad on a fully open source stack” (i.e. Gitea) rather than an internal discovery, if we’re going to invest time in this.

1 Like