mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-06 18:06:36 +08:00
优化gost执行诊断时计入DNS解析时间的问题
This commit is contained in:
@@ -17,6 +17,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
version: ${{ env.VERSION }}
|
version: ${{ env.VERSION }}
|
||||||
should_build: ${{ steps.check-tag.outputs.should_build }}
|
should_build: ${{ steps.check-tag.outputs.should_build }}
|
||||||
|
should_build_gost: ${{ steps.check-tag.outputs.should_build_gost }}
|
||||||
tag_exists: ${{ steps.check-tag.outputs.tag_exists }}
|
tag_exists: ${{ steps.check-tag.outputs.tag_exists }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
@@ -27,23 +28,34 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "Current version: ${{ env.VERSION }}"
|
echo "Current version: ${{ env.VERSION }}"
|
||||||
|
|
||||||
- name: Check if tag exists
|
- name: Check if tag exists and detect changes
|
||||||
id: check-tag
|
id: check-tag
|
||||||
run: |
|
run: |
|
||||||
if git rev-parse "${{ env.VERSION }}" >/dev/null 2>&1; then
|
if git rev-parse "${{ env.VERSION }}" >/dev/null 2>&1; then
|
||||||
echo "Tag ${{ env.VERSION }} already exists, will only update files"
|
echo "Tag ${{ env.VERSION }} already exists"
|
||||||
echo "should_build=false" >> $GITHUB_OUTPUT
|
|
||||||
echo "tag_exists=true" >> $GITHUB_OUTPUT
|
echo "tag_exists=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "should_build=false" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# 检查从tag到现在,go-gost目录下的文件是否有变化
|
||||||
|
TAG_COMMIT=$(git rev-list -n 1 "${{ env.VERSION }}")
|
||||||
|
if git diff --quiet $TAG_COMMIT HEAD -- go-gost/; then
|
||||||
|
echo "✅ GOST files unchanged since tag"
|
||||||
|
echo "should_build_gost=false" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "🔄 GOST files changed since tag, will rebuild GOST binary"
|
||||||
|
echo "should_build_gost=true" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "Tag ${{ env.VERSION }} does not exist, will build all components"
|
echo "Tag ${{ env.VERSION }} does not exist, will build all components"
|
||||||
echo "should_build=true" >> $GITHUB_OUTPUT
|
echo "should_build=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "should_build_gost=true" >> $GITHUB_OUTPUT
|
||||||
echo "tag_exists=false" >> $GITHUB_OUTPUT
|
echo "tag_exists=false" >> $GITHUB_OUTPUT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
build-gost:
|
build-gost:
|
||||||
name: Build & Compress GOST Binary
|
name: Build & Compress GOST Binary
|
||||||
needs: check-version
|
needs: check-version
|
||||||
if: needs.check-version.outputs.should_build == 'true'
|
if: needs.check-version.outputs.should_build_gost == 'true'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
@@ -245,10 +257,51 @@ jobs:
|
|||||||
|
|
||||||
echo "✅ 所有文件已上传到 Release ${VERSION}"
|
echo "✅ 所有文件已上传到 Release ${VERSION}"
|
||||||
|
|
||||||
|
update-release-gost:
|
||||||
|
name: Update GOST Binaries in Release
|
||||||
|
needs: [check-version, build-gost]
|
||||||
|
if: needs.check-version.outputs.should_build == 'false' && needs.check-version.outputs.should_build_gost == 'true'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Download GOST AMD64 binary
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: gost-binary-amd64
|
||||||
|
path: ./artifacts/amd64
|
||||||
|
|
||||||
|
- name: Download GOST ARM64 binary
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: gost-binary-arm64
|
||||||
|
path: ./artifacts/arm64
|
||||||
|
|
||||||
|
- name: Rename binaries
|
||||||
|
run: |
|
||||||
|
mv ./artifacts/amd64/gost-amd64 ./artifacts/gost-amd64
|
||||||
|
mv ./artifacts/arm64/gost-arm64 ./artifacts/gost-arm64
|
||||||
|
|
||||||
|
- name: Update GOST binaries in Release
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
run: |
|
||||||
|
VERSION="${{ needs.check-version.outputs.version }}"
|
||||||
|
|
||||||
|
echo "🔄 更新 Release ${VERSION} 中的 GOST 二进制文件..."
|
||||||
|
|
||||||
|
gh release upload "${VERSION}" ./artifacts/gost-amd64 --clobber
|
||||||
|
gh release upload "${VERSION}" ./artifacts/gost-arm64 --clobber
|
||||||
|
|
||||||
|
echo "✅ GOST 二进制文件更新完成!"
|
||||||
|
echo "ℹ️ Docker 镜像未重新构建"
|
||||||
|
|
||||||
update-release-files:
|
update-release-files:
|
||||||
name: Update Release Files Only
|
name: Update Release Files Only
|
||||||
needs: check-version
|
needs: check-version
|
||||||
if: needs.check-version.outputs.tag_exists == 'true'
|
if: needs.check-version.outputs.tag_exists == 'true' && needs.check-version.outputs.should_build == 'false' && needs.check-version.outputs.should_build_gost == 'false'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|||||||
@@ -1132,6 +1132,34 @@ func tcpPingHost(ip string, port int, count int, timeoutMs int) (float64, float6
|
|||||||
|
|
||||||
fmt.Printf("🔍 开始TCP ping测试: %s,次数: %d,超时: %dms\n", target, count, timeoutMs)
|
fmt.Printf("🔍 开始TCP ping测试: %s,次数: %d,超时: %dms\n", target, count, timeoutMs)
|
||||||
|
|
||||||
|
// 如果是域名,先解析一次DNS,避免每次连接都重新解析导致延迟累加
|
||||||
|
var resolvedIPs []string
|
||||||
|
if net.ParseIP(ip) == nil {
|
||||||
|
// 是域名,需要解析
|
||||||
|
fmt.Printf("🔍 检测到域名,正在解析DNS...\n")
|
||||||
|
dnsStart := time.Now()
|
||||||
|
|
||||||
|
addrs, err := net.LookupHost(ip)
|
||||||
|
dnsDuration := time.Since(dnsStart)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return 0, 100.0, fmt.Errorf("DNS解析失败: %v", err)
|
||||||
|
}
|
||||||
|
if len(addrs) == 0 {
|
||||||
|
return 0, 100.0, fmt.Errorf("DNS解析未返回任何IP地址")
|
||||||
|
}
|
||||||
|
|
||||||
|
resolvedIPs = addrs
|
||||||
|
fmt.Printf("✅ DNS解析完成 (%.2fms),解析到 %d 个IP: %v\n",
|
||||||
|
dnsDuration.Seconds()*1000, len(addrs), addrs)
|
||||||
|
|
||||||
|
// 使用第一个解析到的IP进行测试
|
||||||
|
target = net.JoinHostPort(addrs[0], fmt.Sprintf("%d", port))
|
||||||
|
fmt.Printf("🎯 使用IP地址进行测试: %s\n", target)
|
||||||
|
} else {
|
||||||
|
fmt.Printf("🎯 使用IP地址进行测试: %s\n", target)
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < count; i++ {
|
for i := 0; i < count; i++ {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user