diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 0000000..4b864fa --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,132 @@ +name: Build and Release + +on: + # push: + # branches: [ main ] + # pull_request: + # branches: [ main ] + # release: + # types: [published] + workflow_dispatch: + +jobs: + build: + name: Build and Test + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 'stable' + + - name: Build and Test on Default Platform + run: | + go build -v ./... + go test -v ./... + + - name: Delete Existing Release Assets + run: | + release_id=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/oneclickvirt/portchecker/releases/tags/output" | jq -r '.id') + echo "Deleting existing release assets..." + assets=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/oneclickvirt/portchecker/releases/$release_id/assets" | jq -r '.[] | .id') + for asset in $assets; do + echo "Deleting asset with ID: $asset" + curl -X DELETE -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/oneclickvirt/portchecker/releases/assets/$asset" + done + sleep 60 + + release-binary: + name: Release Go Binary + runs-on: ubuntu-latest + needs: build + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 'stable' + + - name: Build and Release + run: | + mkdir -p bin + cd cmd + CGO_ENABLED=0 GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} go build -o ../bin/portchecker-${{ matrix.goos }}-${{ matrix.goarch }} -v -ldflags="-extldflags=-static" . + + - name: Upload New Assets + run: | + release_id=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/oneclickvirt/portchecker/releases/tags/output" | jq -r '.id') + echo "Uploading new assets to release..." + for file in ./bin/*; do + echo "Uploading $file to release..." + curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"$file" \ + "https://uploads.github.com/repos/oneclickvirt/portchecker/releases/$release_id/assets?name=$(basename "$file")" + rm -rf $file + done + + strategy: + matrix: + goos: [windows, freebsd, openbsd, linux, darwin] + goarch: [amd64, 386] + exclude: + - goarch: 386 + goos: darwin + include: + - goos: windows + goarch: 386 + - goos: windows + goarch: amd64 + - goos: windows + goarch: arm64 + - goos: windows + goarch: arm + goarm: 7 + - goos: darwin + goarch: arm64 + - goos: linux + goarch: arm + goarm: 7 + - goos: linux + goarch: arm64 + - goos: linux + goarch: riscv64 + - goos: linux + goarch: mips64 + - goos: linux + goarch: mips64le + - goos: linux + goarch: mipsle + - goos: linux + goarch: mips + - goos: linux + goarch: ppc64 + - goos: linux + goarch: ppc64le + - goos: freebsd + goarch: arm64 + - goos: freebsd + goarch: arm + goarm: 7 + - goos: openbsd + goarch: arm64 + - goos: openbsd + goarch: arm + goarm: 7 + # - goos: linux + # goarch: mipsle + # gomips: softfloat + # - goos: linux + # goarch: mips + # gomips: softfloat + # - goos: linux + # goarch: arm + # goarm: 6 + # - goos: linux + # goarch: arm + # goarm: 5 \ No newline at end of file diff --git a/README.md b/README.md index da5351a..3e5c52b 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,10 @@ [![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Foneclickvirt%2Fportchecker&count_bg=%2323E01C&title_bg=%23555555&icon=sonarcloud.svg&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com) +端口检测模块 (port checker) + +# 使用(Usage) + +``` +curl https://raw.githubusercontent.com/oneclickvirt/portchecker/main/pck_install.sh -sSf | sh +``` \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go index f15ee33..8eb9f50 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -58,7 +58,6 @@ func emailCheck() string { "Sohu": "smtp.sohu.com", "Sina": "smtp.sina.com", } - pop3Servers := map[string]string{ "Gmail": "pop.gmail.com", "163": "pop.163.com", @@ -75,7 +74,6 @@ func emailCheck() string { "Sohu": "pop.sohu.com", "Sina": "pop.sina.com", } - imapServers := map[string]string{ "Gmail": "imap.gmail.com", "163": "imap.163.com", @@ -92,11 +90,8 @@ func emailCheck() string { "Sohu": "imap.sohu.com", "Sina": "imap.sina.com", } - var wg sync.WaitGroup resultChan := make(chan string, len(smtpServers)*3) - - // 合并检查函数 checkAll := func(name string, smtpHost, pop3Host, imapHost string) { defer wg.Done() smtpResult := checkConnection(smtpHost, "25") @@ -104,12 +99,10 @@ func emailCheck() string { imapResult := checkConnection(imapHost, "143") resultChan <- fmt.Sprintf("%-9s %-4s %-4s %-4s", name, smtpResult, pop3Result, imapResult) } - for name := range smtpServers { wg.Add(1) go checkAll(name, smtpServers[name], pop3Servers[name], imapServers[name]) } - wg.Wait() close(resultChan) var results []string diff --git a/pck_install.sh b/pck_install.sh new file mode 100644 index 0000000..7eec91e --- /dev/null +++ b/pck_install.sh @@ -0,0 +1,90 @@ +#!/bin/bash +#From https://github.com/oneclickvirt/portchecker +#2024.05.23 + +rm -rf /usr/bin/pck +os=$(uname -s) +arch=$(uname -m) + +case $os in + Linux) + case $arch in + "x86_64" | "x86" | "amd64" | "x64") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-linux-amd64 + ;; + "i386" | "i686") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-linux-386 + ;; + "armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-linux-arm64 + ;; + *) + echo "Unsupported architecture: $arch" + exit 1 + ;; + esac + ;; + Darwin) + case $arch in + "x86_64" | "x86" | "amd64" | "x64") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-darwin-amd64 + ;; + "i386" | "i686") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-darwin-386 + ;; + "armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-darwin-arm64 + ;; + *) + echo "Unsupported architecture: $arch" + exit 1 + ;; + esac + ;; + FreeBSD) + case $arch in + amd64) + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-freebsd-amd64 + ;; + "i386" | "i686") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-freebsd-386 + ;; + "armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-freebsd-arm64 + ;; + *) + echo "Unsupported architecture: $arch" + exit 1 + ;; + esac + ;; + OpenBSD) + case $arch in + amd64) + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-openbsd-amd64 + ;; + "i386" | "i686") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-openbsd-386 + ;; + "armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64") + wget -O pck https://github.com/oneclickvirt/portchecker/releases/download/output/portchecker-openbsd-arm64 + ;; + *) + echo "Unsupported architecture: $arch" + exit 1 + ;; + esac + ;; + *) + echo "Unsupported operating system: $os" + exit 1 + ;; +esac + +chmod 777 pck +if [ ! -f /usr/bin/pck ]; then + mv pck /usr/bin/ + pck +else + ./pck +fi \ No newline at end of file