

This process is called ‘bootstrapping’, and is actually quite common in software. For example, the C compiler is written in C. The first iteration of the C compiler was written by hand in assembly code with a very limitted feature set, and that compiler was then used to compile the next iteration, allowing the second version (I’m not sure it was actually the second version; there may have been a few iterations in assembly) to be written in C itself.
For Forgejo, you dont actually need Forgejo to build Forgejo; just a computer with the Go compiler and any other dependencies. Then, once you have the first version, you can publish the code you have on Forgejo. Nothing too crazy there 🙂
This also leads to ‘dogfooding’, which is a whole other term…
Ah yes, keeping your Lambda functions running, rendering the main benefit of them pointless 🙃
People really should just set up a Fargate task instead…