2017-02-04 18:53:46 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-02-04 18:53:46 +03:00
2021-11-09 22:57:58 +03:00
package unit
2017-02-04 18:53:46 +03:00
2018-11-10 22:45:32 +03:00
import (
2019-04-22 23:40:51 +03:00
"fmt"
2018-11-10 22:45:32 +03:00
"strings"
2019-04-22 23:40:51 +03:00
2022-01-05 06:37:00 +03:00
"code.gitea.io/gitea/models/perm"
2019-04-22 23:40:51 +03:00
"code.gitea.io/gitea/modules/log"
2020-01-17 10:34:37 +03:00
"code.gitea.io/gitea/modules/setting"
2018-11-10 22:45:32 +03:00
)
2021-11-09 22:57:58 +03:00
// Type is Unit's Type
type Type int
2017-02-04 18:53:46 +03:00
// Enumerate all the unit types
const (
2022-01-05 06:37:00 +03:00
TypeInvalid Type = iota // 0 invalid
TypeCode // 1 code
TypeIssues // 2 issues
TypePullRequests // 3 PRs
TypeReleases // 4 Releases
TypeWiki // 5 Wiki
TypeExternalWiki // 6 ExternalWiki
TypeExternalTracker // 7 ExternalTracker
TypeProjects // 8 Kanban board
2022-05-08 18:51:50 +03:00
TypePackages // 9 Packages
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
TypeActions // 10 Actions
2017-02-04 18:53:46 +03:00
)
2019-04-25 12:00:34 +03:00
// Value returns integer value for unit type
2021-11-09 22:57:58 +03:00
func ( u Type ) Value ( ) int {
2019-04-25 12:00:34 +03:00
return int ( u )
}
2021-11-09 22:57:58 +03:00
func ( u Type ) String ( ) string {
2019-04-22 23:40:51 +03:00
switch u {
2021-11-09 22:57:58 +03:00
case TypeCode :
return "TypeCode"
case TypeIssues :
return "TypeIssues"
case TypePullRequests :
return "TypePullRequests"
case TypeReleases :
return "TypeReleases"
case TypeWiki :
return "TypeWiki"
case TypeExternalWiki :
return "TypeExternalWiki"
case TypeExternalTracker :
return "TypeExternalTracker"
case TypeProjects :
return "TypeProjects"
2022-05-08 18:51:50 +03:00
case TypePackages :
return "TypePackages"
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
case TypeActions :
return "TypeActions"
2019-04-22 23:40:51 +03:00
}
2021-11-09 22:57:58 +03:00
return fmt . Sprintf ( "Unknown Type %d" , u )
2019-04-22 23:40:51 +03:00
}
2021-11-09 22:57:58 +03:00
// ColorFormat provides a ColorFormatted version of this Type
func ( u Type ) ColorFormat ( s fmt . State ) {
2019-04-22 23:40:51 +03:00
log . ColorFprintf ( s , "%d:%s" ,
log . NewColoredIDValue ( u ) ,
u )
}
2017-05-18 17:54:24 +03:00
var (
2019-05-30 18:09:05 +03:00
// AllRepoUnitTypes contains all the unit types
2021-11-09 22:57:58 +03:00
AllRepoUnitTypes = [ ] Type {
TypeCode ,
TypeIssues ,
TypePullRequests ,
TypeReleases ,
TypeWiki ,
TypeExternalWiki ,
TypeExternalTracker ,
TypeProjects ,
2022-05-08 18:51:50 +03:00
TypePackages ,
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
TypeActions ,
2017-05-18 17:54:24 +03:00
}
2019-05-30 18:09:05 +03:00
// DefaultRepoUnits contains the default unit types
2021-11-09 22:57:58 +03:00
DefaultRepoUnits = [ ] Type {
TypeCode ,
TypeIssues ,
TypePullRequests ,
TypeReleases ,
TypeWiki ,
TypeProjects ,
2022-05-08 18:51:50 +03:00
TypePackages ,
2017-05-18 17:54:24 +03:00
}
2023-02-04 09:48:38 +03:00
// ForkRepoUnits contains the default unit types for forks
DefaultForkRepoUnits = [ ] Type {
TypeCode ,
TypePullRequests ,
}
2020-01-17 10:34:37 +03:00
// NotAllowedDefaultRepoUnits contains units that can't be default
2021-11-09 22:57:58 +03:00
NotAllowedDefaultRepoUnits = [ ] Type {
TypeExternalWiki ,
TypeExternalTracker ,
2020-01-17 10:34:37 +03:00
}
2017-07-17 05:04:43 +03:00
// MustRepoUnits contains the units could not be disabled currently
2021-11-09 22:57:58 +03:00
MustRepoUnits = [ ] Type {
TypeCode ,
TypeReleases ,
2017-05-18 17:54:24 +03:00
}
2020-01-17 10:34:37 +03:00
// DisabledRepoUnits contains the units that have been globally disabled
2021-11-09 22:57:58 +03:00
DisabledRepoUnits = [ ] Type { }
2017-05-18 17:54:24 +03:00
)
2023-02-04 09:48:38 +03:00
// Get valid set of default repository units from settings
func validateDefaultRepoUnits ( defaultUnits , settingDefaultUnits [ ] Type ) [ ] Type {
units := defaultUnits
// Use setting if not empty
if len ( settingDefaultUnits ) > 0 {
2020-01-17 10:34:37 +03:00
// MustRepoUnits required as default
2023-02-04 09:48:38 +03:00
units = make ( [ ] Type , len ( MustRepoUnits ) )
copy ( units , MustRepoUnits )
for _ , settingUnit := range settingDefaultUnits {
if ! settingUnit . CanBeDefault ( ) {
log . Warn ( "Not allowed as default unit: %s" , settingUnit . String ( ) )
2020-01-17 10:34:37 +03:00
continue
}
// MustRepoUnits already added
2023-02-04 09:48:38 +03:00
if settingUnit . CanDisable ( ) {
units = append ( units , settingUnit )
2020-01-17 10:34:37 +03:00
}
}
}
2023-02-04 09:48:38 +03:00
// Remove disabled units
for _ , disabledUnit := range DisabledRepoUnits {
for i , unit := range units {
if unit == disabledUnit {
units = append ( units [ : i ] , units [ i + 1 : ] ... )
}
}
}
return units
}
// LoadUnitConfig load units from settings
func LoadUnitConfig ( ) {
2023-04-03 11:42:38 +03:00
var invalidKeys [ ] string
DisabledRepoUnits , invalidKeys = FindUnitTypes ( setting . Repository . DisabledRepoUnits ... )
if len ( invalidKeys ) > 0 {
log . Warn ( "Invalid keys in disabled repo units: %s" , strings . Join ( invalidKeys , ", " ) )
}
2020-01-17 10:34:37 +03:00
// Check that must units are not disabled
for i , disabledU := range DisabledRepoUnits {
if ! disabledU . CanDisable ( ) {
log . Warn ( "Not allowed to global disable unit %s" , disabledU . String ( ) )
DisabledRepoUnits = append ( DisabledRepoUnits [ : i ] , DisabledRepoUnits [ i + 1 : ] ... )
}
}
2023-02-04 09:48:38 +03:00
2023-04-03 11:42:38 +03:00
setDefaultRepoUnits , invalidKeys := FindUnitTypes ( setting . Repository . DefaultRepoUnits ... )
if len ( invalidKeys ) > 0 {
log . Warn ( "Invalid keys in default repo units: %s" , strings . Join ( invalidKeys , ", " ) )
}
2023-02-04 09:48:38 +03:00
DefaultRepoUnits = validateDefaultRepoUnits ( DefaultRepoUnits , setDefaultRepoUnits )
2023-04-03 11:42:38 +03:00
setDefaultForkRepoUnits , invalidKeys := FindUnitTypes ( setting . Repository . DefaultForkRepoUnits ... )
if len ( invalidKeys ) > 0 {
log . Warn ( "Invalid keys in default fork repo units: %s" , strings . Join ( invalidKeys , ", " ) )
}
2023-02-04 09:48:38 +03:00
DefaultForkRepoUnits = validateDefaultRepoUnits ( DefaultForkRepoUnits , setDefaultForkRepoUnits )
2020-01-17 10:34:37 +03:00
}
// UnitGlobalDisabled checks if unit type is global disabled
2021-11-09 22:57:58 +03:00
func ( u Type ) UnitGlobalDisabled ( ) bool {
2020-01-17 10:34:37 +03:00
for _ , ud := range DisabledRepoUnits {
if u == ud {
return true
}
}
return false
}
// CanDisable checks if this unit type can be disabled.
2021-11-09 22:57:58 +03:00
func ( u * Type ) CanDisable ( ) bool {
2020-01-17 10:34:37 +03:00
for _ , mu := range MustRepoUnits {
if * u == mu {
return false
}
}
return true
}
// CanBeDefault checks if the unit type can be a default repo unit
2021-11-09 22:57:58 +03:00
func ( u * Type ) CanBeDefault ( ) bool {
2020-01-17 10:34:37 +03:00
for _ , nadU := range NotAllowedDefaultRepoUnits {
if * u == nadU {
return false
}
}
return true
}
2017-07-17 05:04:43 +03:00
// Unit is a section of one repository
2017-02-04 18:53:46 +03:00
type Unit struct {
2022-01-05 06:37:00 +03:00
Type Type
NameKey string
URI string
DescKey string
Idx int
MaxAccessMode perm . AccessMode // The max access mode of the unit. i.e. Read means this unit can only be read.
2017-02-04 18:53:46 +03:00
}
2017-05-18 17:54:24 +03:00
// CanDisable returns if this unit could be disabled.
func ( u * Unit ) CanDisable ( ) bool {
2020-01-17 10:34:37 +03:00
return u . Type . CanDisable ( )
2017-05-18 17:54:24 +03:00
}
2017-10-01 16:50:56 +03:00
// IsLessThan compares order of two units
func ( u Unit ) IsLessThan ( unit Unit ) bool {
2021-11-09 22:57:58 +03:00
if ( u . Type == TypeExternalTracker || u . Type == TypeExternalWiki ) && unit . Type != TypeExternalTracker && unit . Type != TypeExternalWiki {
2017-10-01 16:50:56 +03:00
return false
}
return u . Idx < unit . Idx
}
2022-01-08 18:19:36 +03:00
// MaxPerm returns the max perms of this unit
func ( u Unit ) MaxPerm ( ) perm . AccessMode {
if u . Type == TypeExternalTracker || u . Type == TypeExternalWiki {
return perm . AccessModeRead
}
return perm . AccessModeAdmin
}
2017-02-04 18:53:46 +03:00
// Enumerate all the units
var (
UnitCode = Unit {
2021-11-09 22:57:58 +03:00
TypeCode ,
2017-02-04 18:53:46 +03:00
"repo.code" ,
"/" ,
2017-05-18 17:54:24 +03:00
"repo.code.desc" ,
2017-02-04 18:53:46 +03:00
0 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeOwner ,
2017-02-04 18:53:46 +03:00
}
UnitIssues = Unit {
2021-11-09 22:57:58 +03:00
TypeIssues ,
2017-02-04 18:53:46 +03:00
"repo.issues" ,
"/issues" ,
2017-05-18 17:54:24 +03:00
"repo.issues.desc" ,
2017-02-04 18:53:46 +03:00
1 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeOwner ,
2017-02-04 18:53:46 +03:00
}
UnitExternalTracker = Unit {
2021-11-09 22:57:58 +03:00
TypeExternalTracker ,
2017-05-18 17:54:24 +03:00
"repo.ext_issues" ,
2017-02-04 18:53:46 +03:00
"/issues" ,
2017-05-18 17:54:24 +03:00
"repo.ext_issues.desc" ,
2017-02-04 18:53:46 +03:00
1 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeRead ,
2017-02-04 18:53:46 +03:00
}
UnitPullRequests = Unit {
2021-11-09 22:57:58 +03:00
TypePullRequests ,
2017-02-04 18:53:46 +03:00
"repo.pulls" ,
"/pulls" ,
2017-05-18 17:54:24 +03:00
"repo.pulls.desc" ,
2017-02-04 18:53:46 +03:00
2 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeOwner ,
2017-02-04 18:53:46 +03:00
}
UnitReleases = Unit {
2021-11-09 22:57:58 +03:00
TypeReleases ,
2017-02-04 18:53:46 +03:00
"repo.releases" ,
"/releases" ,
2017-05-18 17:54:24 +03:00
"repo.releases.desc" ,
2017-07-17 05:04:43 +03:00
3 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeOwner ,
2017-02-04 18:53:46 +03:00
}
UnitWiki = Unit {
2021-11-09 22:57:58 +03:00
TypeWiki ,
2017-02-04 18:53:46 +03:00
"repo.wiki" ,
"/wiki" ,
2017-05-18 17:54:24 +03:00
"repo.wiki.desc" ,
2017-07-17 05:04:43 +03:00
4 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeOwner ,
2017-02-04 18:53:46 +03:00
}
UnitExternalWiki = Unit {
2021-11-09 22:57:58 +03:00
TypeExternalWiki ,
2017-05-18 17:54:24 +03:00
"repo.ext_wiki" ,
2017-02-04 18:53:46 +03:00
"/wiki" ,
2017-05-18 17:54:24 +03:00
"repo.ext_wiki.desc" ,
2017-07-17 05:04:43 +03:00
4 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeRead ,
2017-02-04 18:53:46 +03:00
}
2020-08-17 06:07:38 +03:00
UnitProjects = Unit {
2021-11-09 22:57:58 +03:00
TypeProjects ,
2020-08-17 06:07:38 +03:00
"repo.projects" ,
"/projects" ,
"repo.projects.desc" ,
5 ,
2022-01-05 06:37:00 +03:00
perm . AccessModeOwner ,
2020-08-17 06:07:38 +03:00
}
2022-05-08 18:51:50 +03:00
UnitPackages = Unit {
TypePackages ,
"repo.packages" ,
"/packages" ,
2022-05-19 04:59:28 +03:00
"packages.desc" ,
2022-05-08 18:51:50 +03:00
6 ,
perm . AccessModeRead ,
}
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
UnitActions = Unit {
TypeActions ,
2023-04-03 07:05:37 +03:00
"repo.actions" ,
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" ,
"actions.unit.desc" ,
7 ,
perm . AccessModeOwner ,
}
2017-02-04 18:53:46 +03:00
// Units contains all the units
2021-11-09 22:57:58 +03:00
Units = map [ Type ] Unit {
TypeCode : UnitCode ,
TypeIssues : UnitIssues ,
TypeExternalTracker : UnitExternalTracker ,
TypePullRequests : UnitPullRequests ,
TypeReleases : UnitReleases ,
TypeWiki : UnitWiki ,
TypeExternalWiki : UnitExternalWiki ,
TypeProjects : UnitProjects ,
2022-05-08 18:51:50 +03:00
TypePackages : UnitPackages ,
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
TypeActions : UnitActions ,
2017-02-04 18:53:46 +03:00
}
)
2018-11-10 22:45:32 +03:00
2023-04-03 11:42:38 +03:00
// FindUnitTypes give the unit key names and return valid unique units and invalid keys
func FindUnitTypes ( nameKeys ... string ) ( res [ ] Type , invalidKeys [ ] string ) {
m := map [ Type ] struct { } { }
2018-11-10 22:45:32 +03:00
for _ , key := range nameKeys {
2023-04-03 11:42:38 +03:00
t := TypeFromKey ( key )
if t == TypeInvalid {
invalidKeys = append ( invalidKeys , key )
} else if _ , ok := m [ t ] ; ! ok {
res = append ( res , t )
m [ t ] = struct { } { }
2022-01-05 06:37:00 +03:00
}
2018-11-10 22:45:32 +03:00
}
2023-04-03 11:42:38 +03:00
return res , invalidKeys
2018-11-10 22:45:32 +03:00
}
2022-01-05 06:37:00 +03:00
// TypeFromKey give the unit key name and return unit
func TypeFromKey ( nameKey string ) Type {
for t , u := range Units {
if strings . EqualFold ( nameKey , u . NameKey ) {
return t
}
}
return TypeInvalid
}
// AllUnitKeyNames returns all unit key names
func AllUnitKeyNames ( ) [ ] string {
res := make ( [ ] string , 0 , len ( Units ) )
for _ , u := range Units {
res = append ( res , u . NameKey )
}
return res
}
// MinUnitAccessMode returns the minial permission of the permission map
func MinUnitAccessMode ( unitsMap map [ Type ] perm . AccessMode ) perm . AccessMode {
res := perm . AccessModeNone
2022-02-09 00:16:17 +03:00
for t , mode := range unitsMap {
// Don't allow `TypeExternal{Tracker,Wiki}` to influence this as they can only be set to READ perms.
if t == TypeExternalTracker || t == TypeExternalWiki {
continue
}
2022-01-05 06:37:00 +03:00
// get the minial permission great than AccessModeNone except all are AccessModeNone
if mode > perm . AccessModeNone && ( res == perm . AccessModeNone || mode < res ) {
res = mode
}
}
return res
}