mirror of
https://github.com/go-gost/gost.git
synced 2026-10-08 20:15:46 +00:00
Compare commits
30
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c87a8b96e | ||
|
|
c9cfc440ad | ||
|
|
c305f93703 | ||
|
|
f638d8081f | ||
|
|
286c1615fd | ||
|
|
b985e5138c | ||
|
|
b628475871 | ||
|
|
43dd0a6958 | ||
|
|
9d00ad8c8f | ||
|
|
1bebce0ed7 | ||
|
|
1178c4757f | ||
|
|
73069f50e3 | ||
|
|
06ec0097f9 | ||
|
|
396b0977bd | ||
|
|
604dccc7b0 | ||
|
|
6d80e06ab3 | ||
|
|
e2447ce578 | ||
|
|
811420e923 | ||
|
|
374b46dfe1 | ||
|
|
22edb92084 | ||
|
|
78a0a8c734 | ||
|
|
41e1878ebc | ||
|
|
5639c90e98 | ||
|
|
36abf9bcd9 | ||
|
|
d584b7ac61 | ||
|
|
56e2a1c496 | ||
|
|
b0bea19275 | ||
|
|
cd64f2edd3 | ||
|
|
5f04c84e32 | ||
|
|
600a64e611 |
@@ -3,57 +3,49 @@
|
|||||||
|
|
||||||
name: docker
|
name: docker
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
tags:
|
tags:
|
||||||
- 'v*'
|
- 'v*'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
# New pushes cancel an in-progress build for the same ref. Tags are isolated
|
||||||
|
# by ref, so re-pushing a release tag only de-dupes itself, never another tag.
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Prepare
|
- name: Checkout
|
||||||
id: prepare
|
uses: actions/checkout@v4
|
||||||
run: |
|
|
||||||
DOCKER_IMAGE=${{ secrets.DOCKER_IMAGE }}
|
|
||||||
VERSION=latest
|
|
||||||
|
|
||||||
# If this is git tag, use the tag name as a docker tag
|
# Auto-generates image tags, replacing the former hand-rolled shell:
|
||||||
if [[ $GITHUB_REF == refs/tags/* ]]; then
|
# - master push -> :latest
|
||||||
VERSION=${GITHUB_REF#refs/tags/v}
|
# - clean release tag vX.Y.Z -> :X.Y.Z :X :X.Y :latest
|
||||||
fi
|
# - nightly tag vX.Y.Z-nightly.<date> -> :X.Y.Z-nightly.<date> (no major/minor/latest)
|
||||||
TAGS="${DOCKER_IMAGE}:${VERSION}"
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
# If the VERSION looks like a version number, assume that
|
uses: docker/metadata-action@v5
|
||||||
# this is the most recent version of the image and also
|
with:
|
||||||
# tag it 'latest'.
|
images: ${{ secrets.DOCKER_IMAGE }}
|
||||||
if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
flavor: latest=false
|
||||||
MAJOR_VERSION=`echo $VERSION | awk '{split($0,a,"."); print a[1]}'`
|
tags: |
|
||||||
MINOR_VERSION=`echo $VERSION | awk '{split($0,a,"."); print a[2]}'`
|
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) || (startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-')) }}
|
||||||
TAGS="$TAGS,${DOCKER_IMAGE}:${MAJOR_VERSION},${DOCKER_IMAGE}:${MAJOR_VERSION}.${MINOR_VERSION},${DOCKER_IMAGE}:latest"
|
type=semver,pattern={{version}}
|
||||||
fi
|
type=semver,pattern={{major}},enable=${{ !contains(github.ref_name, '-') }}
|
||||||
|
type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref_name, '-') }}
|
||||||
# Set output parameters.
|
|
||||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
|
||||||
echo "docker_image=${DOCKER_IMAGE}" >> $GITHUB_OUTPUT
|
|
||||||
echo "docker_platforms=linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/s390x,linux/riscv64" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
id: buildx
|
id: buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Environment
|
|
||||||
run: |
|
|
||||||
echo home=$HOME
|
|
||||||
echo git_ref=$GITHUB_REF
|
|
||||||
echo git_sha=$GITHUB_SHA
|
|
||||||
echo image=${{ steps.prepare.outputs.docker_image }}
|
|
||||||
echo tags=${{ steps.prepare.outputs.tags }}
|
|
||||||
echo platforms=${{ steps.prepare.outputs.docker_platforms }}
|
|
||||||
echo avail_platforms=${{ steps.buildx.outputs.platforms }}
|
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
@@ -64,6 +56,9 @@ jobs:
|
|||||||
- name: Buildx and push
|
- name: Buildx and push
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
platforms: ${{ steps.prepare.outputs.docker_platforms }}
|
platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/s390x,linux/riscv64
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.prepare.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
# Reuse build layers across runs via the GitHub Actions cache.
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
|||||||
@@ -8,8 +8,11 @@ on:
|
|||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
# packages: write
|
|
||||||
# issues: write
|
# Never cancel an in-flight release; only de-dupe a re-pushed tag.
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
goreleaser:
|
goreleaser:
|
||||||
@@ -23,12 +26,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version: '1.26'
|
go-version: '1.26'
|
||||||
cache: true
|
cache: true
|
||||||
- name: Install UPX
|
# UPX is disabled in .goreleaser.yaml (see #863); the install step was removed.
|
||||||
uses: crazy-max/ghaction-upx@v3
|
|
||||||
with:
|
|
||||||
install-only: true
|
|
||||||
# More assembly might be required: Docker logins, GPG, etc. It all depends
|
|
||||||
# on your needs.
|
|
||||||
- uses: goreleaser/goreleaser-action@v6
|
- uses: goreleaser/goreleaser-action@v6
|
||||||
with:
|
with:
|
||||||
# either 'goreleaser' (default) or 'goreleaser-pro':
|
# either 'goreleaser' (default) or 'goreleaser-pro':
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ on:
|
|||||||
- cron: '00 15 * * *'
|
- cron: '00 15 * * *'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# Only one nightly run at a time; a new run cancels a stale one.
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check_date:
|
check_date:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -17,10 +22,12 @@ jobs:
|
|||||||
- name: print latest_commit
|
- name: print latest_commit
|
||||||
run: echo ${{ github.sha }}
|
run: echo ${{ github.sha }}
|
||||||
- id: should_run
|
- id: should_run
|
||||||
continue-on-error: true
|
name: Skip if no commit in the last 24 hours
|
||||||
name: check latest commit is less than a day
|
|
||||||
if: ${{ github.event_name == 'schedule' }}
|
if: ${{ github.event_name == 'schedule' }}
|
||||||
run: test -z $(git rev-list --after="24 hours" ${{ github.sha }}) && echo "should_run=false" >> $GITHUB_OUTPUT
|
run: |
|
||||||
|
if [ "$(git rev-list --count --after='24 hours' ${{ github.sha }})" -eq 0 ]; then
|
||||||
|
echo "should_run=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
trigger-nightly:
|
trigger-nightly:
|
||||||
needs: check_date
|
needs: check_date
|
||||||
@@ -52,10 +59,13 @@ jobs:
|
|||||||
git tag -a $TAG -m "$TAG: nightly build"
|
git tag -a $TAG -m "$TAG: nightly build"
|
||||||
git push origin $TAG
|
git push origin $TAG
|
||||||
- name: 'Clean up nightly releases'
|
- name: 'Clean up nightly releases'
|
||||||
uses: dev-drprasad/delete-older-releases@v0.3.3
|
|
||||||
with:
|
|
||||||
keep_latest: 2
|
|
||||||
delete_tags: true
|
|
||||||
delete_tag_pattern: nightly
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.NIGHTLY_BUILD_GH_TOKEN }}
|
GH_TOKEN: ${{ secrets.NIGHTLY_BUILD_GH_TOKEN }}
|
||||||
|
run: |
|
||||||
|
# Keep the 2 most recent nightly releases; delete the rest and their tags.
|
||||||
|
# Replaces the archived dev-drprasad/delete-older-releases action.
|
||||||
|
gh release list --json tagName,createdAt --limit 100 \
|
||||||
|
--jq '[.[] | select(.tagName | test("nightly"))] | sort_by(.createdAt) | reverse | .[2:] | .[].tagName' \
|
||||||
|
| while read -r tag; do
|
||||||
|
gh release delete "$tag" --yes --cleanup-tag || true
|
||||||
|
done
|
||||||
+4
-59
@@ -40,65 +40,10 @@ builds:
|
|||||||
- "-s -w -X 'main.version={{ .Tag }}'"
|
- "-s -w -X 'main.version={{ .Tag }}'"
|
||||||
|
|
||||||
upx:
|
upx:
|
||||||
- # Whether to enable it or not.
|
- # UPX compression. Disabled by default (see #863): upx --best/--lzma/--brute
|
||||||
#
|
# adds ~3s startup time on low-spec systems (linux/arm). Release builds can
|
||||||
# Templates: allowed.
|
# opt in via GORELEASER_UPX=true environment variable.
|
||||||
enabled: true
|
enabled: false
|
||||||
|
|
||||||
# Filter by build ID.
|
|
||||||
# ids: [build1, build2]
|
|
||||||
|
|
||||||
# Filter by GOOS.
|
|
||||||
goos: [linux]
|
|
||||||
|
|
||||||
# Filter by GOARCH.
|
|
||||||
goarch: [arm, arm64, amd64]
|
|
||||||
|
|
||||||
# Filter by GOARM.
|
|
||||||
# goarm: [8]
|
|
||||||
|
|
||||||
# Filter by GOAMD64.
|
|
||||||
# goamd64: [v1]
|
|
||||||
|
|
||||||
# Compress argument.
|
|
||||||
# Valid options are from '1' (faster) to '9' (better), and 'best'.
|
|
||||||
compress: best
|
|
||||||
|
|
||||||
# Whether to try LZMA (slower).
|
|
||||||
lzma: true
|
|
||||||
|
|
||||||
# Whether to try all methods and filters (slow).
|
|
||||||
brute: true
|
|
||||||
|
|
||||||
- # Whether to enable it or not.
|
|
||||||
#
|
|
||||||
# Templates: allowed.
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
# Filter by build ID.
|
|
||||||
# ids: [build1, build2]
|
|
||||||
|
|
||||||
# Filter by GOOS.
|
|
||||||
goos: [windows]
|
|
||||||
|
|
||||||
# Filter by GOARCH.
|
|
||||||
goarch: [amd64]
|
|
||||||
|
|
||||||
# Filter by GOARM.
|
|
||||||
# goarm: [8]
|
|
||||||
|
|
||||||
# Filter by GOAMD64.
|
|
||||||
# goamd64: [v1]
|
|
||||||
|
|
||||||
# Compress argument.
|
|
||||||
# Valid options are from '1' (faster) to '9' (better), and 'best'.
|
|
||||||
compress: best
|
|
||||||
|
|
||||||
# Whether to try LZMA (slower).
|
|
||||||
lzma: true
|
|
||||||
|
|
||||||
# Whether to try all methods and filters (slow).
|
|
||||||
brute: true
|
|
||||||
|
|
||||||
archives:
|
archives:
|
||||||
- format: tar.gz
|
- format: tar.gz
|
||||||
|
|||||||
+7
-6
@@ -2,8 +2,10 @@ FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1 AS xx
|
|||||||
|
|
||||||
FROM --platform=$BUILDPLATFORM golang:1.26-alpine3.23 AS builder
|
FROM --platform=$BUILDPLATFORM golang:1.26-alpine3.23 AS builder
|
||||||
|
|
||||||
# add upx for binary compression
|
# UPX compression disabled by default (see #863): upx --best adds ~3s startup
|
||||||
RUN apk add --no-cache upx || echo "upx not found"
|
# time on low-spec systems (linux/arm). Builds can opt in by uncommenting the
|
||||||
|
# upx install line and adding upx --best to the build command below.
|
||||||
|
# RUN apk add --no-cache upx || echo "upx not found"
|
||||||
|
|
||||||
COPY --from=xx / /
|
COPY --from=xx / /
|
||||||
|
|
||||||
@@ -21,13 +23,12 @@ COPY . .
|
|||||||
|
|
||||||
RUN cd cmd/gost && \
|
RUN cd cmd/gost && \
|
||||||
xx-go build -ldflags "-s -w" && \
|
xx-go build -ldflags "-s -w" && \
|
||||||
xx-verify gost && \
|
xx-verify gost
|
||||||
{ upx --best gost || true; }
|
|
||||||
|
|
||||||
FROM alpine:3.23
|
FROM alpine:3.23
|
||||||
|
|
||||||
# add iptables for tun/tap
|
# add iptables/nftables for tun/tap
|
||||||
RUN apk add --no-cache iptables
|
RUN apk add --no-cache iptables nftables
|
||||||
|
|
||||||
WORKDIR /bin/
|
WORKDIR /bin/
|
||||||
|
|
||||||
|
|||||||
+26
-18
@@ -11,6 +11,8 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
xlogger "github.com/go-gost/x/logger"
|
xlogger "github.com/go-gost/x/logger"
|
||||||
@@ -28,7 +30,7 @@ func (l *stringList) Set(value string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
cfgFile string
|
cfgFiles stringList
|
||||||
outputFormat string
|
outputFormat string
|
||||||
services stringList
|
services stringList
|
||||||
nodes stringList
|
nodes stringList
|
||||||
@@ -36,6 +38,7 @@ var (
|
|||||||
trace bool
|
trace bool
|
||||||
apiAddr string
|
apiAddr string
|
||||||
metricsAddr string
|
metricsAddr string
|
||||||
|
reload time.Duration
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -46,39 +49,43 @@ func init() {
|
|||||||
if strings.Contains(args, " -- ") {
|
if strings.Contains(args, " -- ") {
|
||||||
var (
|
var (
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
ret int
|
ret atomic.Int32
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
wargsList := strings.Split(" "+args+" ", " -- ")
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
for wid, wargs := range strings.Split(" "+args+" ", " -- ") {
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
wg.Add(1)
|
|
||||||
go func(wid int, wargs string) {
|
for wid, wargs := range wargsList {
|
||||||
defer wg.Done()
|
wg.Go(func() {
|
||||||
defer cancel()
|
worker(wid, strings.Split(strings.TrimSpace(wargs), " "), ctx, &ret)
|
||||||
worker(wid, strings.Split(wargs, " "), &ctx, &ret)
|
})
|
||||||
}(wid, strings.TrimSpace(wargs))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
cancel()
|
||||||
|
|
||||||
os.Exit(ret)
|
os.Exit(int(ret.Load()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func worker(id int, args []string, ctx *context.Context, ret *int) {
|
func worker(id int, args []string, ctx context.Context, ret *atomic.Int32) {
|
||||||
cmd := exec.CommandContext(*ctx, os.Args[0], args...)
|
cmd := exec.CommandContext(ctx, os.Args[0], args...)
|
||||||
|
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
cmd.Env = append(os.Environ(), fmt.Sprintf("_GOST_ID=%d", id))
|
cmd.Env = append(os.Environ(), fmt.Sprintf("_GOST_ID=%d", id))
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
log.Fatal(err)
|
// Context cancellation is expected when one worker exits early.
|
||||||
|
// Only log fatal on other errors.
|
||||||
|
if ctx.Err() == nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
if cmd.ProcessState.Exited() {
|
if cmd.ProcessState != nil && cmd.ProcessState.Exited() {
|
||||||
*ret = cmd.ProcessState.ExitCode()
|
ret.Store(int32(cmd.ProcessState.ExitCode()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,13 +94,14 @@ func init() {
|
|||||||
|
|
||||||
flag.Var(&services, "L", "service list")
|
flag.Var(&services, "L", "service list")
|
||||||
flag.Var(&nodes, "F", "chain node list")
|
flag.Var(&nodes, "F", "chain node list")
|
||||||
flag.StringVar(&cfgFile, "C", "", "configuration file")
|
flag.Var(&cfgFiles, "C", "config file(s), URL(s), or inline JSON")
|
||||||
flag.BoolVar(&printVersion, "V", false, "print version")
|
flag.BoolVar(&printVersion, "V", false, "print version")
|
||||||
flag.StringVar(&outputFormat, "O", "", "output format, one of yaml|json format")
|
flag.StringVar(&outputFormat, "O", "", "output format, one of yaml|json format")
|
||||||
flag.BoolVar(&debug, "D", false, "debug mode")
|
flag.BoolVar(&debug, "D", false, "debug mode")
|
||||||
flag.BoolVar(&trace, "DD", false, "trace mode")
|
flag.BoolVar(&trace, "DD", false, "trace mode")
|
||||||
flag.StringVar(&apiAddr, "api", "", "api service address")
|
flag.StringVar(&apiAddr, "api", "", "api service address")
|
||||||
flag.StringVar(&metricsAddr, "metrics", "", "metrics service address")
|
flag.StringVar(&metricsAddr, "metrics", "", "metrics service address")
|
||||||
|
flag.DurationVar(&reload, "R", 0, "auto reload period (e.g. 30s, 1m)")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
if printVersion {
|
if printVersion {
|
||||||
|
|||||||
+22
-3
@@ -8,6 +8,7 @@ import (
|
|||||||
"os/signal"
|
"os/signal"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/auth"
|
"github.com/go-gost/core/auth"
|
||||||
"github.com/go-gost/core/logger"
|
"github.com/go-gost/core/logger"
|
||||||
@@ -34,7 +35,7 @@ type program struct {
|
|||||||
|
|
||||||
func (p *program) Init(env svc.Environment) error {
|
func (p *program) Init(env svc.Environment) error {
|
||||||
parser.Init(parser.Args{
|
parser.Init(parser.Args{
|
||||||
CfgFile: cfgFile,
|
CfgFiles: cfgFiles,
|
||||||
Services: services,
|
Services: services,
|
||||||
Nodes: nodes,
|
Nodes: nodes,
|
||||||
Debug: debug,
|
Debug: debug,
|
||||||
@@ -61,6 +62,12 @@ func (p *program) Start() error {
|
|||||||
|
|
||||||
config.Set(cfg)
|
config.Set(cfg)
|
||||||
|
|
||||||
|
// Enable metrics before loading services so that listener wrappers
|
||||||
|
// can observe the enabled state at Init time.
|
||||||
|
if cfg.Metrics != nil && cfg.Metrics.Addr != "" {
|
||||||
|
xmetrics.Enable(true)
|
||||||
|
}
|
||||||
|
|
||||||
if err := loader.Load(cfg); err != nil {
|
if err := loader.Load(cfg); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -120,8 +127,6 @@ func (p *program) run(cfg *config.Config) error {
|
|||||||
|
|
||||||
p.srvMetrics = s
|
p.srvMetrics = s
|
||||||
|
|
||||||
xmetrics.Enable(true)
|
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
@@ -193,6 +198,13 @@ func (p *program) reload(ctx context.Context) {
|
|||||||
c := make(chan os.Signal, 1)
|
c := make(chan os.Signal, 1)
|
||||||
signal.Notify(c, syscall.SIGHUP)
|
signal.Notify(c, syscall.SIGHUP)
|
||||||
|
|
||||||
|
var ticker <-chan time.Time
|
||||||
|
if reload > 0 {
|
||||||
|
t := time.NewTicker(reload)
|
||||||
|
defer t.Stop()
|
||||||
|
ticker = t.C
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-c:
|
case <-c:
|
||||||
@@ -202,6 +214,13 @@ func (p *program) reload(ctx context.Context) {
|
|||||||
logger.Default().Info("config reloaded")
|
logger.Default().Info("config reloaded")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case <-ticker:
|
||||||
|
if err := p.reloadConfig(); err != nil {
|
||||||
|
logger.Default().Errorf("auto reload: %v", err)
|
||||||
|
} else {
|
||||||
|
logger.Default().Debug("config auto reloaded")
|
||||||
|
}
|
||||||
|
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import (
|
|||||||
_ "github.com/go-gost/x/connector/tcp"
|
_ "github.com/go-gost/x/connector/tcp"
|
||||||
_ "github.com/go-gost/x/connector/tunnel"
|
_ "github.com/go-gost/x/connector/tunnel"
|
||||||
_ "github.com/go-gost/x/connector/unix"
|
_ "github.com/go-gost/x/connector/unix"
|
||||||
_ "github.com/go-gost/x/connector/masque"
|
|
||||||
|
|
||||||
// Register dialers
|
// Register dialers
|
||||||
_ "github.com/go-gost/x/dialer/direct"
|
_ "github.com/go-gost/x/dialer/direct"
|
||||||
@@ -47,6 +46,7 @@ import (
|
|||||||
_ "github.com/go-gost/x/dialer/tls"
|
_ "github.com/go-gost/x/dialer/tls"
|
||||||
_ "github.com/go-gost/x/dialer/udp"
|
_ "github.com/go-gost/x/dialer/udp"
|
||||||
_ "github.com/go-gost/x/dialer/unix"
|
_ "github.com/go-gost/x/dialer/unix"
|
||||||
|
_ "github.com/go-gost/x/dialer/utls"
|
||||||
_ "github.com/go-gost/x/dialer/ws"
|
_ "github.com/go-gost/x/dialer/ws"
|
||||||
|
|
||||||
// Register handlers
|
// Register handlers
|
||||||
@@ -101,7 +101,9 @@ import (
|
|||||||
_ "github.com/go-gost/x/listener/redirect/udp"
|
_ "github.com/go-gost/x/listener/redirect/udp"
|
||||||
_ "github.com/go-gost/x/listener/rtcp"
|
_ "github.com/go-gost/x/listener/rtcp"
|
||||||
_ "github.com/go-gost/x/listener/rudp"
|
_ "github.com/go-gost/x/listener/rudp"
|
||||||
|
_ "github.com/go-gost/x/listener/runix"
|
||||||
_ "github.com/go-gost/x/listener/serial"
|
_ "github.com/go-gost/x/listener/serial"
|
||||||
|
_ "github.com/go-gost/x/listener/stdio"
|
||||||
_ "github.com/go-gost/x/listener/ssh"
|
_ "github.com/go-gost/x/listener/ssh"
|
||||||
_ "github.com/go-gost/x/listener/sshd"
|
_ "github.com/go-gost/x/listener/sshd"
|
||||||
_ "github.com/go-gost/x/listener/tap"
|
_ "github.com/go-gost/x/listener/tap"
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ module github.com/go-gost/gost
|
|||||||
go 1.26.3
|
go 1.26.3
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/go-gost/core v0.4.0
|
github.com/go-gost/core v0.4.3
|
||||||
github.com/go-gost/x v0.10.3
|
github.com/go-gost/x v0.12.5
|
||||||
github.com/judwhite/go-svc v1.2.1
|
github.com/judwhite/go-svc v1.2.1
|
||||||
|
github.com/moby/moby/client v0.4.0
|
||||||
github.com/stretchr/testify v1.11.1
|
github.com/stretchr/testify v1.11.1
|
||||||
github.com/testcontainers/testcontainers-go v0.42.0
|
github.com/testcontainers/testcontainers-go v0.42.0
|
||||||
)
|
)
|
||||||
@@ -16,6 +17,7 @@ require (
|
|||||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||||
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
|
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
|
||||||
github.com/alessio/shellescape v1.4.1 // indirect
|
github.com/alessio/shellescape v1.4.1 // indirect
|
||||||
|
github.com/andybalholm/brotli v1.0.6 // indirect
|
||||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect
|
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/bytedance/sonic v1.11.6 // indirect
|
github.com/bytedance/sonic v1.11.6 // indirect
|
||||||
@@ -48,7 +50,7 @@ require (
|
|||||||
github.com/go-gost/gosocks4 v0.1.0 // indirect
|
github.com/go-gost/gosocks4 v0.1.0 // indirect
|
||||||
github.com/go-gost/gosocks5 v0.5.0 // indirect
|
github.com/go-gost/gosocks5 v0.5.0 // indirect
|
||||||
github.com/go-gost/plugin v0.3.0 // indirect
|
github.com/go-gost/plugin v0.3.0 // indirect
|
||||||
github.com/go-gost/relay v0.6.0 // indirect
|
github.com/go-gost/relay v0.6.1 // indirect
|
||||||
github.com/go-gost/tls-dissector v0.2.0 // indirect
|
github.com/go-gost/tls-dissector v0.2.0 // indirect
|
||||||
github.com/go-logr/logr v1.4.3 // indirect
|
github.com/go-logr/logr v1.4.3 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
@@ -83,7 +85,6 @@ require (
|
|||||||
github.com/moby/docker-image-spec v1.3.1 // indirect
|
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||||
github.com/moby/go-archive v0.2.0 // indirect
|
github.com/moby/go-archive v0.2.0 // indirect
|
||||||
github.com/moby/moby/api v1.54.1 // indirect
|
github.com/moby/moby/api v1.54.1 // indirect
|
||||||
github.com/moby/moby/client v0.4.0 // indirect
|
|
||||||
github.com/moby/patternmatcher v0.6.1 // indirect
|
github.com/moby/patternmatcher v0.6.1 // indirect
|
||||||
github.com/moby/sys/sequential v0.6.0 // indirect
|
github.com/moby/sys/sequential v0.6.0 // indirect
|
||||||
github.com/moby/sys/user v0.4.0 // indirect
|
github.com/moby/sys/user v0.4.0 // indirect
|
||||||
@@ -107,14 +108,17 @@ require (
|
|||||||
github.com/prometheus/common v0.48.0 // indirect
|
github.com/prometheus/common v0.48.0 // indirect
|
||||||
github.com/prometheus/procfs v0.12.0 // indirect
|
github.com/prometheus/procfs v0.12.0 // indirect
|
||||||
github.com/quic-go/qpack v0.6.0 // indirect
|
github.com/quic-go/qpack v0.6.0 // indirect
|
||||||
github.com/quic-go/quic-go v0.59.0 // indirect
|
github.com/quic-go/quic-go v0.59.1 // indirect
|
||||||
github.com/quic-go/webtransport-go v0.10.0 // indirect
|
github.com/quic-go/webtransport-go v0.10.0 // indirect
|
||||||
|
github.com/refraction-networking/utls v1.8.2 // indirect
|
||||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
|
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
|
||||||
github.com/rs/xid v1.3.0 // indirect
|
github.com/rs/xid v1.3.0 // indirect
|
||||||
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||||
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||||
github.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740 // indirect
|
github.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740 // indirect
|
||||||
|
github.com/shirou/gopsutil/v3 v3.24.5 // indirect
|
||||||
github.com/shirou/gopsutil/v4 v4.26.3 // indirect
|
github.com/shirou/gopsutil/v4 v4.26.3 // indirect
|
||||||
|
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||||
github.com/sirupsen/logrus v1.9.4 // indirect
|
github.com/sirupsen/logrus v1.9.4 // indirect
|
||||||
github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 // indirect
|
github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 // indirect
|
||||||
github.com/sourcegraph/conc v0.3.0 // indirect
|
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAu
|
|||||||
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
|
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
|
||||||
github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0=
|
github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0=
|
||||||
github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
|
github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
|
||||||
|
github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI=
|
||||||
|
github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
|
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
|
||||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||||
@@ -81,8 +83,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE
|
|||||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ=
|
github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ=
|
||||||
github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
|
github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
|
||||||
github.com/go-gost/core v0.4.0 h1:jLuIMO7ZMJX/BDCYLrYXAmIykT+HkqEuzaTeLMdrY1c=
|
github.com/go-gost/core v0.4.3 h1:9VEHRzuSq/MVdDZYrp/TtVG0+0r6NVGUQDXsJozrvJs=
|
||||||
github.com/go-gost/core v0.4.0/go.mod h1:WGI43jOka7FAsSAwi/fSMaqxdR+E339ycb4NBGlFr6A=
|
github.com/go-gost/core v0.4.3/go.mod h1:WGI43jOka7FAsSAwi/fSMaqxdR+E339ycb4NBGlFr6A=
|
||||||
github.com/go-gost/go-shadowsocks2 v0.1.3 h1:6CUZLp+mTWXnKP2aK8/Z9ZP+ERMX9gSbywmPu4kGX/A=
|
github.com/go-gost/go-shadowsocks2 v0.1.3 h1:6CUZLp+mTWXnKP2aK8/Z9ZP+ERMX9gSbywmPu4kGX/A=
|
||||||
github.com/go-gost/go-shadowsocks2 v0.1.3/go.mod h1:866zFNNI3He6Wef1M/IvAjTal74WhcfKfBgRpTlkKys=
|
github.com/go-gost/go-shadowsocks2 v0.1.3/go.mod h1:866zFNNI3He6Wef1M/IvAjTal74WhcfKfBgRpTlkKys=
|
||||||
github.com/go-gost/gosocks4 v0.1.0 h1:eAzev6qw4fzkFQKC9uCHLVNnnPdHyqCggbnfNN80Pmk=
|
github.com/go-gost/gosocks4 v0.1.0 h1:eAzev6qw4fzkFQKC9uCHLVNnnPdHyqCggbnfNN80Pmk=
|
||||||
@@ -91,12 +93,12 @@ github.com/go-gost/gosocks5 v0.5.0 h1:YE37l1MJwde8diIQdynStqogMotG5enoTdborhA5yi
|
|||||||
github.com/go-gost/gosocks5 v0.5.0/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4=
|
github.com/go-gost/gosocks5 v0.5.0/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4=
|
||||||
github.com/go-gost/plugin v0.3.0 h1:pmll8nNd9PX92BWMB5+b2y2SEkBAWJLxD2ANfX+WHuw=
|
github.com/go-gost/plugin v0.3.0 h1:pmll8nNd9PX92BWMB5+b2y2SEkBAWJLxD2ANfX+WHuw=
|
||||||
github.com/go-gost/plugin v0.3.0/go.mod h1:oN23l+yGDCIP9G3KnDl/I/0zVGOobZUDCB2Z5yYYXts=
|
github.com/go-gost/plugin v0.3.0/go.mod h1:oN23l+yGDCIP9G3KnDl/I/0zVGOobZUDCB2Z5yYYXts=
|
||||||
github.com/go-gost/relay v0.6.0 h1:o8r0B3eTw8Rwwent+5x5Cw1g4AyNUl4hNqiyDJXkFvA=
|
github.com/go-gost/relay v0.6.1 h1:7SqnHFbY8x/DzvjpK03a5zcVH9+TbJAcnW/RT6s1ecc=
|
||||||
github.com/go-gost/relay v0.6.0/go.mod h1:Dku0f5sfjOClrZFiDmQUrYYJ4uof7rnkCUBfsl0PSAI=
|
github.com/go-gost/relay v0.6.1/go.mod h1:Dku0f5sfjOClrZFiDmQUrYYJ4uof7rnkCUBfsl0PSAI=
|
||||||
github.com/go-gost/tls-dissector v0.2.0 h1:9tE6WOzzpurATTBWn60DU4R8gibpGNY8/qVcc1SicVg=
|
github.com/go-gost/tls-dissector v0.2.0 h1:9tE6WOzzpurATTBWn60DU4R8gibpGNY8/qVcc1SicVg=
|
||||||
github.com/go-gost/tls-dissector v0.2.0/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs=
|
github.com/go-gost/tls-dissector v0.2.0/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs=
|
||||||
github.com/go-gost/x v0.10.3 h1:GDLBxe5lJ8l2NIXN4Qe2Xu6BoQVOMggL2XeFtkcSE2M=
|
github.com/go-gost/x v0.12.5 h1:Rie3ZjHV8wkPN1u92a9EJuPZhT1t9AgN/0Kcdliox10=
|
||||||
github.com/go-gost/x v0.10.3/go.mod h1:TKBCBXi1Is+X/6KP0ek5nLkWW5ruQwjc6I069Lo19D0=
|
github.com/go-gost/x v0.12.5/go.mod h1:o9MyxAqIfcmIsWdcricmwE/yopz0W9NJItxbZqWe5AI=
|
||||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
||||||
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
@@ -252,10 +254,12 @@ github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k
|
|||||||
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
||||||
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
|
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
|
||||||
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
|
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
|
||||||
github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw=
|
github.com/quic-go/quic-go v0.59.1 h1:0Gmua0HW1Tv7ANR7hUYwRyD0MG5OJfgvYSZasGZzBic=
|
||||||
github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU=
|
github.com/quic-go/quic-go v0.59.1/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU=
|
||||||
github.com/quic-go/webtransport-go v0.10.0 h1:LqXXPOXuETY5Xe8ITdGisBzTYmUOy5eSj+9n4hLTjHI=
|
github.com/quic-go/webtransport-go v0.10.0 h1:LqXXPOXuETY5Xe8ITdGisBzTYmUOy5eSj+9n4hLTjHI=
|
||||||
github.com/quic-go/webtransport-go v0.10.0/go.mod h1:LeGIXr5BQKE3UsynwVBeQrU1TPrbh73MGoC6jd+V7ow=
|
github.com/quic-go/webtransport-go v0.10.0/go.mod h1:LeGIXr5BQKE3UsynwVBeQrU1TPrbh73MGoC6jd+V7ow=
|
||||||
|
github.com/refraction-networking/utls v1.8.2 h1:j4Q1gJj0xngdeH+Ox/qND11aEfhpgoEvV+S9iJ2IdQo=
|
||||||
|
github.com/refraction-networking/utls v1.8.2/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM=
|
||||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg=
|
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg=
|
||||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s=
|
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s=
|
||||||
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||||
@@ -268,8 +272,14 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g
|
|||||||
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
||||||
github.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740 h1:XdDrN8rtxdgW3TLn7pAuobI9PhPMbf6Geu9nvFzXn2E=
|
github.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740 h1:XdDrN8rtxdgW3TLn7pAuobI9PhPMbf6Geu9nvFzXn2E=
|
||||||
github.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740/go.mod h1:Oqfn/ykzqjeX00+7IuPyR7wGYgOzld0Tni6djgElacI=
|
github.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740/go.mod h1:Oqfn/ykzqjeX00+7IuPyR7wGYgOzld0Tni6djgElacI=
|
||||||
|
github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
|
||||||
|
github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
|
||||||
github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc=
|
github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc=
|
||||||
github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ=
|
github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ=
|
||||||
|
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
||||||
|
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
|
||||||
|
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
|
||||||
|
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
|
||||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||||
github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=
|
github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=
|
||||||
github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
|
github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
|
||||||
|
|||||||
@@ -13,12 +13,6 @@ import (
|
|||||||
|
|
||||||
var SharedNetworkName string
|
var SharedNetworkName string
|
||||||
|
|
||||||
var GostBinPath string
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
flag.StringVar(&GostBinPath, "gost-bin", "", "Path to a pre-built gost binary (skips compilation)")
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|||||||
@@ -2,15 +2,23 @@ package e2e
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"flag"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
|
"github.com/moby/moby/client"
|
||||||
"github.com/testcontainers/testcontainers-go"
|
"github.com/testcontainers/testcontainers-go"
|
||||||
"github.com/testcontainers/testcontainers-go/wait"
|
"github.com/testcontainers/testcontainers-go/wait"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var GostBinPath string
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
flag.StringVar(&GostBinPath, "gost-bin", "", "Path to a pre-built gost binary (skips compilation)")
|
||||||
|
}
|
||||||
|
|
||||||
type ConfigData struct {
|
type ConfigData struct {
|
||||||
ServerAddr string
|
ServerAddr string
|
||||||
}
|
}
|
||||||
@@ -70,6 +78,9 @@ func echoContainerRequest(_ context.Context, networkName string) testcontainers.
|
|||||||
Repo: "gost-e2e",
|
Repo: "gost-e2e",
|
||||||
Tag: "latest",
|
Tag: "latest",
|
||||||
KeepImage: true,
|
KeepImage: true,
|
||||||
|
BuildOptionsModifier: func(opts *client.ImageBuildOptions) {
|
||||||
|
opts.NetworkMode = "host"
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Networks: []string{networkName},
|
Networks: []string{networkName},
|
||||||
NetworkAliases: map[string][]string{
|
NetworkAliases: map[string][]string{
|
||||||
@@ -100,6 +111,9 @@ func udpEchoContainerRequest(_ context.Context, networkName string) testcontaine
|
|||||||
Repo: "gost-e2e",
|
Repo: "gost-e2e",
|
||||||
Tag: "latest",
|
Tag: "latest",
|
||||||
KeepImage: true,
|
KeepImage: true,
|
||||||
|
BuildOptionsModifier: func(opts *client.ImageBuildOptions) {
|
||||||
|
opts.NetworkMode = "host"
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Networks: []string{networkName},
|
Networks: []string{networkName},
|
||||||
NetworkAliases: map[string][]string{
|
NetworkAliases: map[string][]string{
|
||||||
@@ -134,6 +148,9 @@ func runGostContainer(ctx context.Context, networkName, yamlPath string, aliases
|
|||||||
Repo: "gost-e2e",
|
Repo: "gost-e2e",
|
||||||
Tag: "latest",
|
Tag: "latest",
|
||||||
KeepImage: true,
|
KeepImage: true,
|
||||||
|
BuildOptionsModifier: func(opts *client.ImageBuildOptions) {
|
||||||
|
opts.NetworkMode = "host"
|
||||||
|
},
|
||||||
},
|
},
|
||||||
ExposedPorts: exposedPorts,
|
ExposedPorts: exposedPorts,
|
||||||
// interal check for udp ports will be failed
|
// interal check for udp ports will be failed
|
||||||
|
|||||||
Reference in New Issue
Block a user