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

1 Like

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:

2 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: