mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-08-21 20:18:42 +02:00
Close #13539. Co-authored by: @lunny @appleboy @fuxiaohei and others. Related projects: - https://gitea.com/gitea/actions-proto-def - https://gitea.com/gitea/actions-proto-go - https://gitea.com/gitea/act - https://gitea.com/gitea/act_runner ### Summary The target of this PR is to bring a basic implementation of "Actions", an internal CI/CD system of Gitea. That means even though it has been merged, the state of the feature is **EXPERIMENTAL**, and please note that: - It is disabled by default; - It shouldn't be used in a production environment currently; - It shouldn't be used in a public Gitea instance currently; - Breaking changes may be made before it's stable. **Please comment on #13539 if you have any different product design ideas**, all decisions reached there will be adopted here. But in this PR, we don't talk about **naming, feature-creep or alternatives**. ### ⚠️ Breaking `gitea-actions` will become a reserved user name. If a user with the name already exists in the database, it is recommended to rename it. ### Some important reviews - What is `DEFAULT_ACTIONS_URL` in `app.ini` for? - https://github.com/go-gitea/gitea/pull/21937#discussion_r1055954954 - Why the api for runners is not under the normal `/api/v1` prefix? - https://github.com/go-gitea/gitea/pull/21937#discussion_r1061173592 - Why DBFS? - https://github.com/go-gitea/gitea/pull/21937#discussion_r1061301178 - Why ignore events triggered by `gitea-actions` bot? - https://github.com/go-gitea/gitea/pull/21937#discussion_r1063254103 - Why there's no permission control for actions? - https://github.com/go-gitea/gitea/pull/21937#discussion_r1090229868 ### What it looks like <details> #### Manage runners <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205870657-c72f590e-2e08-4cd4-be7f-2e0abb299bbf.png"> #### List runs <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205872794-50fde990-2b45-48c1-a178-908e4ec5b627.png"> #### View logs <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205872501-9b7b9000-9542-4991-8f55-18ccdada77c3.png"> </details> ### How to try it <details> #### 1. Start Gitea Clone this branch and [install from source](https://docs.gitea.io/en-us/install-from-source). Add additional configurations in `app.ini` to enable Actions: ```ini [actions] ENABLED = true ``` Start it. If all is well, you'll see the management page of runners: <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205877365-8e30a780-9b10-4154-b3e8-ee6c3cb35a59.png"> #### 2. Start runner Clone the [act_runner](https://gitea.com/gitea/act_runner), and follow the [README](https://gitea.com/gitea/act_runner/src/branch/main/README.md) to start it. If all is well, you'll see a new runner has been added: <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205878000-216f5937-e696-470d-b66c-8473987d91c3.png"> #### 3. Enable actions for a repo Create a new repo or open an existing one, check the `Actions` checkbox in settings and submit. <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205879705-53e09208-73c0-4b3e-a123-2dcf9aba4b9c.png"> <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205879383-23f3d08f-1a85-41dd-a8b3-54e2ee6453e8.png"> If all is well, you'll see a new tab "Actions": <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205881648-a8072d8c-5803-4d76-b8a8-9b2fb49516c1.png"> #### 4. Upload workflow files Upload some workflow files to `.gitea/workflows/xxx.yaml`, you can follow the [quickstart](https://docs.github.com/en/actions/quickstart) of GitHub Actions. Yes, Gitea Actions is compatible with GitHub Actions in most cases, you can use the same demo: ```yaml name: GitHub Actions Demo run-name: ${{ github.actor }} is testing out GitHub Actions 🚀 on: [push] jobs: Explore-GitHub-Actions: runs-on: ubuntu-latest steps: - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event." - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!" - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}." - name: Check out repository code uses: actions/checkout@v3 - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." - run: echo "🖥️ The workflow is now ready to test your code on the runner." - name: List files in the repository run: | ls ${{ github.workspace }} - run: echo "🍏 This job's status is ${{ job.status }}." ``` If all is well, you'll see a new run in `Actions` tab: <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205884473-79a874bc-171b-4aaf-acd5-0241a45c3b53.png"> #### 5. Check the logs of jobs Click a run and you'll see the logs: <img width="1792" alt="image" src="https://user-images.githubusercontent.com/9418365/205884800-994b0374-67f7-48ff-be9a-4c53f3141547.png"> #### 6. Go on You can try more examples in [the documents](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions) of GitHub Actions, then you might find a lot of bugs. Come on, PRs are welcome. </details> See also: [Feature Preview: Gitea Actions](https://blog.gitea.io/2022/12/feature-preview-gitea-actions/) --------- Co-authored-by: a1012112796 <1012112796@qq.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: ChristopherHX <christopher.homberger@web.de> Co-authored-by: John Olheiser <john.olheiser@gmail.com>
18 KiB
18 KiB
date | title | slug | weight | toc | draft | menu | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2018-05-07T13:00:00+02:00 | Gitea compared to other Git hosting options | comparison | 5 | false | false |
|
Gitea compared to other Git hosting options
Table of Contents
{{< toc >}}
To help decide if Gitea is suited for your needs, here is how it compares to other Git self hosted options.
Be warned that we don't regularly check for feature changes in other products, so this list may be outdated. If you find anything that needs to be updated in the table below, please open an issue.
Symbols used in table:
-
✓ - supported
-
⁄ - supported with limited functionality
-
✘ - unsupported
General Features
Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
Open source and free | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ |
Low RAM/ CPU usage | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
Multiple database support | ✓ | ✓ | ✘ | ⁄ | ⁄ | ✓ | ✓ |
Multiple OS support | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ |
Easy upgrades | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
Telemetry | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
Third-party render tool support | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | ? |
WebAuthn (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
Extensive API | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Built-in Package/Container Registry | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Sync commits to an external repo (push mirror) | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
Sync commits from an external repo (pull mirror) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ? |
Light and Dark Theme | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ? |
Custom Theme Support | ✓ | ✓ | ✘ | ✘ | ✘ | ✓ | ✘ |
Markdown support | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
CSV support | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ | ? |
'GitHub / GitLab pages' | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Repo-specific wiki (as a repo itself) | ✓ | ✓ | ✓ | ✓ | ✓ | / | ✘ |
Deploy Tokens | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Repository Tokens with write rights | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
RSS Feeds | ✓ | ✘ | ✓ | ✘ | ✘ | ✘ | ✘ |
Built-in CI/CD | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Subgroups: groups within groups | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
Interaction with other instances | / | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Mermaid diagrams in Markdown | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Math syntax in Markdown | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Code management
Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
Repository topics | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Repository code search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Global code search | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Group Milestones | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Granular user roles (Code, Issues, Wiki, …) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Verified Committer | ⁄ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
GPG Signed Commits | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
SSH Signed Commits | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ? |
Reject unsigned commits | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Migrating repos from other services | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Repository Activity page | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Branch manager | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Create new branches | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Web code editor | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Commit graph | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Template Repositories | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✘ |
Git Blame | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Visual comparison of image changes | ✓ | ✘ | ✓ | ? | ? | ? | ? |
Issue Tracker
Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
Issue tracker | ✓ | ✓ | ✓ | ✓ | ✓ | / | ✘ |
Issue templates | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
Labels | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
Time tracking | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Multiple assignees for issues | ✓ | ✘ | ✓ | ✘ | ✓ | ✘ | ✘ |
Related issues | ✘ | ✘ | ⁄ | ✓ | ✓ | ✘ | ✘ |
Confidential issues | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Comment reactions | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Lock Discussion | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Batch issue handling | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Issue Boards (Kanban) | / | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Create branch from issue | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Convert comment to new issue | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
Issue search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Global issue search | / | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Issue dependency | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Create issue via email | ✘ | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ |
Service Desk | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Pull/Merge requests
Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
Pull/Merge requests | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Squash merging | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Rebase merging | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Pull/Merge request inline comments | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Pull/Merge request approval | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Merge conflict resolution | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Restrict push and merge access to certain users | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
Revert specific commits | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Pull/Merge requests templates | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
Cherry-picking changes | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
Download Patch | ✓ | ✘ | ✓ | ✓ | ✓ | / | ✘ |
3rd-party integrations
Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
---|---|---|---|---|---|---|---|
Webhooks | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Git Hooks | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
AD / LDAP integration | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Multiple LDAP / AD server support | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
LDAP user synchronization | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
SAML 2.0 service provider | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
OpenID Connect support | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ |
OAuth 2.0 integration (external authorization) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ |
Act as OAuth 2.0 provider | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
Two factor authentication (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
Integration with the most common services | ✓ | / | ⁄ | ✓ | ✓ | ⁄ | ✓ |
Incorporate external CI/CD | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |