mirror of
https://github.com/oneclickvirt/ecs.git
synced 2025-09-28 12:12:14 +08:00
Compare commits
41 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
89a99a7428 | ||
![]() |
c474c71091 | ||
![]() |
43b2c8aca3 | ||
![]() |
96117a040e | ||
![]() |
c5aeda45bd | ||
![]() |
0b2ac51f09 | ||
![]() |
ffe1b65a2b | ||
![]() |
a4bfd4d143 | ||
![]() |
edbcf1c245 | ||
![]() |
4c65417ea6 | ||
![]() |
2cf7484881 | ||
![]() |
d5da2a59b6 | ||
![]() |
372deb59eb | ||
![]() |
8e4c6dfd3e | ||
![]() |
8fc828d416 | ||
![]() |
8a3fbd79e6 | ||
![]() |
5628f1bb9c | ||
![]() |
cadbb2a45c | ||
![]() |
56d7560471 | ||
![]() |
75e7eb1b25 | ||
![]() |
24ba56cfa6 | ||
![]() |
ebefd64a3d | ||
![]() |
4d83ffea02 | ||
![]() |
01a4084462 | ||
![]() |
6674093425 | ||
![]() |
6d2e56b1ec | ||
![]() |
2a736d3e70 | ||
![]() |
d02383b8cb | ||
![]() |
0caba0ea60 | ||
![]() |
6f92b8a994 | ||
![]() |
cc34baf9e1 | ||
![]() |
84d8963684 | ||
![]() |
a94e9a6284 | ||
![]() |
06007c191f | ||
![]() |
d013b8f90c | ||
![]() |
42002fdae1 | ||
![]() |
d7628a5a57 | ||
![]() |
e5f3ca1ec3 | ||
![]() |
e70a295a5f | ||
![]() |
58821f2603 | ||
![]() |
33a656304b |
448
.github/workflows/build_binary.yaml
vendored
448
.github/workflows/build_binary.yaml
vendored
@@ -1,231 +1,28 @@
|
|||||||
name: Build and Release
|
name: Build and Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
tags:
|
tags:
|
||||||
- "v*.*.*"
|
- "v*.*.*"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
goreleaser:
|
||||||
name: Release Check And Build
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
# 1.20 是 Windows 7/8 Server 2008/2012 最后一个支持版本
|
||||||
|
image: goreleaser/goreleaser-cross:v1.20
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- run: |
|
||||||
uses: actions/checkout@v4
|
git config --global --add safe.directory /__w/ecs/ecs
|
||||||
with:
|
- name: Checkout
|
||||||
fetch-depth: 0
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Get latest tag
|
|
||||||
id: tag
|
|
||||||
run: |
|
|
||||||
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
||||||
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Generate changelog
|
|
||||||
id: changelog
|
|
||||||
run: |
|
|
||||||
TAG="${{ steps.tag.outputs.tag }}"
|
|
||||||
PREV_TAG=$(git describe --tags --abbrev=0 "$TAG^" 2>/dev/null || echo "")
|
|
||||||
if [ -z "$PREV_TAG" ]; then
|
|
||||||
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$TAG" | head -20)
|
|
||||||
else
|
|
||||||
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$PREV_TAG..$TAG")
|
|
||||||
fi
|
|
||||||
FULL_CHANGELOG="## Changelog"$'\n'"$CHANGELOG"
|
|
||||||
echo "$FULL_CHANGELOG" > changelog.txt
|
|
||||||
echo "changelog<<EOF" >> $GITHUB_OUTPUT
|
|
||||||
echo "$FULL_CHANGELOG" >> $GITHUB_OUTPUT
|
|
||||||
echo "EOF" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Create release if not exists
|
|
||||||
run: |
|
|
||||||
TAG="${{ steps.tag.outputs.tag }}"
|
|
||||||
RELEASE_EXISTS=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id // empty')
|
|
||||||
if [ -z "$RELEASE_EXISTS" ]; then
|
|
||||||
CHANGELOG_BODY=$(cat changelog.txt | jq -Rs .)
|
|
||||||
curl -s -X POST -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":$CHANGELOG_BODY,\"draft\":false,\"prerelease\":false}" \
|
|
||||||
"https://api.github.com/repos/${{ github.repository }}/releases" > /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Delete existing release assets
|
|
||||||
run: |
|
|
||||||
TAG="${{ steps.tag.outputs.tag }}"
|
|
||||||
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
|
||||||
if [ "$RELEASE_ID" != "null" ]; then
|
|
||||||
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets" | jq -r '.[] | .id')
|
|
||||||
for asset in $ASSETS; do
|
|
||||||
curl -s -X DELETE -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/assets/$asset"
|
|
||||||
done
|
|
||||||
sleep 30
|
|
||||||
fi
|
|
||||||
|
|
||||||
release-binary:
|
|
||||||
name: Release Go Binary
|
|
||||||
needs: build
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- goos: linux
|
|
||||||
goarch: amd64
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: x86_64-linux-gnu-gcc
|
|
||||||
cflags: "-O2 -static -fno-stack-protector"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: 386
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: x86_64-linux-gnu-gcc
|
|
||||||
cflags: "-m32 -O1 -march=i686 -mtune=generic -fno-stack-protector"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-multilib"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: arm64
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: aarch64-linux-gnu-gcc
|
|
||||||
cflags: "-O1 -fno-stack-protector"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-aarch64-linux-gnu"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: riscv64
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: riscv64-linux-gnu-gcc
|
|
||||||
cflags: "-O1 -fno-stack-protector"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-riscv64-linux-gnu"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: mips64
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: mips64-linux-gnuabi64-gcc
|
|
||||||
cflags: "-O1 -fno-stack-protector"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-mips64-linux-gnuabi64"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: mips64le
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: mips64el-linux-gnuabi64-gcc
|
|
||||||
cflags: "-O1 -fno-stack-protector"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-mips64el-linux-gnuabi64"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: ppc64le
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: powerpc64le-linux-gnu-gcc
|
|
||||||
cflags: "-O1 -fno-stack-protector"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-powerpc64le-linux-gnu"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: windows
|
|
||||||
goarch: amd64
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: x86_64-w64-mingw32-gcc
|
|
||||||
cflags: "-O2 -static-libgcc -static-libstdc++"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-mingw-w64-x86-64"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: windows
|
|
||||||
goarch: 386
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: i686-w64-mingw32-gcc
|
|
||||||
cflags: "-O2 -static-libgcc -static-libstdc++"
|
|
||||||
ldflags: "-extldflags=-static -s -w"
|
|
||||||
packages: "build-essential gcc-mingw-w64-i686"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: darwin
|
|
||||||
goarch: amd64
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: "clang --target=x86_64-apple-darwin"
|
|
||||||
cflags: "-O2 -arch x86_64 -mmacosx-version-min=10.12"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
requires_osxcross: true
|
|
||||||
|
|
||||||
- goos: darwin
|
|
||||||
goarch: arm64
|
|
||||||
cgo_enabled: "1"
|
|
||||||
cc: "clang --target=aarch64-apple-darwin"
|
|
||||||
cflags: "-O2 -arch arm64 -mmacosx-version-min=11.0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
requires_osxcross: true
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: arm
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: s390x
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: mips
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: mipsle
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: linux
|
|
||||||
goarch: ppc64
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: windows
|
|
||||||
goarch: arm64
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: freebsd
|
|
||||||
goarch: amd64
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
- goos: freebsd
|
|
||||||
goarch: arm64
|
|
||||||
cgo_enabled: "0"
|
|
||||||
ldflags: "-s -w"
|
|
||||||
runner: ubuntu-latest
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.runner }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v5
|
uses: actions/setup-go@v4
|
||||||
with:
|
with:
|
||||||
go-version: 1.23.4
|
go-version: 1.24.5
|
||||||
|
|
||||||
- name: Configure Git for Private Modules
|
- name: Configure Git for Private Modules
|
||||||
run: |
|
run: |
|
||||||
@@ -234,211 +31,44 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GHT }}
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
|
|
||||||
- name: Install cross-compilation tools
|
- name: Run GoReleaser
|
||||||
if: matrix.runner != 'macos-latest'
|
uses: goreleaser/goreleaser-action@v6
|
||||||
run: |
|
with:
|
||||||
sudo apt-get update -qq
|
distribution: goreleaser
|
||||||
case "${{ matrix.goos }}-${{ matrix.goarch }}" in
|
# version: latest
|
||||||
linux-386)
|
version: '~> v2'
|
||||||
sudo apt-get install -y build-essential gcc-multilib g++-multilib ;;
|
args: release
|
||||||
linux-arm64)
|
env:
|
||||||
sudo apt-get install -y build-essential gcc-aarch64-linux-gnu ;;
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
linux-riscv64)
|
GOPRIVATE: github.com/oneclickvirt/security
|
||||||
sudo apt-get install -y build-essential gcc-riscv64-linux-gnu ;;
|
|
||||||
linux-mips64)
|
|
||||||
sudo apt-get install -y build-essential gcc-mips64-linux-gnuabi64 ;;
|
|
||||||
linux-mips64le)
|
|
||||||
sudo apt-get install -y build-essential gcc-mips64el-linux-gnuabi64 ;;
|
|
||||||
linux-ppc64le)
|
|
||||||
sudo apt-get install -y build-essential gcc-powerpc64le-linux-gnu ;;
|
|
||||||
windows-amd64|windows-386)
|
|
||||||
sudo apt-get install -y build-essential gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 ;;
|
|
||||||
*)
|
|
||||||
sudo apt-get install -y build-essential ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
- name: Install osxcross for Darwin
|
- name: Update goecs.sh with new version
|
||||||
if: matrix.requires_osxcross == true
|
|
||||||
run: |
|
run: |
|
||||||
git clone --depth=1 https://github.com/tpoechtrager/osxcross.git
|
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
|
||||||
cd osxcross
|
VERSION="${GITHUB_REF#refs/tags/v}"
|
||||||
wget -nc https://github.com/joseluisq/macosx-sdks/releases/download/12.3/MacOSX12.3.sdk.tar.xz
|
|
||||||
mv MacOSX12.3.sdk.tar.xz tarballs/
|
|
||||||
UNATTENDED=yes OSX_VERSION_MIN=10.12 ./build.sh
|
|
||||||
echo "$PWD/target/bin" >> $GITHUB_PATH
|
|
||||||
echo "OSXCROSS_ROOT=$PWD" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Get latest tag
|
|
||||||
id: tag
|
|
||||||
run: |
|
|
||||||
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
||||||
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build Binary
|
|
||||||
run: |
|
|
||||||
go clean -cache -modcache -testcache
|
|
||||||
export CGO_ENABLED=${{ matrix.cgo_enabled }}
|
|
||||||
export GOOS=${{ matrix.goos }}
|
|
||||||
export GOARCH=${{ matrix.goarch }}
|
|
||||||
if [[ -n "${{ matrix.goarm }}" ]]; then
|
|
||||||
export GOARM=${{ matrix.goarm }}
|
|
||||||
fi
|
|
||||||
if [[ -n "${{ matrix.gomips }}" ]]; then
|
|
||||||
export GOMIPS=${{ matrix.gomips }}
|
|
||||||
fi
|
|
||||||
if [[ "${{ matrix.cgo_enabled }}" == "1" && "${{ matrix.goos }}" == "darwin" ]]; then
|
|
||||||
if [[ "${{ matrix.goarch }}" == "amd64" ]]; then
|
|
||||||
export CC="x86_64-apple-darwin21.4-clang"
|
|
||||||
export CXX="x86_64-apple-darwin21.4-clang++"
|
|
||||||
elif [[ "${{ matrix.goarch }}" == "arm64" ]]; then
|
|
||||||
export CC="aarch64-apple-darwin21.4-clang"
|
|
||||||
export CXX="aarch64-apple-darwin21.4-clang++"
|
|
||||||
fi
|
|
||||||
export CGO_CFLAGS="${{ matrix.cflags }}"
|
|
||||||
export CGO_LDFLAGS="${{ matrix.ldflags }}"
|
|
||||||
export OSXCROSS_ROOT="${OSXCROSS_ROOT}"
|
|
||||||
elif [[ "${{ matrix.cgo_enabled }}" == "1" && "${{ matrix.runner }}" != "macos-latest" ]]; then
|
|
||||||
export CC="${{ matrix.cc }}"
|
|
||||||
export CGO_CFLAGS="${{ matrix.cflags }}"
|
|
||||||
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
|
||||||
export CGO_LDFLAGS="-static-libgcc -static-libstdc++"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [[ "${{ matrix.cgo_enabled }}" == "1" ]]; then
|
|
||||||
echo 'int main() { return 0; }' > test.c
|
|
||||||
$CC $CGO_CFLAGS test.c -o test || exit 1
|
|
||||||
rm -f test.c test
|
|
||||||
fi
|
|
||||||
rm -rf vendor/
|
|
||||||
go mod download
|
|
||||||
go mod tidy
|
|
||||||
mkdir -p bin
|
|
||||||
BINARY_NAME="goecs"
|
|
||||||
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
|
||||||
BINARY_NAME="${BINARY_NAME}.exe"
|
|
||||||
fi
|
|
||||||
LDFLAGS="-s -w -X main.version=${{ steps.tag.outputs.version }} -X main.arch=${{ matrix.goarch }}"
|
|
||||||
if [[ "${{ matrix.cgo_enabled }}" == "1" ]]; then
|
|
||||||
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
|
||||||
env CGO_ENABLED=1 GOOS=$GOOS GOARCH=$GOARCH CC="$CC" CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
|
|
||||||
go build -a -o bin/$BINARY_NAME -ldflags="$LDFLAGS" -trimpath ./
|
|
||||||
else
|
else
|
||||||
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
VERSION=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.1.37")
|
||||||
env CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH \
|
|
||||||
go build -o bin/$BINARY_NAME -ldflags="$LDFLAGS" -trimpath ./
|
|
||||||
fi
|
fi
|
||||||
[[ -f "bin/$BINARY_NAME" ]] || exit 1
|
echo "Using version: $VERSION"
|
||||||
|
FILE="goecs.sh"
|
||||||
- name: Create ZIP archive
|
|
||||||
run: |
|
|
||||||
cd bin
|
|
||||||
BINARY_NAME="goecs"
|
|
||||||
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
|
||||||
BINARY_NAME="${BINARY_NAME}.exe"
|
|
||||||
fi
|
|
||||||
ZIP_NAME="goecs_${{ matrix.goos }}_${{ matrix.goarch }}"
|
|
||||||
if [[ -n "${{ matrix.goarm }}" ]]; then
|
|
||||||
ZIP_NAME="${ZIP_NAME}v${{ matrix.goarm }}"
|
|
||||||
fi
|
|
||||||
if [[ -n "${{ matrix.gomips }}" ]]; then
|
|
||||||
ZIP_NAME="${ZIP_NAME}_${{ matrix.gomips }}"
|
|
||||||
fi
|
|
||||||
ZIP_NAME="${ZIP_NAME}.zip"
|
|
||||||
zip "$ZIP_NAME" "$BINARY_NAME"
|
|
||||||
|
|
||||||
- name: Upload to Release
|
|
||||||
run: |
|
|
||||||
TAG="${{ steps.tag.outputs.tag }}"
|
|
||||||
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
|
||||||
cd bin
|
|
||||||
for file in *.zip; do
|
|
||||||
if [[ -f "$file" ]]; then
|
|
||||||
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
|
||||||
-H "Content-Type: application/zip" \
|
|
||||||
--data-binary @"$file" \
|
|
||||||
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$file"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
checksums:
|
|
||||||
name: Generate Checksums
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: release-binary
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Get latest tag
|
|
||||||
id: tag
|
|
||||||
run: |
|
|
||||||
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Download release assets
|
|
||||||
run: |
|
|
||||||
TAG="${{ steps.tag.outputs.tag }}"
|
|
||||||
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
|
||||||
mkdir -p assets
|
|
||||||
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets")
|
|
||||||
echo "$ASSETS" | jq -r '.[] | select(.name | endswith(".zip")) | .browser_download_url' | while read url; do
|
|
||||||
filename=$(basename "$url")
|
|
||||||
curl -L -H "Authorization: Bearer ${{ secrets.GHT }}" "$url" -o "assets/$filename"
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Generate checksums
|
|
||||||
run: |
|
|
||||||
cd assets
|
|
||||||
sha256sum *.zip > checksums.txt
|
|
||||||
if [[ -f "../goecs.sh" ]]; then
|
|
||||||
sha256sum ../goecs.sh >> checksums.txt
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Upload checksums
|
|
||||||
run: |
|
|
||||||
TAG="${{ steps.tag.outputs.tag }}"
|
|
||||||
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
|
||||||
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
|
||||||
-H "Content-Type: text/plain" \
|
|
||||||
--data-binary @assets/checksums.txt \
|
|
||||||
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=checksums.txt"
|
|
||||||
|
|
||||||
update-script:
|
|
||||||
name: Update Script Version
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: checksums
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Get latest tag
|
|
||||||
id: tag
|
|
||||||
run: |
|
|
||||||
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
||||||
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Update goecs.sh version
|
|
||||||
run: |
|
|
||||||
VERSION="${{ steps.tag.outputs.version }}"
|
|
||||||
BRANCH="master"
|
BRANCH="master"
|
||||||
git config --global user.name "github-actions[bot]"
|
git config --global user.name "github-actions[bot]"
|
||||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
git config --global --unset url."git@github.com:".insteadOf || true
|
git config --global --unset url."git@github.com:".insteadOf || true
|
||||||
git fetch origin $BRANCH
|
git fetch origin $BRANCH
|
||||||
git checkout $BRANCH
|
git checkout $BRANCH
|
||||||
if [ -f "goecs.sh" ]; then
|
if [ ! -f "$FILE" ]; then
|
||||||
sed -i "s/\(_yellow \"Unable to get version info, using default version \).*\(\".*\)/\1$VERSION\2/" "goecs.sh"
|
echo "Error: $FILE not found"
|
||||||
sed -i "s/\(ECS_VERSION=\"\).*\(\"\)/\1$VERSION\2/" "goecs.sh"
|
exit 1
|
||||||
if ! git diff --quiet "goecs.sh"; then
|
|
||||||
git add "goecs.sh"
|
|
||||||
git commit -m "chore: update ECS_VERSION to $VERSION in goecs.sh"
|
|
||||||
git push origin $BRANCH
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
sed -i "s/\(_yellow \"Unable to get version info, using default version \).*\(\".*\)/\1$VERSION\2/" "$FILE"
|
||||||
|
sed -i "s/\(ECS_VERSION=\"\).*\(\"\)/\1$VERSION\2/" "$FILE"
|
||||||
|
if git diff --quiet "$FILE"; then
|
||||||
|
echo "No changes detected in $FILE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
git add "$FILE"
|
||||||
|
git commit -m "chore: update ECS_VERSION to $VERSION in goecs.sh"
|
||||||
|
git push origin $BRANCH
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GHT }}
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
|
467
.github/workflows/build_binary_cgo.old
vendored
Normal file
467
.github/workflows/build_binary_cgo.old
vendored
Normal file
@@ -0,0 +1,467 @@
|
|||||||
|
name: Build and Release
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
tags:
|
||||||
|
- "v*.*.*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Release Check And Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Generate changelog
|
||||||
|
id: changelog
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
PREV_TAG=$(git describe --tags --abbrev=0 "$TAG^" 2>/dev/null || echo "")
|
||||||
|
if [ -z "$PREV_TAG" ]; then
|
||||||
|
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$TAG" | head -20)
|
||||||
|
else
|
||||||
|
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$PREV_TAG..$TAG")
|
||||||
|
fi
|
||||||
|
FULL_CHANGELOG="## Changelog"$'\n'"$CHANGELOG"
|
||||||
|
echo "$FULL_CHANGELOG" > changelog.txt
|
||||||
|
echo "changelog<<EOF" >> $GITHUB_OUTPUT
|
||||||
|
echo "$FULL_CHANGELOG" >> $GITHUB_OUTPUT
|
||||||
|
echo "EOF" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create or update release
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
CHANGELOG_BODY=$(cat changelog.txt | jq -Rs .)
|
||||||
|
RELEASE_EXISTS=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id // empty')
|
||||||
|
if [ -z "$RELEASE_EXISTS" ]; then
|
||||||
|
curl -s -X POST -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":$CHANGELOG_BODY,\"draft\":false,\"prerelease\":false}" \
|
||||||
|
"https://api.github.com/repos/${{ github.repository }}/releases"
|
||||||
|
else
|
||||||
|
curl -s -X PATCH -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"body\":$CHANGELOG_BODY}" \
|
||||||
|
"https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_EXISTS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Delete existing release assets
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
if [ "$RELEASE_ID" != "null" ]; then
|
||||||
|
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets" | jq -r '.[] | .id')
|
||||||
|
for asset in $ASSETS; do
|
||||||
|
curl -s -X DELETE -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/assets/$asset"
|
||||||
|
done
|
||||||
|
sleep 30
|
||||||
|
fi
|
||||||
|
|
||||||
|
release-binary:
|
||||||
|
name: Release Go Binary
|
||||||
|
needs: build
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- goos: linux
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: x86_64-linux-gnu-gcc
|
||||||
|
cflags: "-O2 -static -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: 386
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: x86_64-linux-gnu-gcc
|
||||||
|
cflags: "-m32 -O1 -march=i686 -mtune=generic -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-multilib"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: aarch64-linux-gnu-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-aarch64-linux-gnu"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: riscv64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: riscv64-linux-gnu-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-riscv64-linux-gnu"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: mips64-linux-gnuabi64-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mips64-linux-gnuabi64"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips64le
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: mips64el-linux-gnuabi64-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mips64el-linux-gnuabi64"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: ppc64le
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: powerpc64le-linux-gnu-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-powerpc64le-linux-gnu"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: arm
|
||||||
|
# goarm: 7
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: arm-linux-gnueabihf-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-arm-linux-gnueabihf"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: x86_64-w64-mingw32-gcc
|
||||||
|
cflags: "-O2 -static-libgcc -static-libstdc++"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mingw-w64-x86-64"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: 386
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: i686-w64-mingw32-gcc
|
||||||
|
cflags: "-O2 -static-libgcc -static-libstdc++"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mingw-w64-i686"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: darwin
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: macos-latest
|
||||||
|
|
||||||
|
- goos: darwin
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: macos-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: s390x
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mipsle
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: ppc64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.runner }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: 1.24.5
|
||||||
|
|
||||||
|
- name: Configure Git for Private Modules
|
||||||
|
run: |
|
||||||
|
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
|
||||||
|
git config --global url."git@github.com:".insteadOf "https://github.com/"
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
|
|
||||||
|
- name: Install cross-compilation tools
|
||||||
|
if: matrix.runner != 'macos-latest'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
case "${{ matrix.goos }}-${{ matrix.goarch }}" in
|
||||||
|
linux-386)
|
||||||
|
sudo apt-get install -y build-essential gcc-multilib g++-multilib ;;
|
||||||
|
linux-arm64)
|
||||||
|
sudo apt-get install -y build-essential gcc-aarch64-linux-gnu ;;
|
||||||
|
linux-riscv64)
|
||||||
|
sudo apt-get install -y build-essential gcc-riscv64-linux-gnu ;;
|
||||||
|
linux-mips64)
|
||||||
|
sudo apt-get install -y build-essential gcc-mips64-linux-gnuabi64 ;;
|
||||||
|
linux-mips64le)
|
||||||
|
sudo apt-get install -y build-essential gcc-mips64el-linux-gnuabi64 ;;
|
||||||
|
linux-ppc64le)
|
||||||
|
sudo apt-get install -y build-essential gcc-powerpc64le-linux-gnu ;;
|
||||||
|
linux-arm)
|
||||||
|
sudo apt-get install -y build-essential gcc-arm-linux-gnueabihf ;;
|
||||||
|
windows-amd64|windows-386)
|
||||||
|
sudo apt-get install -y build-essential gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 ;;
|
||||||
|
*)
|
||||||
|
sudo apt-get install -y build-essential ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build Binary
|
||||||
|
env:
|
||||||
|
CGO_ENABLED: ${{ matrix.cgo_enabled }}
|
||||||
|
GOOS: ${{ matrix.goos }}
|
||||||
|
GOARCH: ${{ matrix.goarch }}
|
||||||
|
CC: ${{ matrix.cc }}
|
||||||
|
CGO_CFLAGS: ${{ matrix.cflags }}
|
||||||
|
CGO_LDFLAGS: ${{ matrix.ldflags }}
|
||||||
|
run: |
|
||||||
|
go clean -cache -modcache -testcache
|
||||||
|
|
||||||
|
# 设置额外的环境变量
|
||||||
|
if [[ -n "${{ matrix.goarm }}" ]]; then
|
||||||
|
export GOARM=${{ matrix.goarm }}
|
||||||
|
fi
|
||||||
|
if [[ -n "${{ matrix.gomips }}" ]]; then
|
||||||
|
export GOMIPS=${{ matrix.gomips }}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 针对 Darwin 的特殊处理
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" && "${{ matrix.goos }}" == "darwin" ]]; then
|
||||||
|
if [[ "${{ matrix.goarch }}" == "amd64" ]]; then
|
||||||
|
export CC="x86_64-apple-darwin21.4-clang"
|
||||||
|
export CXX="x86_64-apple-darwin21.4-clang++"
|
||||||
|
elif [[ "${{ matrix.goarch }}" == "arm64" ]]; then
|
||||||
|
export CC="aarch64-apple-darwin21.4-clang"
|
||||||
|
export CXX="aarch64-apple-darwin21.4-clang++"
|
||||||
|
fi
|
||||||
|
export OSXCROSS_ROOT="${OSXCROSS_ROOT}"
|
||||||
|
elif [[ "${{ matrix.cgo_enabled }}" == "1" && "${{ matrix.runner }}" != "macos-latest" ]]; then
|
||||||
|
# 对于 Windows 的特殊处理
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
export CGO_LDFLAGS="-static-libgcc -static-libstdc++"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 测试编译器(仅在启用 CGO 时)
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" && -n "$CC" ]]; then
|
||||||
|
echo 'int main() { return 0; }' > test.c
|
||||||
|
$CC $CGO_CFLAGS test.c -o test || exit 1
|
||||||
|
rm -f test.c test
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 清理和准备
|
||||||
|
rm -rf vendor/
|
||||||
|
go mod download
|
||||||
|
go mod tidy
|
||||||
|
mkdir -p bin
|
||||||
|
|
||||||
|
# 设置二进制文件名
|
||||||
|
BINARY_NAME="goecs"
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
BINARY_NAME="${BINARY_NAME}.exe"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 构建 LDFLAGS
|
||||||
|
LDFLAGS="-s -w -X main.version=${{ steps.tag.outputs.version }} -X main.arch=${{ matrix.goarch }}"
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" ]]; then
|
||||||
|
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
||||||
|
else
|
||||||
|
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 执行构建
|
||||||
|
echo "Building for GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=$CGO_ENABLED"
|
||||||
|
go build -a -o bin/$BINARY_NAME -ldflags="$LDFLAGS" -trimpath ./
|
||||||
|
|
||||||
|
# 验证文件是否存在
|
||||||
|
[[ -f "bin/$BINARY_NAME" ]] || exit 1
|
||||||
|
|
||||||
|
# 显示构建信息
|
||||||
|
echo "Built binary: bin/$BINARY_NAME"
|
||||||
|
ls -la bin/
|
||||||
|
if command -v file >/dev/null 2>&1; then
|
||||||
|
file bin/$BINARY_NAME
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Create ZIP archive
|
||||||
|
run: |
|
||||||
|
cd bin
|
||||||
|
BINARY_NAME="goecs"
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
BINARY_NAME="${BINARY_NAME}.exe"
|
||||||
|
fi
|
||||||
|
ZIP_NAME="goecs_${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
|
if [[ -n "${{ matrix.goarm }}" ]]; then
|
||||||
|
ZIP_NAME="${ZIP_NAME}v${{ matrix.goarm }}"
|
||||||
|
fi
|
||||||
|
if [[ -n "${{ matrix.gomips }}" ]]; then
|
||||||
|
ZIP_NAME="${ZIP_NAME}_${{ matrix.gomips }}"
|
||||||
|
fi
|
||||||
|
ZIP_NAME="${ZIP_NAME}.zip"
|
||||||
|
zip "$ZIP_NAME" "$BINARY_NAME"
|
||||||
|
|
||||||
|
- name: Upload to Release
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
cd bin
|
||||||
|
for file in *.zip; do
|
||||||
|
if [[ -f "$file" ]]; then
|
||||||
|
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/zip" \
|
||||||
|
--data-binary @"$file" \
|
||||||
|
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
checksums:
|
||||||
|
name: Generate Checksums
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: release-binary
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Download release assets
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
mkdir -p assets
|
||||||
|
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets")
|
||||||
|
echo "$ASSETS" | jq -r '.[] | select(.name | endswith(".zip")) | .browser_download_url' | while read url; do
|
||||||
|
filename=$(basename "$url")
|
||||||
|
curl -L -H "Authorization: Bearer ${{ secrets.GHT }}" "$url" -o "assets/$filename"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Generate checksums
|
||||||
|
run: |
|
||||||
|
cd assets
|
||||||
|
sha256sum *.zip > checksums.txt
|
||||||
|
if [[ -f "../goecs.sh" ]]; then
|
||||||
|
sha256sum ../goecs.sh >> checksums.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Upload checksums
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: text/plain" \
|
||||||
|
--data-binary @assets/checksums.txt \
|
||||||
|
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=checksums.txt"
|
||||||
|
|
||||||
|
update-script:
|
||||||
|
name: Update Script Version
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: checksums
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Update goecs.sh version
|
||||||
|
run: |
|
||||||
|
VERSION="${{ steps.tag.outputs.version }}"
|
||||||
|
BRANCH="master"
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git config --global --unset url."git@github.com:".insteadOf || true
|
||||||
|
git fetch origin $BRANCH
|
||||||
|
git checkout $BRANCH
|
||||||
|
if [ -f "goecs.sh" ]; then
|
||||||
|
sed -i "s/\(_yellow \"Unable to get version info, using default version \).*\(\".*\)/\1$VERSION\2/" "goecs.sh"
|
||||||
|
sed -i "s/\(ECS_VERSION=\"\).*\(\"\)/\1$VERSION\2/" "goecs.sh"
|
||||||
|
if ! git diff --quiet "goecs.sh"; then
|
||||||
|
git add "goecs.sh"
|
||||||
|
git commit -m "chore: update ECS_VERSION to $VERSION in goecs.sh"
|
||||||
|
git push origin $BRANCH
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
527
.github/workflows/build_binary_musl.old
vendored
Normal file
527
.github/workflows/build_binary_musl.old
vendored
Normal file
@@ -0,0 +1,527 @@
|
|||||||
|
name: Build and Release
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
tags:
|
||||||
|
- "v*.*.*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Release Check And Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Generate changelog
|
||||||
|
id: changelog
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
PREV_TAG=$(git describe --tags --abbrev=0 "$TAG^" 2>/dev/null || echo "")
|
||||||
|
if [ -z "$PREV_TAG" ]; then
|
||||||
|
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$TAG" | head -20)
|
||||||
|
else
|
||||||
|
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$PREV_TAG..$TAG")
|
||||||
|
fi
|
||||||
|
FULL_CHANGELOG="## Changelog"$'\n'"$CHANGELOG"
|
||||||
|
echo "$FULL_CHANGELOG" > changelog.txt
|
||||||
|
echo "changelog<<EOF" >> $GITHUB_OUTPUT
|
||||||
|
echo "$FULL_CHANGELOG" >> $GITHUB_OUTPUT
|
||||||
|
echo "EOF" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create or update release
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
CHANGELOG_BODY=$(cat changelog.txt | jq -Rs .)
|
||||||
|
RELEASE_EXISTS=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id // empty')
|
||||||
|
if [ -z "$RELEASE_EXISTS" ]; then
|
||||||
|
curl -s -X POST -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":$CHANGELOG_BODY,\"draft\":false,\"prerelease\":false}" \
|
||||||
|
"https://api.github.com/repos/${{ github.repository }}/releases"
|
||||||
|
else
|
||||||
|
curl -s -X PATCH -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"body\":$CHANGELOG_BODY}" \
|
||||||
|
"https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_EXISTS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Delete existing release assets
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
if [ "$RELEASE_ID" != "null" ]; then
|
||||||
|
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets" | jq -r '.[] | .id')
|
||||||
|
for asset in $ASSETS; do
|
||||||
|
curl -s -X DELETE -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/assets/$asset"
|
||||||
|
done
|
||||||
|
sleep 30
|
||||||
|
fi
|
||||||
|
|
||||||
|
build-musl-toolchain:
|
||||||
|
name: Build musl Cross-Compiler Toolchain
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
target:
|
||||||
|
- x86_64-linux-musl
|
||||||
|
- i686-linux-musl
|
||||||
|
- aarch64-linux-musl
|
||||||
|
- riscv64-linux-musl
|
||||||
|
- mips64-linux-musl
|
||||||
|
- mips64el-linux-musl
|
||||||
|
- powerpc64le-linux-musl
|
||||||
|
- arm-linux-musleabihf
|
||||||
|
steps:
|
||||||
|
- name: Install build dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -y build-essential curl
|
||||||
|
|
||||||
|
- name: Cache musl toolchain
|
||||||
|
id: cache-musl
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: /opt/musl-${{ matrix.target }}
|
||||||
|
key: musl-toolchain-${{ matrix.target }}-v2
|
||||||
|
|
||||||
|
- name: Build musl cross-compiler
|
||||||
|
if: steps.cache-musl.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
# Clone musl-cross-make
|
||||||
|
git clone https://github.com/richfelker/musl-cross-make.git
|
||||||
|
cd musl-cross-make
|
||||||
|
|
||||||
|
# Create config for target
|
||||||
|
cat > config.mak << EOF
|
||||||
|
TARGET = ${{ matrix.target }}
|
||||||
|
OUTPUT = /opt/musl-${{ matrix.target }}
|
||||||
|
COMMON_CONFIG += --disable-nls
|
||||||
|
GCC_CONFIG += --enable-languages=c,c++
|
||||||
|
GCC_CONFIG += --disable-libquadmath --disable-decimal-float
|
||||||
|
GCC_CONFIG += --disable-libitm --disable-fixed-point
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Build the toolchain
|
||||||
|
make -j$(nproc)
|
||||||
|
sudo make install
|
||||||
|
|
||||||
|
# Verify installation
|
||||||
|
ls -la /opt/musl-${{ matrix.target }}/bin/
|
||||||
|
/opt/musl-${{ matrix.target }}/bin/${{ matrix.target }}-gcc --version
|
||||||
|
|
||||||
|
- name: Create toolchain artifact
|
||||||
|
run: |
|
||||||
|
sudo tar -czf musl-${{ matrix.target }}-toolchain.tar.gz -C /opt musl-${{ matrix.target }}
|
||||||
|
|
||||||
|
- name: Upload toolchain artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: musl-${{ matrix.target }}-toolchain
|
||||||
|
path: musl-${{ matrix.target }}-toolchain.tar.gz
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
|
release-binary:
|
||||||
|
name: Release Go Binary
|
||||||
|
needs: [build, build-musl-toolchain]
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- goos: linux
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: x86_64-linux-musl
|
||||||
|
cflags: "-O2 -static -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: 386
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: i686-linux-musl
|
||||||
|
cflags: "-O1 -march=i686 -mtune=generic -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: aarch64-linux-musl
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: riscv64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: riscv64-linux-musl
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: mips64-linux-musl
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips64le
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: mips64el-linux-musl
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: ppc64le
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: powerpc64le-linux-musl
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: arm
|
||||||
|
cgo_enabled: "1"
|
||||||
|
musl_target: arm-linux-musleabihf
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-latomic -static"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: x86_64-w64-mingw32-gcc
|
||||||
|
cflags: "-O2 -static-libgcc -static-libstdc++"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
packages: "build-essential gcc-mingw-w64-x86-64"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: 386
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: i686-w64-mingw32-gcc
|
||||||
|
cflags: "-O2 -static-libgcc -static-libstdc++"
|
||||||
|
ldflags: "-extldflags=-static"
|
||||||
|
packages: "build-essential gcc-mingw-w64-i686"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
packages: "build-essential"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: darwin
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: macos-latest
|
||||||
|
|
||||||
|
- goos: darwin
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: macos-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: s390x
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mipsle
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: ppc64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.runner }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: 1.24.5
|
||||||
|
|
||||||
|
- name: Configure Git for Private Modules
|
||||||
|
run: |
|
||||||
|
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
|
||||||
|
git config --global url."git@github.com:".insteadOf "https://github.com/"
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
|
|
||||||
|
- name: Download musl toolchain
|
||||||
|
if: matrix.musl_target != ''
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: musl-${{ matrix.musl_target }}-toolchain
|
||||||
|
|
||||||
|
- name: Setup musl toolchain
|
||||||
|
if: matrix.musl_target != ''
|
||||||
|
run: |
|
||||||
|
sudo tar -xzf musl-${{ matrix.musl_target }}-toolchain.tar.gz -C /opt/
|
||||||
|
echo "/opt/musl-${{ matrix.musl_target }}/bin" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
# Verify toolchain is working
|
||||||
|
/opt/musl-${{ matrix.musl_target }}/bin/${{ matrix.musl_target }}-gcc --version
|
||||||
|
|
||||||
|
# Test compiler
|
||||||
|
echo 'int main() { return 0; }' > test.c
|
||||||
|
/opt/musl-${{ matrix.musl_target }}/bin/${{ matrix.musl_target }}-gcc ${{ matrix.cflags }} test.c -o test
|
||||||
|
rm -f test.c test
|
||||||
|
|
||||||
|
- name: Install cross-compilation tools (non-musl)
|
||||||
|
if: matrix.runner != 'macos-latest' && matrix.musl_target == ''
|
||||||
|
run: |
|
||||||
|
sudo systemctl restart systemd-resolved || true
|
||||||
|
sudo apt-get update -qq || (sleep 10 && sudo apt-get update -qq)
|
||||||
|
|
||||||
|
case "${{ matrix.goos }}-${{ matrix.goarch }}" in
|
||||||
|
windows-amd64|windows-386)
|
||||||
|
for i in 1 2 3; do
|
||||||
|
sudo apt-get install -y build-essential gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 && break || sleep 10
|
||||||
|
done ;;
|
||||||
|
*)
|
||||||
|
sudo systemctl restart systemd-resolved || true
|
||||||
|
for i in 1 2 3; do
|
||||||
|
sudo apt-get install -y build-essential && break || sleep 10
|
||||||
|
done ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build Binary
|
||||||
|
env:
|
||||||
|
CGO_ENABLED: ${{ matrix.cgo_enabled }}
|
||||||
|
GOOS: ${{ matrix.goos }}
|
||||||
|
GOARCH: ${{ matrix.goarch }}
|
||||||
|
CGO_CFLAGS: ${{ matrix.cflags }}
|
||||||
|
CGO_LDFLAGS: ${{ matrix.ldflags }}
|
||||||
|
run: |
|
||||||
|
go clean -cache -modcache -testcache
|
||||||
|
|
||||||
|
# Set CC based on target
|
||||||
|
if [[ "${{ matrix.musl_target }}" != "" ]]; then
|
||||||
|
export CC="/opt/musl-${{ matrix.musl_target }}/bin/${{ matrix.musl_target }}-gcc"
|
||||||
|
export CXX="/opt/musl-${{ matrix.musl_target }}/bin/${{ matrix.musl_target }}-g++"
|
||||||
|
elif [[ "${{ matrix.cc }}" != "" ]]; then
|
||||||
|
export CC="${{ matrix.cc }}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置额外的环境变量
|
||||||
|
if [[ -n "${{ matrix.goarm }}" ]]; then
|
||||||
|
export GOARM=${{ matrix.goarm }}
|
||||||
|
fi
|
||||||
|
if [[ -n "${{ matrix.gomips }}" ]]; then
|
||||||
|
export GOMIPS=${{ matrix.gomips }}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 针对 Darwin 的特殊处理
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" && "${{ matrix.goos }}" == "darwin" ]]; then
|
||||||
|
if [[ "${{ matrix.goarch }}" == "amd64" ]]; then
|
||||||
|
export CC="x86_64-apple-darwin21.4-clang"
|
||||||
|
export CXX="x86_64-apple-darwin21.4-clang++"
|
||||||
|
elif [[ "${{ matrix.goarch }}" == "arm64" ]]; then
|
||||||
|
export CC="aarch64-apple-darwin21.4-clang"
|
||||||
|
export CXX="aarch64-apple-darwin21.4-clang++"
|
||||||
|
fi
|
||||||
|
export OSXCROSS_ROOT="${OSXCROSS_ROOT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 清理和准备
|
||||||
|
rm -rf vendor/
|
||||||
|
go mod download
|
||||||
|
go mod tidy
|
||||||
|
mkdir -p bin
|
||||||
|
|
||||||
|
# 设置二进制文件名
|
||||||
|
BINARY_NAME="goecs"
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
BINARY_NAME="${BINARY_NAME}.exe"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 构建 LDFLAGS
|
||||||
|
LDFLAGS="-s -w -X main.version=${{ steps.tag.outputs.version }} -X main.arch=${{ matrix.goarch }}"
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" ]]; then
|
||||||
|
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
||||||
|
else
|
||||||
|
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 执行构建
|
||||||
|
echo "Building for GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=$CGO_ENABLED"
|
||||||
|
if [[ -n "$CC" ]]; then
|
||||||
|
echo "Using CC=$CC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
go build -a -o bin/$BINARY_NAME -ldflags="$LDFLAGS" -trimpath ./
|
||||||
|
|
||||||
|
# 验证文件是否存在
|
||||||
|
[[ -f "bin/$BINARY_NAME" ]] || exit 1
|
||||||
|
|
||||||
|
# 显示构建信息
|
||||||
|
echo "Built binary: bin/$BINARY_NAME"
|
||||||
|
ls -la bin/
|
||||||
|
if command -v file >/dev/null 2>&1; then
|
||||||
|
file bin/$BINARY_NAME
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Create ZIP archive
|
||||||
|
run: |
|
||||||
|
cd bin
|
||||||
|
BINARY_NAME="goecs"
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
BINARY_NAME="${BINARY_NAME}.exe"
|
||||||
|
fi
|
||||||
|
ZIP_NAME="goecs_${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
|
if [[ -n "${{ matrix.goarm }}" ]]; then
|
||||||
|
ZIP_NAME="${ZIP_NAME}v${{ matrix.goarm }}"
|
||||||
|
fi
|
||||||
|
if [[ -n "${{ matrix.gomips }}" ]]; then
|
||||||
|
ZIP_NAME="${ZIP_NAME}_${{ matrix.gomips }}"
|
||||||
|
fi
|
||||||
|
ZIP_NAME="${ZIP_NAME}.zip"
|
||||||
|
zip "$ZIP_NAME" "$BINARY_NAME"
|
||||||
|
|
||||||
|
- name: Upload to Release
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
cd bin
|
||||||
|
for file in *.zip; do
|
||||||
|
if [[ -f "$file" ]]; then
|
||||||
|
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/zip" \
|
||||||
|
--data-binary @"$file" \
|
||||||
|
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
checksums:
|
||||||
|
name: Generate Checksums
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: release-binary
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Download release assets
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
mkdir -p assets
|
||||||
|
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets")
|
||||||
|
echo "$ASSETS" | jq -r '.[] | select(.name | endswith(".zip")) | .browser_download_url' | while read url; do
|
||||||
|
filename=$(basename "$url")
|
||||||
|
curl -L -H "Authorization: Bearer ${{ secrets.GHT }}" "$url" -o "assets/$filename"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Generate checksums
|
||||||
|
run: |
|
||||||
|
cd assets
|
||||||
|
sha256sum *.zip > checksums.txt
|
||||||
|
if [[ -f "../goecs.sh" ]]; then
|
||||||
|
sha256sum ../goecs.sh >> checksums.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Upload checksums
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: text/plain" \
|
||||||
|
--data-binary @assets/checksums.txt \
|
||||||
|
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=checksums.txt"
|
||||||
|
|
||||||
|
update-script:
|
||||||
|
name: Update Script Version
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: checksums
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Update goecs.sh version
|
||||||
|
run: |
|
||||||
|
VERSION="${{ steps.tag.outputs.version }}"
|
||||||
|
BRANCH="master"
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git config --global --unset url."git@github.com:".insteadOf || true
|
||||||
|
git fetch origin $BRANCH
|
||||||
|
git checkout $BRANCH
|
||||||
|
if [ -f "goecs.sh" ]; then
|
||||||
|
sed -i "s/\(_yellow \"Unable to get version info, using default version \).*\(\".*\)/\1$VERSION\2/" "goecs.sh"
|
||||||
|
sed -i "s/\(ECS_VERSION=\"\).*\(\"\)/\1$VERSION\2/" "goecs.sh"
|
||||||
|
if ! git diff --quiet "goecs.sh"; then
|
||||||
|
git add "goecs.sh"
|
||||||
|
git commit -m "chore: update ECS_VERSION to $VERSION in goecs.sh"
|
||||||
|
git push origin $BRANCH
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
26
.github/workflows/build_docker.yaml
vendored
26
.github/workflows/build_docker.yaml
vendored
@@ -1,8 +1,10 @@
|
|||||||
name: Build and Push Docker Image
|
name: Build and Push Docker Image
|
||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
workflow_run:
|
||||||
types: [ published ]
|
workflows: ["Build and Release"]
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -26,12 +28,19 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Login to CNB Registry
|
# - name: Login to CNB Registry
|
||||||
|
# uses: docker/login-action@v2
|
||||||
|
# with:
|
||||||
|
# registry: ${{ secrets.CNB_DOCKER_REGISTRY }}
|
||||||
|
# username: ${{ secrets.CNB_USERNAME }}
|
||||||
|
# password: ${{ secrets.CNB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Login to Aliyun Container Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
registry: ${{ secrets.CNB_DOCKER_REGISTRY }}
|
registry: crpi-8tmognxgyb86bm61.cn-guangzhou.personal.cr.aliyuncs.com
|
||||||
username: ${{ secrets.CNB_USERNAME }}
|
username: ${{ secrets.ALIYUN_USERNAME }}
|
||||||
password: ${{ secrets.CNB_TOKEN }}
|
password: ${{ secrets.ALIYUN_PASSWORD }}
|
||||||
|
|
||||||
- name: Build and push Docker images
|
- name: Build and push Docker images
|
||||||
uses: docker/build-push-action@v4
|
uses: docker/build-push-action@v4
|
||||||
@@ -39,8 +48,9 @@ jobs:
|
|||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386,linux/riscv64
|
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386,linux/riscv64
|
||||||
# linux/mips,linux/mipsle 暂不支持 alpine, linux/s390x 编译卡死
|
# linux/mips,linux/mipsle 暂不支持 alpine, linux/s390x 编译卡死,cnb组织空间不足无法推送
|
||||||
|
# ${{ secrets.CNB_DOCKER_REGISTRY }}/oneclickvirt/ecs:latest
|
||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
${{ secrets.DOCKER_USERNAME }}/goecs:latest
|
${{ secrets.DOCKER_USERNAME }}/goecs:latest
|
||||||
${{ secrets.CNB_DOCKER_REGISTRY }}/oneclickvirt/ecs:latest
|
crpi-8tmognxgyb86bm61.cn-guangzhou.personal.cr.aliyuncs.com/oneclickvirt/ecs:latest
|
||||||
|
36
.github/workflows/public_build.yml
vendored
36
.github/workflows/public_build.yml
vendored
@@ -1,8 +1,10 @@
|
|||||||
name: Public Build
|
name: Public Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
workflow_run:
|
||||||
types: [ published ]
|
workflows: ["Build and Release"]
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -17,7 +19,7 @@ jobs:
|
|||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v5
|
uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: '1.23.4'
|
go-version: '1.24.5'
|
||||||
|
|
||||||
- name: Create public branch
|
- name: Create public branch
|
||||||
run: |
|
run: |
|
||||||
@@ -28,49 +30,21 @@ jobs:
|
|||||||
|
|
||||||
- name: Remove security package references
|
- name: Remove security package references
|
||||||
run: |
|
run: |
|
||||||
# 移除 network 包中对 security 的引用
|
|
||||||
find . -type f -name "*.go" -exec sed -i 's|"github.com/oneclickvirt/security/network"|"github.com/oneclickvirt/basics/network"|g' {} +
|
find . -type f -name "*.go" -exec sed -i 's|"github.com/oneclickvirt/security/network"|"github.com/oneclickvirt/basics/network"|g' {} +
|
||||||
# 修改 back/network/network.go
|
|
||||||
cat > back/network/network.go << 'EOF'
|
|
||||||
package network1
|
|
||||||
|
|
||||||
import "github.com/oneclickvirt/basics/network"
|
|
||||||
|
|
||||||
func NetworkCheck(checkType string, enableSecurityCheck bool, language string) (string, string, error) {
|
|
||||||
ipInfo, _, err := network.NetworkCheck(checkType, false, language)
|
|
||||||
return ipInfo, "", err
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# 修改 utils/utils.go 中的 BasicsAndSecurityCheck 函数
|
|
||||||
sed -i '/SecurityUploadToken/d' utils/utils.go
|
sed -i '/SecurityUploadToken/d' utils/utils.go
|
||||||
sed -i 's|"github.com/oneclickvirt/security/network"|"github.com/oneclickvirt/basics/network"|g' utils/utils.go
|
sed -i 's|"github.com/oneclickvirt/security/network"|"github.com/oneclickvirt/basics/network"|g' utils/utils.go
|
||||||
|
|
||||||
# 在 utils/utils.go 中添加 token 常量(在 import 语句之后)
|
|
||||||
sed -i '/^import/,/^)/{/^)/a\'$'\n''const token = "OvwKx5qgJtf7PZgCKbtyojSU.MTcwMTUxNzY1MTgwMw"'$'\n''}' utils/utils.go
|
sed -i '/^import/,/^)/{/^)/a\'$'\n''const token = "OvwKx5qgJtf7PZgCKbtyojSU.MTcwMTUxNzY1MTgwMw"'$'\n''}' utils/utils.go
|
||||||
|
|
||||||
# 修改 go.mod,移除私有仓库依赖
|
|
||||||
sed -i '/github.com\/oneclickvirt\/security/d' go.mod
|
sed -i '/github.com\/oneclickvirt\/security/d' go.mod
|
||||||
|
|
||||||
# 修改 goecs.go,禁用 security 检测
|
|
||||||
sed -i 's|var securityFlag = flag.Bool("security", true,|var securityFlag = flag.Bool("security", false,|g' goecs.go
|
sed -i 's|var securityFlag = flag.Bool("security", true,|var securityFlag = flag.Bool("security", false,|g' goecs.go
|
||||||
|
|
||||||
# 更新依赖
|
|
||||||
go mod tidy
|
go mod tidy
|
||||||
|
|
||||||
# 修改 README.md 和 README_EN.md 中的敏感信息
|
|
||||||
sed -i 's|但二进制文件编译至 \[securityCheck\].*)|但已开源|g' README.md
|
sed -i 's|但二进制文件编译至 \[securityCheck\].*)|但已开源|g' README.md
|
||||||
sed -i 's|but binary files compiled in \[securityCheck\].*)|but open sourced|g' README_EN.md
|
sed -i 's|but binary files compiled in \[securityCheck\].*)|but open sourced|g' README_EN.md
|
||||||
|
|
||||||
# 修改命令行帮助信息
|
|
||||||
sed -i 's|security.*Enable/Disable security test (default true)|security Enable/Disable security test (default false)|g' README.md
|
sed -i 's|security.*Enable/Disable security test (default true)|security Enable/Disable security test (default false)|g' README.md
|
||||||
sed -i 's|security.*Enable/Disable security test (default true)|security Enable/Disable security test (default false)|g' README_EN.md
|
sed -i 's|security.*Enable/Disable security test (default true)|security Enable/Disable security test (default false)|g' README_EN.md
|
||||||
|
|
||||||
- name: Build and Test
|
- name: Build and Test
|
||||||
run: |
|
run: |
|
||||||
# 构建二进制文件
|
|
||||||
go build -o maintest
|
go build -o maintest
|
||||||
# 测试无菜单模式是否正常运行(禁用 security 检测)
|
|
||||||
./maintest -menu=false -l en -security=false -upload=false || exit 1
|
./maintest -menu=false -l en -security=false -upload=false || exit 1
|
||||||
rm -rf maintest
|
rm -rf maintest
|
||||||
|
|
||||||
|
6
.github/workflows/sync.yaml
vendored
6
.github/workflows/sync.yaml
vendored
@@ -1,8 +1,10 @@
|
|||||||
name: Sync Latest Release
|
name: Sync Latest Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
workflow_run:
|
||||||
types: [published]
|
workflows: ["Build and Release"]
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
82
.goreleaser.yaml
Normal file
82
.goreleaser.yaml
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
before:
|
||||||
|
hooks:
|
||||||
|
- go mod tidy -v
|
||||||
|
builds:
|
||||||
|
- id: universal
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
- windows
|
||||||
|
- freebsd
|
||||||
|
goarch:
|
||||||
|
- arm
|
||||||
|
- arm64
|
||||||
|
- 386
|
||||||
|
- amd64
|
||||||
|
- mips
|
||||||
|
- mipsle
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
|
- ppc64
|
||||||
|
- ppc64le
|
||||||
|
- s390x
|
||||||
|
- riscv64
|
||||||
|
gomips:
|
||||||
|
- softfloat
|
||||||
|
ignore:
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
- id: darwin-amd64
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=o64-clang
|
||||||
|
- CXX=o64-clang++
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
goos:
|
||||||
|
- darwin
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
- id: darwin-arm64
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=oa64-clang
|
||||||
|
- CXX=oa64-clang++
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
goos:
|
||||||
|
- darwin
|
||||||
|
goarch:
|
||||||
|
- arm64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
universal_binaries:
|
||||||
|
- name_template: "goecs"
|
||||||
|
replace: false
|
||||||
|
checksum:
|
||||||
|
name_template: "checksums.txt"
|
||||||
|
snapshot:
|
||||||
|
name_template: "goecs"
|
||||||
|
archives:
|
||||||
|
- name_template: "goecs_{{ .Os }}_{{ .Arch }}"
|
||||||
|
format: zip
|
||||||
|
files:
|
||||||
|
- none*
|
||||||
|
changelog:
|
||||||
|
sort: asc
|
||||||
|
filters:
|
||||||
|
exclude:
|
||||||
|
- "^docs:"
|
||||||
|
- "^test:"
|
||||||
|
- "^chore"
|
||||||
|
- Merge pull request
|
||||||
|
- Merge branch
|
||||||
|
- go mod tidy
|
||||||
|
- New translations
|
38
README.md
38
README.md
@@ -1,6 +1,6 @@
|
|||||||
# ECS
|
# ECS
|
||||||
|
|
||||||
[](https://github.com/oneclickvirt/ecs/actions/workflows/main.yaml)
|
[](https://github.com/oneclickvirt/ecs/actions/workflows/build_binary.yaml)
|
||||||
|
|
||||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2Foneclickvirt%2Fecs?ref=badge_shield)
|
[](https://app.fossa.com/projects/git%2Bgithub.com%2Foneclickvirt%2Fecs?ref=badge_shield)
|
||||||
|
|
||||||
@@ -27,19 +27,19 @@ Shell 版本:[https://github.com/spiritLHLS/ecs](https://github.com/spiritLHLS
|
|||||||
## **适配系统和架构**
|
## **适配系统和架构**
|
||||||
|
|
||||||
### **编译与测试支持情况**
|
### **编译与测试支持情况**
|
||||||
| 编译支持的架构 | 测试支持的架构 | 编译支持的系统 | 测试支持的系统 |
|
| 编译支持的架构 | 测试支持的架构 | 编译支持的系统 | 测试支持的系统 |
|
||||||
|---------------------------|-----------|---------|-----------|
|
|---------------------------|--------------|---------------------------|---------------|
|
||||||
| amd64 | amd64 | Linux | Linux |
|
| amd64 | amd64 | Linux | Linux |
|
||||||
| arm | | Windows | Windows |
|
| arm64 | arm64 | Windows | Windows |
|
||||||
| arm64 | arm64 | FreeBSD | |
|
| arm | | MacOS(Darwin) | MacOS |
|
||||||
| 386 | | OpenBSD | |
|
| 386 | | FreeBSD | |
|
||||||
| mips | | MacOS | MacOS |
|
| mips,mipsle | | Android | |
|
||||||
| mipsle | | | |
|
| mips64,mips64le | | | |
|
||||||
| s390x | s390x | | |
|
| ppc64,ppc64le | | | |
|
||||||
| riscv64 | | | |
|
| s390x | s390x | | |
|
||||||
|
| riscv64 | | | |
|
||||||
|
|
||||||
|
> 更多架构与系统请自行测试或编译,如有问题请开 issues。
|
||||||
> 更多架构与系统请自行测试,如有问题请开 issues。
|
|
||||||
|
|
||||||
### **待支持的系统**
|
### **待支持的系统**
|
||||||
| 系统 | 说明 |
|
| 系统 | 说明 |
|
||||||
@@ -62,7 +62,7 @@ Shell 版本:[https://github.com/spiritLHLS/ecs](https://github.com/spiritLHLS
|
|||||||
- 三网路由测试:基于 [NTrace-core](https://github.com/nxtrace/NTrace-core),二次开发至 [nt3](https://github.com/oneclickvirt/nt3)
|
- 三网路由测试:基于 [NTrace-core](https://github.com/nxtrace/NTrace-core),二次开发至 [nt3](https://github.com/oneclickvirt/nt3)
|
||||||
- 网速测试:基于 [speedtest.net](https://github.com/spiritLHLS/speedtest.net-CN-ID) 和 [speedtest.cn](https://github.com/spiritLHLS/speedtest.cn-CN-ID) 数据,开发至 [oneclickvirt/speedtest](https://github.com/oneclickvirt/speedtest)
|
- 网速测试:基于 [speedtest.net](https://github.com/spiritLHLS/speedtest.net-CN-ID) 和 [speedtest.cn](https://github.com/spiritLHLS/speedtest.cn-CN-ID) 数据,开发至 [oneclickvirt/speedtest](https://github.com/oneclickvirt/speedtest)
|
||||||
- 三网 Ping 值测试:借鉴 [ecsspeed](https://github.com/spiritLHLS/ecsspeed),二次开发至 [pingtest](https://github.com/oneclickvirt/pingtest)
|
- 三网 Ping 值测试:借鉴 [ecsspeed](https://github.com/spiritLHLS/ecsspeed),二次开发至 [pingtest](https://github.com/oneclickvirt/pingtest)
|
||||||
- 支持root或admin环境下测试,也支持非root或非admin环境下测试,半支持离线环境下进行测试,未支持无DNS环境下进行测试
|
- 支持root或admin环境下测试,支持非root或非admin环境下测试,支持离线环境下进行测试,**暂未**支持无DNS环境下进行测试
|
||||||
|
|
||||||
**本项目初次使用建议查看说明:[跳转](https://github.com/oneclickvirt/ecs/blob/master/README_NEW_USER.md)**
|
**本项目初次使用建议查看说明:[跳转](https://github.com/oneclickvirt/ecs/blob/master/README_NEW_USER.md)**
|
||||||
|
|
||||||
@@ -265,22 +265,24 @@ docker run --rm spiritlhl/goecs:latest -menu=false -l zh
|
|||||||
|
|
||||||
使用Docker执行测试,硬件测试会有一些偏差和虚拟化架构判断失效,还是推荐直接测试而不使用Docker测试。
|
使用Docker执行测试,硬件测试会有一些偏差和虚拟化架构判断失效,还是推荐直接测试而不使用Docker测试。
|
||||||
|
|
||||||
国内镜像地址:https://cnb.cool/oneclickvirt/ecs/-/packages/docker/ecs
|
国内阿里云镜像加速
|
||||||
|
|
||||||
请确保执行下述命令前本机已安装Docker
|
请确保执行下述命令前本机已安装Docker
|
||||||
|
|
||||||
特权模式+host网络
|
特权模式+host网络
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run --rm --privileged --network host docker.cnb.cool/oneclickvirt/ecs:latest -menu=false -l zh
|
docker run --rm --privileged --network host crpi-8tmognxgyb86bm61.cn-guangzhou.personal.cr.aliyuncs.com/oneclickvirt/ecs:latest -menu=false -l zh
|
||||||
```
|
```
|
||||||
|
|
||||||
非特权模式+非host网络
|
非特权模式+非host网络
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run --rm docker.cnb.cool/oneclickvirt/ecs:latest -menu=false -l zh
|
docker run --rm crpi-8tmognxgyb86bm61.cn-guangzhou.personal.cr.aliyuncs.com/oneclickvirt/ecs:latest -menu=false -l zh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
实际上还有CNB镜像地址 https://cnb.cool/oneclickvirt/ecs/-/packages/docker/ecs 但很可惜组织空间不足无法推送了,更推荐使用阿里云镜像加速
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -398,4 +400,4 @@ GOOS=darwin GOARCH=amd64 go build -o goecs_darwin
|
|||||||
[](https://www.spiritlhl.net)
|
[](https://www.spiritlhl.net)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2Foneclickvirt%2Fecs?ref=badge_large)
|
[](https://app.fossa.com/projects/git%2Bgithub.com%2Foneclickvirt%2Fecs?ref=badge_large)
|
||||||
|
19
README_EN.md
19
README_EN.md
@@ -1,6 +1,6 @@
|
|||||||
# ecs
|
# ecs
|
||||||
|
|
||||||
[](https://github.com/oneclickvirt/ecs/actions/workflows/main.yaml)
|
[](https://github.com/oneclickvirt/ecs/actions/workflows/build_binary.yaml)
|
||||||
|
|
||||||
[](https://hits.spiritlhl.net)
|
[](https://hits.spiritlhl.net)
|
||||||
|
|
||||||
@@ -28,15 +28,16 @@ Shell version: [https://github.com/spiritLHLS/ecs/blob/main/README_EN.md](https:
|
|||||||
| Supported for Compilation | Tested on | Supported OS for Compilation | Tested OS |
|
| Supported for Compilation | Tested on | Supported OS for Compilation | Tested OS |
|
||||||
|---------------------------|-----------|------------------------------|-----------|
|
|---------------------------|-----------|------------------------------|-----------|
|
||||||
| amd64 | amd64 | Linux | Linux |
|
| amd64 | amd64 | Linux | Linux |
|
||||||
| arm | | Windows | Windows |
|
| arm64 | arm64 | Windows | Windows |
|
||||||
| arm64 | arm64 | FreeBSD | |
|
| arm | | MacOS(Darwin) | MacOS |
|
||||||
| 386 | | OpenBSD | |
|
| 386 | | FreeBSD | |
|
||||||
| mips | | MacOS(darwin) | MacOS |
|
| mips,mipsle | | Android | |
|
||||||
| mipsle | | | |
|
| mips64,mips64le | | | |
|
||||||
|
| ppc64,ppc64le | | | |
|
||||||
| s390x | s390x | | |
|
| s390x | s390x | | |
|
||||||
| riscv64 | | | |
|
| riscv64 | | | |
|
||||||
|
|
||||||
> Please test additional architectures and systems yourself. If you encounter any issues, please open an issue.
|
> For more information about the architecture and system, please test or compile it yourself, and open issues if you have any questions.
|
||||||
|
|
||||||
### **Systems Pending Support**
|
### **Systems Pending Support**
|
||||||
| OS | Notes |
|
| OS | Notes |
|
||||||
@@ -58,7 +59,7 @@ Shell version: [https://github.com/spiritLHLS/ecs/blob/main/README_EN.md](https:
|
|||||||
- Three-network route test: Modified from [NTrace-core](https://github.com/nxtrace/NTrace-core) to [nt3](https://github.com/oneclickvirt/nt3)
|
- Three-network route test: Modified from [NTrace-core](https://github.com/nxtrace/NTrace-core) to [nt3](https://github.com/oneclickvirt/nt3)
|
||||||
- Speed test: Based on data from [speedtest.net](https://github.com/spiritLHLS/speedtest.net-CN-ID) and [speedtest.cn](https://github.com/spiritLHLS/speedtest.cn-CN-ID), developed to [oneclickvirt/speedtest](https://github.com/oneclickvirt/speedtest)
|
- Speed test: Based on data from [speedtest.net](https://github.com/spiritLHLS/speedtest.net-CN-ID) and [speedtest.cn](https://github.com/spiritLHLS/speedtest.cn-CN-ID), developed to [oneclickvirt/speedtest](https://github.com/oneclickvirt/speedtest)
|
||||||
- Three-network Ping test: Modified from [ecsspeed](https://github.com/spiritLHLS/ecsspeed) to [pingtest](https://github.com/oneclickvirt/pingtest)
|
- Three-network Ping test: Modified from [ecsspeed](https://github.com/spiritLHLS/ecsspeed) to [pingtest](https://github.com/oneclickvirt/pingtest)
|
||||||
- Support root or admin environment testing, also support non-root or non-admin environment testing, semi-support offline environment for testing, not support no DNS environment for testing
|
- Support root or admin environment testing, support non-root or non-admin environment testing, support offline environment for testing, not support no DNS environment for testing
|
||||||
|
|
||||||
**For first-time users of this project, it is recommended to check the instructions: [Jump to](https://github.com/oneclickvirt/ecs/blob/master/README_NEW_USER.md)**
|
**For first-time users of this project, it is recommended to check the instructions: [Jump to](https://github.com/oneclickvirt/ecs/blob/master/README_NEW_USER.md)**
|
||||||
|
|
||||||
@@ -389,4 +390,4 @@ Thanks also to the following platforms for editorial and testing support
|
|||||||
|
|
||||||
## Stargazers over time
|
## Stargazers over time
|
||||||
|
|
||||||
[](https://www.spiritlhl.net)
|
[](https://www.spiritlhl.net)
|
||||||
|
4
go.mod
4
go.mod
@@ -8,11 +8,11 @@ require (
|
|||||||
github.com/oneclickvirt/UnlockTests v0.0.27-20250628125053
|
github.com/oneclickvirt/UnlockTests v0.0.27-20250628125053
|
||||||
github.com/oneclickvirt/backtrace v0.0.5-20250629024536
|
github.com/oneclickvirt/backtrace v0.0.5-20250629024536
|
||||||
github.com/oneclickvirt/basics v0.0.15-20250714163009
|
github.com/oneclickvirt/basics v0.0.15-20250714163009
|
||||||
github.com/oneclickvirt/cputest v0.0.11-20250717060914
|
github.com/oneclickvirt/cputest v0.0.12-20250720122317
|
||||||
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
|
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
|
||||||
github.com/oneclickvirt/disktest v0.0.8-20250701092629
|
github.com/oneclickvirt/disktest v0.0.8-20250701092629
|
||||||
github.com/oneclickvirt/gostun v0.0.3-20250329105202
|
github.com/oneclickvirt/gostun v0.0.3-20250329105202
|
||||||
github.com/oneclickvirt/memorytest v0.0.8-20250717053253
|
github.com/oneclickvirt/memorytest v0.0.9-20250720135728
|
||||||
github.com/oneclickvirt/nt3 v0.0.5-20250416131047
|
github.com/oneclickvirt/nt3 v0.0.5-20250416131047
|
||||||
github.com/oneclickvirt/pingtest v0.0.8-20250701125637
|
github.com/oneclickvirt/pingtest v0.0.8-20250701125637
|
||||||
github.com/oneclickvirt/portchecker v0.0.3-20250329125750
|
github.com/oneclickvirt/portchecker v0.0.3-20250329125750
|
||||||
|
8
go.sum
8
go.sum
@@ -105,8 +105,8 @@ github.com/oneclickvirt/backtrace v0.0.5-20250629024536 h1:caHCa0DHmbYWBFN1bqKxp
|
|||||||
github.com/oneclickvirt/backtrace v0.0.5-20250629024536/go.mod h1:5AH00bo41hH3d2/JVuCTlBkZUs3AXX4nlKVXb6piZcI=
|
github.com/oneclickvirt/backtrace v0.0.5-20250629024536/go.mod h1:5AH00bo41hH3d2/JVuCTlBkZUs3AXX4nlKVXb6piZcI=
|
||||||
github.com/oneclickvirt/basics v0.0.15-20250714163009 h1:7I1lU7N91kClw6Cb6o+vGfScc/HngrjhsaaW10AbBFs=
|
github.com/oneclickvirt/basics v0.0.15-20250714163009 h1:7I1lU7N91kClw6Cb6o+vGfScc/HngrjhsaaW10AbBFs=
|
||||||
github.com/oneclickvirt/basics v0.0.15-20250714163009/go.mod h1:yN1IEOXN6v/GJqJSA70Pooo6nXBI/6rq72vTY72wJMQ=
|
github.com/oneclickvirt/basics v0.0.15-20250714163009/go.mod h1:yN1IEOXN6v/GJqJSA70Pooo6nXBI/6rq72vTY72wJMQ=
|
||||||
github.com/oneclickvirt/cputest v0.0.11-20250717060914 h1:1cGHHXq7R8vghnRjviMJ1TqricwJwZPeQtgb9zRYYLA=
|
github.com/oneclickvirt/cputest v0.0.12-20250720122317 h1:toiwAK1hZE5b8klu2mOQ7J4sv5yV9lpPKwgPahfRYBQ=
|
||||||
github.com/oneclickvirt/cputest v0.0.11-20250717060914/go.mod h1:vjlH8tkPFft1tlLOpeNskXVvurxkHaJ3+dgFxQGLXY4=
|
github.com/oneclickvirt/cputest v0.0.12-20250720122317/go.mod h1:vjlH8tkPFft1tlLOpeNskXVvurxkHaJ3+dgFxQGLXY4=
|
||||||
github.com/oneclickvirt/dd v0.0.2-20250701085922 h1:WiWZwcnCPhRc8hLZdvkjD2kOEpnqn1S31z1j0x3V4l0=
|
github.com/oneclickvirt/dd v0.0.2-20250701085922 h1:WiWZwcnCPhRc8hLZdvkjD2kOEpnqn1S31z1j0x3V4l0=
|
||||||
github.com/oneclickvirt/dd v0.0.2-20250701085922/go.mod h1:tImu9sPTkLWo2tf1dEN1xQzrylWKauj9hbU8PHfyAeU=
|
github.com/oneclickvirt/dd v0.0.2-20250701085922/go.mod h1:tImu9sPTkLWo2tf1dEN1xQzrylWKauj9hbU8PHfyAeU=
|
||||||
github.com/oneclickvirt/defaultset v0.0.2-20240624082446 h1:5Pg3mK/u/vQvSz7anu0nxzrNdELi/AcDAU1mMsmPzyc=
|
github.com/oneclickvirt/defaultset v0.0.2-20240624082446 h1:5Pg3mK/u/vQvSz7anu0nxzrNdELi/AcDAU1mMsmPzyc=
|
||||||
@@ -119,8 +119,8 @@ github.com/oneclickvirt/gostun v0.0.3-20250329105202 h1:aJ6E91Lp94lq8iWRcCaxpXTj
|
|||||||
github.com/oneclickvirt/gostun v0.0.3-20250329105202/go.mod h1:f7DPEXAxbmwXSW33dbxtb0/KzqvOBWhTs2Or5xBerQA=
|
github.com/oneclickvirt/gostun v0.0.3-20250329105202/go.mod h1:f7DPEXAxbmwXSW33dbxtb0/KzqvOBWhTs2Or5xBerQA=
|
||||||
github.com/oneclickvirt/mbw v0.0.1-20250630140849 h1:p6RMhOPBnQKAm9+VEQ2axAFsidrdSdrhXMyheIyv2a8=
|
github.com/oneclickvirt/mbw v0.0.1-20250630140849 h1:p6RMhOPBnQKAm9+VEQ2axAFsidrdSdrhXMyheIyv2a8=
|
||||||
github.com/oneclickvirt/mbw v0.0.1-20250630140849/go.mod h1:0Vq6NRpyLmGUdfHfL3uDcFsuZhi7KlG+OCs5ky2757Y=
|
github.com/oneclickvirt/mbw v0.0.1-20250630140849/go.mod h1:0Vq6NRpyLmGUdfHfL3uDcFsuZhi7KlG+OCs5ky2757Y=
|
||||||
github.com/oneclickvirt/memorytest v0.0.8-20250717053253 h1:Q5dsDgtQQljcsphSIA5atJV+UpLUdHI/q5Yyzq4mPb8=
|
github.com/oneclickvirt/memorytest v0.0.9-20250720135728 h1:RusZfaESDXK+k5YYfVXTCW5zLeQEd/dYY80a6xievE0=
|
||||||
github.com/oneclickvirt/memorytest v0.0.8-20250717053253/go.mod h1:7xMacjQobvFAtODht2hxTsB9hM2IFS7vZk3gxx+bsjo=
|
github.com/oneclickvirt/memorytest v0.0.9-20250720135728/go.mod h1:7xMacjQobvFAtODht2hxTsB9hM2IFS7vZk3gxx+bsjo=
|
||||||
github.com/oneclickvirt/nt3 v0.0.5-20250416131047 h1:KL0xowq19cW+FMBGMJxdqpRNoeyR+eEmb+jYSubmlTk=
|
github.com/oneclickvirt/nt3 v0.0.5-20250416131047 h1:KL0xowq19cW+FMBGMJxdqpRNoeyR+eEmb+jYSubmlTk=
|
||||||
github.com/oneclickvirt/nt3 v0.0.5-20250416131047/go.mod h1:CVsDJEaIdyyZHn3WKbhU8Wn6GOfmBNvJlC/dDLRqcSQ=
|
github.com/oneclickvirt/nt3 v0.0.5-20250416131047/go.mod h1:CVsDJEaIdyyZHn3WKbhU8Wn6GOfmBNvJlC/dDLRqcSQ=
|
||||||
github.com/oneclickvirt/pingtest v0.0.8-20250701125637 h1:J28Ai5miTq1J0I4gdT8rewJSd3LwzD90L/bNiiaKfHM=
|
github.com/oneclickvirt/pingtest v0.0.8-20250701125637 h1:J28Ai5miTq1J0I4gdT8rewJSd3LwzD90L/bNiiaKfHM=
|
||||||
|
2
goecs.go
2
goecs.go
@@ -39,7 +39,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ecsVersion = "v0.1.61"
|
ecsVersion = "v0.1.67"
|
||||||
menuMode bool
|
menuMode bool
|
||||||
onlyChinaTest bool
|
onlyChinaTest bool
|
||||||
input, choice string
|
input, choice string
|
||||||
|
6
goecs.sh
6
goecs.sh
@@ -143,7 +143,7 @@ goecs_check() {
|
|||||||
os=$(uname -s 2>/dev/null || echo "Unknown")
|
os=$(uname -s 2>/dev/null || echo "Unknown")
|
||||||
arch=$(uname -m 2>/dev/null || echo "Unknown")
|
arch=$(uname -m 2>/dev/null || echo "Unknown")
|
||||||
check_china
|
check_china
|
||||||
ECS_VERSION="0.1.55"
|
ECS_VERSION="0.1.66"
|
||||||
for api in \
|
for api in \
|
||||||
"https://api.github.com/repos/oneclickvirt/ecs/releases/latest" \
|
"https://api.github.com/repos/oneclickvirt/ecs/releases/latest" \
|
||||||
"https://githubapi.spiritlhl.workers.dev/repos/oneclickvirt/ecs/releases/latest" \
|
"https://githubapi.spiritlhl.workers.dev/repos/oneclickvirt/ecs/releases/latest" \
|
||||||
@@ -155,8 +155,8 @@ goecs_check() {
|
|||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
if [ -z "$ECS_VERSION" ]; then
|
if [ -z "$ECS_VERSION" ]; then
|
||||||
_yellow "Unable to get version info, using default version 0.1.55"
|
_yellow "Unable to get version info, using default version 0.1.66"
|
||||||
ECS_VERSION="0.1.55"
|
ECS_VERSION="0.1.66"
|
||||||
fi
|
fi
|
||||||
version_output=""
|
version_output=""
|
||||||
for cmd_path in "goecs" "./goecs" "/usr/bin/goecs" "/usr/local/bin/goecs"; do
|
for cmd_path in "goecs" "./goecs" "/usr/bin/goecs" "/usr/local/bin/goecs"; do
|
||||||
|
Reference in New Issue
Block a user