Compare commits
5 Commits
22bc187e9b
...
main
Author | SHA1 | Date | |
---|---|---|---|
3e47a24f8d | |||
8f676ccb15
|
|||
5c5d1fcf5b
|
|||
e06a85360f
|
|||
b6072c46db
|
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
9
.idea/create-pull-request.iml
generated
Normal file
9
.idea/create-pull-request.iml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true" />
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/create-pull-request.iml" filepath="$PROJECT_DIR$/.idea/create-pull-request.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
34
README.md
34
README.md
@@ -1 +1,35 @@
|
||||
# Gitea action to Create a Pull Request
|
||||
|
||||
Gitea action to create a pull request. This action is not github action compatible.
|
||||
|
||||
Inspired by https://github.com/peter-evans/create-pull-request, but without the ability to commit the changes.
|
||||
|
||||
## Usage
|
||||
|
||||
```yaml
|
||||
name: Gitea Actions Demo
|
||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
Explore-Gitea-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Go
|
||||
uses: https://github.com/actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.22'
|
||||
|
||||
# ... do something with your code
|
||||
|
||||
|
||||
|
||||
- name: Use Go Action
|
||||
id: use-go-action
|
||||
uses: https://gitea.champs-libres.be/julienfastre/action-create-pr@main
|
||||
with:
|
||||
assignees: julienfastre
|
||||
base: master
|
||||
labels: bug, invalid, something else
|
||||
|
||||
```
|
||||
|
34
action.yml
Normal file
34
action.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
name: 'Create pull request'
|
||||
description: 'Create pull requests in gitea'
|
||||
runs:
|
||||
using: 'go'
|
||||
main: 'main.go'
|
||||
inputs:
|
||||
token:
|
||||
description: 'Access token which allow to create pull requests'
|
||||
default: ${{ github.token }}
|
||||
title:
|
||||
required: false
|
||||
description: The title of the pull request
|
||||
default: Changes by create-pull-request action
|
||||
body:
|
||||
required: false
|
||||
description: The body of the pull request
|
||||
default: Automated changes by create-pull-request Gitea action
|
||||
labels:
|
||||
description: 'A comma or newline separated list of labels.'
|
||||
assignees:
|
||||
description: 'A comma or newline separated list of assignees (GitHub usernames).'
|
||||
base:
|
||||
description: >
|
||||
The pull request base branch (the one into which the new code will be pushed).
|
||||
required: true
|
||||
head:
|
||||
description: >
|
||||
The pull request head branch (the one within the new code is developed).
|
||||
|
||||
outputs:
|
||||
pull-request-number:
|
||||
description: 'The pull request number'
|
||||
pull-request-url:
|
||||
description: 'The URL of the pull request.'
|
13
go.mod
Normal file
13
go.mod
Normal file
@@ -0,0 +1,13 @@
|
||||
module create-pull-request
|
||||
|
||||
go 1.22
|
||||
|
||||
require (
|
||||
code.gitea.io/sdk/gitea v0.17.1 // indirect
|
||||
github.com/davidmz/go-pageant v1.0.2 // indirect
|
||||
github.com/go-fed/httpsig v1.1.0 // indirect
|
||||
github.com/hashicorp/go-version v1.6.0 // indirect
|
||||
github.com/sethvargo/go-githubactions v1.2.0 // indirect
|
||||
golang.org/x/crypto v0.17.0 // indirect
|
||||
golang.org/x/sys v0.15.0 // indirect
|
||||
)
|
60
go.sum
Normal file
60
go.sum
Normal file
@@ -0,0 +1,60 @@
|
||||
code.gitea.io/sdk/gitea v0.17.1 h1:3jCPOG2ojbl8AcfaUCRYLT5MUcBMFwS0OSK2mA5Zok8=
|
||||
code.gitea.io/sdk/gitea v0.17.1/go.mod h1:aCnBqhHpoEWA180gMbaCtdX9Pl6BWBAuuP2miadoTNM=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0=
|
||||
github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE=
|
||||
github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI=
|
||||
github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM=
|
||||
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
|
||||
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sethvargo/go-githubactions v1.2.0 h1:Gbr36trCAj6uq7Rx1DolY1NTIg0wnzw3/N5WHdKIjME=
|
||||
github.com/sethvargo/go-githubactions v1.2.0/go.mod h1:7/4WeHgYfSz9U5vwuToCK9KPnELVHAhGtRwLREOQV80=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
||||
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
240
main.go
Normal file
240
main.go
Normal file
@@ -0,0 +1,240 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"code.gitea.io/sdk/gitea"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/sethvargo/go-githubactions"
|
||||
"os"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func ParseActionConfig(ctx githubactions.GitHubContext) (*CreatePrConfig, error) {
|
||||
base := githubactions.GetInput("base")
|
||||
if base == "" {
|
||||
return nil, errors.New("base branch name cannot be empty")
|
||||
}
|
||||
|
||||
repo := strings.Split(ctx.Repository, "/")[1]
|
||||
fmt.Printf("The repository is %v\n", repo)
|
||||
|
||||
title := githubactions.GetInput("title")
|
||||
if title == "" {
|
||||
return nil, errors.New("title cannot be empty")
|
||||
}
|
||||
|
||||
body := githubactions.GetInput("body")
|
||||
|
||||
assigneesRaw := githubactions.GetInput("assignees")
|
||||
assignees := []string{}
|
||||
for _, a := range strings.Split(assigneesRaw, ",") {
|
||||
assignees = append(assignees, strings.TrimSpace(a))
|
||||
}
|
||||
|
||||
labelsRaw := githubactions.GetInput("labels")
|
||||
labels := []string{}
|
||||
for _, l := range strings.Split(labelsRaw, ",") {
|
||||
labels = append(labels, strings.TrimSpace(l))
|
||||
}
|
||||
|
||||
var head string
|
||||
headRaw := githubactions.GetInput("head")
|
||||
if headRaw == "" {
|
||||
if os.Getenv("GITHUB_REF_TYPE") != "branch" {
|
||||
return nil, fmt.Errorf("set the \"head\" parameter or work from a branch: only branch can create a pull request: %v given as parameter GITHUB_REF_TYPE", githubactions.GetInput("GITHUB_REF_TYPE"))
|
||||
}
|
||||
head = os.Getenv("GITHUB_REF_NAME")
|
||||
} else {
|
||||
head = headRaw
|
||||
}
|
||||
|
||||
return &CreatePrConfig{
|
||||
Org: ctx.RepositoryOwner,
|
||||
Repo: repo,
|
||||
HeadBranch: head,
|
||||
BaseBranch: base,
|
||||
Title: title,
|
||||
Body: body,
|
||||
Assignees: assignees,
|
||||
Labels: labels,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println("Starting result CreatePullRequest, main")
|
||||
ctx, err := githubactions.Context()
|
||||
if err != nil {
|
||||
githubactions.Fatalf("could not get context: %v", err.Error())
|
||||
}
|
||||
|
||||
token := githubactions.GetInput("token")
|
||||
fmt.Printf("Api url is %v\n", ctx.ServerURL)
|
||||
fmt.Printf("Debug: token length is %d characters\n", len(token))
|
||||
|
||||
config, err := ParseActionConfig(*ctx)
|
||||
if err != nil {
|
||||
githubactions.Fatalf("%v", err.Error())
|
||||
}
|
||||
|
||||
pr, result, err := createPullRequest(ctx.ServerURL, token, *config)
|
||||
if err != nil {
|
||||
githubactions.Fatalf("Error while creating pr: %v", err.Error())
|
||||
}
|
||||
|
||||
fmt.Printf("Created PR with id %d\n", pr.ID)
|
||||
|
||||
githubactions.SetOutput("pull-request-number", strconv.FormatInt(pr.Index, 10))
|
||||
githubactions.SetOutput("pull-request-result", result)
|
||||
githubactions.SetOutput("pull-request-url", pr.URL)
|
||||
|
||||
fmt.Println("Ending result CreatePullRequest, main")
|
||||
}
|
||||
|
||||
// Agent which will perform changes on gitea
|
||||
type Agent struct {
|
||||
client *gitea.Client
|
||||
}
|
||||
|
||||
// CreatePrConfig represents the configuration for creating a pull request
|
||||
type CreatePrConfig struct {
|
||||
// the organization where the PR is created
|
||||
Org string
|
||||
// the repository where the PR is created
|
||||
Repo string
|
||||
// the branch where the changes are made
|
||||
HeadBranch string
|
||||
// the branch where the changes will be added
|
||||
BaseBranch string
|
||||
// the title of the pull requests
|
||||
Title string
|
||||
// the body of the pull requests
|
||||
Body string
|
||||
// the list of assignees
|
||||
Assignees []string
|
||||
// the list of requested labels
|
||||
Labels []string
|
||||
}
|
||||
|
||||
// ExistingOpenPullRequest checks if there is an existing pull request for the same head branch and return it
|
||||
func (a *Agent) ExistingOpenPullRequest(config CreatePrConfig) (bool, *gitea.PullRequest, error) {
|
||||
currentPage := 1
|
||||
|
||||
for currentPage != 0 {
|
||||
pulls, response, err := a.client.ListRepoPullRequests(config.Org, config.Repo,
|
||||
gitea.ListPullRequestsOptions{State: gitea.StateOpen, ListOptions: gitea.ListOptions{Page: currentPage}})
|
||||
|
||||
if err != nil {
|
||||
return false, nil, fmt.Errorf("error while listing all exisiting open pull requests: %v", err.Error())
|
||||
}
|
||||
|
||||
for _, pull := range pulls {
|
||||
if pull.Head.Name == config.HeadBranch {
|
||||
return true, pull, nil
|
||||
}
|
||||
}
|
||||
|
||||
currentPage = response.NextPage
|
||||
}
|
||||
|
||||
return false, nil, nil
|
||||
}
|
||||
|
||||
// labelsFromString retrieves a list of labels from a repository based on the provided configuration.
|
||||
// It uses the Gitea client to list all labels in the repository and filters them based on the provided label names.
|
||||
// The method takes a CreatePrConfig struct as a parameter which contains the organization, repository, and label details.
|
||||
// It returns a slice of gitea.Label that matches the provided label names and an error if any occurred.
|
||||
func (a *Agent) labelsFromString(config CreatePrConfig) ([]gitea.Label, error) {
|
||||
foundLabels := []gitea.Label{}
|
||||
|
||||
currentPage := 1
|
||||
for currentPage != 0 {
|
||||
labels, response, err := a.client.ListRepoLabels(config.Org, config.Repo, gitea.ListLabelsOptions{ListOptions: gitea.ListOptions{Page: currentPage}})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
if slices.Contains(config.Labels, label.Name) {
|
||||
foundLabels = append(foundLabels, *label)
|
||||
}
|
||||
}
|
||||
|
||||
currentPage = response.NextPage
|
||||
}
|
||||
|
||||
return foundLabels, nil
|
||||
}
|
||||
|
||||
// createPullRequestGitea creates a pull request in a Gitea repository based on the provided configuration.
|
||||
// It retrieves the label IDs for the given labels and uses them when creating the pull request.
|
||||
// The method takes a CreatePrConfig struct as a parameter which contains the organization, repository, and pull request details.
|
||||
// It returns the created pull request and any error encountered during the process.
|
||||
func (a *Agent) createPullRequestGitea(config CreatePrConfig) (*gitea.PullRequest, error) {
|
||||
labelIds := []int64{}
|
||||
labels, err := a.labelsFromString(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
labelIds = append(labelIds, label.ID)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pr, _, err := a.client.CreatePullRequest(config.Org, config.Repo, gitea.CreatePullRequestOption{
|
||||
Head: config.HeadBranch,
|
||||
Base: config.BaseBranch,
|
||||
Title: config.Title,
|
||||
Body: config.Body,
|
||||
Assignees: config.Assignees,
|
||||
Labels: labelIds,
|
||||
Deadline: nil,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return pr, nil
|
||||
}
|
||||
|
||||
// createPullRequest takes in the API URL, access token, and configuration for creating a pull request.
|
||||
// It initializes a Gitea client using the API URL and access token.
|
||||
// It creates an instance of the Agent struct using the Gitea client.
|
||||
// It checks if there is an open pull request with the given branch name in the repository using the ExistingOpenPullRequest method of Agent.
|
||||
// If an open pull request already exists, it returns nil as the pull request and nil error.
|
||||
// If no open pull request exists, it creates a new pull request using the createPullRequestGitea method of Agent.
|
||||
// It returns the created pull request and nil error if successful.
|
||||
// If there is an error while checking for existing pull requests or creating a new pull request, it returns nil as the pull request and the error.
|
||||
// The function takes in the following parameters:
|
||||
// - apiUrl: The URL of the Gitea API.
|
||||
// - token: The access token for authenticating with the Gitea API.
|
||||
// - config: The configuration for creating the pull request, including the organization, repository, branch details, title, body, assignees, and labels.
|
||||
// It returns a pointer to the created pull request and an error.
|
||||
func createPullRequest(apiUrl string, token string, config CreatePrConfig) (*gitea.PullRequest, string, error) {
|
||||
|
||||
client, _ := gitea.NewClient(apiUrl, gitea.SetToken(token))
|
||||
agent := &Agent{client: client}
|
||||
|
||||
has, pull, err := agent.ExistingOpenPullRequest(config)
|
||||
if err != nil {
|
||||
return nil, "error", err
|
||||
}
|
||||
|
||||
if has {
|
||||
return pull, "existing", nil
|
||||
}
|
||||
|
||||
pr, err := agent.createPullRequestGitea(config)
|
||||
|
||||
if err != nil {
|
||||
return nil, "error", err
|
||||
}
|
||||
|
||||
return pr, "created", nil
|
||||
}
|
Reference in New Issue
Block a user