Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,12 @@ node_modules: pnpm-lock.yaml
@touch .venv

.PHONY: update
update: update-js update-py ## update js and py dependencies
update: update-go update-js update-py ## update dependencies

.PHONY: update-go
update-go: ## update go dependencies
$(GO) get -u ./...
$(MAKE) tidy

.PHONY: update-js
update-js: node_modules ## update js dependencies
Expand Down
67 changes: 46 additions & 21 deletions assets/go-licenses.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion contrib/backport/backport.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
"strconv"
"strings"

"github.com/google/go-github/v74/github"
"github.com/google/go-github/v84/github"
"github.com/urfave/cli/v3"
"gopkg.in/yaml.v3"
)
Expand Down
191 changes: 100 additions & 91 deletions go.mod

Large diffs are not rendered by default.

572 changes: 200 additions & 372 deletions go.sum

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion modules/auth/pam/pam.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ package pam
import (
"errors"

"github.com/msteinert/pam"
"github.com/msteinert/pam/v2"
)

// Supported is true when built with PAM
Expand All @@ -28,6 +28,7 @@ func Auth(serviceName, userName, passwd string) (string, error) {
if err != nil {
return "", err
}
defer t.End()

if err = t.Authenticate(0); err != nil {
return "", err
Expand Down
11 changes: 9 additions & 2 deletions modules/migration/file_format.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,17 @@ import (
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"

"github.com/santhosh-tekuri/jsonschema/v5"
"github.com/santhosh-tekuri/jsonschema/v6"
"gopkg.in/yaml.v3"
)

// schemaLoader implements jsonschema.URLLoader
type schemaLoader struct{}

func (l *schemaLoader) Load(url string) (any, error) {
return openSchema(url)
}

// Load project data from file, with optional validation
func Load(filename string, data any, validation bool) error {
isJSON := strings.HasSuffix(filename, ".json")
Expand Down Expand Up @@ -43,7 +50,7 @@ func unmarshal(bs []byte, data any, isJSON bool) error {

func getSchema(filename string) (*jsonschema.Schema, error) {
c := jsonschema.NewCompiler()
c.LoadURL = openSchema
c.UseLoader(&schemaLoader{})
return c.Compile(filename)
}

Expand Down
2 changes: 1 addition & 1 deletion modules/migration/file_format_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"strings"
"testing"

"github.com/santhosh-tekuri/jsonschema/v5"
"github.com/santhosh-tekuri/jsonschema/v6"
"github.com/stretchr/testify/assert"
)

Expand Down
12 changes: 9 additions & 3 deletions modules/migration/schemas_bindata.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@
package migration

import (
"io"
"io/fs"
"path"
"sync"

_ "embed"

"code.gitea.io/gitea/modules/assetfs"

"github.com/santhosh-tekuri/jsonschema/v6"
)

//go:embed bindata.dat
Expand All @@ -25,6 +26,11 @@ var BuiltinAssets = sync.OnceValue(func() fs.FS {
return assetfs.NewEmbeddedFS(bindata)
})

func openSchema(filename string) (io.ReadCloser, error) {
return BuiltinAssets().Open(path.Base(filename))
func openSchema(filename string) (any, error) {
f, err := BuiltinAssets().Open(path.Base(filename))
if err != nil {
return nil, err
}
defer f.Close()
return jsonschema.UnmarshalJSON(f)
}
12 changes: 9 additions & 3 deletions modules/migration/schemas_dynamic.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
package migration

import (
"io"
"net/url"
"os"
"path"
"path/filepath"

"github.com/santhosh-tekuri/jsonschema/v6"
)

func openSchema(s string) (io.ReadCloser, error) {
func openSchema(s string) (any, error) {
u, err := url.Parse(s)
if err != nil {
return nil, err
Expand All @@ -34,5 +35,10 @@ func openSchema(s string) (io.ReadCloser, error) {
filename = filepath.Join("modules/migration/schemas", basename)
}
}
return os.Open(filename)
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer f.Close()
return jsonschema.UnmarshalJSON(f)
}
27 changes: 19 additions & 8 deletions services/cron/cron.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,22 @@ import (
"time"

"code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/translation"

"github.com/go-co-op/gocron"
"github.com/go-co-op/gocron/v2"
)

var scheduler = gocron.NewScheduler(time.Local)
var scheduler gocron.Scheduler

func init() {
var err error
scheduler, err = gocron.NewScheduler(gocron.WithLocation(time.Local))
if err != nil {
log.Fatal("Unable to create cron scheduler: %v", err)
}
}

// Init begins cron tasks
// Each cron task is run within the shutdown context as a running server
Expand All @@ -35,11 +44,13 @@ func Init(original context.Context) {
}
}

scheduler.StartAsync()
scheduler.Start()
started = true
lock.Unlock()
graceful.GetManager().RunAtShutdown(context.Background(), func() {
scheduler.Stop()
if err := scheduler.Shutdown(); err != nil {
log.Error("Unable to shutdown cron scheduler: %v", err)
}
lock.Lock()
started = false
lock.Unlock()
Expand Down Expand Up @@ -74,14 +85,14 @@ type TaskTable []*TaskTableRow
// ListTasks returns all running cron tasks.
func ListTasks() TaskTable {
jobs := scheduler.Jobs()
jobMap := map[string]*gocron.Job{}
jobMap := map[string]gocron.Job{}
for _, job := range jobs {
// the first tag is the task name
tags := job.Tags()
if len(tags) == 0 { // should never happen
continue
}
jobMap[job.Tags()[0]] = job
jobMap[tags[0]] = job
}

lock.Lock()
Expand All @@ -99,8 +110,8 @@ func ListTasks() TaskTable {
if len(tags) > 1 {
spec = tags[1] // the second tag is the task spec
}
next = e.NextRun()
prev = e.PreviousRun()
next, _ = e.NextRun()
prev, _ = e.LastRun()
}

task.lock.Lock()
Expand Down
15 changes: 9 additions & 6 deletions services/cron/tasks.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import (
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/translation"

"github.com/go-co-op/gocron/v2"
)

var (
Expand Down Expand Up @@ -224,12 +226,13 @@ func RegisterTaskFatal(name string, config Config, fun func(context.Context, *us

func addTaskToScheduler(task *Task) error {
tags := []string{task.Name, task.config.GetSchedule()} // name and schedule can't be get from job, so we add them as tag
if scheduleHasSeconds(task.config.GetSchedule()) {
scheduler = scheduler.CronWithSeconds(task.config.GetSchedule())
} else {
scheduler = scheduler.Cron(task.config.GetSchedule())
}
if _, err := scheduler.Tag(tags...).Do(task.Run); err != nil {
withSeconds := scheduleHasSeconds(task.config.GetSchedule())
_, err := scheduler.NewJob(
gocron.CronJob(task.config.GetSchedule(), withSeconds),
gocron.NewTask(task.Run),
gocron.WithTags(tags...),
)
if err != nil {
log.Error("Unable to register cron task with name: %s Error: %v", task.Name, err)
return err
}
Expand Down
6 changes: 5 additions & 1 deletion services/cron/tasks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ import (

func TestAddTaskToScheduler(t *testing.T) {
assert.Empty(t, scheduler.Jobs())
defer scheduler.Clear()
defer func() {
for _, j := range scheduler.Jobs() {
_ = scheduler.RemoveJob(j.ID())
}
}()

// no seconds
err := addTaskToScheduler(&Task{
Expand Down
2 changes: 1 addition & 1 deletion services/mailer/incoming/incoming.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (
"github.com/dimiro1/reply"
"github.com/emersion/go-imap"
"github.com/emersion/go-imap/client"
"github.com/jhillyerd/enmime"
"github.com/jhillyerd/enmime/v2"
)

var (
Expand Down
2 changes: 1 addition & 1 deletion services/mailer/incoming/incoming_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"strings"
"testing"

"github.com/jhillyerd/enmime"
"github.com/jhillyerd/enmime/v2"
"github.com/stretchr/testify/assert"
)

Expand Down
10 changes: 4 additions & 6 deletions services/mailer/sender/smtp_auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,17 @@ func (a *loginAuth) Next(fromServer []byte, more bool) ([]byte, error) {
}

type ntlmAuth struct {
username, password, domain string
domainNeeded bool
username, password string
}

// NtlmAuth SMTP AUTH NTLM Auth Handler
func NtlmAuth(username, password string) smtp.Auth {
user, domain, domainNeeded := ntlmssp.GetDomain(username)
return &ntlmAuth{user, password, domain, domainNeeded}
return &ntlmAuth{username, password}
}

// Start starts SMTP NTLM Auth
func (a *ntlmAuth) Start(server *smtp.ServerInfo) (string, []byte, error) {
negotiateMessage, err := ntlmssp.NewNegotiateMessage(a.domain, "")
negotiateMessage, err := ntlmssp.NewNegotiateMessage("", "")
return "NTLM", negotiateMessage, err
}

Expand All @@ -63,7 +61,7 @@ func (a *ntlmAuth) Next(fromServer []byte, more bool) ([]byte, error) {
if len(fromServer) == 0 {
return nil, errors.New("ntlm ChallengeMessage is empty")
}
authenticateMessage, err := ntlmssp.ProcessChallenge(fromServer, a.username, a.password, a.domainNeeded)
authenticateMessage, err := ntlmssp.NewAuthenticateMessage(fromServer, a.username, a.password, nil)
Comment thread
silverwind marked this conversation as resolved.
return authenticateMessage, err
}
return nil, nil
Expand Down
2 changes: 1 addition & 1 deletion services/migrations/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ package migrations
import (
"errors"

"github.com/google/go-github/v74/github"
"github.com/google/go-github/v84/github"
)

// ErrRepoNotCreated returns the error that repository not created
Expand Down
36 changes: 15 additions & 21 deletions services/migrations/github.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
"code.gitea.io/gitea/modules/proxy"
"code.gitea.io/gitea/modules/structs"

"github.com/google/go-github/v74/github"
"github.com/google/go-github/v84/github"
"golang.org/x/oauth2"
)

Expand Down Expand Up @@ -861,28 +861,22 @@ func (g *GithubDownloaderV3) GetReviews(ctx context.Context, reviewable base.Rev
opt.Page = resp.NextPage
}
// Get requested reviews
for {
g.waitAndPickClient(ctx)
reviewers, resp, err := g.getClient().PullRequests.ListReviewers(ctx, g.repoOwner, g.repoName, int(reviewable.GetForeignIndex()), opt)
if err != nil {
return nil, fmt.Errorf("error while listing repos: %w", err)
}
g.setRate(&resp.Rate)
for _, user := range reviewers.Users {
r := &base.Review{
ReviewerID: user.GetID(),
ReviewerName: user.GetLogin(),
State: base.ReviewStateRequestReview,
IssueIndex: reviewable.GetLocalIndex(),
}
allReviews = append(allReviews, r)
}
// TODO: Handle Team requests
if resp.NextPage == 0 {
break
g.waitAndPickClient(ctx)
reviewers, resp, err := g.getClient().PullRequests.ListReviewers(ctx, g.repoOwner, g.repoName, int(reviewable.GetForeignIndex()))
if err != nil {
return nil, fmt.Errorf("error while listing repos: %w", err)
}
g.setRate(&resp.Rate)
for _, user := range reviewers.Users {
r := &base.Review{
ReviewerID: user.GetID(),
ReviewerName: user.GetLogin(),
State: base.ReviewStateRequestReview,
IssueIndex: reviewable.GetLocalIndex(),
}
opt.Page = resp.NextPage
allReviews = append(allReviews, r)
}
Comment thread
silverwind marked this conversation as resolved.
// TODO: Handle Team requests
return allReviews, nil
}

Expand Down
Loading