Merge pull request 'Remove some Windows-specific files' (#5353) from 0ko/forgejo:no-windows into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/5353 Reviewed-by: Otto <otto@codeberg.org>
This commit is contained in:
commit
2c4a3d6641
8 changed files with 0 additions and 291 deletions
1
go.mod
1
go.mod
|
@ -84,7 +84,6 @@ require (
|
||||||
github.com/opencontainers/image-spec v1.1.0
|
github.com/opencontainers/image-spec v1.1.0
|
||||||
github.com/pquerna/otp v1.4.0
|
github.com/pquerna/otp v1.4.0
|
||||||
github.com/prometheus/client_golang v1.18.0
|
github.com/prometheus/client_golang v1.18.0
|
||||||
github.com/quasoft/websspi v1.1.2
|
|
||||||
github.com/redis/go-redis/v9 v9.6.1
|
github.com/redis/go-redis/v9 v9.6.1
|
||||||
github.com/robfig/cron/v3 v3.0.1
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1
|
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1
|
||||||
|
|
5
go.sum
5
go.sum
|
@ -379,10 +379,8 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||||
github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1 h1:LqbZZ9sNMWVjeXS4NN5oVvhMjDyLhmA1LG86oSo+IqY=
|
github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1 h1:LqbZZ9sNMWVjeXS4NN5oVvhMjDyLhmA1LG86oSo+IqY=
|
||||||
github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY=
|
github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY=
|
||||||
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
|
||||||
github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
|
github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
|
||||||
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
|
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
|
||||||
github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
|
|
||||||
github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY=
|
github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY=
|
||||||
github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ=
|
github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ=
|
||||||
github.com/h2non/gock v1.2.0 h1:K6ol8rfrRkUOefooBC8elXoaNGYkpp7y2qcxGG6BzUE=
|
github.com/h2non/gock v1.2.0 h1:K6ol8rfrRkUOefooBC8elXoaNGYkpp7y2qcxGG6BzUE=
|
||||||
|
@ -581,8 +579,6 @@ github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqSc
|
||||||
github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ=
|
github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ=
|
||||||
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
|
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
|
||||||
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
||||||
github.com/quasoft/websspi v1.1.2 h1:/mA4w0LxWlE3novvsoEL6BBA1WnjJATbjkh1kFrTidw=
|
|
||||||
github.com/quasoft/websspi v1.1.2/go.mod h1:HmVdl939dQ0WIXZhyik+ARdI03M6bQzaSEKcgpFmewk=
|
|
||||||
github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4=
|
github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4=
|
||||||
github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
|
github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
||||||
|
@ -779,7 +775,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
|
|
@ -1,190 +0,0 @@
|
||||||
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
// This code is heavily inspired by the archived gofacebook/gracenet/net.go handler
|
|
||||||
|
|
||||||
//go:build windows
|
|
||||||
|
|
||||||
package graceful
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"runtime/pprof"
|
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
"code.gitea.io/gitea/modules/setting"
|
|
||||||
|
|
||||||
"golang.org/x/sys/windows/svc"
|
|
||||||
"golang.org/x/sys/windows/svc/debug"
|
|
||||||
)
|
|
||||||
|
|
||||||
// WindowsServiceName is the name of the Windows service
|
|
||||||
var WindowsServiceName = "gitea"
|
|
||||||
|
|
||||||
const (
|
|
||||||
hammerCode = 128
|
|
||||||
hammerCmd = svc.Cmd(hammerCode)
|
|
||||||
acceptHammerCode = svc.Accepted(hammerCode)
|
|
||||||
)
|
|
||||||
|
|
||||||
func (g *Manager) start() {
|
|
||||||
// Now label this and all goroutines created by this goroutine with the gracefulLifecycle manager
|
|
||||||
pprof.SetGoroutineLabels(g.managerCtx)
|
|
||||||
defer pprof.SetGoroutineLabels(g.ctx)
|
|
||||||
|
|
||||||
if skip, _ := strconv.ParseBool(os.Getenv("SKIP_MINWINSVC")); skip {
|
|
||||||
log.Trace("Skipping SVC check as SKIP_MINWINSVC is set")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make SVC process
|
|
||||||
run := svc.Run
|
|
||||||
|
|
||||||
//lint:ignore SA1019 We use IsAnInteractiveSession because IsWindowsService has a different permissions profile
|
|
||||||
isAnInteractiveSession, err := svc.IsAnInteractiveSession() //nolint:staticcheck
|
|
||||||
if err != nil {
|
|
||||||
log.Error("Unable to ascertain if running as an Windows Service: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if isAnInteractiveSession {
|
|
||||||
log.Trace("Not running a service ... using the debug SVC manager")
|
|
||||||
run = debug.Run
|
|
||||||
}
|
|
||||||
go func() {
|
|
||||||
_ = run(WindowsServiceName, g)
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute makes Manager implement svc.Handler
|
|
||||||
func (g *Manager) Execute(args []string, changes <-chan svc.ChangeRequest, status chan<- svc.Status) (svcSpecificEC bool, exitCode uint32) {
|
|
||||||
if setting.StartupTimeout > 0 {
|
|
||||||
status <- svc.Status{State: svc.StartPending, WaitHint: uint32(setting.StartupTimeout / time.Millisecond)}
|
|
||||||
} else {
|
|
||||||
status <- svc.Status{State: svc.StartPending}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Trace("Awaiting server start-up")
|
|
||||||
// Now need to wait for everything to start...
|
|
||||||
if !g.awaitServer(setting.StartupTimeout) {
|
|
||||||
log.Trace("... start-up failed ... Stopped")
|
|
||||||
return false, 1
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Trace("Sending Running state to SVC")
|
|
||||||
|
|
||||||
// We need to implement some way of svc.AcceptParamChange/svc.ParamChange
|
|
||||||
status <- svc.Status{
|
|
||||||
State: svc.Running,
|
|
||||||
Accepts: svc.AcceptStop | svc.AcceptShutdown | acceptHammerCode,
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Trace("Started")
|
|
||||||
|
|
||||||
waitTime := 30 * time.Second
|
|
||||||
|
|
||||||
loop:
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-g.ctx.Done():
|
|
||||||
log.Trace("Shutting down")
|
|
||||||
g.DoGracefulShutdown()
|
|
||||||
waitTime += setting.GracefulHammerTime
|
|
||||||
break loop
|
|
||||||
case <-g.shutdownRequested:
|
|
||||||
log.Trace("Shutting down")
|
|
||||||
waitTime += setting.GracefulHammerTime
|
|
||||||
break loop
|
|
||||||
case change := <-changes:
|
|
||||||
switch change.Cmd {
|
|
||||||
case svc.Interrogate:
|
|
||||||
log.Trace("SVC sent interrogate")
|
|
||||||
status <- change.CurrentStatus
|
|
||||||
case svc.Stop, svc.Shutdown:
|
|
||||||
log.Trace("SVC requested shutdown - shutting down")
|
|
||||||
g.DoGracefulShutdown()
|
|
||||||
waitTime += setting.GracefulHammerTime
|
|
||||||
break loop
|
|
||||||
case hammerCode:
|
|
||||||
log.Trace("SVC requested hammer - shutting down and hammering immediately")
|
|
||||||
g.DoGracefulShutdown()
|
|
||||||
g.DoImmediateHammer()
|
|
||||||
break loop
|
|
||||||
default:
|
|
||||||
log.Debug("Unexpected control request: %v", change.Cmd)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Trace("Sending StopPending state to SVC")
|
|
||||||
status <- svc.Status{
|
|
||||||
State: svc.StopPending,
|
|
||||||
WaitHint: uint32(waitTime / time.Millisecond),
|
|
||||||
}
|
|
||||||
|
|
||||||
hammerLoop:
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case change := <-changes:
|
|
||||||
switch change.Cmd {
|
|
||||||
case svc.Interrogate:
|
|
||||||
log.Trace("SVC sent interrogate")
|
|
||||||
status <- change.CurrentStatus
|
|
||||||
case svc.Stop, svc.Shutdown, hammerCmd:
|
|
||||||
log.Trace("SVC requested hammer - hammering immediately")
|
|
||||||
g.DoImmediateHammer()
|
|
||||||
break hammerLoop
|
|
||||||
default:
|
|
||||||
log.Debug("Unexpected control request: %v", change.Cmd)
|
|
||||||
}
|
|
||||||
case <-g.hammerCtx.Done():
|
|
||||||
break hammerLoop
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Trace("Stopped")
|
|
||||||
return false, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Manager) awaitServer(limit time.Duration) bool {
|
|
||||||
c := make(chan struct{})
|
|
||||||
go func() {
|
|
||||||
g.createServerCond.L.Lock()
|
|
||||||
for {
|
|
||||||
if g.createdServer >= numberOfServersToCreate {
|
|
||||||
g.createServerCond.L.Unlock()
|
|
||||||
close(c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
select {
|
|
||||||
case <-g.IsShutdown():
|
|
||||||
g.createServerCond.L.Unlock()
|
|
||||||
return
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
g.createServerCond.Wait()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
var tc <-chan time.Time
|
|
||||||
if limit > 0 {
|
|
||||||
tc = time.After(limit)
|
|
||||||
}
|
|
||||||
select {
|
|
||||||
case <-c:
|
|
||||||
return true // completed normally
|
|
||||||
case <-tc:
|
|
||||||
return false // timed out
|
|
||||||
case <-g.IsShutdown():
|
|
||||||
g.createServerCond.Signal()
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Manager) notify(msg systemdNotifyMsg) {
|
|
||||||
// Windows doesn't use systemd to notify
|
|
||||||
}
|
|
||||||
|
|
||||||
func KillParent() {
|
|
||||||
// Windows doesn't need to "kill parent" because there is no graceful restart
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
// This code is heavily inspired by the archived gofacebook/gracenet/net.go handler
|
|
||||||
|
|
||||||
//go:build windows
|
|
||||||
|
|
||||||
package graceful
|
|
||||||
|
|
||||||
import "net"
|
|
||||||
|
|
||||||
// DefaultGetListener obtains a listener for the local network address.
|
|
||||||
// On windows this is basically just a shim around net.Listen.
|
|
||||||
func DefaultGetListener(network, address string) (net.Listener, error) {
|
|
||||||
// Add a deferral to say that we've tried to grab a listener
|
|
||||||
defer GetManager().InformCleanup()
|
|
||||||
|
|
||||||
return net.Listen(network, address)
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
//go:build windows
|
|
||||||
|
|
||||||
package process
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os/exec"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SetSysProcAttribute sets the common SysProcAttrs for commands
|
|
||||||
func SetSysProcAttribute(cmd *exec.Cmd) {
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
//go:build windows
|
|
||||||
|
|
||||||
package util
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ApplyUmask(f string, newMode os.FileMode) error {
|
|
||||||
// do nothing for Windows, because Windows doesn't use umask
|
|
||||||
return nil
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
//go:build windows
|
|
||||||
|
|
||||||
package private
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/graceful"
|
|
||||||
"code.gitea.io/gitea/modules/private"
|
|
||||||
"code.gitea.io/gitea/services/context"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Restart is not implemented for Windows based servers as they can't fork
|
|
||||||
func Restart(ctx *context.PrivateContext) {
|
|
||||||
ctx.JSON(http.StatusNotImplemented, private.Response{
|
|
||||||
UserMsg: "windows servers cannot be gracefully restarted - shutdown and restart manually",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shutdown causes the server to perform a graceful shutdown
|
|
||||||
func Shutdown(ctx *context.PrivateContext) {
|
|
||||||
graceful.GetManager().DoGracefulShutdown()
|
|
||||||
ctx.PlainText(http.StatusOK, "success")
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
//go:build windows
|
|
||||||
|
|
||||||
package auth
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/quasoft/websspi"
|
|
||||||
)
|
|
||||||
|
|
||||||
type SSPIUserInfo = websspi.UserInfo
|
|
||||||
|
|
||||||
func sspiAuthInit() error {
|
|
||||||
var err error
|
|
||||||
config := websspi.NewConfig()
|
|
||||||
sspiAuth, err = websspi.New(config)
|
|
||||||
return err
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue