2016-11-24 10:40:16 +03:00
// Copyright 2016 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2016-11-24 10:40:16 +03:00
package routers
import (
2019-12-15 12:51:28 +03:00
"context"
2021-10-21 12:22:43 +03:00
"reflect"
"runtime"
2016-11-24 10:40:16 +03:00
"code.gitea.io/gitea/models"
2021-12-10 11:14:24 +03:00
asymkey_model "code.gitea.io/gitea/models/asymkey"
2017-10-26 04:37:33 +03:00
"code.gitea.io/gitea/modules/cache"
2020-05-08 00:49:00 +03:00
"code.gitea.io/gitea/modules/eventsource"
2019-03-27 12:33:00 +03:00
"code.gitea.io/gitea/modules/git"
2016-12-06 20:58:31 +03:00
"code.gitea.io/gitea/modules/highlight"
2019-12-08 22:15:35 +03:00
code_indexer "code.gitea.io/gitea/modules/indexer/code"
2019-02-21 03:54:05 +03:00
issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
2020-02-11 12:34:17 +03:00
stats_indexer "code.gitea.io/gitea/modules/indexer/stats"
2016-11-24 10:40:16 +03:00
"code.gitea.io/gitea/modules/log"
2017-09-16 20:17:57 +03:00
"code.gitea.io/gitea/modules/markup"
2019-05-25 20:15:39 +03:00
"code.gitea.io/gitea/modules/markup/external"
2019-10-25 17:46:37 +03:00
"code.gitea.io/gitea/modules/notification"
2016-11-24 10:40:16 +03:00
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/ssh"
2020-08-18 07:23:45 +03:00
"code.gitea.io/gitea/modules/storage"
2020-07-12 12:10:56 +03:00
"code.gitea.io/gitea/modules/svg"
2022-10-17 02:29:26 +03:00
"code.gitea.io/gitea/modules/system"
2022-08-28 12:43:25 +03:00
"code.gitea.io/gitea/modules/templates"
2021-01-05 16:05:40 +03:00
"code.gitea.io/gitea/modules/translation"
2022-05-11 00:55:54 +03:00
"code.gitea.io/gitea/modules/util"
2021-06-09 02:33:54 +03:00
"code.gitea.io/gitea/modules/web"
Implement actions (#21937)
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>
2023-01-31 04:45:19 +03:00
actions_router "code.gitea.io/gitea/routers/api/actions"
2022-03-30 11:42:47 +03:00
packages_router "code.gitea.io/gitea/routers/api/packages"
2021-06-09 02:33:54 +03:00
apiv1 "code.gitea.io/gitea/routers/api/v1"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/routers/private"
web_routers "code.gitea.io/gitea/routers/web"
Implement actions (#21937)
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>
2023-01-31 04:45:19 +03:00
actions_service "code.gitea.io/gitea/services/actions"
2021-06-09 20:53:16 +03:00
"code.gitea.io/gitea/services/auth"
2021-07-24 13:16:34 +03:00
"code.gitea.io/gitea/services/auth/source/oauth2"
2022-05-07 20:05:52 +03:00
"code.gitea.io/gitea/services/automerge"
2021-11-16 16:30:11 +03:00
"code.gitea.io/gitea/services/cron"
2019-09-24 08:02:49 +03:00
"code.gitea.io/gitea/services/mailer"
2023-01-14 18:57:10 +03:00
mailer_incoming "code.gitea.io/gitea/services/mailer/incoming"
2022-10-22 20:15:52 +03:00
markup_service "code.gitea.io/gitea/services/markup"
2021-11-16 18:25:33 +03:00
repo_migrations "code.gitea.io/gitea/services/migrations"
2019-10-01 16:40:17 +03:00
mirror_service "code.gitea.io/gitea/services/mirror"
2019-12-07 05:44:10 +03:00
pull_service "code.gitea.io/gitea/services/pull"
2021-11-17 18:17:31 +03:00
repo_service "code.gitea.io/gitea/services/repository"
2021-12-06 10:19:28 +03:00
"code.gitea.io/gitea/services/repository/archiver"
2021-11-18 09:47:57 +03:00
"code.gitea.io/gitea/services/task"
2020-12-08 13:41:14 +03:00
"code.gitea.io/gitea/services/webhook"
2016-11-24 10:40:16 +03:00
)
2021-10-21 12:22:43 +03:00
func mustInit ( fn func ( ) error ) {
err := fn ( )
if err != nil {
ptr := reflect . ValueOf ( fn ) . Pointer ( )
fi := runtime . FuncForPC ( ptr )
log . Fatal ( "%s failed: %v" , fi . Name ( ) , err )
2020-08-18 07:23:45 +03:00
}
2021-10-21 12:22:43 +03:00
}
func mustInitCtx ( ctx context . Context , fn func ( ctx context . Context ) error ) {
err := fn ( ctx )
if err != nil {
ptr := reflect . ValueOf ( fn ) . Pointer ( )
fi := runtime . FuncForPC ( ptr )
log . Fatal ( "%s(ctx) failed: %v" , fi . Name ( ) , err )
2020-09-11 17:14:48 +03:00
}
2021-10-21 12:22:43 +03:00
}
2022-10-28 19:53:08 +03:00
func syncAppConfForGit ( ctx context . Context ) error {
2022-10-17 02:29:26 +03:00
runtimeState := new ( system . RuntimeState )
if err := system . AppState . Get ( runtimeState ) ; err != nil {
2021-10-21 12:22:43 +03:00
return err
2021-07-11 00:54:15 +03:00
}
2022-10-28 19:53:08 +03:00
updated := false
2021-10-21 12:22:43 +03:00
if runtimeState . LastAppPath != setting . AppPath {
log . Info ( "AppPath changed from '%s' to '%s'" , runtimeState . LastAppPath , setting . AppPath )
2022-10-28 19:53:08 +03:00
runtimeState . LastAppPath = setting . AppPath
updated = true
}
if runtimeState . LastCustomConf != setting . CustomConf {
log . Info ( "CustomConf changed from '%s' to '%s'" , runtimeState . LastCustomConf , setting . CustomConf )
runtimeState . LastCustomConf = setting . CustomConf
updated = true
}
2021-10-21 12:22:43 +03:00
2022-10-28 19:53:08 +03:00
if updated {
2021-10-21 12:22:43 +03:00
log . Info ( "re-sync repository hooks ..." )
2021-11-17 18:17:31 +03:00
mustInitCtx ( ctx , repo_service . SyncRepositoryHooks )
2021-10-21 12:22:43 +03:00
log . Info ( "re-write ssh public keys ..." )
2021-12-10 11:14:24 +03:00
mustInit ( asymkey_model . RewriteAllPublicKeys )
2021-10-21 12:22:43 +03:00
2022-10-17 02:29:26 +03:00
return system . AppState . Set ( runtimeState )
2021-06-24 00:12:38 +03:00
}
2021-10-21 12:22:43 +03:00
return nil
2016-11-24 10:40:16 +03:00
}
2021-12-01 10:50:01 +03:00
// GlobalInitInstalled is for global installed configuration.
func GlobalInitInstalled ( ctx context . Context ) {
2020-10-20 00:03:08 +03:00
if ! setting . InstallLock {
log . Fatal ( "Gitea is not installed" )
}
2021-01-27 06:57:18 +03:00
2022-08-09 06:22:24 +03:00
mustInitCtx ( ctx , git . InitFull )
2023-04-19 16:40:42 +03:00
log . Info ( "Gitea Version: %s%s" , setting . AppVer , setting . AppBuiltWith )
2022-06-10 04:57:49 +03:00
log . Info ( "Git Version: %s (home: %s)" , git . VersionInfo ( ) , git . HomeDir ( ) )
2021-06-27 03:56:58 +03:00
log . Info ( "AppPath: %s" , setting . AppPath )
log . Info ( "AppWorkPath: %s" , setting . AppWorkPath )
log . Info ( "Custom path: %s" , setting . CustomPath )
2023-02-19 19:12:01 +03:00
log . Info ( "Log path: %s" , setting . Log . RootPath )
2021-09-14 04:24:57 +03:00
log . Info ( "Configuration file: %s" , setting . CustomConf )
2022-05-11 00:55:54 +03:00
log . Info ( "Run Mode: %s" , util . ToTitleCase ( setting . RunMode ) )
2019-08-24 12:24:45 +03:00
2020-05-17 02:31:38 +03:00
// Setup i18n
2022-08-28 12:43:25 +03:00
translation . InitLocales ( ctx )
2020-05-17 02:31:38 +03:00
2023-02-19 19:12:01 +03:00
setting . LoadSettings ( )
2022-05-08 19:46:32 +03:00
mustInit ( storage . Init )
2022-08-28 12:43:25 +03:00
mailer . NewContext ( ctx )
2021-10-21 12:22:43 +03:00
mustInit ( cache . NewContext )
notification . NewContext ( )
mustInit ( archiver . Init )
2016-11-24 10:40:16 +03:00
2020-10-20 00:03:08 +03:00
highlight . NewContext ( )
2021-04-20 01:25:08 +03:00
external . RegisterRenderers ( )
2022-10-22 20:15:52 +03:00
markup . Init ( markup_service . ProcessorHelper ( ) )
2021-01-27 06:57:18 +03:00
if setting . EnableSQLite3 {
2021-11-09 21:55:24 +03:00
log . Info ( "SQLite3 support is enabled" )
2023-03-07 13:51:06 +03:00
} else if setting . Database . Type . IsSQLite3 ( ) {
2021-11-09 21:55:24 +03:00
log . Fatal ( "SQLite3 support is disabled, but it is used for database setting. Please get or build a Gitea release with SQLite3 support." )
2021-01-27 06:57:18 +03:00
}
2019-01-20 00:17:08 +03:00
2021-10-21 12:22:43 +03:00
mustInitCtx ( ctx , common . InitDBEngine )
log . Info ( "ORM engine initialization successful!" )
2022-10-17 02:29:26 +03:00
mustInit ( system . Init )
2021-10-21 12:22:43 +03:00
mustInit ( oauth2 . Init )
2016-11-24 10:40:16 +03:00
2023-02-24 13:23:13 +03:00
mustInitCtx ( ctx , models . Init )
2022-05-08 19:46:32 +03:00
mustInit ( repo_service . Init )
2016-11-24 10:40:16 +03:00
2020-10-20 00:03:08 +03:00
// Booting long running goroutines.
issue_indexer . InitIssueIndexer ( false )
code_indexer . Init ( )
2021-10-21 12:22:43 +03:00
mustInit ( stats_indexer . Init )
2020-10-20 00:03:08 +03:00
mirror_service . InitSyncMirrors ( )
2022-04-25 21:03:01 +03:00
mustInit ( webhook . Init )
2021-10-21 12:22:43 +03:00
mustInit ( pull_service . Init )
2022-05-07 20:05:52 +03:00
mustInit ( automerge . Init )
2021-10-21 12:22:43 +03:00
mustInit ( task . Init )
mustInit ( repo_migrations . Init )
2020-10-20 00:03:08 +03:00
eventsource . GetManager ( ) . Init ( )
2023-01-14 18:57:10 +03:00
mustInitCtx ( ctx , mailer_incoming . Init )
2020-10-20 00:03:08 +03:00
2022-10-28 19:53:08 +03:00
mustInitCtx ( ctx , syncAppConfForGit )
2021-10-21 12:22:43 +03:00
2022-07-10 09:50:26 +03:00
mustInit ( ssh . Init )
2021-06-09 20:53:16 +03:00
auth . Init ( )
2023-04-12 13:16:45 +03:00
mustInit ( svg . Init )
2022-07-15 18:20:05 +03:00
Implement actions (#21937)
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>
2023-01-31 04:45:19 +03:00
actions_service . Init ( )
2022-07-15 18:20:05 +03:00
// Finally start up the cron
cron . NewContext ( ctx )
2016-11-24 10:40:16 +03:00
}
2021-06-09 02:33:54 +03:00
// NormalRoutes represents non install routes
2022-08-28 12:43:25 +03:00
func NormalRoutes ( ctx context . Context ) * web . Route {
ctx , _ = templates . HTMLRenderer ( ctx )
2021-06-09 02:33:54 +03:00
r := web . NewRoute ( )
2023-04-27 09:06:45 +03:00
r . Use ( common . ProtocolMiddlewares ( ) ... )
2021-06-09 02:33:54 +03:00
2022-08-28 12:43:25 +03:00
r . Mount ( "/" , web_routers . Routes ( ctx ) )
r . Mount ( "/api/v1" , apiv1 . Routes ( ctx ) )
2021-06-09 02:33:54 +03:00
r . Mount ( "/api/internal" , private . Routes ( ) )
2022-11-12 21:59:15 +03:00
2022-03-30 11:42:47 +03:00
if setting . Packages . Enabled {
2022-11-12 21:59:15 +03:00
// This implements package support for most package managers
r . Mount ( "/api/packages" , packages_router . CommonRoutes ( ctx ) )
// This implements the OCI API (Note this is not preceded by /api but is instead /v2)
2022-08-28 12:43:25 +03:00
r . Mount ( "/v2" , packages_router . ContainerRoutes ( ctx ) )
2022-03-30 11:42:47 +03:00
}
Implement actions (#21937)
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>
2023-01-31 04:45:19 +03:00
if setting . Actions . Enabled {
prefix := "/api/actions"
r . Mount ( prefix , actions_router . Routes ( ctx , prefix ) )
}
2021-06-09 02:33:54 +03:00
return r
}