Overview

About this video

What You'll Learn

  1. Install Gitea from a binary on Ubuntu and finish the web installer.
  2. Configure SQLite, admin access, SSH keys, and commit signing in Gitea.
  3. Use repository migration, push mirrors, CI options, and the API.

David is joined by Matti (project owner) to install Gitea from binary on an Equinix Metal Ubuntu box, walk the web installer with SQLite, then tour repos, SSH signing, migrations, CI options, and the API.

Chapters

Jump to a chapter

  1. 0:00 <Untitled Chapter 1>
  2. 2:08 Introduction and Guest Welcome
  3. 2:58 Guest Introduction (Matty from Gitea)
  4. 3:12 Gitea's Mission and History
  5. 5:25 Project Governance
  6. 6:12 Mission Statement
  7. 7:09 Use Case: Mirroring Repositories
  8. 7:49 Gitea's "Painless" Claim
  9. 8:45 Discussion on Git as a VCS
  10. 12:08 Starting the Hands-on Installation
  11. 12:22 Exploring the Gitea Website & Docs
  12. 13:33 Choosing Installation Method (Binary)
  13. 13:56 Gitea Technology Stack
  14. 14:15 Comparison to GitLab Installation
  15. 15:37 Preparing the Server Environment
  16. 16:52 Installing the Gitea Binary
  17. 17:28 Running Gitea & User/Data Setup
  18. 18:06 Single Binary & Database Options (SQLite)
  19. 19:21 Other Deployment Models (Docker, Kubernetes)
  20. 19:22 Deployment Models
  21. 20:16 Following Recommended Server Setup
  22. 20:17 Recommended Server Configuration
  23. 20:26 Add the Get User
  24. 24:04 Accessing the Web Installer
  25. 25:00 Web Installer vs Manual Config
  26. 25:38 Configuring Gitea via Web
  27. 27:42 DNS, HTTPS, and Proxies
  28. 30:13 Registering the Admin User
  29. 30:56 Admin Dashboard Overview
  30. 31:23 LFS and Package Registry Support
  31. 32:26 Creating a Repository
  32. 32:50 SSH Keys and Commit Signing
  33. 34:13 Testing SSH Clone
  34. 35:26 Authentication Options
  35. 37:20 Repository Migration Capabilities
  36. 37:29 Migration Capabilities
  37. 38:10 Push Mirrors
  38. 38:24 Demonstration: Migrating a Repository
  39. 39:36 Ci Integration
  40. 39:37 CI Integration Options
  41. 41:01 RSS Feeds
  42. 41:45 Feature Parity Comparison
  43. 42:50 Project Prioritization & Governance
  44. 43:52 Clustering and High Availability
  45. 44:51 Performance and Resource Usage
  46. 46:19 Exploring Project Boards
  47. 47:45 Rss Feeds
  48. 49:05 Discussing Repository Grouping
  49. 49:53 Exploring the API (Swagger UI)
  50. 49:57 Visual Swagger Ui
  51. 50:41 The Gitea CLI Tool (`t`)
  52. 51:07 Command Line Application
  53. 51:51 Public Gitea Instances
  54. 53:05 Issue Templates and Custom Forms
  55. 53:51 Conclusion and Summary
  56. 54:50 How to Get Involved and Contribute
  57. 56:04 Future Gitea Performance Experiments
  58. 56:13 How Many Instances of Gitty Can We Run on a Single Server
  59. 57:11 Final Remarks & Advanced Features Recap
Transcript

Full transcript

Generated from the English captions. Timestamps jump the player to that moment.

Read the full transcript

2:08 Introduction and Guest Welcome

2:08 Hello, and welcome back to the Rawkode Academy. I'm your host, David Flanagan, also known as Rawkode across the Internet. Today, we are taking a look at an open source, painless, self hosted Gitea. Now as always, there are important rules. If I suddenly come underwater, tell me early. Do not wait till the end of the stream. Alright? So give me a thumbs up and a chat. Make sure that I sound alright. And then today's session will just be a whole lot better. Alright. Let's pop over here. I am joined by the project lead and founder of Gitea,

2:43 Matty. Hey, man. How's it going? Hey. It's going really well. Thanks for having me. Oh, it's my pleasure. It is always the highlight of my week when I get to sit down and take a look at a really cool open source project. So today, it's going to be a whole lot of fun. Can you please just give us a little bit of an introduction to who you are, please? Of course. I'm Maddie, also known as tech or Technologic in the Gitea community and a broader open source community as well. And I joined Gitea. I was looking at

3:12 Gitea's Mission and History

3:15 my commit history just the other day, and I joined in 2017. The project started in late twenty sixteen. And we're just making a way for developers to be able to post their own source codes so they don't have to rely on a centralized service or be able to self host on something as small as a Raspberry Pi. Awesome. Very, very cool. Awkward timing, but the building manager was checking my door right there. And I've also got Russell in the chat telling me that the sound is okay, but not amazing. Thanks, Russell. That that's really helpful.

3:58 I'm gonna pop a cable very, very quickly. Honestly, audio is the worst thing. I have nothing but a hard time trying to get right. Russell, let me know if that is any better. Okay. Cool. So thank you for introducing yourself and telling us a little bit about Gitea. It's I think it's really cool that we have choice when it comes to hosting our own get. It's something that I've, you know, I've done a few times. And it's just nice to be able to I'm just not a complete magpie when it comes to this stuff. Like, whenever there's a

4:38 cool open source project, I just feel the need to, like, just go and play with it. And Gitea has been on that list for a while, and I haven't actually got a run to it. So today, we're gonna have a bit of a a centric look at me just kinda kick the tires on it and get started. I also love that you said that it runs on a a Raspberry Pi. You know, I think we're in a really cool age of technology where we all have these tiny little computers set in well, mines are mostly in drawers, but I hope other

5:02 people's aren't always sitting in drawers. But, you know, we do have the ability to, you know, stick in a little bit of power in these things, sell tape them onto the wall, and run really cool stuff at our homes, you know, like, Gitea and Home Assistant and all these other things. So it's cool that that is a kind of, you know, not a focus, but, like, it's something that the Gitea community has embraced and adopted. Alright. Awesome. So you said that the Gitea project has been around since 2016 and you joined in 2017. I thought you were the founder, so I

5:25 Project Governance

5:30 made a mistake there. So Oh, sorry. Yeah. I I'm the project owner and I'm a project owner and leads. So we have, yearly elections, and I've been, voted for to, be the steward of the projects, one of the three, owners, for the past couple of years. It's it was a project started by, Lanny Zhao, also known as, Lanny on GitHub. And, so we've been, working together for quite some time now. Cool. What are some of the like, is is there a mission statement, Rawkode? Is there, like, something that you're just driving forward to and pushing to? Like, you mentioned governance and elections

6:12 Mission Statement

6:20 and stuff. I mean, that sounds like a very mature project. So there must be some sort of mission statement in involved here. Yeah. Definitely. With close to 32,000 stars, we're one of the top 500 projects on GitHub or something. And we're moving towards being able to actually self host ourselves. We have the infrastructure set up. It's just, takes some time to extract tens of thousands of issues and pull requests from the GitHub ecosystem. And so our mission statement is really just giving control back to developers to be able to post the code wherever they want. And

7:01 yeah. That's a good mission statement. I don't think you I don't think you need much more than that. Yeah. It's, yeah. I have, like, I have I get to running locally just on my NAS, and I have it mirroring thousands of repositories just because repositories come and go and just so that I have that archive. So then if I'm working on something, there's that Node. Js package from 2015 that disappeared or whatever, and it's there and all of my projects still run as expected. Awesome. We're we're gonna dive into the hands on component in just a second or maybe a

7:09 Use Case: Mirroring Repositories

7:45 a minute or two, but I wanna ask you just a couple more questions. So on the thumbnail for this session and on the Gitea website, it says, like, a painless self hosted Git solution. Yeah. So That's so hopefully Yeah. Sorry. Go for it. That's I'm I'm not gonna tempt the demo gods today, but that is really what we strive for that we provide options for any technical skill level, whether you're a beginner or you've been writing Linux kernels the Linux kernel for, I guess, thirty one years now that you can set it up and it'll run.

7:49 Gitea's "Painless" Claim

8:31 Yeah. Well, I was gonna say, I mean, it's bold, and I like that. But I have a I do have a natural talent for breaking things, so I really hope that I don't break anything today. I'm sure I won't. Alright. Last question just because I think I've said this publicly on Twitter before, and, like, I feel like Git is the version control system that we're stuck with, but not necessarily the one we did want. And I was curious, what are your thoughts on Git? I mean, you must be quite you you must work with Git literally day

8:45 Discussion on Git as a VCS

8:59 in and day out. So, I mean, you happy with it? Do you see that as being an evolution? While we still be using Git in five or ten years time? That's a very interesting question. Yeah. I've I definitely work with Git every day, and it it's, yeah. No. It's great. I love it. But there's, getting down into, like, the depths of things of being able to write your own forge. There's some nuances that you have to be aware of. And I also understand that the user experience isn't necessarily the best from command line. And so

9:39 that's one of the problems that we're trying to solve with Gitea is being able to if you don't use the command line at all, that's fine. You can do everything in the web editor. And we have the full, Monaco, editor in, the browser. Nice. And, yeah. But I also like, I'm I love, source control of all kinds. I I I I package Mercurial for NICS OS, and I just sent a patch to Alpine just yesterday for the update to Curio. And so I think yeah. No. It's it's so fascinating, source control because and how, different source control

10:27 systems approach different things. Even and Git have their differences, and some people like to compare them directly. But just even how things are stored. Like, Git has their PAC system, and does as well. And Yeah. Yeah. And I I grew up with CVS and Subversion. And so, you know, Git and Curiel are a brush a breath of fresh air. Yeah. I do not miss either of those two tools. I mean, Subversion felt like such a breath of fresh air back in the day when we adopted it and switched it. But, you know, the centralized model, like, it

11:14 was just very painful pushing and locking fails and all. Yeah. Never again, hopefully. And I I actually you know, I I I do really, like, get my only major gripe with it is the identity model, and then it's literally just a text email address. And that's it. I mean, obviously, we can sign stuff now, and that's very cool, but you still need that email address. I went through a phase of just changing my email address to, like, bell@microsoft.gov and pushing stuff to GitHub. And, like, nothing stops you. Right? Because why? Cool. And lastly on that, I experiment with a lot of

11:49 prototype version control systems that have come out. There's lots of them out there. Some really cool Rust based ones that I'll try and put the link to at the end. But then every time I play with it for more than ten minutes, I'm like, I'm just wasting time now because GET is ubiquitous. Right? Like, it's just literally everywhere. I don't think we can get away from it now. So alright. That's enough of my preferences. I think we should dive into the hands on component and let's get get to you running on some on some metal.

12:08 Starting the Hands-on Installation

12:18 Excellent. Let's do this. Alright. I have my screen shared and Russell, if you swear again in the chat, I'm gonna ban you. Visual source safe. Come on. May as well say Pearforce or is it Preforce or Perforce? I can never remember. We have the Gitea website. So if you want to check out anything that we're doing today, I can remember how to zoom, you can go to gitea.io. I mean, it looks familiar right off the bat, and I'm guessing that's an intentional decision by the team to make it familiar to developers. Yeah. So, it's, reminiscent of, GitHub,

12:22 Exploring the Gitea Website & Docs

13:04 and that's just, the user experience is familiar with one system. And so just transitioning over to ours is they know where to expect things, and they understand the concepts without having to relearn something entirely. Cool. If I click on try, this is oh, this is the test instance. I guess I want to go to docs for today. Right? Yeah. Cool. Exactly. Alright. We have a whole bunch of installation options here. Do you have a preference? So probably just from binary is likely the is one of the most common ways. Just download the binary from our

13:33 Choosing Installation Method (Binary)

13:53 release site and Yeah. Hit the ground running. Well, before I I do that then, you know, Gitea is written in Go. Right? Is that right? That's right. Yeah. And then we have our presentation layer is a combination of some Node. Js packages and UCSS frameworks. Okay. Cool. Awesome. Because I haven't I have tried to install, you know, GitLab is obviously an open source Git solutions as well. But that was the most painful week of my life, I think, trying to it's multiple services, but really they're distributed as, like, one big massive thing. Yeah. I lost some sleep that week for sure.

14:15 Comparison to GitLab Installation

14:35 That's interesting that you say that because that's actually how I came to Gitea as well is I was responsible for managing GitLab and no shade to them because they've done wonderful things with their installer. It's just the omnibus now. But at that time, it was I was looking for alternatives. And, yeah, I found Gitea, and my life has changed for the better since. Yeah. I I love that you mentioned the omnibus because back in the day when I I'd I'd talked to Kubernetes really early, and one of the first things I tried to deploy to it was our own GitLab

15:15 instance for the organization I was working for at the time and the Omnibus Helm chart that just deployed everything. And I was like, how do I, like, upgrade one component? And the answer was just like, no. You don't. And I'm like, alright. So this thing's shipping Postgres and Redis and 14 Ruby applications as this. Yeah. I should have the toys at the prom and just walked away. But we're not gonna have that problem today. So what have I prepared in advance? Well, nothing as always the answer. We have a oh, my shells kicked me off. Alright.

15:37 Preparing the Server Environment

15:49 Hopefully, that's the same IP address. Nice. We have Equinix metal, bare metal machine. We've got some cores. We've got some RAM. I haven't done anything to this. This is a Ubuntu box. It's a vanilla Ubuntu install. There's nothing special done here in advance. So we're gonna go through the process of installing Gitea on this machine. And I'm really hoping that Matt is not gonna shut around and go, oh, Ubuntu. Sorry. Not today. Ubuntu is gonna be okay. Right? It's gonna be definitely great. And just as a disclaimer from our side, Equinix is a sponsor of the project.

16:23 Oh, are they? But Oh, nice. We recommend them otherwise even if they didn't sponsor us. I I actually used to work for Equinix Bell, so I do have access to the machines. And I use them for everything because they're just they're fantastic. Why spin up a VM with one core and 512 mega RAM when you could just spin up a monster machine and get so much more done? Exactly. Yeah. Okay. So I didn't know that, but that's very cool that they sponsored the project. Alright. Let's work through this then. So we're gonna download the right file. This is AMD

16:52 Installing the Gitea Binary

16:56 sixty four. This is gonna be really easy, isn't it? I mean, I'm assuming I could probably just run Gitea help. Yeah. There we go. So is this is one of the really special things about Go as well. And I'm not a daily Go developer. I do typically prefer to write things in Rust, but the static compilation of Go binaries and the ability to ship them everywhere is very, very nice. I've got to say. I mean, is that as done? Did I just run Gitea? Yeah. I mean, you could, but it's recommended to use a separate Unix

17:28 Running Gitea & User/Data Setup

17:37 user just because it if you're running with open SSHD, it will take over your authorized key files. So there's a bunch of copy and paste things that you can do to create the, new, Git user. And then also just general, if you're pushing and pulling via SSH, you don't want root at gitt.com. You want to get gitt.com. Yeah. That makes a lot of sense. I guess what I'm curious about right now is that you mentioned that there's Gitea, which is a server. It's written in Go. You have a front end, which has other components. I'm assuming there's a database that needs

18:06 Single Binary & Database Options (SQLite)

18:16 to be configured or used in some capacity. So, like, does this all ship in a single binary? Yeah. So everything's precompiled, you can use SQLite. If you have database already or if you wanna configure a database as well, you can do that, MySQL, Postgres, MS SQL, if you're a Windows shop. But if you're just a lone developer, SQLite is will meet your needs more than enough. Yeah. I'm I try to encourage people to use SQLite a lot more, especially with what Ben Johnson's doing now at fly.io with LightStream and the ability to kinda, like, hook into the rate ahead log and rate

19:02 it to blob storage. It's just absolutely ridiculous what you can do now with SQLite. I I actually find myself struggling to reach for post queries anymore, which was always my default. Okay. Well, this is really cool. Single binary stuff makes me happy, especially from an operational point of view. What about other deployment models? I couldn't look at the website here, but if I wanna run this in a Kubernetes cluster And we have a Helm chart exactly for that. So you can install the Helm chart, and it comes with, optional dependencies, the, Bitnami database charts if you,

19:22 Deployment Models

19:44 want to, use them to spin up a database. But, again, it's optional. So if you already have a database cluster set up, you can point to that. Or, if you we don't recommend running the SQLite on Kubernetes just because, likely, you're mounting the files from other NFS or whatnot. So the latency there would be, something to worry about, but, you know, it's possible. K. Cool. Alright. Well, I'm gonna run through your recommended server configuration then. I don't even know if get ships by default. It does. Okay. Nice. And next, we're gonna add the get user.

20:26 Add the Get User

20:27 Like you said, we don't wanna be doing root at. So let's grab this. It's just setting up bash and disable the password. And I'm assuming all the repositories within the Gitea instance Gitea and Gitea Gitea and live in home get. They're just gonna be thrown in there. Is that right? That's exactly. Actually, in the next set of commands, you'll see that it's I'm gonna store it all in bare lib Gitea. Alright. Okay. Alright. Let's do that. And then we chill on some stuff. But we don't have an any further yet. Right? Oh, yes. So if you

21:11 the installer will auto create it for you. So when you, set up Gitea the first time, installer will be presented to you, or you can, hand create the configuration file yourself. Okay. I haven't seen any mention of an installer yet. Did I skip a step? No. So that's that's good to know to include that. Alright. Let's just skip over that just now. So then yeah. I really need to stop scamming stuff and read things properly. Do I need to run git generate secret? So that will if you're manually generating the configuration file, then you'll need to. But otherwise,

22:02 the installer will create that for you. Alrighty. So let's set the work there. Copy this to Ben. And now we get to decide how to manage this. So this is just to run it, but we can use our Linux service. So let's do it the nice way. I like it when software gives me a system d unit fail. It makes me very happy. Service. Oh, yeah. I'll fix that. So this is set up with all the defaults that we've just worked on, which is the user get. Yep. And the group. We didn't add a group get that we I'll need to

22:50 add that. Working directory looks okay. And we don't need a database dependency. I think that's fine except for my name because I can't type service enum reload. Okay. What do you think? That should I add that group, or do you think we'll be okay? Probably best to add that group, actually. We have one of our maintainers, John, in the chat, and he's taking notes. Group ad. Yeah. Oh. Oh, I guess the ad user would have created it. Oh, fantastic. Did it have a flag on it? Oh, it did. Okay. Dash dash group. Okay. Fantastic. Awesome.

23:51 So we could then run the enable, I'm assuming. Tada. There we go. Alright. I don't need your docs anymore. So let's grab the IP address, which I don't remember, so I'll grab from here. And it doesn't run on port 80. Yeah. It's not a a privileged process, and so it can't listen to anything below 1084 or sorry, ten twenty four. By default, the port is 3,000. Cool. So we've got it running with ease. I mean, let's just call it ease because all I did was done with a pain. We're sticking it our training how to get

24:04 Accessing the Web Installer

24:54 a file. So this is pretty sweet. Now I've got a web interface to configure this, but I'm assuming this is just for ease of use. Right? This is part of your painless mission. If I wanted to, I could write that any file and probably skip this step altogether. Is that Exactly. In our Docker file, we have a series of environment variables that will actually it'll take those environment variables and generate the app config based on that. And similarly, in our helm chart, we have an init scripts that will do something similar. So you can just define it all in

25:00 Web Installer vs Manual Config

25:29 your values dot YAML. Cool. Let me scan this. I'm not gonna configure email. Is that okay? Yes. That will only be needed if for, like, password resets or to get notified of, new pull request. What if the that's because we didn't change the permissions because it doesn't exist. But if I just do a app.ini change owner. Oh, and the install page will also create you can create an administrator user through here, or you can also create it via the it's just the first user that will register. Oh. Oh, dear. See if it's still running. K. It's running

25:38 Configuring Gitea via Web

26:34 as like working. Log is showing up. I think it just should it restart when I put the install? Yeah. But the listener should be still going. Alright. Let's try a little bit of encouragement. Oh, wait. It's redirected me to the cohost. That's right. Because, it'll redirect you to the root URL, and by default, it's local host. I see. Yeah. It's good. So this will be a warning scene. There's a difference. It's actually a warning. See, if I pay attention to the error messages, I'd have less problem. So I'm assuming that was part of that form

27:26 that I very quickly just failed on Rawkode Academy and disappeared. So That's exactly it. Yeah. So if you just change finder and place local host all over to the IP, then So I'm There you go. Using an IP right now. Right? So I'm assuming for most people, they're gonna want some sort of DNS entry here. Does Exactly. He do the let's encrypt that for us, or do we handle that externally? We can do the let's encrypt ourselves. Although, you would need to set the binary some the privileged Linux permissions to be able to listen on port eighty and four four

27:42 DNS, HTTPS, and Proxies

28:12 three. But, you know, you could run something like KADI in front and other wonderful Go projects. Mhmm. NGINX, Apache, any proxy even. What does your setup look like for your own Gitea instances? So we, run, we provide the privileged, board access, just because it's, yeah. But, yeah, let's encrypt works great. We actually also use the caddy library for working with let's encrypt. And I was assuming by privilege, what you mean is modifying this unit fail. Yeah. System. And add another net CAP net raw or CAP net bank service capability. Right? Yeah. I think that's the one.

29:17 CAP net bank. Yeah. That's the one for getting port 80. Yeah. We have it documented somewhere in our documentation. So if you search for it in our docs as well, it should be somewhere there. I don't know what to search for. 80. Yeah. Let's try AT. Alright. So, yep, this ACME lets encrypt support, username, or you can do okay. So you've documented the proxies as well. Okay. I don't see the privileged guide, but maybe it's in there somewhere. Not a big deal for today. So let's jump back and now our error has gone. So this is the fresh Gitea instance then.

30:13 Registering the Admin User

30:21 Right? Yeah. So you can create your first account and that will become the administrative user. I mean, this is instance isn't gonna live long, so I don't mind everybody seeing what that password is for the for the next thirty minutes. These are all very trustworthy, I hope. Cool. So do we get, like, let's say admin. That's what I was gonna say. Like, the ability to tweak and configure things within the Gitea instance. So most of the configuration is done via the app config just so that you can script deployments. But there's a maintenance operations task as you can see right

30:56 Admin Dashboard Overview

31:16 here to, clean up things and, test your configuration. Mhmm. Does Gitea have LFS support? Does. Nice. Yeah. Yeah. And we recently had a major release within the past month where we also added support for packages of all sorts. So Python packages, Ruby gems, Docker containers, Helm charts, so many things. And yeah. So we're very excited about that functionality specifically. Okay. I'm just clicking buttons now. Hope that's alright. Yeah. Of course. Template. Label. What license is Gitea? We're licensed MIT. Yeah. I use MIT for just pretty much everything there. Okay. So I've created the Git repository. In fact,

32:26 Creating a Repository

32:27 I've a few things there while we were kind of chatting. I created an organization, which I guess might come up under explore. Yeah. And I could create something here, which is cool. I created at my own repository and we got a license and a read me. I guess what we wanna do is get to the step where I can actually pull this down. So I'm assuming if I could just add my SSH key to my settings. Oh, you support signing commits too with GPG? Yeah. Signing commits with GPG as well as in January, reintroduced signing commits with your SSH key.

32:50 SSH Keys and Commit Signing

33:20 Nice. I actually used I have one password that I configured with both my with my SSH keys, which I can use for signing. Although, I have been exploring cosign from the the chain guard folks. I don't know if you've been talking to them about verifying their signatures, but those are pretty cool as well because they use OIDC against Google, etcetera. Alright. One password was trying to be nice there and now it's changed its mind. Yeah. We'll create a new one. Cool. Alright. Let's do the test. Are you feeling confident? I am, yes. Alright. So we are doing a git clone from

34:13 Testing SSH Clone

34:16 our instance. Well, let's ask for my key so it's gonna work. Hey. There we go. Yeah. You know what? I'm gonna give you the painless. I can't take that away from the project. Like, I mean, we we've done a lot there and relatively no time or effort whatsoever. And already, I'm able to clone down our repository and start working on it. So that's pretty sweet. Very cool. Mozz asked in the chat, is Gitea written in Go? Yeah. You joined a little bit late, but we did cover it. It's written in Go, but there is the front end

34:52 which has I think you said some react stuff going on there. I've I've view JS. Oh, view JS. Yeah. And we use semantic CSS framework, which is a fork of semantic CSS. John is saying don't forget to change this to the dark theme. Rawkode agreeing that was pretty easy. Cool. We have a question from Miles. Does Gitea support token based authentication instead of passwords? We do. And in fact, we're working towards slowly deprecating, utilizing your user's password to in your clone actions or API calls. There's token based API. There's, app tokens available currently. It is it is possible to use your

35:26 Authentication Options

35:56 user's password, but not recommended. And, eventually, it'll be going away just because you shouldn't be using your password just everywhere. Yeah. Well, I do see the option here to use web off end, which is awesome. But because we're on look there we're not on local, but It's specifically It's it's TLS. It's HTTPS. Yeah. Yeah. So that error should get updated as well. But you also support two factor authentication and there's open ID as well. You can do delegation to, I guess, to Google, etcetera. Yeah. So we have OpenID that you can log in as. But as

36:41 an administrator, you're also able to set up other authentication sources. So if you wanna have users log in with their GitHub account, their GitLab account, their Twitter, we have a whole bunch. I think you can even log in with, Discord is one of the ones that was the last ones that I added. Cool. Alright. I'm gonna just gonna stop clicking on buttons. Is there anything that you think would be interesting to take a look at from the Gitea instance that we set up. Yeah. So you showed how to create a new repository, but one of

37:20 Repository Migration Capabilities

37:26 one of the things that we're very excited about is our migration capabilities. So rather than if you wanna migrate away from GitHub or something, you can create a new migration, throw in your Git URL, and it will do the Git clone itself. So you don't need to do that step. But then you can also if you wanna get advanced, you can also throw in your GitHub app token, and it'll actually clone over issues from that repository as well and pull request. And so you can fully set up. So that's pull mirrors, but then we also have push

38:10 Push Mirrors

38:10 mirrors. So you can work with your repository locally with your local Gitea instance, and then you can have it pushed to various remotes itself. Yeah. Alright. Will we test this? Yeah. Pop in any Git repository. Okay. Well, this is the meta support. So this just means I guess I would have to provide the access token for that, or do I always have to provide an access token? So if you're mirroring it, it will just do a git clone. You'll need to provide the access token if it's a private repository. However, if you're going to migrate labels,

38:24 Demonstration: Migrating a Repository

38:57 pull request, milestones, you'll need to provide auth because just otherwise, the experience of getting rate limited for, like, 50 queries from the GitHub API is not pleasant, and it will take a week to migrate anything. There you go. Holy shit. That was fast. And it pulls in the project description as well, full history. And Hand on my yeah. Yeah. So in terms of CI integration right now, there's a question in chat from Rio. We have integration with a bunch of different CI providers, Jenkins, Drone, Woodpecker, to name a few. The project itself, we use Drone

39:37 CI Integration Options

39:59 primarily just because, in the beginning of our project, we had a lot of overlap between contributors to drone as well as, Gitea. However, now a Woodpecker is a fork of drone, and that's where mainly the Gitea contributors are at now. Okay. But it can report statuses back to commit. So just like on GitHub, you can see the check mark if you're build on a specific commit was successful. In pull request, you can see, again, your various different external CI providers work out. You can do branch protection based on CI status. So don't merge that pull request if the tests

40:52 fail. Very cool. I get an RSS feed as well from I guess if I start pushing to this, does that publish new things to the feed? That will. Yeah. So it's not every commit. Excuse me. It's that's specifically for releases. Ah, okay. Yeah. Alright. Let's cut a release. I've been meaning to do one point o for a leak the last nine months, so why why not do it here? 0.1. So let's make sure my assumptions are correct in that case for the new assessment. Yeah. And if I use the I'm just gonna test it. So

41:01 RSS Feeds

41:43 okay. Let me throw a a question out then. There's there's a lot of similarities here between Gitea and GitHub, and we discussed that at the start about how it's supposed to be familiar so that people, you know, they're not discouraged or intimidated or anything like that. Would you say Gitea has pretty good parity with what GitHub offers? Because it it looks and feels like it. I I mean, I haven't visually seen anything that isn't on Gitea here. Yeah. So in our docs, we have a a whole long comparison document that lists out the differences between,

41:45 Feature Parity Comparison

42:17 Gitea, Gogs, GitLab, and, GitHub. And, for the most part, there's a lot of, overlap. And one of our actually, I mentioned SSH signing. We had that in January, but, Giteaub just released that fairly recently. So in, some cases, we're, moving faster. We're not a multibillion dollar company, so but, you know, we still have some agility. Well, who who prioritizes the work then? I mean, I've I've an open source project. This is a very common problem. Right? Is that everybody wants to work on the thing that's most important to them, and this can be difficult to find direction.

42:50 Project Prioritization & Governance

43:01 But I'm assuming, again, come back to what you said at the start of it, there being, like, governance and such. So you must be quite a well oiled machine to a certain point. I am assuming you just know what that road map looks like. Yeah. As we're all volunteers right now, it is working on, what, we all want to work on. Although, there's, maintainers and core contributors, we all, also contribute, like, minor refactors for stability enhancements, as well as, like, like, bug fixes and whatnot. So, it's a nice mix of, features as well as, stability

43:50 resolutions. A question from chat. Gitea does somewhat support clustering. We previously on Gitea.com, we were running Gitea in a multicluster setup or a multinode setup. Although, right now, there's instances of Gitea with tens of thousands of users running on a single machine. So the need for high availability is like, you'll need to question, like like, whether or not you do actually need it. Well, yeah, whether they want it for scale or whether they want it for redundant. Yeah. I mean, if it's for scale Yeah. You probably don't need to. I mean, we have these numbers at the bottom, which I keep.

44:51 Performance and Resource Usage

44:51 To catch my eye every time I load a new page. But the there have never been more than a few milliseconds for any of these pages. Yeah. And I know this is an empty instance, but, you know, is that when you get to the larger instances, I'm assuming these I'm hoping these numbers still stay pretty small. They definitely do. And, one of our, other owners, Zary Path, he's put in a ton of effort into keeping, that performance of being able to browse, like, even the Linux kernel with all of its commits, just keeping it speedy.

45:26 Just keeping it down low. And just for sake of comparison, gt.com, we have, I think, something like 30,000, registered users, and even more repositories. And we have four gigs of RAM on that server. Now, our storage is rather significant. We have I think it's a a terabyte of storage, right now reserved, and, we can scale that up because we're on a cloud provider. Just click and drag the storage bar for our NFS server. But, you know, like I said at the beginning, our we really aim to have just as little resources as possible used. Thanks.

46:19 Exploring Project Boards

46:19 Well, while you were talking about cluster and high availability, I was playing with your project feature and just threw on some boards. I like that I can color them. Got an issue. I mean, this is really cool. I mean, I'm just dragging stuff about there, but I like it. I'm gonna close this now. This is where I fixed it. There we go. Alright. So we oh, we were gonna test your release RSS. That's what it was. Hey. Look at that. Alright. So we get issues. My release as well. Cool. Okay. So, yeah, these are actions that have taken place

47:01 in the repository, not just releases. So same thing that happens in your, your explore feed on the home page. It will show that you've created issues, closures, issues. So this is the information that will show up in the RSS feed, except it'll be filtered per that Cool. Specific repository. Alright. Nice. I mean, I don't think I've ever seen RSS feeds from another Git provider. But, I mean, I still use RSS daily, like, for everything, for all my news and stuff like that. Like, why would I not wanna subscribe to, like, the most important project and

47:42 get update? Exactly. So GitHub does have RSS feeds if I can promote another project. They just don't have the it visible. But if you go view source, you can view their atom links. Ah, had no idea. But that was one of the first things I noticed when I was on this thing. Was like, oh, look. They got this. So it's amazing how you just stick an icon on something, and it actually becomes a whole lot more visible to people. Okay. We've kinda covered that Gitea has a level of parity with GitHub. It's got a couple of extra features. We've seen

47:45 Rss Feeds

48:23 the migration support there. Is there anything else that's different in Gitea that you wanna highlight as part of our our session? Nothing. I think I think we've covered everything I wanted to focus on today. Awesome. Alright. Well, I'm gonna ask you a question then. So Yeah. Definitely. I have a lot of repositories on GitHub and yeah. 306. Now, of course, most of them are crappy one time Forex and stuff like that, but but they they add up. And I've always wanted to be able to group some together, and GitLab does offer, like, grouping support. Is

49:05 Discussing Repository Grouping

49:07 that something that you've talked discussed Gitea, and is that something that you think you would implement? Yeah. So there is a ticket open for subgroups. But just like with GitHub, we have, labels. You can also filter based on labels to be able to categorize. Say if you're working for a company and you have your infrastructure's code repositories and then you have your application code, you can take stuff as IAC and filter based on that, or you can, take stuff as application code and filter based on that for your specific team repositories. John is in the chat mentioning a visual swagger

49:57 Visual Swagger Ui

49:59 UI. Yeah. If you scroll down to the bottom of the page, there should be a link to the API, and that's what, John's talking about. So we have, an API, and so this is actually programmatically generated from our API endpoints. And so you can see all of the endpoints that are available. You can test the endpoints. And we also have, a command line tool that will work with the API as well called, t. So if you don't wanna use the web interface, you can use the CLI and create pull request, browse issues. Alright. I don't don't mean to break stuff

50:41 The Gitea CLI Tool (`t`)

50:55 intentionally that time. Oh, cool. So you could just can use it straight from in the so I got you. Cool. And you mentioned that command line application as well? Yeah. So gitea.com/gitea/t, and you can install it. If you're on a Mac, you can use our homebrew tab. T the letter or t the I don't know. Oh, Gitea.com rather. Comt. Nope. Slash Gitea/t. Yeah. There we go. There's a nice public instance that's available to anyone? It is public. The primary focus of it is to the for the purpose of building Gitea, although there are non Gitea related repositories

51:51 Public Gitea Instances

52:06 on there. But, generally, we recommend, right now, codeberg.org. They're a Gitea instance primarily focused on free and open source software. And a disclaimer, I'm on the Presidium of that organization. Right. So this is a green tick. Oh, yeah. We've got checks here. So what's this hooked up to? So this is hooked up to our drone instance. And so you can see all of the tests that it runs. And so, yeah, this is a perfect example of external CI. So in a bit yeah. Nice. I'm stuck. There we go. Awesome. I should've came here earlier. I'm seeing loads

53:05 Issue Templates and Custom Forms

53:07 of cool things now. So is that you also support issue templates as well? Yep. Issue templates, you can we just merged the custom issue forms. Like, on GitHub, you can say, please fill out the version number of the, of what you're using and having it required so that, users don't just, skip optional elements in or required elements in the form. You can say, fill out the version number and other interesting things like that. Great. Alright. Have we covered everything? Will I put this back into, like, face mode? Yeah. Let's go back into face mode. So that's really cool. Gitea is a a

53:51 Conclusion and Summary

54:03 really cool project. Super simple to set up. I mean, literally, pull out a binary down, tell us next machine and just I mean, I could've just ran it straight away, you know, set up a system to unit files seems like the nicer approach. And again, it took us a few seconds and everything just kinda worked. I love that I can use SQLite. You know, I definitely would hook that up to Lightstream and start replicating that to GCS probably, pulling that down to give me some sort of redundancy or resiliency. Just a really cool system. Great work. Like

54:36 Thank you. Yeah. It's thousand plus people have contributed to the project, so it's it's a real community effort, and it takes a village. Well, how about like, say people watch this and they think, I'd love to get involved. Like, what what's the best avenue for them to reach out, to start discussions, and to start writing code if they want? Yeah. So, in terms of reaching out, we have our various chat channels. Discord and are bridged together. And and you can come into the developed channel saying, hey. I wanna get started. And there are a ton of people,

54:50 How to Get Involved and Contribute

55:17 who are very happy to help there. That's several of our core maintainers started out that way with no go experience, and now they write go every day. And we also have a bunch of, issues labeled good first issue of improving the docs or, things to get, your feet wet with experiencing the code base. And we also, participate in Oktoberfest every year, run events. I've last year, I livestreamed over Twitch.tv. As you mentioned, links will be down below. And this year, I'm actually, gonna try to do some, really interesting projects. So we saw one instance of Gitea running

56:04 Future Gitea Performance Experiments

56:10 on Equinix metal, but I'm gonna try something. How many instances of Gitea can we run on a single server? Because our RAM resources are extremely low, so let's pop open one of those super beefy ones or MacConnex, and how many can we run? I did a a stream on Wednesday, and I used them at you know, it's the back machine we're using today, but it's it's the modest one on Equinix metal. And they have these new machines called the a thief, and it had a terabyte of RAM and a 28 cores, I think it was.

56:13 How Many Instances of Gitty Can We Run on a Single Server

56:54 And I was like, I wonder if you like, if you're gonna do that test, you should get one of those and then see how many Giteaus you can run on that thing because I would imagine it's a hell of a lot, especially with that RAM footprint as well. Exactly. Yeah. Alright. Any last words before we we finish up today? No. I just thank you for having me. Thank you everyone in chat for joining us on this journey. And, yeah, please, reach out, if you wanna get involved or if you wanna set up your own instance

57:11 Final Remarks & Advanced Features Recap

57:30 and you have any questions. If you wanna go above and beyond what we did today, set up a package registry, you can hook it into s three if you wanna store your packages up there, your Docker containers, your Ruby gems. If you wanna enable code search, hook into Elasticsearch. And you mentioned, authentication with, or verification with, cosign. But we also, can hook into, things such as, small step for being able to authenticate with an SSH principle and similar concept. And so I'm gonna be working on blog posts for all these more advanced topics, so follow us on

58:19 our blog. Yeah. And all of our links are down below. Yes. I will make sure all the links are there shortly after we finish up here today. And also, I didn't I did click on the package thing as well while we were chatting, and I forgot to actually talk about it. But you said that there's an OCI compatible store as well. Do you do NPM, PyPI, stuff like that? Exactly. All of that. Yeah. Nice. Any we just that was released in 01/17, and in 01/18, we're still adding even more, like, Vagrant packages. Vagrant boxes was just added.

58:58 Wow. Awesome. Alright. Well, thank you so much for joining me today. It's been a pleasure. Very, very cool projects. Lots of links will be in the show notes, and we will see you all again next time. Thank you for watching. Have a nice day.

Technologies featured

Meet the Cast

Weekly Cloud Native insights

Stay ahead in cloud native

Tutorials, deep dives, and curated events. No fluff.

Comments, transcript, and resources

More from Rawkode Live

View all 173 episodes

More about Gitea

View technology